Exemple #1
0
        private bool check_item_destroy <T>(T item) where T : Item
        {
            //gameObject must be destroyed
            if (item.gameObject != null)
            {
                return(false);
            }

            //check that event was rised
            if (_OnDestroyedWasCalled == false)
            {
                return(false);
            }

            //check tile contents
            if (Utils.TileAt(item.Position).Contents.Item == item)
            {
                return(false);
            }

            //check region contents
            if (Utils.NodeAt(item.Position).Subregion.Content.Get <T>().Contains(item))
            {
                return(false);
            }

            //check stockpile manager lists
            if (StockpileManager.GetInstance().otherItems.Contains(item) ||
                StockpileManager.GetInstance().stockpileItems.Contains(item))
            {
                return(false);
            }

            return(true);
        }
Exemple #2
0
 public void RemovePart(StockpilePart part)
 {
     _parts.Remove(part);
     if (_parts.Count == 0)
     {
         StockpileManager.GetInstance().RemoveStockpile(this);
     }
 }
    public StockpilePart(Vector2Int position, Stockpile parent)
    {
        this.position  = position;
        this.parent    = parent;
        gameObject     = Factory.Create("stockpile part", this.position);
        spriteRenderer = gameObject.GetComponent <SpriteRenderer>();
        parent.AddPart(this);

        if (HasItem)
        {
            StockpileManager.GetInstance().AddItemToStockpiles(GetItem);
        }
    }
 public void DeleteStockpilePart()
 {
     //destroy gameObject
     GameObject.Destroy(gameObject);
     //remove from stockpile
     if (HasItem)
     {
         StockpileManager.GetInstance().RemoveItemFromStockpiles(GetItem);
     }
     parent.RemovePart(this);
     Utils.TileAt(position).Contents.RemoveStockpilePart();
     //reset existing hauling jobs to this stockpile part
     TryDeletingHaulingJob();
 }
    public static void CreateStockpileOnTiles(List <Tile> tiles)
    {
        Stockpile stockpile = new Stockpile();

        foreach (Tile tile in tiles)
        {
            if (tile.Contents.StockpilePart is null)
            {
                tile.Contents.SetStockpilePart(new StockpilePart(tile.Position, stockpile));
            }
            else
            {
                tile.Contents.StockpilePart.ChangeStockpiles(stockpile);
            }
        }
        StockpileManager.GetInstance().AddStockpile(stockpile);
    }
Exemple #6
0
    public void PutOnTile()
    {
        bool RequirementsFunction(Tile t) => t != null && !t.Contents.HasItem && t.IsTraversable;

        var tile = SearchEngine.FindClosestTileWhere(Position, RequirementsFunction, Utils.TileAt(Position).IsTraversable);

        if (tile != null)
        {
            SetPosition(tile.Position);
            tile.Contents.PutItemOnTile(this);
            AddToRegionContent();
            StockpileManager.GetInstance().AddItem(this);
        }
        else
        {
            Destroy();
        }
    }
Exemple #7
0
 public void RemoveFromTile()
 {
     Utils.TileAt(Position).Contents.RemoveItemFromTile();
     RemoveFromRegionContent();
     StockpileManager.GetInstance().RemoveItem(this);
 }
Exemple #8
0
        private bool check_item_initialization <T>(T item, bool positionMustDiffer) where T : Item
        {
            //check data
            if (item.Data is null)
            {
                return(false);
            }

            //check position
            //if item was spawned in available position
            if (positionMustDiffer == false)
            {
                if (item.Position != _spawnPosition)
                {
                    Assert.Fail();
                }

                if (item.gameObject.transform.position != Utils.ToVector3(_spawnPosition))
                {
                    Assert.Fail();
                }
            }
            else
            {
                if (item.Position == _spawnPosition)
                {
                    Assert.Fail();
                }
            }

            //check tile content
            if (Utils.TileAt(item.Position).Contents.Item != item)
            {
                Assert.Fail();
            }

            //check region content
            RegionContent rc = Utils.NodeAt(item.Position).Subregion.Content;

            if (rc.Get <T>().Contains(item) == false)
            {
                Assert.Fail();
            }

            //check stockpile manager lists
            if (Utils.TileAt(item.Position).Contents.StockpilePart is null)
            {
                if (StockpileManager.GetInstance().otherItems.Contains(item) == false)
                {
                    Assert.Fail();
                }
            }
            else
            {
                if (StockpileManager.GetInstance().stockpileItems.Contains(item) == false)
                {
                    Assert.Fail();
                }
            }

            return(true);
        }