public void SetGameObjectPrefab(UnityObject selectedPrefab) { unityObject = selectedPrefab; map.zoneSizeX = (int)unityObject.SizeInTiles().x; map.zoneSizeY = (int)unityObject.SizeInTiles().z; SetObjectPlacementMode(); map.zoneBrightness = Constants.INACTIVE_TILE; }
public bool PlaceGameObjectOnSelectedTile(BaseTile selectedTile, UnityObject _unityObject) { if (CheckRestrictions(selectedTile, _unityObject) && IsTileAvailable(selectedTile, _unityObject)) { UnityObject clone = Instantiate(_unityObject, selectedTile.transform); selectedTile.unityObject = clone; //deactivate surrounding Tiles regarding Objects size Vector3 sizeInTiles = _unityObject.SizeInTiles(); zoneSizeX = (int)sizeInTiles.x; zoneSizeY = (int)sizeInTiles.z; if (adminAccess) { this.UpdateZoneOfTiles(selectedTile.Coordinate, State.Available, State.Off); } else { this.UpdateZoneOfTiles(selectedTile.Coordinate, State.Available, State.Unavailable); } return(true); } return(false); }
private bool IsTileAvailable(BaseTile selectedTile, UnityObject unityObject) { Vector2Int coordinateInt = new Vector2Int((int)selectedTile.Coordinate.x, (int)selectedTile.Coordinate.y); int halfZoneSizeX = (int)(unityObject.SizeInTiles().x / 2.0); //round down int halfZoneSizeY = (int)(unityObject.SizeInTiles().z / 2.0); //round down //makes an uneven Zone symmetric int symmetricOffsetX = -1; if (unityObject.SizeInTiles().x % 2 == 0) { symmetricOffsetX = 0; } int symmetricOffsetY = -1; if (unityObject.SizeInTiles().z % 2 == 0) { symmetricOffsetY = 0; } for (int x = coordinateInt.x - halfZoneSizeX; x < coordinateInt.x + halfZoneSizeX - symmetricOffsetX; x++) { for (int y = coordinateInt.y - halfZoneSizeY; y < coordinateInt.y + halfZoneSizeY - symmetricOffsetY; y++) { if (!OutsideGrid(x, y)) { BaseTile tile = GetTileByCoordinates(x, y); if (tile.State == State.Unavailable || tile.State == State.Off) { return(false); } } else { return(false); } } } return(true); }