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); }
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); }
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(); } }
public void RemoveFromTile() { Utils.TileAt(Position).Contents.RemoveItemFromTile(); RemoveFromRegionContent(); StockpileManager.GetInstance().RemoveItem(this); }
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); }