using System; using Content.Shared.Sound; using Robust.Shared.GameObjects; using Robust.Shared.GameStates; using Robust.Shared.Log; using Robust.Shared.Players; using Robust.Shared.Serialization; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; namespace Content.Shared.Gravity { [RegisterComponent] [NetworkedComponent] public sealed class GravityComponent : Component { public override string Name => "Gravity"; [DataField("gravityShakeSound")] public SoundSpecifier GravityShakeSound { get; set; } = new SoundPathSpecifier("/Audio/Effects/alert.ogg"); [ViewVariables(VVAccess.ReadWrite)] public bool Enabled { get => _enabled; set { if (_enabled == value) return; _enabled = value; if (_enabled) { Logger.Info($"Enabled gravity for {Owner}"); } else { Logger.Info($"Disabled gravity for {Owner}"); } Dirty(); } } private bool _enabled; public override ComponentState GetComponentState(ICommonSession player) { return new GravityComponentState(_enabled); } public override void HandleComponentState(ComponentState? curState, ComponentState? nextState) { base.HandleComponentState(curState, nextState); if (curState is not GravityComponentState state) return; Enabled = state.Enabled; } [Serializable, NetSerializable] protected sealed class GravityComponentState : ComponentState { public bool Enabled { get; } public GravityComponentState(bool enabled) { Enabled = enabled; } } } }