This commit is contained in:
MrTorex committed 2025-11-15 13:33:44 +03:00
1 parent d1aad440f5
commit a2acea39dc
4 files changed
+8 -11

No files matched your search

@@ -19,8 +19,8 @@ namespace Code.Gameplay.Character.Controller.Abilities
private bool _hasClimbedThisWallSession; private bool _hasClimbedThisWallSession;
private float _wallClimbCooldownTimer; private float _wallClimbCooldownTimer;
private readonly float _wallClimbCooldownDuration = 1.5f; private readonly float _wallClimbCooldownDuration = 1.5f;
public bool IsWallInteractionAllowed =>
!_hasClimbedThisWallSession && _wallClimbCooldownTimer <= 0f; public bool IsClimbingActive { get; private set; }
// Конструктор механики залазания на стену // Конструктор механики залазания на стену
public WallClimbMechanic(float wallClimbSpeedFactor, float minWallClimbSpeed, float wallDetectionAngleThreshold) public WallClimbMechanic(float wallClimbSpeedFactor, float minWallClimbSpeed, float wallDetectionAngleThreshold)
@@ -54,8 +54,6 @@ namespace Code.Gameplay.Character.Controller.Abilities
// Проекция скорости на направление к стене (отрицательная, если летим в стену) // Проекция скорости на направление к стене (отрицательная, если летим в стену)
var velocityIntoWall = Vector3.Dot(currentVelocity, -hitNormal); var velocityIntoWall = Vector3.Dot(currentVelocity, -hitNormal);
Debug.Log($"[TryClimbWall] velIntoWall={velocityIntoWall:F2}, min={_minWallClimbSpeed}, climbed={_hasClimbedThisWallSession}, cooldown={_wallClimbCooldownTimer:F2}");
// Если движемся в стену с достаточной скоростью // Если движемся в стену с достаточной скоростью
if (velocityIntoWall > _minWallClimbSpeed) if (velocityIntoWall > _minWallClimbSpeed)
{ {
@@ -69,6 +67,7 @@ namespace Code.Gameplay.Character.Controller.Abilities
// Предотвращаем заземление и повторное применение в этом кадре // Предотвращаем заземление и повторное применение в этом кадре
motor.ForceUnground(); motor.ForceUnground();
_hasClimbedThisWallSession = true; _hasClimbedThisWallSession = true;
IsClimbingActive = true;
return true; return true;
} }
@@ -79,6 +78,7 @@ namespace Code.Gameplay.Character.Controller.Abilities
public void ResetWallClimbSession() public void ResetWallClimbSession()
{ {
_hasClimbedThisWallSession = false; _hasClimbedThisWallSession = false;
IsClimbingActive = false;
} }
public void TickCooldown(float deltaTime) public void TickCooldown(float deltaTime)
@@ -60,12 +60,10 @@ namespace Code.Gameplay.Character.Controller.Abilities
{ {
switch (_leanDirection.x) switch (_leanDirection.x)
{ {
case -1 when motor.CharacterRight.x > 0.1f: case -1 or 1 when motor.CharacterRight.x > 0.1f:
case 1 when motor.CharacterRight.x > 0.1f:
_leanSign = -1; _leanSign = -1;
break; break;
case -1 when Mathf.Abs(motor.CharacterRight.x) < 0.1f: case -1 or 1 when Mathf.Abs(motor.CharacterRight.x) < 0.1f:
case 1 when Mathf.Abs(motor.CharacterRight.x) < 0.1f:
_leanDirection = new Vector3(0, 0, -1); _leanDirection = new Vector3(0, 0, -1);
break; break;
} }
@@ -110,8 +110,7 @@ namespace Code.Gameplay.Character.Controller
// Обновление вращения персонажа на основе входных данных // Обновление вращения персонажа на основе входных данных
public void UpdateRotation(ref Quaternion currentRotation, float deltaTime) public void UpdateRotation(ref Quaternion currentRotation, float deltaTime)
{ {
// ВО ВРЕМЯ СЛАЙДА НЕ ОБНОВЛЯЕМ ВРАЩЕНИЕ - ПЕРСОНАЖ СМОТРИТ ПРЯМО if (_slideMechanic.IsSliding || _wallClimbMechanic.IsClimbingActive) return;
if (_slideMechanic.IsSliding) return;
switch (_currentCameraMode) switch (_currentCameraMode)
{ {
@@ -113,7 +113,7 @@ namespace Code.Gameplay.Character.Controller.Input
var cameraForward = cameraRotation * Vector3.forward; var cameraForward = cameraRotation * Vector3.forward;
// Проецируем на горизонтальную плоскость // Проецируем на горизонтальную плоскость
var horizontalForward = Vector3.ProjectOnPlane(cameraForward, motor.CharacterUp).normalized; var horizontalForward = Vector3.ProjectOnPlane(cameraForward, Vector3.up).normalized;
// Если проекция вырождена, используем текущее направление персонажа // Если проекция вырождена, используем текущее направление персонажа
if (horizontalForward.sqrMagnitude < 0.01f) if (horizontalForward.sqrMagnitude < 0.01f)