initial import
[picodrive.git] / platform / win32 / GenaDrive / LightCal.cpp
1 \r
2 #include "app.h"\r
3 \r
4 struct Target\r
5 {\r
6   int sx,sy; // Onscreen coordinates\r
7   int dx,dy; // Device values\r
8 };\r
9 \r
10 struct Target Targ[2]=\r
11 {\r
12   {0,0, 0,0},\r
13   {0,0, 0,0}\r
14 };\r
15 static int LightState=0;\r
16 \r
17 struct Calib\r
18 {\r
19   float ax,bx;\r
20   float ay,by;\r
21 };\r
22 static struct Calib Cal={0.0f,0.0f,0.0f,0.0f};\r
23 \r
24 int LightCalReset()\r
25 {\r
26   LightState=0;\r
27 \r
28   memset(Targ,0,sizeof(Targ));\r
29   Targ[0].sx=MainWidth >>1;\r
30   Targ[0].sy=MainHeight>>1;\r
31   Targ[1].sy=Targ[0].sy-MainHeight*61/160;\r
32   Targ[1].sx=Targ[0].sx-MainWidth *61/160;\r
33   return 0;\r
34 }\r
35 \r
36 int LightCalUpdate()\r
37 {\r
38   int i=0;\r
39   struct Target *pt=NULL;\r
40 \r
41   if (Inp.held[4]==1) LoopMode=3;\r
42 \r
43   if (Inp.held[8]==1)\r
44   {\r
45     i=LightState&1;\r
46     pt=Targ+i;\r
47 \r
48     pt->dx=Inp.axis[0];\r
49     pt->dy=Inp.axis[1];\r
50 \r
51     if (i==1)\r
52     {\r
53       int num=0,den=0;\r
54 \r
55       // rx= a + b*x - work out a and b:\r
56       num=Targ[0].sx-Targ[1].sx;\r
57       den=Targ[0].dx-Targ[1].dx;\r
58       if (den) Cal.bx=(float)num/(float)den;\r
59       Cal.ax=(float)Targ[0].sx-Cal.bx*(float)Targ[0].dx;\r
60 \r
61       num=Targ[0].sy-Targ[1].sy;\r
62       den=Targ[0].dy-Targ[1].dy;\r
63       if (den) Cal.by=(float)num/(float)den;\r
64       Cal.ay=(float)Targ[0].sy-Cal.by*(float)Targ[0].dy;\r
65     }\r
66 \r
67     LightState++;\r
68   }\r
69 \r
70   return 0;\r
71 }\r
72 \r
73 int LightCalRender()\r
74 {\r
75   int i=0;\r
76   struct Target *pt=NULL;\r
77   float fx=0.0f,fy=0.0f;\r
78 \r
79   DirectClear(0xffffff);\r
80 \r
81   WCHAR text[80]={0};\r
82   wsprintfW(text,L"LightGun Calibration");\r
83   FontSetColour(0x0000ff);\r
84   FontText(text,240,48);\r
85 \r
86   wsprintfW(text,L"Start to quit, B to call InputLightCal");\r
87   FontSetColour(0x004000);\r
88   FontText(text,64,120);\r
89 \r
90   i=LightState&1;\r
91   pt=Targ+i;\r
92   FontSetColour(0);\r
93   FontText(L"X", pt->sx-8, pt->sy-12);\r
94 \r
95   fx=Cal.ax+Cal.bx*(float)Inp.axis[0];\r
96   fy=Cal.ay+Cal.by*(float)Inp.axis[1];\r
97 \r
98   FontSetColour(0xff0000);\r
99   FontText(L"+", (int)fx-8,(int)fy-12);\r
100 \r
101   return 0;\r
102 }\r