fix WASD pan: no orbit reset; HUD bottom; ESC cursor

This commit is contained in:
RallyBlock committed 2026-11-09 20:17:45 -05:00
1 parent cac917989f
commit 93bf6c9cff
1 file changed
+79 -9
+79 -9
View File
@@ -10,13 +10,14 @@ $RPGClient::TopDownPitch = 0.95;
$RPGClient::PanX = 0; $RPGClient::PanX = 0;
$RPGClient::PanY = 0; $RPGClient::PanY = 0;
$RPGClient::PanMax = 48; $RPGClient::PanMax = 48;
$RPGClient::PanSpeed = 0.42; $RPGClient::PanSpeed = 0.9;
$RPGClient::CamTickSched = 0; $RPGClient::CamTickSched = 0;
$RPGClient::LastCamSync = 0; $RPGClient::LastCamSync = 0;
$RPGClient::MvF = 0; $RPGClient::MvF = 0;
$RPGClient::MvB = 0; $RPGClient::MvB = 0;
$RPGClient::MvL = 0; $RPGClient::MvL = 0;
$RPGClient::MvR = 0; $RPGClient::MvR = 0;
$RPGClient::CamModeReady = 0;
$RPGClient::HelloPending = 0; $RPGClient::HelloPending = 0;
$RPGClient::HelloLast = ""; $RPGClient::HelloLast = "";
$RPGClient::TopDownWatchSched = 0; $RPGClient::TopDownWatchSched = 0;
@@ -205,10 +206,21 @@ function RPGClient_CameraTick()
$RPGClient::PanY = $RPGClient::PanY + %rightY * %speed * $RPGClient::MvR; $RPGClient::PanY = $RPGClient::PanY + %rightY * %speed * $RPGClient::MvR;
} }
RPGClient_ClampPan(); RPGClient_ClampPan();
RPGClient_BumpKeyMap();
RPGClient_ApplyCamera(0); RPGClient_ApplyCamera(0);
$RPGClient::CamTickSched = schedule(32, 0, RPGClient_CameraTick); $RPGClient::CamTickSched = schedule(32, 0, RPGClient_CameraTick);
} }
function RPGClient_BumpKeyMap()
{
if (!$RPGClient::Active || !isObject(RPGClient_KeyMap))
{
return;
}
RPGClient_KeyMap.pop();
RPGClient_KeyMap.push();
}
function RPGClient_StartCameraTick() function RPGClient_StartCameraTick()
{ {
cancel($RPGClient::CamTickSched); cancel($RPGClient::CamTickSched);
@@ -303,6 +315,8 @@ function RPGClient_EnableOverlay()
RPGClient_KeyMap.bind(keyboard, m, RPGClient_ToggleCursor); RPGClient_KeyMap.bind(keyboard, m, RPGClient_ToggleCursor);
RPGClient_KeyMap.bind(keyboard0, m, RPGClient_ToggleCursor); RPGClient_KeyMap.bind(keyboard0, m, RPGClient_ToggleCursor);
RPGClient_KeyMap.push(); RPGClient_KeyMap.push();
RPGClient_BumpKeyMap();
$RPGClient::CamModeReady = 0;
$mvFreeLook = 0; $mvFreeLook = 0;
$firstPerson = 0; $firstPerson = 0;
if (isObject(Canvas) && !Canvas.isCursorOn()) if (isObject(Canvas) && !Canvas.isCursorOn())
@@ -343,6 +357,16 @@ function RPGClient_DisableOverlay()
RPGClient_Mouse.delete(); RPGClient_Mouse.delete();
} }
$RPGClient::Active = 0; $RPGClient::Active = 0;
$RPGClient::CamModeReady = 0;
}
function RPGClient_InitCameraMode(%cam, %body)
{
%cam.unmountImage(0);
%cam.setMode("Corpse", %body);
%cam.mode = "Corpse";
%cam.thirdPersonOnly = 1;
$RPGClient::CamModeReady = 1;
} }
function RPGClient_ApplyCamera(%forceSync) function RPGClient_ApplyCamera(%forceSync)
@@ -381,13 +405,12 @@ function RPGClient_ApplyCamera(%forceSync)
$mvBackwardAction = 0; $mvBackwardAction = 0;
$mvLeftAction = 0; $mvLeftAction = 0;
$mvRightAction = 0; $mvRightAction = 0;
%cam.unmountImage(0); if (!$RPGClient::CamModeReady)
{
RPGClient_InitCameraMode(%cam, %body);
}
%xfm = RPGClient_ViewTransform(%body, $RPGClient::Yaw, $RPGClient::Dist, $RPGClient::PanX, $RPGClient::PanY); %xfm = RPGClient_ViewTransform(%body, $RPGClient::Yaw, $RPGClient::Dist, $RPGClient::PanX, $RPGClient::PanY);
%cam.setTransform(%xfm); %cam.setTransform(%xfm);
%cam.setMode("Corpse", %body);
%cam.setOrbitMode(%body, %xfm, 0, 32, $RPGClient::Dist);
%cam.mode = "Corpse";
%cam.thirdPersonOnly = 1;
%now = getSimTime(); %now = getSimTime();
if (%forceSync || %now - $RPGClient::LastCamSync > 120) if (%forceSync || %now - $RPGClient::LastCamSync > 120)
{ {
@@ -551,6 +574,8 @@ function clientCmdRPG_TopDown(%on, %yaw, %dist)
RPGClient_StartCameraTick(); RPGClient_StartCameraTick();
RPGClient_ScheduleCamera(); RPGClient_ScheduleCamera();
RPGClient_EnsureCursor(); RPGClient_EnsureCursor();
RPGClient_Hud_Ensure();
RPGClient_Hud_SyncLayout();
} }
else else
{ {
@@ -607,15 +632,31 @@ function RPGClient_Hud_Ensure()
new GuiTextCtrl(RPGClient_Hud) new GuiTextCtrl(RPGClient_Hud)
{ {
horizSizing = "width"; horizSizing = "width";
vertSizing = "top"; vertSizing = "bottom";
position = "8 8"; position = "8 72";
extent = "600 24"; extent = "640 22";
profile = "ChatHudMessageProfile"; profile = "ChatHudMessageProfile";
text = ""; text = "";
}; };
PlayGui.add(RPGClient_Hud); PlayGui.add(RPGClient_Hud);
} }
function RPGClient_Hud_SyncLayout()
{
if (!isObject(RPGClient_Hud) || !isObject(Canvas))
{
return;
}
%ext = Canvas.getExtent();
%w = getWord(%ext, 0);
%h = getWord(%ext, 1);
if (%w > 0)
{
RPGClient_Hud.setExtent(%w - 16, 22);
RPGClient_Hud.setPosition(8, %h - 94);
}
}
function RPGClient_Hud_Update(%hp, %maxHp, %silver, %load, %cap, %skillId, %skillValue, %tHp, %tMax) function RPGClient_Hud_Update(%hp, %maxHp, %silver, %load, %cap, %skillId, %skillValue, %tHp, %tMax)
{ {
if (!$RPGClient::Active) if (!$RPGClient::Active)
@@ -623,6 +664,8 @@ function RPGClient_Hud_Update(%hp, %maxHp, %silver, %load, %cap, %skillId, %skil
return; return;
} }
RPGClient_Hud_Ensure(); RPGClient_Hud_Ensure();
RPGClient_Hud_SyncLayout();
PlayGui.bringToFront(RPGClient_Hud);
%t = ""; %t = "";
if (%tMax > 0) if (%tMax > 0)
{ {
@@ -708,8 +751,12 @@ package RPGClient_MoveMap
function moveforward(%val) function moveforward(%val)
{ {
if ($RPGClient::Active) if ($RPGClient::Active)
{
$RPGClient::MvF = %val;
if (%val && $RunMultiplier > 1)
{ {
$RPGClient::MvF = %val * $RunMultiplier; $RPGClient::MvF = %val * $RunMultiplier;
}
$mvForwardAction = 0; $mvForwardAction = 0;
return; return;
} }
@@ -719,8 +766,12 @@ package RPGClient_MoveMap
function movebackward(%val) function movebackward(%val)
{ {
if ($RPGClient::Active) if ($RPGClient::Active)
{
$RPGClient::MvB = %val;
if (%val && $RunMultiplier > 1)
{ {
$RPGClient::MvB = %val * $RunMultiplier; $RPGClient::MvB = %val * $RunMultiplier;
}
$mvBackwardAction = 0; $mvBackwardAction = 0;
return; return;
} }
@@ -730,8 +781,12 @@ package RPGClient_MoveMap
function moveleft(%val) function moveleft(%val)
{ {
if ($RPGClient::Active) if ($RPGClient::Active)
{
$RPGClient::MvL = %val;
if (%val && $RunMultiplier > 1)
{ {
$RPGClient::MvL = %val * $RunMultiplier; $RPGClient::MvL = %val * $RunMultiplier;
}
$mvLeftAction = 0; $mvLeftAction = 0;
return; return;
} }
@@ -741,8 +796,12 @@ package RPGClient_MoveMap
function moveright(%val) function moveright(%val)
{ {
if ($RPGClient::Active) if ($RPGClient::Active)
{
$RPGClient::MvR = %val;
if (%val && $RunMultiplier > 1)
{ {
$RPGClient::MvR = %val * $RunMultiplier; $RPGClient::MvR = %val * $RunMultiplier;
}
$mvRightAction = 0; $mvRightAction = 0;
return; return;
} }
@@ -773,6 +832,16 @@ activatePackage(RPGClient_MoveMap);
package RPGClient_Cursor package RPGClient_Cursor
{ {
function GuiCanvas::checkCursor(%this)
{
Parent::checkCursor(%this);
if ($RPGClient::Active && !%this.isCursorOn())
{
lockMouse(0);
%this.cursorOn();
}
}
function escapeMenu::toggle(%this) function escapeMenu::toggle(%this)
{ {
if (%this.isAwake()) if (%this.isAwake())
@@ -781,6 +850,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);
} }
return; return;
} }