using System; using System.Collections.Generic; using System.Numerics; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; namespace Robust.Shared.Physics.Components; /// /// Average use-case of only linear velocity update /// [Serializable, NetSerializable] public record struct PhysicsLinearVelocityDeltaState : IComponentDeltaState { public Vector2 LinearVelocity; public void ApplyToFullState(PhysicsComponentState fullState) { fullState.LinearVelocity = LinearVelocity; } public PhysicsComponentState CreateNewFullState(PhysicsComponentState fullState) { var copy = new PhysicsComponentState(fullState) { LinearVelocity = LinearVelocity, }; return copy; } } /// /// 2nd-most typical usecase of just velocity updates /// [Serializable, NetSerializable] public record struct PhysicsVelocityDeltaState : IComponentDeltaState { public Vector2 LinearVelocity; public float AngularVelocity; public void ApplyToFullState(PhysicsComponentState fullState) { fullState.LinearVelocity = LinearVelocity; fullState.AngularVelocity = AngularVelocity; } public PhysicsComponentState CreateNewFullState(PhysicsComponentState fullState) { var copy = new PhysicsComponentState(fullState) { LinearVelocity = LinearVelocity, AngularVelocity = AngularVelocity }; return copy; } } [Serializable, NetSerializable] public sealed class PhysicsComponentState : IComponentState { public bool CanCollide; public bool SleepingAllowed; public bool FixedRotation; public BodyStatus Status; public Vector2 LinearVelocity; public float AngularVelocity; public BodyType BodyType; public float Friction; public float LinearDamping; public float AngularDamping; public Vector2 Force; public float Torque; public PhysicsComponentState() {} public PhysicsComponentState(PhysicsComponentState existing) { CanCollide = existing.CanCollide; SleepingAllowed = existing.SleepingAllowed; FixedRotation = existing.FixedRotation; Status = existing.Status; LinearVelocity = existing.LinearVelocity; AngularVelocity = existing.AngularVelocity; BodyType = existing.BodyType; Friction = existing.Friction; LinearDamping = existing.LinearDamping; AngularDamping = existing.AngularDamping; Force = existing.Force; Torque = existing.Torque; } }