upd
This commit is contained in:
@@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user