nx_inspection_camera_gate_t142.nx source
↩ module page · 72 lines · 5385 B
1// nx_inspection_camera_gate_t142.nx -- Verifies camera inspection functionality and state consistency in the Nishi ecosystem.
2import "nx_wasm_craft_inspection_t142.nx"
3import "nx_gate_verdict.nx"
4func ic_copy(dst:*u8,src:*u8,n:i64)->i64{var i:i64=0;while i<n{dst[i]=src[i];i=i+1};return 0}
5func ic_same(a:*u8,b:*u8,n:i64)->i64{var i:i64=0;while i<n{if a[i]!=b[i]{return 0};i=i+1};return 1}
6func ic_corners_visible(base:i64)->i64{
7 let v:*i64=wc_inspect(base);let s:*i64=wst(base)
8 let a:i64=v[IC_YAW];let p:i64=v[IC_PITCH]
9 let sa:i64=it_sin4096(a);let ca:i64=it_cos4096(a);let sp:i64=it_sin4096(p);let cp:i64=it_cos4096(p)
10 var i:i64=0
11 while i<8{
12 var x:i64=v[IC_HW];var y:i64=v[IC_HH];var z:i64=v[IC_HD]
13 if (i&1)==0{x=0-x};if (i&2)==0{y=0-y};if (i&4)==0{z=0-z}
14 x=x+v[IC_TX]-v[IC_X];y=y+v[IC_TY]-v[IC_Y];z=z+v[IC_TZ]-v[IC_Z]
15 let forward:i64=x*(sa*cp/4096)+y*sp+z*(ca*cp/4096)
16 var right:i64=x*ca-z*sa;if right<0{right=0-right}
17 var up:i64=x*(0-sa*sp/4096)+y*cp+z*(0-ca*sp/4096);if up<0{up=0-up}
18 if forward<=0||right>forward||up*s[S_RESW]>forward*s[S_RESH]{return 0}
19 i=i+1
20 };return 1
21}
22func main()->i64{
23 let base:i64=sys_mmap(CRAFT_EXT_TOTAL+WASM_PAGE_BYTES) as i64;if base<=0{return 3}
24 if init_impl_v(base,BEACH_RELEASE_WORLD,CRAFT_DEFAULT_SEED)!=0{return 3}
25 let s:*i64=wst(base);s[S_RESW]=W;s[S_RESH]=H
26 let pass:*i64=gv_ctr();let snap:*u8=sys_mmap(64*8);let inp:*u8=sys_mmap(64*8)
27 ic_copy(snap,s as *u8,64*8);ic_copy(inp,winp(base) as *u8,64*8)
28 let save:*u8=sys_mmap(SAVE_LEN);wc_save_build(base);ic_copy(save,(base+O_SAVE) as *u8,SAVE_LEN)
29 let ray:*i64=sys_mmap(5*8) as *i64;let ray2:*i64=sys_mmap(5*8) as *i64
30 let before:i64=wray(base,0,0-4096,0,MAXSTEPS,ray)
31 gv_check("named-view-storage-disjoint",O_INSPECTION>=O_NXA_LOCOMOTION+8&&CRAFT_EXT_TOTAL==O_INSPECTION+INSPECTION_WORDS*8&&O_WCM==CRAFT_EXT_TOTAL,pass)
32 gv_check("inactive-view-is-player",wc_inspection_active(base)==0&&wc_view(base,0)==s[S_CX]&&wc_view(base,4)==s[S_PITCH],pass)
33 let framed:i64=wc_inspection_frame(base,0,1,0,256,0,128,256,128)
34 gv_check("native-body-frame-accepted",framed==1&&wc_inspection_active(base)==1,pass)
35 let v:*i64=wc_inspect(base);let h:i64=en_nth(mobp(base),0)
36 gv_check("target-is-selected-actor",v[IC_TX]==en_get(mobp(base),h,MC_X)&&v[IC_TY]==en_get(mobp(base),h,MC_Y)+256,pass)
37 let minfit:i64=v[IC_DISTANCE]
38 gv_check("framing-distance-derived-from-aspect",ic_corners_visible(base)==1,pass)
39 gv_check("physical-state-unchanged-on-open",ic_same(snap,s as *u8,64*8)&&ic_same(inp,winp(base) as *u8,64*8),pass)
40 gv_check("view-origin-separate",wc_view(base,0)!=s[S_CX]||wc_view(base,1)!=s[S_CY]||wc_view(base,2)!=s[S_CZ],pass)
41 pack_uniforms_impl(base)
42 let u:*u8=(base+O_URAW) as *u8
43 gv_check("packed-gpu-camera-is-inspection",ur_r32(u,UR_CAMX)==wc_view(base,0)&&ur_r32(u,UR_CAMY)==wc_view(base,1)&&ur_r32(u,UR_CAMZ)==wc_view(base,2),pass)
44 gv_check("packed-gpu-angles-is-inspection",ur_r32(u,UR_YAW)==wc_view(base,3)&&ur_r32(u,UR_PITCH)==wc_view(base,4),pass)
45 let after:i64=wray(base,0,0-4096,0,MAXSTEPS,ray2)
46 gv_check("gameplay-ray-origin-unchanged",before==after&&ic_same(ray as *u8,ray2 as *u8,5*8),pass)
47 gv_check("orbit-does-not-change-player",wc_inspection_orbit(base,IT_PI/4,0)==1&&ic_same(snap,s as *u8,64*8),pass)
48 gv_check("native-face-frame-accepted",wc_inspection_frame(base,0,2,0,384,0,32,48,32)==1,pass)
49 gv_check("face-distance-closer-than-body",v[IC_DISTANCE]<minfit,pass)
50 wc_save_build(base)
51 gv_check("save-image-byte-identical-during-inspection",ic_same(save,(base+O_SAVE) as *u8,SAVE_LEN),pass)
52 gv_check("invalid-actor-refused",wc_inspection_frame(base,MOB_CAP,1,0,256,0,128,256,128)<0,pass)
53 gv_check("invalid-extent-refused",wc_inspection_frame(base,0,1,0,256,0,128,0,128)<0,pass)
54 gv_check("invalid-orbit-refused",wc_inspection_orbit(base,IT_PI+1,0)<0,pass)
55 gv_check("refusals-retain-existing-view",wc_inspection_active(base)==1&&v[IC_MODE]==2,pass)
56 wc_inspection_end(base)
57 gv_check("close-restores-gameplay-view",wc_inspection_active(base)==0&&wc_view(base,0)==s[S_CX]&&wc_view(base,1)==s[S_CY]&&wc_view(base,2)==s[S_CZ]&&wc_view(base,3)==s[S_YAW]&&wc_view(base,4)==s[S_PITCH],pass)
58 gv_check("open-orbit-close-player-and-input-unchanged",ic_same(snap,s as *u8,64*8)&&ic_same(inp,winp(base) as *u8,64*8),pass)
59 wc_inspection_frame(base,0,1,0,256,0,128,256,128);s[S_AGEN]=s[S_AGEN]+1
60 gv_check("world-generation-invalidates-inspection",wc_inspection_active(base)==0&&wc_view(base,0)==s[S_CX],pass)
61 s[S_AGEN]=s[S_AGEN]-1;wc_inspection_end(base)
62 s[S_RESW]=2160;s[S_RESH]=3840
63 gv_check("portrait-canvas-beyond-cpu-size-accepted",wc_inspection_frame(base,0,1,0,256,0,128,256,128)==1,pass)
64 gv_check("portrait-fit-derived-from-actual-aspect",ic_corners_visible(base)==1,pass)
65 gv_check("oblique-yaw-pitch-orbit-admitted",wc_inspection_orbit(base,IT_PI/4,IT_PI/8)==1,pass)
66 gv_check("all-eight-oblique-corners-fit-actual-view",ic_corners_visible(base)==1,pass)
67 gv_check("reverse-oblique-orbit-admitted",wc_inspection_orbit(base,0-IT_PI/3,0-IT_PI/6)==1,pass)
68 gv_check("reverse-oblique-corners-fit-actual-view",ic_corners_visible(base)==1,pass)
69 wc_inspection_end(base)
70 gv_check("required-memory-covers-view",WASM_PAGES_REQ*WASM_PAGE_BYTES>=CRAFT_EXT_TOTAL,pass)
71 return gv_verdict("INSPECTION-CAMERA",pass,"native view ownership, geometry fit and physical/save/input separation; actual model closeup remains browser qualification")
72}