mirror of
https://github.com/isledecomp/isle.git
synced 2024-11-22 07:37:59 -05:00
Implement/match LegoInputManager::FUN_1005cdf0 (#780)
This commit is contained in:
parent
f30ed0212b
commit
4b4f2f321c
2 changed files with 90 additions and 15 deletions
|
@ -136,13 +136,13 @@ class LegoInputManager : public MxPresenter {
|
|||
LegoCameraController* m_camera; // 0x60
|
||||
LegoWorld* m_world; // 0x64
|
||||
LegoEventQueue* m_eventQueue; // 0x68
|
||||
undefined4 m_unk0x6c; // 0x6c
|
||||
undefined4 m_unk0x70; // 0x70
|
||||
undefined4 m_unk0x74; // 0x74
|
||||
MxS32 m_x; // 0x6c
|
||||
MxS32 m_y; // 0x70
|
||||
MxS32 m_unk0x74; // 0x74
|
||||
UINT m_autoDragTimerID; // 0x78
|
||||
UINT m_autoDragTime; // 0x7c
|
||||
undefined m_unk0x80; // 0x80
|
||||
undefined m_unk0x81; // 0x81
|
||||
MxBool m_unk0x80; // 0x80
|
||||
MxBool m_unk0x81; // 0x81
|
||||
LegoControlManager* m_controlManager; // 0x84
|
||||
MxBool m_unk0x88; // 0x88
|
||||
IDirectInput* m_directInput; // 0x8c
|
||||
|
|
|
@ -28,12 +28,12 @@ LegoInputManager::LegoInputManager()
|
|||
m_world = NULL;
|
||||
m_camera = NULL;
|
||||
m_eventQueue = NULL;
|
||||
m_unk0x80 = 0;
|
||||
m_unk0x80 = FALSE;
|
||||
m_autoDragTimerID = 0;
|
||||
m_unk0x6c = 0;
|
||||
m_unk0x70 = 0;
|
||||
m_x = 0;
|
||||
m_y = 0;
|
||||
m_controlManager = NULL;
|
||||
m_unk0x81 = 0;
|
||||
m_unk0x81 = FALSE;
|
||||
m_unk0x88 = FALSE;
|
||||
m_directInput = NULL;
|
||||
m_directInputDevice = NULL;
|
||||
|
@ -369,7 +369,7 @@ MxBool LegoInputManager::ProcessOneEvent(LegoEventNotificationParam& p_param)
|
|||
if (!Lego()->IsTimerRunning() || p_param.GetKey() == 0x13) {
|
||||
if (p_param.GetKey() == 0x10) {
|
||||
if (m_unk0x195) {
|
||||
m_unk0x80 = 0;
|
||||
m_unk0x80 = FALSE;
|
||||
p_param.SetType(c_notificationDrag);
|
||||
|
||||
if (m_camera) {
|
||||
|
@ -446,8 +446,8 @@ MxBool LegoInputManager::ProcessOneEvent(LegoEventNotificationParam& p_param)
|
|||
MxBool result = m_controlManager->FUN_10029210(p_param, NULL);
|
||||
StopAutoDragTimer();
|
||||
|
||||
m_unk0x80 = 0;
|
||||
m_unk0x81 = 0;
|
||||
m_unk0x80 = FALSE;
|
||||
m_unk0x81 = FALSE;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -479,11 +479,86 @@ MxBool LegoInputManager::ProcessOneEvent(LegoEventNotificationParam& p_param)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x1005cdf0
|
||||
// FUNCTION: LEGO1 0x1005cdf0
|
||||
MxBool LegoInputManager::FUN_1005cdf0(LegoEventNotificationParam& p_param)
|
||||
{
|
||||
// TODO
|
||||
return FALSE;
|
||||
MxBool result = FALSE;
|
||||
|
||||
switch (p_param.GetNotification()) {
|
||||
case c_notificationButtonUp:
|
||||
StopAutoDragTimer();
|
||||
|
||||
if (m_unk0x80) {
|
||||
p_param.SetType(c_notificationDrag);
|
||||
result = TRUE;
|
||||
}
|
||||
else if (m_unk0x81) {
|
||||
p_param.SetX(m_x);
|
||||
p_param.SetY(m_y);
|
||||
p_param.SetType(c_notificationType11);
|
||||
result = TRUE;
|
||||
}
|
||||
|
||||
m_unk0x80 = FALSE;
|
||||
m_unk0x81 = FALSE;
|
||||
break;
|
||||
case c_notificationButtonDown:
|
||||
m_x = p_param.GetX();
|
||||
m_y = p_param.GetY();
|
||||
m_unk0x80 = FALSE;
|
||||
m_unk0x81 = TRUE;
|
||||
StartAutoDragTimer();
|
||||
break;
|
||||
case c_notificationMouseMove:
|
||||
if (m_unk0x195) {
|
||||
p_param.SetModifier(1);
|
||||
}
|
||||
|
||||
if ((m_unk0x195 || m_unk0x81) && p_param.GetModifier() & 1) {
|
||||
if (!m_unk0x80) {
|
||||
if (m_unk0x195) {
|
||||
m_x = p_param.GetX();
|
||||
m_y = p_param.GetY();
|
||||
}
|
||||
|
||||
MxS32 diffX = p_param.GetX() - m_x;
|
||||
MxS32 diffY = p_param.GetY() - m_y;
|
||||
|
||||
if (m_unk0x195 || (diffX * diffX) + (diffY * diffY) > m_unk0x74) {
|
||||
StopAutoDragTimer();
|
||||
m_unk0x80 = TRUE;
|
||||
p_param.SetType(c_notificationDragEnd);
|
||||
result = TRUE;
|
||||
p_param.SetX(m_x);
|
||||
p_param.SetY(m_y);
|
||||
}
|
||||
}
|
||||
else {
|
||||
p_param.SetType(c_notificationDragStart);
|
||||
result = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case c_notificationTimer:
|
||||
if (p_param.GetModifier() == m_autoDragTimerID) {
|
||||
StopAutoDragTimer();
|
||||
|
||||
if (m_unk0x81) {
|
||||
m_unk0x80 = TRUE;
|
||||
p_param.SetX(m_x);
|
||||
p_param.SetY(m_y);
|
||||
p_param.SetModifier(1);
|
||||
p_param.SetType(c_notificationDragEnd);
|
||||
result = 1;
|
||||
}
|
||||
else {
|
||||
m_unk0x80 = FALSE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1005cfb0
|
||||
|
|
Loading…
Reference in a new issue