namespace TD.Core { /// /// Identifies a player slot in a match. Backed by byte to keep grid arrays compact. /// /// /// None is a sentinel value used in OwnerGrid to mark tiles not owned by any player zone. /// Player1..Player9 cover the maximum supported player count. Maps using fewer players use a /// contiguous prefix (e.g., a 3-player map uses Player1, Player2, Player3 only). /// public enum PlayerSlot : byte { None = 0, Player1 = 1, Player2 = 2, Player3 = 3, Player4 = 4, Player5 = 5, Player6 = 6, Player7 = 7, Player8 = 8, Player9 = 9, } /// /// Whether a volume permits tower placement on the tiles it covers. /// /// /// Defaults: Allowed for , Invalid for /// , , and /// . /// Composition rule when volumes overlap: "Invalid wins" — any tile covered by an Invalid volume /// becomes regardless of other volumes covering it. /// public enum PlacementValidity { Invalid = 0, Allowed = 1, } /// /// Cardinal direction for spawner facing. Used by gizmos (direction arrow) and may be used /// at runtime to bias initial enemy movement direction out of a spawner. /// public enum Direction { North, South, East, West, } /// /// Per-tile placement state in the baked PlacementGrid. /// /// /// Backed by byte so default-initialized arrays (all zero) start as Outside, which is /// the correct default for any tile not covered by an authoring volume. /// public enum PlacementState : byte { /// Tile is not covered by any authoring volume. Towers cannot be placed. Outside = 0, /// Tile is inside a player zone and not covered by any Invalid-validity volume. /// Towers can be placed here (subject to runtime checks: ownership, footprint, gold, path). Buildable = 1, /// Tile is covered by at least one Invalid-validity volume (spawner, leak exit, goal). /// Towers cannot be placed here. Note: this affects placement only; pathfinding still treats /// the tile as walkable. Restricted = 2, } /// /// Outcome of a bake operation, recorded on the baked asset. /// /// /// Failure is not represented here because failed bakes do not persist any state to the asset — /// the previous successful bake (if any) remains on disk untouched. Failure state lives in /// editor-only memory and is not part of the data schema. /// public enum BakeOutcome { Success, SuccessWithWarnings, } }