Everything should be working by now, up until final battle (still needs testing). Updated LeGo to 2.8.0
178 lines
4.6 KiB
D
178 lines
4.6 KiB
D
/***********************************\
|
|
CURSOR
|
|
\***********************************/
|
|
|
|
//========================================
|
|
// Uservariablen
|
|
//========================================
|
|
var int Cursor_X;
|
|
var int Cursor_Y;
|
|
var int Cursor_RelX; // float
|
|
var int Cursor_RelY; // float
|
|
var int Cursor_Wheel;
|
|
var int Cursor_Left;
|
|
var int Cursor_Mid;
|
|
var int Cursor_Right;
|
|
var int Cursor_NoEngine;
|
|
|
|
var int Cursor_Event; // gCEvent(h)
|
|
|
|
//========================================
|
|
// [intern] Variablen
|
|
//========================================
|
|
var int Cursor_fX;
|
|
var int Cursor_fY;
|
|
|
|
//========================================
|
|
// Cursor verstecken
|
|
//========================================
|
|
var int Cursor_Hndl;
|
|
func void Cursor_Hide() {
|
|
if(!Hlp_IsValidHandle(Cursor_Hndl)) { return; };
|
|
|
|
View_Close(Cursor_Hndl);
|
|
};
|
|
|
|
//========================================
|
|
// Cursor anzeigen
|
|
//========================================
|
|
func void Cursor_Show() {
|
|
if(Hlp_IsValidHandle(Cursor_Hndl)) { View_Open(Cursor_Hndl); return; };
|
|
Print_GetScreenSize();
|
|
Cursor_X = Print_Screen[PS_X] / 2;
|
|
Cursor_Y = Print_Screen[PS_Y] / 2;
|
|
Cursor_fX = mkf(Cursor_X);
|
|
Cursor_fY = mkf(Cursor_Y);
|
|
Cursor_Hndl = View_CreatePxl(Cursor_X, Cursor_Y, Cursor_X+64, Cursor_Y+64);
|
|
View_SetTexture(Cursor_Hndl, Cursor_Texture);
|
|
View_Open(Cursor_Hndl);
|
|
};
|
|
|
|
//========================================
|
|
// Maussteuerung An-/Ausschalten
|
|
//========================================
|
|
func void SetMouseEnabled(var int bEnabled) {
|
|
CALL_IntParam(!!bEnabled /*Nur zur Sicherheit*/);
|
|
CALL_IntParam(2);
|
|
CALL__thiscall(MEM_ReadInt(zCInput_zinput), zCInput_Win32__SetDeviceEnabled);
|
|
};
|
|
|
|
//========================================
|
|
// [intern] Klasse (von Engine genutzt)
|
|
//========================================
|
|
class _Cursor {
|
|
var int relX;
|
|
var int relY;
|
|
var int wheel;
|
|
var int keyLeft;
|
|
var int keyMid;
|
|
var int keyRight;
|
|
};
|
|
|
|
//========================================
|
|
// [intern] Tasten
|
|
//========================================
|
|
func void Cursor_KeyState(var int ptr, var int pressed) {
|
|
var int keyState; keyState = MEM_ReadInt(ptr);
|
|
// Kopiert aus der Ikarus.d
|
|
if (keyState == KEY_UP) {
|
|
if (pressed) {
|
|
keyState = KEY_PRESSED;
|
|
};
|
|
} else if (keyState == KEY_PRESSED) {
|
|
if (pressed) {
|
|
keyState = KEY_HOLD;
|
|
} else {
|
|
keyState = KEY_RELEASED;
|
|
};
|
|
} else if (keyState == KEY_HOLD) {
|
|
if (!pressed) {
|
|
keyState = KEY_RELEASED;
|
|
};
|
|
} else {
|
|
if (pressed) {
|
|
keyState = KEY_PRESSED;
|
|
} else {
|
|
keyState = KEY_UP;
|
|
};
|
|
};
|
|
MEM_WriteInt(ptr, keyState);
|
|
return;
|
|
};
|
|
|
|
//========================================
|
|
// [intern] Enginehook
|
|
//========================================
|
|
|
|
func void Cursor_Update() {
|
|
View_Top(Cursor_Hndl);
|
|
};
|
|
|
|
func void _Cursor_GetVal() {
|
|
var _Cursor c; c = _^(Cursor_Ptr);
|
|
|
|
Cursor_RelX = c.relX;
|
|
Cursor_RelY = c.relY;
|
|
Cursor_fX = addf(mulf(mkf(Cursor_RelX), mulf(MEM_ReadInt(Cursor_sX), mkf(2))), Cursor_fX);
|
|
Cursor_fY = addf(mulf(mkf(Cursor_RelY), mulf(MEM_ReadInt(Cursor_sY), mkf(2))), Cursor_fY);
|
|
|
|
Cursor_X = roundf(Cursor_fX);
|
|
Cursor_Y = roundf(Cursor_fY);
|
|
Cursor_Wheel = c.wheel;
|
|
|
|
Cursor_KeyState(_@(Cursor_Left), c.keyLeft);
|
|
Cursor_KeyState(_@(Cursor_Right), c.keyRight);
|
|
Cursor_KeyState(_@(Cursor_Mid), c.keyMid);
|
|
|
|
if(Cursor_Left == KEY_PRESSED) {
|
|
Event_Execute(Cursor_Event, CUR_LeftClick);
|
|
};
|
|
if(Cursor_Right == KEY_PRESSED) {
|
|
Event_Execute(Cursor_Event, CUR_RightClick);
|
|
};
|
|
if(Cursor_Mid == KEY_PRESSED) {
|
|
Event_Execute(Cursor_Event, CUR_MidClick);
|
|
};
|
|
if(Cursor_Wheel != 0) {
|
|
if(Cursor_Wheel > 0) {
|
|
Event_Execute(Cursor_Event, CUR_WheelUp);
|
|
}
|
|
else {
|
|
Event_Execute(Cursor_Event, CUR_WheelDown);
|
|
};
|
|
};
|
|
|
|
Print_GetScreenSize();
|
|
if(Cursor_X > Print_Screen[PS_X]) {
|
|
Cursor_X = Print_Screen[PS_X];
|
|
Cursor_fX = mkf(Cursor_X);
|
|
}
|
|
else if(Cursor_X < 0) {
|
|
Cursor_X = 0;
|
|
Cursor_fX = mkf(Cursor_X);
|
|
};
|
|
if(Cursor_Y > Print_Screen[PS_Y]) {
|
|
Cursor_Y = Print_Screen[PS_Y];
|
|
Cursor_fY = mkf(Cursor_Y);
|
|
}
|
|
else if(Cursor_Y < 0) {
|
|
Cursor_Y = 0;
|
|
Cursor_fY = mkf(Cursor_Y);
|
|
};
|
|
|
|
if(Cursor_NoEngine) {
|
|
c.relX = 0;
|
|
c.relY = 0;
|
|
c.keyLeft = 0;
|
|
c.keyMid = 0;
|
|
c.keyRight = 0;
|
|
c.wheel = 0;
|
|
};
|
|
|
|
if(!Hlp_IsValidHandle(Cursor_Hndl)) { return; };
|
|
|
|
View_MoveToPxl(Cursor_Hndl, Cursor_X, Cursor_Y);
|
|
Cursor_Update();
|
|
};
|
|
|
|
|