void SetMovingBuildingToGridPosition() { // Calculate actual Position on Grid BaseMapClass gridLayout = MapManager.GetInstance().GetCurrentMap(); // Follow Camera Position Vector3Int gridPos = gridLayout.GetTileMapCom().WorldToCell(Camera.main.transform.position + (Vector3)m_MovingPlacedBuildingOffset); Vector3 newPos = gridLayout.GetTileMapCom().CellToWorld(gridPos); newPos += gridLayout.GetTileMapCom().cellSize * 0.5f; MapManager.GetInstance().GetBuildingToMove().transform.position = newPos; }
/// <summary> /// Creates a new TileMap /// </summary> /// <param name="mapType"></param> /// <returns></returns> public bool CreateNewMap(MapDataBase.MAPS mapType) { // Create new Tilemap, parented under and positioned at m_GridGO GameObject mapObject = MapDataBase.GetInstance().GetMapGO(mapType); mapObject = Instantiate(mapObject, m_GridGO.transform.position, Quaternion.identity, m_GridGO.transform); m_currentMap = mapObject.GetComponent <BaseMapClass>(); // Resize the layout Array int totalSize = m_currentMap.GetTileMapSize().x *m_currentMap.GetTileMapSize().y; m_GridTakenArray.Clear(); m_GridTakenArray.Capacity = totalSize; // Set the capactiy to prevent calling Array.Resize() multiple times for (int i = 0; i < totalSize; ++i) { m_GridTakenArray.Add(false); } // Center the Camera to the map Vector3 centerMapWorldPos = m_GridGO.CellToWorld((Vector3Int)m_currentMap.GetTileMapSize() / 2); centerMapWorldPos += m_GridGO.cellSize * 0.5f; centerMapWorldPos.z = -10.0f; Camera.main.transform.position = centerMapWorldPos; // Fire the Map Generated Event OnMapGenerated(); //Get starting route from one of the routes build at spawn List <MapStartingBuildings> startingBuildingsList = m_currentMap.GetStartingBuildings(); Vector2Int mainRoadPos = Vector2Int.zero; foreach (MapStartingBuildings startingbuild in startingBuildingsList) { if (startingbuild.buildingID == BuildingDataBase.BUILDINGS.B_ROAD) { mainRoadPos = startingbuild.spawnGridPositions[0]; break; } } m_RoadManager.Init(m_currentMap.GetTileMapSize(), mainRoadPos); return(true); }
/// <summary> /// Attempts to place a new Building of type buildingID into the map /// WITHOUT checking and deducting if have resources needed /// </summary> /// <param name="spawnWorldPosition">World position of the Building</param> /// <param name="buildingID">What type of building to place</param> /// <returns></returns> public BaseBuildingsClass PlaceNewBuildingIntoMap_WithoutResources(Vector2 spawnWorldPosition, BuildingDataBase.BUILDINGS buildingID) { // Convert World to Grid Coordinates BaseMapClass gridLayout = GetCurrentMap(); Vector3Int gridPos = gridLayout.GetTileMapCom().WorldToCell(spawnWorldPosition); spawnWorldPosition = gridLayout.GetTileMapCom().CellToWorld(gridPos); spawnWorldPosition += (Vector2)gridLayout.GetTileMapCom().cellSize * 0.5f; // Check if we can place building Down Vector3 buildingBottomLeft = spawnWorldPosition + BuildingDataBase.GetInstance().GetBuildingData(buildingID).GetBottomLeftCorner_PositionOffset(); Vector2Int buildingSize = BuildingDataBase.GetInstance().GetBuildingData(buildingID).GetBuildingSizeOnMap(); if (!CanPlaceBuildingOnMap(buildingBottomLeft, buildingSize)) { Debug.LogError("Unable to Place Building, Canceling..."); return(null); } // Create the Building return(PlaceBuildingToGrid(spawnWorldPosition, buildingID)); }
public void Init() { //set the building grid background accordingly BaseMapClass map = MapManager.GetInstance().GetCurrentMap(); if (map != null) { Vector2Int size = map.GetTileMapSize(); if (m_Grid != null) { m_Grid.transform.localScale = new Vector3(size.x, size.y, 1.0f); } if (m_GridMaterial != null) { m_GridMaterial.SetVector("_Tiling", new Vector4(size.x, size.y, 1.0f, 1.0f)); } } m_Grid.SetActive(false); }