fix input: overlay ensure, moveMap hooks, hijack

This commit is contained in:
RallyBlock committed 2026-11-09 20:31:09 -05:00
1 parent 6671b71ffb
commit a118214588
1 file changed
+183 -55
+183 -55
View File
@@ -9,6 +9,8 @@ $RPGClient::Dist = 14;
$RPGClient::TopDownPitch = 1.22; $RPGClient::TopDownPitch = 1.22;
$RPGClient::OrbitInit = 0; $RPGClient::OrbitInit = 0;
$RPGClient::HudPlaced = 0; $RPGClient::HudPlaced = 0;
$RPGClient::KeyMapPushed = 0;
$RPGClient::MoveHijacked = 0;
$RPGClient::PanX = 0; $RPGClient::PanX = 0;
$RPGClient::PanY = 0; $RPGClient::PanY = 0;
$RPGClient::PanMax = 48; $RPGClient::PanMax = 48;
@@ -290,51 +292,86 @@ function RPGClient_SendClickFromCursor(%button)
RPGClient_SendClick(%button, Canvas.getCursorPos()); RPGClient_SendClick(%button, Canvas.getCursorPos());
} }
function RPGClient_EnableOverlay() function RPGClient_EnsureKeyMap()
{ {
if (!isObject(PlayGui) || isObject(RPGClient_Mouse)) if (!isObject(RPGClient_KeyMap))
{
new ActionMap(RPGClient_KeyMap);
RPGClient_KeyMap.bind(keyboard, w, RPGClient_KeyMvForward);
RPGClient_KeyMap.bind(keyboard, s, RPGClient_KeyMvBackward);
RPGClient_KeyMap.bind(keyboard, a, RPGClient_KeyMvLeft);
RPGClient_KeyMap.bind(keyboard, d, RPGClient_KeyMvRight);
RPGClient_KeyMap.bind(keyboard0, w, RPGClient_KeyMvForward);
RPGClient_KeyMap.bind(keyboard0, s, RPGClient_KeyMvBackward);
RPGClient_KeyMap.bind(keyboard0, a, RPGClient_KeyMvLeft);
RPGClient_KeyMap.bind(keyboard0, d, RPGClient_KeyMvRight);
RPGClient_KeyMap.bind(keyboard, left, RPGClient_YawLeft);
RPGClient_KeyMap.bind(keyboard, right, RPGClient_YawRight);
RPGClient_KeyMap.bind(keyboard0, left, RPGClient_YawLeft);
RPGClient_KeyMap.bind(keyboard0, right, RPGClient_YawRight);
RPGClient_KeyMap.bind(keyboard, equals, RPGClient_ZoomIn);
RPGClient_KeyMap.bind(keyboard, minus, RPGClient_ZoomOut);
RPGClient_KeyMap.bind(keyboard, "[", RPGClient_ZoomIn);
RPGClient_KeyMap.bind(keyboard, "]", RPGClient_ZoomOut);
RPGClient_KeyMap.bind(keyboard0, equals, RPGClient_ZoomIn);
RPGClient_KeyMap.bind(keyboard0, minus, RPGClient_ZoomOut);
RPGClient_KeyMap.bind(keyboard, m, RPGClient_ToggleCursor);
RPGClient_KeyMap.bind(keyboard0, m, RPGClient_ToggleCursor);
}
if ($RPGClient::KeyMapPushed)
{
RPGClient_KeyMap.pop();
}
RPGClient_KeyMap.push();
$RPGClient::KeyMapPushed = 1;
}
function RPGClient_HijackMoveMap()
{
if ($RPGClient::MoveHijacked || !isObject(moveMap))
{ {
return; return;
} }
new GuiMouseEventCtrl(RPGClient_Mouse) moveMap.bind(keyboard, w, RPGClient_KeyMvForward);
moveMap.bind(keyboard, s, RPGClient_KeyMvBackward);
moveMap.bind(keyboard, a, RPGClient_KeyMvLeft);
moveMap.bind(keyboard, d, RPGClient_KeyMvRight);
moveMap.bind(keyboard, left, RPGClient_YawLeft);
moveMap.bind(keyboard, right, RPGClient_YawRight);
moveMap.bind(keyboard, equals, RPGClient_ZoomIn);
moveMap.bind(keyboard, minus, RPGClient_ZoomOut);
moveMap.bind(keyboard, "[", RPGClient_ZoomIn);
moveMap.bind(keyboard, "]", RPGClient_ZoomOut);
$RPGClient::MoveHijacked = 1;
}
function RPGClient_EnsureOverlay()
{
if (!isObject(PlayGui))
{ {
className = "RPGClient_Mouse"; return;
horizSizing = "width";
vertSizing = "height";
position = "0 0";
extent = "640 480";
profile = "GuiDefaultProfile";
visible = "1";
enabled = "1";
modal = "0";
};
PlayGui.add(RPGClient_Mouse);
PlayGui.pushToBack(RPGClient_Mouse);
if (isObject(RPGClient_KeyMap))
{
RPGClient_KeyMap.delete();
} }
new ActionMap(RPGClient_KeyMap); if (!isObject(RPGClient_Mouse))
RPGClient_KeyMap.bind(keyboard, w, RPGClient_KeyMvForward); {
RPGClient_KeyMap.bind(keyboard, s, RPGClient_KeyMvBackward); new GuiMouseEventCtrl(RPGClient_Mouse)
RPGClient_KeyMap.bind(keyboard, a, RPGClient_KeyMvLeft); {
RPGClient_KeyMap.bind(keyboard, d, RPGClient_KeyMvRight); className = "RPGClient_Mouse";
RPGClient_KeyMap.bind(keyboard0, w, RPGClient_KeyMvForward); horizSizing = "width";
RPGClient_KeyMap.bind(keyboard0, s, RPGClient_KeyMvBackward); vertSizing = "height";
RPGClient_KeyMap.bind(keyboard0, a, RPGClient_KeyMvLeft); position = "0 0";
RPGClient_KeyMap.bind(keyboard0, d, RPGClient_KeyMvRight); extent = "640 480";
RPGClient_KeyMap.bind(keyboard, left, RPGClient_YawLeft); profile = "GuiDefaultProfile";
RPGClient_KeyMap.bind(keyboard, right, RPGClient_YawRight); visible = "1";
RPGClient_KeyMap.bind(keyboard0, left, RPGClient_YawLeft); enabled = "1";
RPGClient_KeyMap.bind(keyboard0, right, RPGClient_YawRight); modal = "0";
RPGClient_KeyMap.bind(keyboard, equals, RPGClient_ZoomIn); };
RPGClient_KeyMap.bind(keyboard, minus, RPGClient_ZoomOut); PlayGui.add(RPGClient_Mouse);
RPGClient_KeyMap.bind(keyboard0, equals, RPGClient_ZoomIn); PlayGui.pushToBack(RPGClient_Mouse);
RPGClient_KeyMap.bind(keyboard0, minus, RPGClient_ZoomOut); }
RPGClient_KeyMap.bind(keyboard, m, RPGClient_ToggleCursor); RPGClient_EnsureKeyMap();
RPGClient_KeyMap.bind(keyboard0, m, RPGClient_ToggleCursor); RPGClient_HijackMoveMap();
RPGClient_KeyMap.push(); $enableDirectInput = 1;
RPGClient_BumpKeyMap(); activateDirectInput();
$mvFreeLook = 0; $mvFreeLook = 0;
$firstPerson = 0; $firstPerson = 0;
if (isObject(Canvas) && !Canvas.isCursorOn()) if (isObject(Canvas) && !Canvas.isCursorOn())
@@ -347,6 +384,11 @@ function RPGClient_EnableOverlay()
} }
} }
function RPGClient_EnableOverlay()
{
RPGClient_EnsureOverlay();
}
function RPGClient_ToggleCursor(%val) function RPGClient_ToggleCursor(%val)
{ {
if (!$RPGClient::Active || !%val) if (!$RPGClient::Active || !%val)
@@ -366,9 +408,10 @@ function RPGClient_DisableOverlay()
$RPGClient::MvB = 0; $RPGClient::MvB = 0;
$RPGClient::MvL = 0; $RPGClient::MvL = 0;
$RPGClient::MvR = 0; $RPGClient::MvR = 0;
if (isObject(RPGClient_KeyMap)) if ($RPGClient::KeyMapPushed && isObject(RPGClient_KeyMap))
{ {
RPGClient_KeyMap.pop(); RPGClient_KeyMap.pop();
$RPGClient::KeyMapPushed = 0;
} }
if (isObject(RPGClient_Mouse)) if (isObject(RPGClient_Mouse))
{ {
@@ -377,6 +420,7 @@ function RPGClient_DisableOverlay()
$RPGClient::Active = 0; $RPGClient::Active = 0;
$RPGClient::OrbitInit = 0; $RPGClient::OrbitInit = 0;
$RPGClient::HudPlaced = 0; $RPGClient::HudPlaced = 0;
$RPGClient::MoveHijacked = 0;
} }
function RPGClient_Hud_Place() function RPGClient_Hud_Place()
@@ -467,42 +511,60 @@ function RPGClient_ScheduleCamera()
function RPGClient_YawLeft(%val) function RPGClient_YawLeft(%val)
{ {
if (!$RPGClient::Active || %val == 0) if (!$RPGClient::Active)
{ {
return; return;
} }
$RPGClient::Yaw = $RPGClient::Yaw - 0.06; if (%val)
RPGClient_ApplyCamera(1); {
$RPGClient::MvL = %val;
}
else
{
$RPGClient::MvL = 0;
}
} }
function RPGClient_YawRight(%val) function RPGClient_YawRight(%val)
{ {
if (!$RPGClient::Active || %val == 0) if (!$RPGClient::Active)
{ {
return; return;
} }
$RPGClient::Yaw = $RPGClient::Yaw + 0.06; if (%val)
RPGClient_ApplyCamera(1); {
$RPGClient::MvR = %val;
}
else
{
$RPGClient::MvR = 0;
}
} }
function RPGClient_ZoomIn(%val) function RPGClient_ZoomIn(%val)
{ {
if (!$RPGClient::Active || %val == 0) if (!$RPGClient::Active)
{ {
return; return;
} }
$RPGClient::Dist = getMax(6, $RPGClient::Dist - 0.6); if (%val)
RPGClient_ApplyCamera(1); {
$RPGClient::Dist = getMax(6, $RPGClient::Dist - 0.8);
RPGClient_ApplyCamera(1);
}
} }
function RPGClient_ZoomOut(%val) function RPGClient_ZoomOut(%val)
{ {
if (!$RPGClient::Active || %val == 0) if (!$RPGClient::Active)
{ {
return; return;
} }
$RPGClient::Dist = getMin(32, $RPGClient::Dist + 0.6); if (%val)
RPGClient_ApplyCamera(1); {
$RPGClient::Dist = getMin(32, $RPGClient::Dist + 0.8);
RPGClient_ApplyCamera(1);
}
} }
function RPGClient_CanSendCmd() function RPGClient_CanSendCmd()
@@ -605,9 +667,11 @@ function clientCmdRPG_TopDown(%on, %yaw, %dist)
$RPGClient::Dist = %dist > 0 ? %dist : 14; $RPGClient::Dist = %dist > 0 ? %dist : 14;
$RPGClient::OrbitInit = 0; $RPGClient::OrbitInit = 0;
$RPGClient::HudPlaced = 0; $RPGClient::HudPlaced = 0;
RPGClient_EnableOverlay(); RPGClient_EnsureOverlay();
RPGClient_BindKeys(); RPGClient_BindKeys();
RPGClient_StartCameraTick(); RPGClient_StartCameraTick();
schedule(500, 0, RPGClient_EnsureOverlay);
schedule(1500, 0, RPGClient_EnsureOverlay);
RPGClient_ScheduleCamera(); RPGClient_ScheduleCamera();
RPGClient_EnsureCursor(); RPGClient_EnsureCursor();
RPGClient_Hud_Ensure(); RPGClient_Hud_Ensure();
@@ -792,6 +856,70 @@ package RPGClient_PageKeys
}; };
activatePackage(RPGClient_PageKeys); activatePackage(RPGClient_PageKeys);
package RPGClient_Input
{
function moveforward(%val)
{
if ($RPGClient::Active)
{
RPGClient_KeyMvForward(%val);
return;
}
Parent::moveforward(%val);
}
function movebackward(%val)
{
if ($RPGClient::Active)
{
RPGClient_KeyMvBackward(%val);
return;
}
Parent::movebackward(%val);
}
function moveleft(%val)
{
if ($RPGClient::Active)
{
RPGClient_KeyMvLeft(%val);
return;
}
Parent::moveleft(%val);
}
function moveright(%val)
{
if ($RPGClient::Active)
{
RPGClient_KeyMvRight(%val);
return;
}
Parent::moveright(%val);
}
function invLeft(%val)
{
if ($RPGClient::Active)
{
RPGClient_YawLeft(%val);
return;
}
Parent::invLeft(%val);
}
function invRight(%val)
{
if ($RPGClient::Active)
{
RPGClient_YawRight(%val);
return;
}
Parent::invRight(%val);
}
};
activatePackage(RPGClient_Input);
package RPGClient_MapStack package RPGClient_MapStack
{ {
function noHudGui::onWake(%this) function noHudGui::onWake(%this)
@@ -799,7 +927,7 @@ package RPGClient_MapStack
Parent::onWake(%this); Parent::onWake(%this);
if ($RPGClient::Active) if ($RPGClient::Active)
{ {
schedule(0, 0, RPGClient_BumpKeyMap); schedule(0, 0, RPGClient_EnsureOverlay);
} }
} }
}; };
@@ -825,7 +953,7 @@ package RPGClient_Cursor
if ($RPGClient::Active) if ($RPGClient::Active)
{ {
schedule(0, 0, RPGClient_EnsureCursor); schedule(0, 0, RPGClient_EnsureCursor);
schedule(0, 0, RPGClient_BumpKeyMap); schedule(0, 0, RPGClient_EnsureOverlay);
} }
return; return;
} }