public void SpawnBuilding(Vector3 mousePosition) { //TODO fix preconfigured ware house var storage = GetComponent <IStorage>(); var tile = mouseManager.GetClickedTile(mousePosition); if (tile is null) { return; } var requiredBuildingType = _buildingManager.GetCurrentPlacementBuilding(); var building = _buildingManager.GetBuildingOfType(requiredBuildingType); var moneyAvailable = _moneyPool >= building.GeneralBuildingStats.BuildCostMoney; var resourceAvailable = storage.GetResourceIfAvailable(ResourceType.Plank, building.GeneralBuildingStats.BuildCostPlanks); var allowedTileType = building.GeneralBuildingStats.AllowedTileTypes.Contains(tile.Type); if (moneyAvailable && resourceAvailable && allowedTileType) { _moneyPool -= building.GeneralBuildingStats.BuildCostMoney; building.ConstructOnTile(tile, storage); _buildingManager.AddPlacedBuilding(building); building.potentialFieldsList = _navigationManager.CreatePotentialFieldMapFor(building); } else { print($"Placement of building failed. allowed tile : {allowedTileType} , resources available {resourceAvailable} , money available {moneyAvailable}"); Destroy(building.gameObject); } }