Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
 public bool HasOverlap(IEnumerable <Vector2Int> gridPositions)
 {
     return(OccupiedTiles
            .Select(item => item.Key)
            .Intersect(gridPositions)
            .Any());
 }
Exemple #4
0
        protected override void OnAdded()
        {
            base.OnAdded();

            Position = footprint.CenterPosition;
            OccupiedTiles.ForEach((tile) => Game.Geometry.SetBuilding(tile, this));
        }
Exemple #5
0
    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);
        }
    }
Exemple #6
0
 public bool ContainsMember(Vector2Int gridPos)
 {
     return(OccupiedTiles.ContainsKey(gridPos));
 }
Exemple #7
0
 protected override void OnDelete()
 {
     OccupiedTiles.ForEach((tile) => Game.Geometry.SetBuilding(tile, null));
 }