Руки одержимого: кулак в момент урона зомби, сжатие под угол рук 45°, скрыты только ячейки пояса персонажа

- Удар рук откладывается на замеренную задержку урона зомби (ItemActionMelee.OnHoldingUpdate) минус ход кулака.
- Руки сжимаются по экранным осям как при FOV 45 (как у персонажа), сдвиг - родной -1.7.
- От первого лица прячется только windowToolbelt: полоски персонажа (та же группа окон) остаются.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-13 16:26:18 +03:00
co-authored by Claude Opus 5.5
parent 7b63f91a3b
commit f03c018204
3 changed files with 109 additions and 8 deletions
+17 -3
View File
@@ -368,6 +368,7 @@ namespace NecromancerTome
FirstPerson = false;
HideBody(null);
FpArms.Hide(_player);
ShowPlayerBelt(true);
RatLoot.CloseIfViewing();
WolfBag.CloseWindow();
RatPhase.Stop(GameManager.Instance?.World, Zombie, "выход из одержимости");
@@ -596,13 +597,12 @@ namespace NecromancerTome
if (FirstPerson)
{
FpArms.Show(_player, z);
// Пояс персонажа в виде от первого лица скрыт (13.10); обратно игра откроет его сама (OnHUD).
_player.PlayerUI?.windowManager.Close(SnakeControl.ToolbeltWindow);
}
else
{
HideBody(null);
FpArms.Hide(_player);
ShowPlayerBelt(true);
}
Debug.Log("[NecromancerTome] Possession: вид от " + (FirstPerson ? "первого" : "третьего") + " лица");
}
@@ -845,7 +845,7 @@ namespace NecromancerTome
if (z.Attack(false))
{
z.Attack(true);
FpArms.Punch(); // руки от первого лица бьют вместе с зомби (13.10)
FpArms.QueuePunch(); // руки от первого лица бьют вместе с зомби (13.10), кулак - в момент урона
if (IsPet && BearControl.Is(z))
{
BearControl.Smash(world, _player, z); // удар лапой и по блоку (решено 09.10)
@@ -2110,6 +2110,18 @@ namespace NecromancerTome
_flyZoomHeld = false;
}
/// <summary>Ячейки пояса персонажа (окно windowToolbelt) - скрыты в виде от первого лица (указание 13.10: «пояс игрока
/// нужно прятать», у зомби свой пояс). Только это окно: группа toolbelt держит и полоски здоровья и сытости персонажа
/// (тест 13.10 - пропали вместе с поясом). Ставится каждый кадр - игра может показать окно снова.</summary>
static void ShowPlayerBelt(bool _show)
{
XUiV_Window w = _player?.PlayerUI?.xui?.GetWindow("windowToolbelt");
if (w != null && w.IsVisible != _show)
{
w.IsVisible = _show;
}
}
/// <summary>Тело одержимого в виде от первого лица - только тень (тест 13.10: изнутри видно тело, у паука на
/// бегу лапы и череп в кадре; сжатие одной головы не спасало). Видимость - дело своего экрана: другие игроки
/// рисуют этого зомби сами и видят его как обычно; так же игра прячет тело персонажа от первого лица.
@@ -2171,6 +2183,8 @@ namespace NecromancerTome
: Vector3.Lerp(_fpEye, want, 1f - Mathf.Exp(-FpSmooth * Time.deltaTime));
HideBody(z);
_camera.SetPositionAndRotation(_fpEye, rot);
FpArms.Tick(_player?.playerCamera);
ShowPlayerBelt(false);
return;
}
Vector3 eye = anchor + Vector3.up * CamUp - rot * Vector3.forward * CamBack;