Tile friction ECS (#8012)
* Tile friction ECS Removes some resolves which is really nice. * Velocity checks
This commit is contained in:
@@ -1,55 +1,14 @@
|
||||
using System;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Maths;
|
||||
using Robust.Shared.Players;
|
||||
using Robust.Shared.Serialization;
|
||||
using Robust.Shared.Serialization.Manager.Attributes;
|
||||
using Robust.Shared.ViewVariables;
|
||||
|
||||
namespace Content.Shared.Friction
|
||||
{
|
||||
[RegisterComponent]
|
||||
[Friend(typeof(SharedTileFrictionController))]
|
||||
public sealed class TileFrictionModifierComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// Multiply the tilefriction cvar by this to get the body's actual tilefriction.
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public float Modifier
|
||||
{
|
||||
get => _modifier;
|
||||
set
|
||||
{
|
||||
if (MathHelper.CloseToPercent(_modifier, value)) return;
|
||||
|
||||
_modifier = value;
|
||||
}
|
||||
}
|
||||
|
||||
[DataField("modifier")]
|
||||
private float _modifier = 1.0f;
|
||||
|
||||
public override ComponentState GetComponentState()
|
||||
{
|
||||
return new TileFrictionComponentState(_modifier);
|
||||
}
|
||||
|
||||
public override void HandleComponentState(ComponentState? curState, ComponentState? nextState)
|
||||
{
|
||||
base.HandleComponentState(curState, nextState);
|
||||
if (curState is not TileFrictionComponentState tileState) return;
|
||||
_modifier = tileState.Modifier;
|
||||
}
|
||||
|
||||
[NetSerializable, Serializable]
|
||||
private sealed class TileFrictionComponentState : ComponentState
|
||||
{
|
||||
public float Modifier;
|
||||
|
||||
public TileFrictionComponentState(float modifier)
|
||||
{
|
||||
Modifier = modifier;
|
||||
}
|
||||
}
|
||||
public float Modifier;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user