* Readonly, typos and redundant string interpolations * Namespaces * Optimize imports * Address reviews * but actually * Localize missing strings * Remove redundant vars
67 lines
1.9 KiB
C#
67 lines
1.9 KiB
C#
using System;
|
|
using Content.Shared.GameObjects.EntitySystems;
|
|
using Content.Shared.Physics;
|
|
using Robust.Shared.GameObjects;
|
|
using Robust.Shared.GameObjects.Components;
|
|
using Robust.Shared.Physics;
|
|
using Robust.Shared.Serialization;
|
|
|
|
namespace Content.Shared.GameObjects.Components.Movement
|
|
{
|
|
public abstract class SharedClimbingComponent : Component, IActionBlocker, ICollideSpecial
|
|
{
|
|
public sealed override string Name => "Climbing";
|
|
public sealed override uint? NetID => ContentNetIDs.CLIMBING;
|
|
|
|
protected ICollidableComponent Body;
|
|
protected bool IsOnClimbableThisFrame = false;
|
|
|
|
protected bool OwnerIsTransitioning
|
|
{
|
|
get
|
|
{
|
|
if (Body.TryGetController<ClimbController>(out var controller))
|
|
{
|
|
return controller.IsActive;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public abstract bool IsClimbing { get; set; }
|
|
|
|
bool IActionBlocker.CanMove() => !OwnerIsTransitioning;
|
|
bool IActionBlocker.CanChangeDirection() => !OwnerIsTransitioning;
|
|
|
|
bool ICollideSpecial.PreventCollide(IPhysBody collided)
|
|
{
|
|
if (((CollisionGroup)collided.CollisionLayer).HasFlag(CollisionGroup.VaultImpassable) && collided.Entity.HasComponent<IClimbable>())
|
|
{
|
|
IsOnClimbableThisFrame = true;
|
|
return IsClimbing;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
Owner.TryGetComponent(out Body);
|
|
}
|
|
|
|
[Serializable, NetSerializable]
|
|
protected sealed class ClimbModeComponentState : ComponentState
|
|
{
|
|
public ClimbModeComponentState(bool climbing) : base(ContentNetIDs.CLIMBING)
|
|
{
|
|
Climbing = climbing;
|
|
}
|
|
|
|
public bool Climbing { get; }
|
|
}
|
|
}
|
|
}
|