using System; using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Map; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; namespace Robust.Shared.GameObjects.Components.Map { /// /// Represents a world map inside the ECS system. /// public interface IMapComponent : IComponent { MapId WorldMap { get; } void ClearMapId(); } /// public class MapComponent : Component, IMapComponent { [ViewVariables(VVAccess.ReadOnly)] private MapId _mapIndex; /// public override string Name => "Map"; /// public override uint? NetID => NetIDs.MAP_MAP; /// public MapId WorldMap { get => _mapIndex; internal set => _mapIndex = value; } /// public void ClearMapId() { _mapIndex = MapId.Nullspace; } /// public override ComponentState GetComponentState() { return new MapComponentState(_mapIndex); } /// public override void HandleComponentState(ComponentState? curState, ComponentState? nextState) { base.HandleComponentState(curState, nextState); if (!(curState is MapComponentState state)) return; _mapIndex = state.MapId; ((TransformComponent) Owner.Transform).ChangeMapId(_mapIndex); } /// public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); serializer.DataField(ref _mapIndex, "index", MapId.Nullspace); } } /// /// Serialized state of a . /// [Serializable, NetSerializable] internal class MapComponentState : ComponentState { public MapId MapId { get; } public override uint NetID => NetIDs.MAP_MAP; public MapComponentState(MapId mapId) { MapId = mapId; } } }