Tile friction ECS (#8012)

* Tile friction ECS

Removes some resolves which is really nice.

* Velocity checks
This commit is contained in:
metalgearsloth
2022-05-08 16:02:42 +10:00
committed by GitHub
parent 1c6b83fe05
commit 8291c681ae
2 changed files with 49 additions and 56 deletions

View File

@@ -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;
}
}