public virtual void Add(T gridMember) { Size.Invalidate(); // Assign controller reference if (gridMember.GetIsController() && Controller == null) { Controller = gridMember; } GridMembers.Add(gridMember); gridMember.AddGridTotals(Totals); // Get grid positions of blueprint block var tilePositions = GridUtils.GetOccupiedTilesByAnchor(gridMember); EnsureNeighbourKeyIsCreated(gridMember); // Add neighbour references foreach (var neighbour in this.GetNeighbours(tilePositions)) { NeighbourDict[neighbour].Add(gridMember); NeighbourDict[gridMember].Add(neighbour); } foreach (var tilePosition in tilePositions) { OccupiedTiles.Add(tilePosition, gridMember); } }
public virtual T Remove(Vector2Int key) { Size.Invalidate(); var gridMember = GetMember(key); // Remove controller reference if (ReferenceEquals(gridMember, Controller)) { Controller = default; } var tilePositions = GridUtils.GetOccupiedTilesByAnchor(gridMember); GridMembers.Remove(gridMember); gridMember.RemoveGridTotals(Totals); // Remove neighbour references foreach (var neighbour in NeighbourDict[gridMember]) { NeighbourDict[neighbour].Remove(gridMember); } NeighbourDict.Remove(gridMember); foreach (var occupiedTile in tilePositions) { OccupiedTiles.Remove(occupiedTile); } return(gridMember); }
public bool HasOverlap(IEnumerable <Vector2Int> gridPositions) { return(OccupiedTiles .Select(item => item.Key) .Intersect(gridPositions) .Any()); }
protected override void OnAdded() { base.OnAdded(); Position = footprint.CenterPosition; OccupiedTiles.ForEach((tile) => Game.Geometry.SetBuilding(tile, this)); }
protected void Awake() { _gridObjectManager = FindObjectOfType <GridObjectManager>(); HealthObj = GetComponentInChildren <HealthComponent>(); HealthObj.OnHealthChanged += HealthChanged; // if this has no tiles, add the main tile if (OccupiedTiles.Count == 0) { OccupiedTiles.Add(Vector2Int.zero); } }
public bool ContainsMember(Vector2Int gridPos) { return(OccupiedTiles.ContainsKey(gridPos)); }
protected override void OnDelete() { OccupiedTiles.ForEach((tile) => Game.Geometry.SetBuilding(tile, null)); }