@@ -1,13 +1,10 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
using Content.Server.GameObjects.EntitySystems;
|
||||
using Content.Shared.GameObjects.Components.Buckle;
|
||||
using Content.Shared.GameObjects.Components.Movement;
|
||||
using Content.Shared.Physics;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Maths;
|
||||
using Robust.Shared.Players;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Server.GameObjects.Components.Movement
|
||||
{
|
||||
@@ -15,41 +12,23 @@ namespace Content.Server.GameObjects.Components.Movement
|
||||
[ComponentReference(typeof(SharedClimbingComponent))]
|
||||
public class ClimbingComponent : SharedClimbingComponent
|
||||
{
|
||||
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
||||
private bool _isClimbing;
|
||||
private ClimbController? _climbController;
|
||||
|
||||
public override bool IsClimbing
|
||||
{
|
||||
get => base.IsClimbing;
|
||||
get => _isClimbing;
|
||||
set
|
||||
{
|
||||
if (_isClimbing == value)
|
||||
return;
|
||||
|
||||
base.IsClimbing = value;
|
||||
|
||||
if (value)
|
||||
if (!value)
|
||||
{
|
||||
StartClimbTime = IoCManager.Resolve<IGameTiming>().CurTime;
|
||||
EntitySystem.Get<ClimbSystem>().AddActiveClimber(this);
|
||||
OwnerIsTransitioning = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
EntitySystem.Get<ClimbSystem>().RemoveActiveClimber(this);
|
||||
OwnerIsTransitioning = false;
|
||||
Body?.TryRemoveController<ClimbController>();
|
||||
}
|
||||
|
||||
Dirty();
|
||||
}
|
||||
}
|
||||
|
||||
protected override bool OwnerIsTransitioning
|
||||
{
|
||||
get => base.OwnerIsTransitioning;
|
||||
set
|
||||
{
|
||||
if (value == base.OwnerIsTransitioning) return;
|
||||
base.OwnerIsTransitioning = value;
|
||||
_isClimbing = value;
|
||||
Dirty();
|
||||
}
|
||||
}
|
||||
@@ -72,36 +51,38 @@ namespace Content.Server.GameObjects.Components.Movement
|
||||
/// </summary>
|
||||
public void TryMoveTo(Vector2 from, Vector2 to)
|
||||
{
|
||||
if (Body == null) return;
|
||||
if (Body == null)
|
||||
return;
|
||||
|
||||
var velocity = (to - from).Length;
|
||||
|
||||
if (velocity <= 0.0f) return;
|
||||
|
||||
Body.ApplyLinearImpulse((to - from).Normalized * velocity * 400);
|
||||
OwnerIsTransitioning = true;
|
||||
|
||||
Owner.SpawnTimer((int) (BufferTime * 1000), () =>
|
||||
{
|
||||
if (Deleted) return;
|
||||
OwnerIsTransitioning = false;
|
||||
});
|
||||
_climbController = Body.EnsureController<ClimbController>();
|
||||
_climbController.TryMoveTo(from, to);
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (!IsClimbing || _gameTiming.CurTime < TimeSpan.FromSeconds(BufferTime) + StartClimbTime)
|
||||
{
|
||||
if (!IsClimbing || Body == null)
|
||||
return;
|
||||
|
||||
if (_climbController != null && (_climbController.IsBlocked || !_climbController.IsActive))
|
||||
{
|
||||
if (Body.TryRemoveController<ClimbController>())
|
||||
{
|
||||
_climbController = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (!IsOnClimbableThisFrame && IsClimbing)
|
||||
if (IsClimbing)
|
||||
Body.WakeBody();
|
||||
|
||||
if (!IsOnClimbableThisFrame && IsClimbing && _climbController == null)
|
||||
IsClimbing = false;
|
||||
|
||||
IsOnClimbableThisFrame = false;
|
||||
}
|
||||
|
||||
public override ComponentState GetComponentState(ICommonSession player)
|
||||
{
|
||||
return new ClimbModeComponentState(_isClimbing, OwnerIsTransitioning);
|
||||
return new ClimbModeComponentState(_isClimbing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user