mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 23:37:46 -04:00
initial import
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@2 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
2cadbd5e56
commit
cc68a136aa
341 changed files with 180839 additions and 0 deletions
102
platform/win32/GenaDrive/LightCal.cpp
Normal file
102
platform/win32/GenaDrive/LightCal.cpp
Normal file
|
@ -0,0 +1,102 @@
|
|||
|
||||
#include "app.h"
|
||||
|
||||
struct Target
|
||||
{
|
||||
int sx,sy; // Onscreen coordinates
|
||||
int dx,dy; // Device values
|
||||
};
|
||||
|
||||
struct Target Targ[2]=
|
||||
{
|
||||
{0,0, 0,0},
|
||||
{0,0, 0,0}
|
||||
};
|
||||
static int LightState=0;
|
||||
|
||||
struct Calib
|
||||
{
|
||||
float ax,bx;
|
||||
float ay,by;
|
||||
};
|
||||
static struct Calib Cal={0.0f,0.0f,0.0f,0.0f};
|
||||
|
||||
int LightCalReset()
|
||||
{
|
||||
LightState=0;
|
||||
|
||||
memset(Targ,0,sizeof(Targ));
|
||||
Targ[0].sx=MainWidth >>1;
|
||||
Targ[0].sy=MainHeight>>1;
|
||||
Targ[1].sy=Targ[0].sy-MainHeight*61/160;
|
||||
Targ[1].sx=Targ[0].sx-MainWidth *61/160;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int LightCalUpdate()
|
||||
{
|
||||
int i=0;
|
||||
struct Target *pt=NULL;
|
||||
|
||||
if (Inp.held[4]==1) LoopMode=3;
|
||||
|
||||
if (Inp.held[8]==1)
|
||||
{
|
||||
i=LightState&1;
|
||||
pt=Targ+i;
|
||||
|
||||
pt->dx=Inp.axis[0];
|
||||
pt->dy=Inp.axis[1];
|
||||
|
||||
if (i==1)
|
||||
{
|
||||
int num=0,den=0;
|
||||
|
||||
// rx= a + b*x - work out a and b:
|
||||
num=Targ[0].sx-Targ[1].sx;
|
||||
den=Targ[0].dx-Targ[1].dx;
|
||||
if (den) Cal.bx=(float)num/(float)den;
|
||||
Cal.ax=(float)Targ[0].sx-Cal.bx*(float)Targ[0].dx;
|
||||
|
||||
num=Targ[0].sy-Targ[1].sy;
|
||||
den=Targ[0].dy-Targ[1].dy;
|
||||
if (den) Cal.by=(float)num/(float)den;
|
||||
Cal.ay=(float)Targ[0].sy-Cal.by*(float)Targ[0].dy;
|
||||
}
|
||||
|
||||
LightState++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int LightCalRender()
|
||||
{
|
||||
int i=0;
|
||||
struct Target *pt=NULL;
|
||||
float fx=0.0f,fy=0.0f;
|
||||
|
||||
DirectClear(0xffffff);
|
||||
|
||||
WCHAR text[80]={0};
|
||||
wsprintfW(text,L"LightGun Calibration");
|
||||
FontSetColour(0x0000ff);
|
||||
FontText(text,240,48);
|
||||
|
||||
wsprintfW(text,L"Start to quit, B to call InputLightCal");
|
||||
FontSetColour(0x004000);
|
||||
FontText(text,64,120);
|
||||
|
||||
i=LightState&1;
|
||||
pt=Targ+i;
|
||||
FontSetColour(0);
|
||||
FontText(L"X", pt->sx-8, pt->sy-12);
|
||||
|
||||
fx=Cal.ax+Cal.bx*(float)Inp.axis[0];
|
||||
fy=Cal.ay+Cal.by*(float)Inp.axis[1];
|
||||
|
||||
FontSetColour(0xff0000);
|
||||
FontText(L"+", (int)fx-8,(int)fy-12);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue