#include "StdAfx.h"
// InGame - Keyboard procedure
int iabs ( int var )
{
int retval;
__asm
{
MOV EAX , var
CMP EAX , 0
JGE notsign
NEG EAX
notsign:
MOV retval , EAX
}
return retval;
}
float abs ( float var )
{
float retval;
__asm
{
FLD var
FABS
FSTP retval
}
return retval;
}
int KeysProc ()
{
int F7State = GetAsyncKeyState(VK_F7);
if (F7Pressed == false)
{
if ( F7State != 0 && PushF7 == false)
{
PushF7 = true;
F7Pressed = true;
}
else if ( F7State != 0 && PushF7 == true)
{
PushF7 = false;
F7Pressed = true;
}
}
if ( F7State == 0) F7Pressed = false;
return 1;
}
// InGame - 3D Camera procedure
int CameraProc ()
{
POINT tp;
GetCursorPos( &tp );
int mx = (tp.x * 639) / *Screen_W;
int my = (tp.y * 479) / *Screen_H;
// ================================================== =================
// Lewo / Prawo
// ================================================== =================
if (PushF7 == true)
{
if (mx < 636 && mx > 2)
{
if (RotSpeed < 0) RotSpeed = RotSpeed + 0.4f;
if (RotSpeed > 0) RotSpeed = RotSpeed - 0.4f;
if (RotSpeed > 0 && RotSpeed < 0.2) RotSpeed = 0;
if (RotSpeed < 0 && RotSpeed > -0.2) RotSpeed = 0;
}
if (mx > 636)
{
RotSpeed = RotSpeed + 0.4f;
}
if (mx < 2)
{
RotSpeed = RotSpeed - 0.4f;
}
if (RotSpeed > 5) RotSpeed = 5;
if (RotSpeed < -5) RotSpeed = -5;
*Camera_RotZ += RotSpeed;
if (*Camera_RotZ < -405) *Camera_RotZ = -45;
if (*Camera_RotZ > 315) *Camera_RotZ = -45;
//if (RotSpeed < 0) DrawBox(630,0,10,432,0,100,0,fabs(RotSpeed) * 10);
//if (RotSpeed > 0) DrawBox(0,0,10,432,0,100,0,fabs(RotSpeed) * 10);
// ================================================== =================
// Góra / Dó³
// ================================================== =================
if (my > 470)
{
if (*Camera_RotY < 90)
{
*Camera_PosZ += 20;
*Camera_RotY += abs((*Camera_PosZ + 330) / 640);
if (*Camera_RotY < 60 || *Camera_RotY > 40)
{
AddX += 20;
AddY += 20;
}
else
{
AddX -= 20;
AddY -= 20;
}
}
}
if (my < 10)
{
if (*Camera_RotY > 25)
{
*Camera_PosZ -= 20;
*Camera_RotY -= abs((*Camera_PosZ + 330) / 600);
if (*Camera_RotY < 60 || *Camera_RotY > 40)
{
AddX += 20;
AddY += 20;
}
else
{
AddX -= 20;
AddY -= 20;
}
}
}
if ( GetAsyncKeyState(VK_HOME) != 0 )
{
if ( *Camera_Zoom > 0 )
{
*Camera_Zoom -= 1;
if ( AddX > 0 && AddY > 0)
{
AddX -= 100;
AddY -= 100;
}
}
}
if ( GetAsyncKeyState(VK_END) != 0 )
{
if ( *Camera_Zoom < 60 )
{
*Camera_Zoom += 1;
AddX += 100;
AddY += 100;
}
}
if ( GetAsyncKeyState(VK_F9) != 0)
{
*Camera_RotZ = -45;
*Camera_RotY = 48.5;
*Camera_PosZ = 150;
*Camera_ClipX = 1190;
*Camera_TLeft = 1500;
*Camera_TRight = 1500;
*Camera_BLeft = -1500;
*Camera_BRight = -1500;
*Camera_Zoom = 35;
AddX = 0;
AddY = 0;
}
*Camera_TLeft = 1500 + AddX;
*Camera_TRight = 1500 + AddX;
*Camera_BLeft = -1500 - AddX;
*Camera_BRight = -1500 - AddX;
*Camera_ClipX = 1190 + (abs(*Camera_PosZ - 150) * 3) + AddX + 800;
*Camera_GlClip = 3000;
}
return 1;
}
DWORD __stdcall MainProc (PVOID pVoid)
{
while(1)
{
KeysProc();
CameraProc();
Sleep( 20 );
}
return 1;
}
extern "C" _declspec(dllexport) int Init ()
{
DWORD ThreadID;
HANDLE MyThread = CreateThread( NULL , 0 , (LPTHREAD_START_ROUTINE) MainProc , 0 , 0 , &ThreadID );
if ( MyThread == NULL )
{
MessageBox( 0 , "Cannot create Thread!" , "ERROR" , MB_OK + MB_ICONERROR );
return 0;
}
return 1;
}
DWORD __stdcall main( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
return 1;
}