using System.Collections.Generic; using Robust.Shared.GameStates; using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Maths; using Robust.Shared.Network; using Robust.Shared.Physics.Systems; using Robust.Shared.Timing; namespace Robust.Shared.GameObjects { public abstract partial class SharedMapSystem : EntitySystem { [Dependency] private readonly ITileDefinitionManager _tileMan = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] protected readonly IMapManager MapManager = default!; [Dependency] private readonly IMapManagerInternal _mapInternal = default!; [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly FixtureSystem _fixtures = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; private EntityQuery _xformQuery; public override void Initialize() { base.Initialize(); _xformQuery = GetEntityQuery(); InitializeMap(); InitializeGrid(); SubscribeLocalEvent(OnMapLightGetState); SubscribeLocalEvent(OnMapLightHandleState); } } /// /// Arguments for when a map is created or deleted. /// public sealed class MapChangedEvent : EntityEventArgs { public EntityUid Uid; /// /// Creates a new instance of this class. /// public MapChangedEvent(EntityUid uid, MapId map, bool created) { Uid = uid; Map = map; Created = created; } /// /// Map that is being modified. /// public MapId Map { get; } /// /// The map is being created. /// public bool Created { get; } /// /// The map is being destroyed (not ). /// public bool Destroyed => !Created; } #pragma warning disable CS0618 public sealed class GridStartupEvent : EntityEventArgs { public EntityUid EntityUid { get; } public GridStartupEvent(EntityUid uid) { EntityUid = uid; } } public sealed class GridRemovalEvent : EntityEventArgs { public EntityUid EntityUid { get; } public GridRemovalEvent(EntityUid uid) { EntityUid = uid; } } /// /// Raised whenever a grid is being initialized. /// public sealed class GridInitializeEvent : EntityEventArgs { public EntityUid EntityUid { get; } public GridInitializeEvent(EntityUid uid) { EntityUid = uid; } } #pragma warning restore CS0618 /// /// Raised whenever a grid is Added /// public sealed class GridAddEvent : EntityEventArgs { public EntityUid EntityUid { get; } public GridAddEvent(EntityUid uid) { EntityUid = uid; } } /// /// Arguments for when a single tile on a grid is changed locally or remotely. /// [ByRefEvent] public readonly record struct TileChangedEvent { /// /// Creates a new instance of this class. /// public TileChangedEvent(EntityUid uid, TileRef newTile, Tile oldTile, Vector2i chunkIndex) { Entity = uid; NewTile = newTile; OldTile = oldTile; ChunkIndex = chunkIndex; } /// /// EntityUid of the grid with the tile-change. TileRef stores the GridId. /// public readonly EntityUid Entity; /// /// New tile that replaced the old one. /// public readonly TileRef NewTile; /// /// Old tile that was replaced. /// public readonly Tile OldTile; /// /// The index of the grid-chunk that this tile belongs to. /// public readonly Vector2i ChunkIndex; } }