//when player is placing down deco or buildings public void PlayerInBuildModeUI(bool buildModeActive, BuildingDataBase.BUILDINGS buildingType = BuildingDataBase.BUILDINGS.B_LAVA) { //open the brush mode if (MapManager.GetInstance() != null) { MapManager.GetInstance().SetPlacementBrush(buildModeActive, buildingType); } }
public void IncrementPlacingBuildingID() { m_TemplateBuildingID += 1; if (m_TemplateBuildingID >= BuildingDataBase.BUILDINGS.B_TOTAL) { m_TemplateBuildingID = BuildingDataBase.BUILDINGS.B_POND; } m_TemplateBuilding.SetNewBuildingType(BuildingDataBase.GetInstance().GetBuildingData(m_TemplateBuildingID)); }
/// <summary> /// Deducts your current resources against the resourcesNeeded for the buildingType /// </summary> /// <param name="buildingID"></param> public void DeductResourcesFromBuildingData(BuildingDataBase.BUILDINGS buildingID) { foreach (ResourcesNeeded resourceNeeded in BuildingDataBase.GetInstance().GetBuildingData(buildingID).GetResourcesNeeded()) { if (!resourceNeeded.toDeduct) { continue; } SetResource(resourceNeeded.resourceID, GetResource(resourceNeeded.resourceID) - resourceNeeded.amount); } }
/// <summary> /// Returns if you have enough resources to place the building /// </summary> /// <param name="buildingID">What type of building to check against</param> /// <returns></returns> public bool EnoughResourcesForBuilding(BuildingDataBase.BUILDINGS buildingID) { foreach (ResourcesNeeded resourceNeeded in BuildingDataBase.GetInstance().GetBuildingData(buildingID).GetResourcesNeeded()) { if (GetResource(resourceNeeded.resourceID) < resourceNeeded.amount) { return(false); } } return(true); }
/// <summary> /// Creates a new Building GO and tries to place it into the Grid. /// Destroys Building GO if unable to and returns null, returns the newly created GO otherwise /// </summary> /// <param name="spawnWorldPos">Where to spawn the Building (Transform's Position)</param> /// <param name="buildingID">What type of Building</param> /// <param name="doCheckingGridTaken">Are any of the spots taken by another building already?</param> /// <returns></returns> BaseBuildingsClass PlaceBuildingToGrid(Vector2 spawnWorldPos, BuildingDataBase.BUILDINGS buildingID, bool doCheckingGridTaken = false) { // Check if we need to create a Custom Building GO BaseBuildingsClass newBuilding = null; if (BuildingDataBase.GetInstance().GetBuildingData(buildingID).GetOwnCustomBuildingObject()) { GameObject customBuilding = BuildingDataBase.GetInstance().GetBuildingData(buildingID).GetOwnCustomBuildingObject(); newBuilding = Instantiate(customBuilding, spawnWorldPos, Quaternion.identity).GetComponent <BaseBuildingsClass>(); } else { newBuilding = Instantiate(BuildingDataBase.GetInstance().GetBaseBuildingGO(), spawnWorldPos, Quaternion.identity).GetComponent <BaseBuildingsClass>(); } newBuilding.SetNewBuildingType(BuildingDataBase.GetInstance().GetBuildingData(buildingID)); Vector3 buildingBottomLeftWorldPos = newBuilding.GetBottomLeftGridPosition(); Vector2Int buildingSize = newBuilding.GetBuildingSizeOnMap(); // Can we place it there? if (doCheckingGridTaken) { if (!CanPlaceBuildingOnMap(buildingBottomLeftWorldPos, buildingSize)) { Destroy(newBuilding.gameObject); return(null); } } // Set all the grids taken by new building to true SetGridTakenArray(buildingBottomLeftWorldPos, buildingSize, true); AddBuildingIntoTrackingDictionary(newBuilding); //roads and buildings store accordingly newBuilding.BuildingPlaced(); // Change Sprite Layer back to default newBuilding.SetSpriteObjectLayer(0); newBuilding.gameObject.name = BuildingDataBase.GetInstance().GetBuildingData(buildingID).GetBuildingName(); // Set Sprite's Sorting Order int newOrder = (int)newBuilding.GetBottomLeftGridPosition().y; newOrder = -newOrder; newBuilding.SetSpriteSortingOrder(newOrder); //set the correct parent if (newBuilding.GetBuildingType() == BuildingDataBase.BUILDINGS.B_ROAD) { newBuilding.gameObject.transform.SetParent(m_RoadParent); } else { newBuilding.gameObject.transform.SetParent(m_BuildingParent); } return(newBuilding); }
/// <summary> /// Tries to place a Building into the Grid from it's world Position. /// Returns null if Unable to, returns the newly created GO otherwise /// </summary> /// <param name="activeBuildingCom">The Building GO to place</param> /// <param name="doCheckingGridTaken">Are any of the spots taken by another building already?</param> /// <returns></returns> BaseBuildingsClass PlaceBuildingToGrid(ref BaseBuildingsClass activeBuildingCom, bool doCheckingGridTaken = false) { // Check if we need to create a Custom Building GO if (BuildingDataBase.GetInstance().GetBuildingData(activeBuildingCom.GetBuildingType()).GetOwnCustomBuildingObject()) { Vector3 buildingPos = activeBuildingCom.transform.position; BuildingDataBase.BUILDINGS buildingID = activeBuildingCom.GetBuildingType(); Destroy(activeBuildingCom.gameObject); GameObject customBuilding = BuildingDataBase.GetInstance().GetBuildingData(buildingID).GetOwnCustomBuildingObject(); activeBuildingCom = Instantiate(customBuilding, buildingPos, Quaternion.identity).GetComponent <BaseBuildingsClass>(); activeBuildingCom.SetNewBuildingType(BuildingDataBase.GetInstance().GetBuildingData(buildingID)); } Vector3 buildingBottomLeftWorldPos = activeBuildingCom.GetBottomLeftGridPosition(); Vector2Int buildingSize = activeBuildingCom.GetBuildingSizeOnMap(); //Debug.Log("GRID POS: " + m_GridGO.WorldToCell(buildingWorldPos)); // Can we place it there? if (doCheckingGridTaken) { if (!CanPlaceBuildingOnMap(buildingBottomLeftWorldPos, buildingSize)) { return(null); } } // Set all the grids taken by new building to true SetGridTakenArray(buildingBottomLeftWorldPos, buildingSize, true); AddBuildingIntoTrackingDictionary(activeBuildingCom); //roads and buildings store accordingly activeBuildingCom.BuildingPlaced(); // Change Sprite Layer back to building layer activeBuildingCom.SetSpriteObjectLayer(0); activeBuildingCom.gameObject.name = BuildingDataBase.GetInstance().GetBuildingData(activeBuildingCom.GetBuildingType()).GetBuildingName(); // Set Sprite's Sorting Order int newOrder = (int)activeBuildingCom.GetBottomLeftGridPosition().y; newOrder = -newOrder; activeBuildingCom.SetSpriteSortingOrder(newOrder); //set the correct parent if (activeBuildingCom.GetBuildingType() == BuildingDataBase.BUILDINGS.B_ROAD) { activeBuildingCom.gameObject.transform.SetParent(m_RoadParent); } else { activeBuildingCom.gameObject.transform.SetParent(m_BuildingParent); } return(activeBuildingCom); }
public virtual void SetNewBuildingType(BuildingData buildingData) { // Other Data m_BuildingType = buildingData.GetBuildingType(); m_BuildingSize = buildingData.GetBuildingSizeOnMap(); m_SpriteSize = buildingData.GetBuildingSpriteSize(); // Sprite m_BuildingSpriteRenderer.gameObject.transform.localPosition = buildingData.GetSpriteGO_PositionOffset(); m_BuildingSpriteRenderer.sprite = buildingData.GetBuildingSprite(); // Collider m_Collider.size = buildingData.GetBuildingSpriteSize(); m_BottomLeftCornerOffset = buildingData.GetBottomLeftCorner_PositionOffset(); m_RoadOffset = buildingData.GetRoadOffset; }
/// <summary> /// Places the Template Building into the Map /// </summary> /// <param name="doChecking">Are any of the spots taken by another building already?</param> /// <returns></returns> public BaseBuildingsClass PlaceTemplateBuilding(bool doChecking = false) { BaseBuildingsClass PlacedBuilding = PlaceBuildingToGrid(ref m_TemplateBuilding, doChecking); // Success in placing building, Deduct resources ResourceManager.GetInstance().DeductResourcesFromBuildingData(m_TemplateBuildingID); // Success in placing building, Create new building for next placment BuildingDataBase.BUILDINGS oldID = m_TemplateBuilding.GetBuildingType(); m_TemplateBuilding = Instantiate(BuildingDataBase.GetInstance().GetBaseBuildingGO(), Camera.main.transform.position, Quaternion.identity).GetComponent <BaseBuildingsClass>(); m_TemplateBuilding.SetNewBuildingType(BuildingDataBase.GetInstance().GetBuildingData(oldID)); m_TemplateBuilding.SetSpriteObjectLayer(LayerMask.NameToLayer("BuildingPlaceRef")); return(PlacedBuilding); }
/// <summary> /// Enables/Disables Placement Brush to be used for placing down New Buildings in Map. /// </summary> /// <param name="newValue">True=Enable, False=Disable</param> /// <param name="selectedBuildingID">What Building Type to Start with</param> public void SetPlacementBrush(bool newValue, BuildingDataBase.BUILDINGS selectedBuildingID = BuildingDataBase.BUILDINGS.B_POND) { m_PlacmentBrushActive = newValue; m_TemplateBuildingID = selectedBuildingID; if (m_PlacmentBrushActive) { m_TemplateBuilding.gameObject.SetActive(true); m_TemplateBuilding.SetNewBuildingType(BuildingDataBase.GetInstance().GetBuildingData(m_TemplateBuildingID)); PlayerOpenAddEditorMode(m_TemplateBuilding); } else { m_TemplateBuilding.gameObject.SetActive(false); PlayerCloseAddEditorMode(); } }
public void Init(BuildingData m_BuildingData) { if (m_BuildingData == null) { return; } //pass the building data type m_ItemNameText.SetText(m_BuildingData.GetBuildingName()); m_DescriptionText.SetText(m_BuildingData.GetBuildingDescription()); m_PriceText.SetText(m_BuildingData.GetPrice().ToString()); //TODO:: temp m_ItemImage.sprite = m_BuildingData.GetBuildingSprite(); m_BuildingType = m_BuildingData.GetBuildingType(); }
/// <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)); }