+++ /dev/null
-\r
-#include "app.h"\r
-\r
-struct Target\r
-{\r
- int sx,sy; // Onscreen coordinates\r
- int dx,dy; // Device values\r
-};\r
-\r
-struct Target Targ[2]=\r
-{\r
- {0,0, 0,0},\r
- {0,0, 0,0}\r
-};\r
-static int LightState=0;\r
-\r
-struct Calib\r
-{\r
- float ax,bx;\r
- float ay,by;\r
-};\r
-static struct Calib Cal={0.0f,0.0f,0.0f,0.0f};\r
-\r
-int LightCalReset()\r
-{\r
- LightState=0;\r
-\r
- memset(Targ,0,sizeof(Targ));\r
- Targ[0].sx=MainWidth >>1;\r
- Targ[0].sy=MainHeight>>1;\r
- Targ[1].sy=Targ[0].sy-MainHeight*61/160;\r
- Targ[1].sx=Targ[0].sx-MainWidth *61/160;\r
- return 0;\r
-}\r
-\r
-int LightCalUpdate()\r
-{\r
- int i=0;\r
- struct Target *pt=NULL;\r
-\r
- if (Inp.held[4]==1) LoopMode=3;\r
-\r
- if (Inp.held[8]==1)\r
- {\r
- i=LightState&1;\r
- pt=Targ+i;\r
-\r
- pt->dx=Inp.axis[0];\r
- pt->dy=Inp.axis[1];\r
-\r
- if (i==1)\r
- {\r
- int num=0,den=0;\r
-\r
- // rx= a + b*x - work out a and b:\r
- num=Targ[0].sx-Targ[1].sx;\r
- den=Targ[0].dx-Targ[1].dx;\r
- if (den) Cal.bx=(float)num/(float)den;\r
- Cal.ax=(float)Targ[0].sx-Cal.bx*(float)Targ[0].dx;\r
-\r
- num=Targ[0].sy-Targ[1].sy;\r
- den=Targ[0].dy-Targ[1].dy;\r
- if (den) Cal.by=(float)num/(float)den;\r
- Cal.ay=(float)Targ[0].sy-Cal.by*(float)Targ[0].dy;\r
- }\r
-\r
- LightState++;\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-int LightCalRender()\r
-{\r
- int i=0;\r
- struct Target *pt=NULL;\r
- float fx=0.0f,fy=0.0f;\r
-\r
- DirectClear(0xffffff);\r
-\r
- WCHAR text[80]={0};\r
- wsprintfW(text,L"LightGun Calibration");\r
- FontSetColour(0x0000ff);\r
- FontText(text,240,48);\r
-\r
- wsprintfW(text,L"Start to quit, B to call InputLightCal");\r
- FontSetColour(0x004000);\r
- FontText(text,64,120);\r
-\r
- i=LightState&1;\r
- pt=Targ+i;\r
- FontSetColour(0);\r
- FontText(L"X", pt->sx-8, pt->sy-12);\r
-\r
- fx=Cal.ax+Cal.bx*(float)Inp.axis[0];\r
- fy=Cal.ay+Cal.by*(float)Inp.axis[1];\r
-\r
- FontSetColour(0xff0000);\r
- FontText(L"+", (int)fx-8,(int)fy-12);\r
-\r
- return 0;\r
-}\r