tst
This commit is contained in:
@@ -20,9 +20,6 @@ public sealed partial class Dedugan
|
||||
// Плавная интерполяция позиции пивота для устранения колебаний
|
||||
CameraPivot.WorldPosition =
|
||||
Vector3.Lerp( CameraPivot.WorldPosition, Eyes.WorldPosition, Time.Delta * 25f );
|
||||
|
||||
// Компенсируем поворот тела, чтобы камера вращалась правильно
|
||||
// Используем только yaw от EyeAngles, но pitch оставляем как есть
|
||||
var bodyYaw = Renderer.LocalRotation.Yaw();
|
||||
var cameraYaw = EyeAngles.yaw;
|
||||
var compensatedYaw = cameraYaw - bodyYaw;
|
||||
|
||||
@@ -22,5 +22,42 @@ public sealed partial class Dedugan
|
||||
{
|
||||
await GameTask.DelaySeconds( 0.1f );
|
||||
RagdollController.Enabled = true;
|
||||
|
||||
// Выбрасываем все предметы при смерти
|
||||
DropAllItemsOnDeath();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Выбрасывает все предметы из инвентаря при смерти игрока
|
||||
/// </summary>
|
||||
private void DropAllItemsOnDeath()
|
||||
{
|
||||
if ( Inventory == null || !Network.IsOwner ) return;
|
||||
|
||||
Log.Info( $"Игрок {Name} умер. Выбрасываем все предметы..." );
|
||||
|
||||
// Используем метод из инвентаря для выбрасывания всех предметов
|
||||
int droppedCount = Inventory.DropAllItems( WorldPosition, 50f );
|
||||
|
||||
Log.Info( $"Выброшено {droppedCount} предметов при смерти игрока {Name}" );
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Публичный метод для принудительного выбрасывания всех предметов
|
||||
/// Можно вызывать из других мест (например, из команд или UI)
|
||||
/// </summary>
|
||||
/// <param name="dropPosition">Позиция для выбрасывания предметов (если null, используется позиция игрока)</param>
|
||||
/// <param name="scatterRadius">Радиус разброса предметов</param>
|
||||
public void ForceDropAllItems( Vector3? dropPosition = null, float scatterRadius = 50f )
|
||||
{
|
||||
if ( Inventory == null || !Network.IsOwner ) return;
|
||||
|
||||
Log.Info( $"Принудительно выбрасываем все предметы игрока {Name}..." );
|
||||
|
||||
// Используем метод из инвентаря для выбрасывания всех предметов
|
||||
var finalDropPosition = dropPosition ?? WorldPosition;
|
||||
int droppedCount = Inventory.DropAllItems( finalDropPosition, scatterRadius );
|
||||
|
||||
Log.Info( $"Принудительно выброшено {droppedCount} предметов игрока {Name}" );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,10 +73,10 @@ public sealed partial class Dedugan : Component, IUseContext, Component.INetwork
|
||||
protected override void OnUpdate()
|
||||
{
|
||||
_isOwner = Network.IsOwner;
|
||||
|
||||
|
||||
UpdateCustomAnimations();
|
||||
InventoryUpdate();
|
||||
|
||||
|
||||
if ( _isOwner )
|
||||
{
|
||||
EyeAngles += Input.AnalogLook;
|
||||
@@ -94,15 +94,19 @@ public sealed partial class Dedugan : Component, IUseContext, Component.INetwork
|
||||
|
||||
UpdateBodyRotation();
|
||||
|
||||
Camera.LocalRotation = EyeAngles.ToRotation();
|
||||
CameraPivot.WorldPosition =
|
||||
Vector3.Lerp( CameraPivot.WorldPosition, Eyes.WorldPosition, Time.Delta * 25f );
|
||||
var bodyYaw = Renderer.LocalRotation.Yaw();
|
||||
var cameraYaw = EyeAngles.yaw;
|
||||
var compensatedYaw = cameraYaw - bodyYaw;
|
||||
CameraPivot.LocalRotation = Rotation.FromYaw( compensatedYaw ) * Rotation.FromPitch( EyeAngles.pitch );
|
||||
|
||||
var pivotOffset = CameraPivot.LocalRotation.Right * CamOffset.y +
|
||||
CameraPivot.LocalRotation.Forward * CamOffset.x +
|
||||
CameraPivot.LocalRotation.Up * CamOffset.z;
|
||||
|
||||
var rotatedOffset = pivotOffset * EyeAngles.ToRotation();
|
||||
|
||||
Camera.WorldPosition = CameraPivot.WorldPosition + rotatedOffset;
|
||||
// Camera.LocalRotation = EyeAngles.ToRotation();
|
||||
// var pivotOffset = CameraPivot.LocalRotation.Right * CamOffset.y +
|
||||
// CameraPivot.LocalRotation.Forward * CamOffset.x +
|
||||
// CameraPivot.LocalRotation.Up * CamOffset.z;
|
||||
// var rotatedOffset = pivotOffset * EyeAngles.ToRotation();
|
||||
// Camera.WorldPosition = CameraPivot.WorldPosition + rotatedOffset;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,15 +149,15 @@ public sealed partial class Dedugan : Component, IUseContext, Component.INetwork
|
||||
{
|
||||
var currentBodyYaw = Renderer.LocalRotation.Yaw();
|
||||
var currentCameraYaw = EyeAngles.yaw;
|
||||
|
||||
|
||||
// Проверяем, изменились ли углы
|
||||
if ( Math.Abs( currentBodyYaw - _lastBodyYaw ) < 0.1f &&
|
||||
Math.Abs( currentCameraYaw - _lastCameraYaw ) < 0.1f &&
|
||||
if ( Math.Abs( currentBodyYaw - _lastBodyYaw ) < 0.1f &&
|
||||
Math.Abs( currentCameraYaw - _lastCameraYaw ) < 0.1f &&
|
||||
!_bodyRotationDirty )
|
||||
{
|
||||
return; // Пропускаем обновление, если углы не изменились
|
||||
}
|
||||
|
||||
|
||||
_lastBodyYaw = currentBodyYaw;
|
||||
_lastCameraYaw = currentCameraYaw;
|
||||
_bodyRotationDirty = false;
|
||||
|
||||
Reference in New Issue
Block a user