//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);
     }
 }
예제 #2
0
 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);
 }
예제 #5
0
    /// <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);
    }
예제 #6
0
    /// <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);
    }
예제 #7
0
 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;
 }
예제 #8
0
    /// <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);
    }
예제 #9
0
    /// <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();
        }
    }
예제 #10
0
    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();
    }
예제 #11
0
    /// <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));
    }