This commit is contained in:
2026-03-09 21:40:10 +01:00
parent e27d40ddbd
commit 2ef7bd0473
2 changed files with 23 additions and 19 deletions

View File

@@ -12,7 +12,6 @@ class SCR_AutorunComponent: ScriptComponent
protected SCR_CharacterControllerComponent m_CharacterController;
protected InputManager m_InputManager;
// --- NEU: Hilfsfunktion für die Sicherung (damit wir den Code nicht doppelt schreiben müssen) ---
protected void CheckForExistingInput(bool isEnabled)
{
if (isEnabled && m_InputManager.GetActionValue("CharacterForward") > 0.5)
@@ -21,22 +20,31 @@ class SCR_AutorunComponent: ScriptComponent
m_bWaitForKeyRelease = false;
}
// --- Aktion für SPRINTEN (Rennen) ---
protected void OnAutorunPressed()
{
m_bIsAutoSprintEnabled = !m_bIsAutoSprintEnabled;
if (m_bIsAutoSprintEnabled) m_bIsAutoWalkEnabled = false; // Gehen ausschalten, falls an
bool wasAutowalking = m_bIsAutoWalkEnabled; // Prüfen, ob wir vorher schon gegangen sind
CheckForExistingInput(m_bIsAutoSprintEnabled);
m_bIsAutoSprintEnabled = !m_bIsAutoSprintEnabled;
if (m_bIsAutoSprintEnabled) m_bIsAutoWalkEnabled = false;
// Sicherung nur aktivieren, wenn wir nicht direkt aus dem Autowalk kommen
if (!wasAutowalking)
CheckForExistingInput(m_bIsAutoSprintEnabled);
else
m_bWaitForKeyRelease = false; // Sauberer Übergang
}
// --- Aktion für GEHEN/JOGGEN (Normales Laufen) ---
protected void OnAutowalkPressed()
{
m_bIsAutoWalkEnabled = !m_bIsAutoWalkEnabled;
if (m_bIsAutoWalkEnabled) m_bIsAutoSprintEnabled = false; // Sprint ausschalten, falls an
bool wasAutorunning = m_bIsAutoSprintEnabled; // Prüfen, ob wir vorher schon gerannt sind
CheckForExistingInput(m_bIsAutoWalkEnabled);
m_bIsAutoWalkEnabled = !m_bIsAutoWalkEnabled;
if (m_bIsAutoWalkEnabled) m_bIsAutoSprintEnabled = false;
if (!wasAutorunning)
CheckForExistingInput(m_bIsAutoWalkEnabled);
else
m_bWaitForKeyRelease = false;
}
protected void OnLifeStateChangedCallback()
@@ -53,7 +61,6 @@ class SCR_AutorunComponent: ScriptComponent
protected void OnPrepareControlsCallback(IEntity owner, ActionManager am, float dt, bool player)
{
// Abbrechen, wenn weder Sprint noch Gehen aktiv sind
if (!m_bIsAutoSprintEnabled && !m_bIsAutoWalkEnabled)
return;
@@ -65,7 +72,6 @@ class SCR_AutorunComponent: ScriptComponent
m_bWaitForKeyRelease = false;
}
// Autorun abbrechen, wenn manuell eingegriffen wird
if (!m_InputManager.IsContextActive("CharacterMovementContext") ||
am.GetActionTriggered("GadgetMap") ||
Math.AbsFloat(rightInput) >= 0.75 ||
@@ -76,27 +82,25 @@ class SCR_AutorunComponent: ScriptComponent
return;
}
// Bewegungswerte setzen: "Forward" (W-Taste) ist bei beiden aktiv
// Bewegung immer erzwingen
m_InputManager.SetActionValue("CharacterForward", 1.0);
// "Sprint" (Shift-Taste) kommt nur beim Autorun dazu
// Explizit sagen: Sprint AN oder Sprint AUS
if (m_bIsAutoSprintEnabled)
{
m_InputManager.SetActionValue("CharacterSprint", 1.0);
}
else
m_InputManager.SetActionValue("CharacterSprint", 0.0); // Verhindert, dass der Sprint stecken bleibt!
}
override void OnPostInit(IEntity owner)
{
m_CharacterController = SCR_CharacterControllerComponent.Cast(owner.FindComponent(SCR_CharacterControllerComponent));
if (!m_CharacterController)
return;
if (!m_CharacterController) return;
m_InputManager = GetGame().GetInputManager();
m_CharacterController.m_OnPrepareControls.Insert(OnPrepareControlsCallback);
// Beide Actions registrieren
m_InputManager.AddActionListener("SCR_Autorun", EActionTrigger.DOWN, OnAutorunPressed);
m_InputManager.AddActionListener("SCR_Autowalk", EActionTrigger.DOWN, OnAutowalkPressed); // <--- NEU
m_InputManager.AddActionListener("SCR_Autowalk", EActionTrigger.DOWN, OnAutowalkPressed);
}
}

Binary file not shown.