This commit is contained in:
Oscar
2025-06-28 19:17:59 +03:00
parent 23a35fe3cd
commit 3cb6514f78
9 changed files with 216 additions and 251 deletions

View File

@@ -61,6 +61,8 @@ public sealed partial class Dedugan : Component
// Получаем компонент оружия и вызываем экипировку
if ( go.Components.TryGet<BaseWeapon>( out var weapon ) )
{
// Передаем ссылку на InventoryItem в оружие
weapon.SetInventoryItem( item );
weapon.OnEquipped();
_useableCache[weaponDef.Slot] = (go, weapon);
}
@@ -212,6 +214,16 @@ public sealed partial class Dedugan : Component
if ( weapon != null && !weapon.IsReloading )
{
weapon.StartReload();
// Анимация перезарядки персонажа (скорость уже установлена в weapon.StartReload())
// Дополнительно устанавливаем здесь на случай, если weapon.StartReload() не вызвался
var weaponDef = weapon.GetWeaponDefinition();
if ( weaponDef != null )
{
float reloadSpeed = weaponDef.ReloadTime > 0 ? 1f / weaponDef.ReloadTime : 1f;
Renderer.Set( "b_reload", true );
Renderer.Set( "speed_reload", reloadSpeed );
}
}
}

View File

@@ -73,15 +73,7 @@ public sealed partial class Dedugan : Component, IUseContext, Component.INetwork
EyeAngles = EyeAngles.WithPitch( MathX.Clamp( EyeAngles.pitch, -89f, 89f ) );
NetworkedEyeAngles = EyeAngles;
var targetRotation = Rotation.LookAt( Rotation.FromYaw( EyeAngles.yaw ).Forward, -_directionToAxis );
var currentForward = Renderer.LocalRotation.Forward;
float angleDiff = currentForward.Angle( targetRotation.Forward );
if ( angleDiff > 15f && Controller.Velocity.Length > 10f )
{
Renderer.LocalRotation = Rotation.Slerp( Renderer.LocalRotation, Rotation.FromYaw( EyeAngles.yaw ),
Time.Delta * 3f );
}
UpdateBodyRotation();
RotateCamera();
InteractionsUpdate();
@@ -90,15 +82,7 @@ public sealed partial class Dedugan : Component, IUseContext, Component.INetwork
{
EyeAngles = NetworkedEyeAngles;
var targetRotation = Rotation.LookAt( Rotation.FromYaw( EyeAngles.yaw ).Forward, -_directionToAxis );
var currentForward = Renderer.LocalRotation.Forward;
float angleDiff = currentForward.Angle( targetRotation.Forward );
if ( angleDiff > 15f && Controller.Velocity.Length > 10f )
{
Renderer.LocalRotation = Rotation.Slerp( Renderer.LocalRotation, Rotation.FromYaw( EyeAngles.yaw ),
Time.Delta * 3f );
}
UpdateBodyRotation();
// Renderer.LocalRotation = Rotation.Slerp(Renderer.LocalRotation, Rotation.FromYaw(EyeAngles.yaw), Time.Delta * 5f);
@@ -133,4 +117,40 @@ public sealed partial class Dedugan : Component, IUseContext, Component.INetwork
// Возвращаем пустой список, так как теперь оружие управляется через новую систему
return Enumerable.Empty<IUseable>();
}
/// <summary>
/// Обновление поворота тела с учетом режима прицеливания
/// </summary>
private void UpdateBodyRotation()
{
var targetRotation = Rotation.LookAt( Rotation.FromYaw( EyeAngles.yaw ).Forward, -_directionToAxis );
var currentForward = Renderer.LocalRotation.Forward;
float angleDiff = currentForward.Angle( targetRotation.Forward );
// Проверяем, нужно ли поворачивать тело
bool shouldRotateBody = false;
if ( InAds )
{
// В режиме прицеливания - мертвая зона 85 градусов
if ( angleDiff > 85f )
{
shouldRotateBody = true;
}
}
else
{
// В обычном режиме - поворот при движении и угле больше 15 градусов
if ( angleDiff > 15f && Controller.Velocity.Length > 10f )
{
shouldRotateBody = true;
}
}
if ( shouldRotateBody )
{
Renderer.LocalRotation = Rotation.Slerp( Renderer.LocalRotation, Rotation.FromYaw( EyeAngles.yaw ),
Time.Delta * 3f );
}
}
}