Ejemplo n.º 1
0
    public void SaveFileWasLoaded(BuildingsOnMap[] saveFileBuildingsData, RoadsOnMap[] saveFileRoadsData)
    {
        // Removes existing buildings first
        RemoveAllBuildingsFromMap_Quietly();

        BaseBuildingsClass savedBuilding = null;
        Vector3            savedPosition = Vector3.zero;

        for (int i = 0; i < saveFileBuildingsData.Length; ++i)
        {
            savedPosition.x = saveFileBuildingsData[i].worldPosX;
            savedPosition.y = saveFileBuildingsData[i].worldPosY;
            savedBuilding   = Instantiate(BuildingDataBase.GetInstance().GetBaseBuildingGO(), savedPosition, Quaternion.identity).GetComponent <BaseBuildingsClass>();
            savedBuilding.SetNewBuildingType(BuildingDataBase.GetInstance().GetBuildingData((BuildingDataBase.BUILDINGS)saveFileBuildingsData[i].buildingType));
            PlaceBuildingToGrid(ref savedBuilding);
        }

        //do the same for the roads
        for (int i = 0; i < saveFileRoadsData.Length; ++i)
        {
            savedPosition.x = saveFileRoadsData[i].worldPosX;
            savedPosition.y = saveFileRoadsData[i].worldPosY;
            savedBuilding   = Instantiate(BuildingDataBase.GetInstance().GetBaseBuildingGO(), savedPosition, Quaternion.identity).GetComponent <BaseBuildingsClass>();
            savedBuilding.SetNewBuildingType(BuildingDataBase.GetInstance().GetBuildingData(BuildingDataBase.BUILDINGS.B_ROAD));

            //set to the correct road direction sprite
            RoadTypeList roadType = (RoadTypeList)saveFileRoadsData[i].roadType;
            savedBuilding.SetSprite(BuildingDataBase.GetInstance().GetRoadSprite(roadType));
            StoreLoadedRoads(savedBuilding, roadType);
        }
    }
Ejemplo n.º 2
0
 // Start is called before the first frame update
 void Start()
 {
     if (m_buildClass)
     {
         buildingData = BuildingDataBase.GetInstance().GetBuildingData(m_buildClass.GetBuildingType());
     }
 }
    private void Awake()
    {
        if (m_Instance != null)
        {
            Destroy(gameObject);
            return;
        }
        m_Instance = this;
        DontDestroyOnLoad(gameObject);

        // Check for duplicates
        int counter;

        for (int i = 0; i < (int)BUILDINGS.B_TOTAL; ++i)
        {
            counter = 0;
            foreach (BuildingData baseBuilding in m_ListOfBuildingSO)
            {
                if (baseBuilding.GetBuildingType() == (BUILDINGS)i)
                {
                    counter++;
                }
            }

            // Check for missing Buildings or duplicated buildingIDs
            if (counter != 1)
            {
                // 2 ScriptableObjects share the same BuildingID
                if (counter > 1)
                {
                    Debug.LogError("Duplicate Enum ID in BUILDING Database!! \nDuplicated ID is: " + (BUILDINGS)i);
                }
                // Missing Building ScriptableObject
                else if (counter == 0)
                {
                    Debug.LogError("Missing Building ScriptableObject in BUILDING Database!! \nMissing ID is: " + (BUILDINGS)i);
                }

                Debug.LogError("DataBase is NOT GENERATED. \nCHECK your BuildingDataBase Again!");
                Debug.LogError("FIX THIS NOW!");
                return;
            }
        }
        // If no duplicates or missing buildings, convert to Dictionary
        foreach (BuildingData baseBuilding in m_ListOfBuildingSO)
        {
            m_DictOfBuildingSO[baseBuilding.GetBuildingType()] = baseBuilding;
        }

        //store the road types in a dictionary
        foreach (RoadTypeInfo roadInfo in m_RoadSpriteInfo)
        {
            m_DictRoadTypeSprites.Add(roadInfo.m_RoadType, roadInfo.m_RoadSprite);
        }

        m_ListOfBuildingSO.Clear();
    }
Ejemplo n.º 4
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));
 }
Ejemplo n.º 5
0
 /// <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);
     }
 }
Ejemplo n.º 6
0
 /// <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);
 }
Ejemplo n.º 7
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);
    }
Ejemplo n.º 8
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);
    }
Ejemplo n.º 9
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);
    }
Ejemplo n.º 10
0
    public void SetRoadSprite(Vector2Int key, RoadTypeList type)
    {
        BaseBuildingsClass road = m_RoadSpriteRendererMap[key];

        road.SetSprite(BuildingDataBase.GetInstance().GetRoadSprite(type));

        //change and store the road type
        int indexConverted = Convert2DToIntIndex(key);

        if (m_RoadMap.ContainsKey(indexConverted))
        {
            m_RoadMap[indexConverted] = type;
        }
    }
Ejemplo n.º 11
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();
        }
    }
Ejemplo n.º 12
0
    private void Awake()
    {
        if (m_Instance != null)
        {
            Destroy(gameObject);
            return;
        }
        m_Instance = this;
        DontDestroyOnLoad(gameObject);
        m_GridTakenArray = new List <bool>();

        // Placement and Removal
        m_TemplateBuilding = Instantiate(BuildingDataBase.GetInstance().GetBaseBuildingGO(), Camera.main.transform.position, Quaternion.identity).GetComponent <BaseBuildingsClass>();
        m_TemplateBuilding.SetSpriteObjectLayer(LayerMask.NameToLayer("BuildingPlaceRef"));
        m_ListOfBuildingsToRemove = new List <BaseBuildingsClass>();

        // Parent the m_GridGO
        m_GridGO.transform.parent = transform;
    }
Ejemplo n.º 13
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));
    }
Ejemplo n.º 14
0
    // Start is called before the first frame update
    public void Init()
    {
        //get from the building database the different buildings
        //make an array of list to store the different categories
        List <BuildingData>[] tempBuildingDataStorage = new List <BuildingData> [(int)ShopItemType.TOTAL_TYPE];
        for (int i = 0; i < (int)ShopItemType.TOTAL_TYPE; ++i)
        {
            tempBuildingDataStorage[i] = new List <BuildingData>();
        }

        //add the buildings to the correct category
        for (int i = 0; i < (int)BuildingDataBase.BUILDINGS.B_TOTAL; ++i)
        {
            BuildingData buildingData = BuildingDataBase.GetInstance().GetBuildingData((BuildingDataBase.BUILDINGS)(i));
            if (buildingData == null)
            {
                return;
            }

            //item not suppose to be in shop
            if (!buildingData.GetIsSoldInShop())
            {
                continue;
            }

            //add the building into the correct category
            tempBuildingDataStorage[(int)buildingData.GetShopItemType()].Add(buildingData);
        }

        for (int i = 0; i < (int)ShopItemType.TOTAL_TYPE; ++i)
        {
            //sort the buildings
            SortBuildings sortBuildings = new SortBuildings();
            tempBuildingDataStorage[i].Sort(sortBuildings);

            //make sure parent exist first
            if (i >= m_ShopCategoriesParents.Length)
            {
                break;
            }

            //spawn the prefabs and add to the correct parent
            foreach (BuildingData buildingData in tempBuildingDataStorage[i])
            {
                GameObject itemCard = GameObject.Instantiate(m_ItemCardUIPrefab, m_ShopCategoriesParents[i]);

                //init the UI with the building info accordingly
                ShopItemCardUI shopItemCardUI = itemCard.GetComponent <ShopItemCardUI>();
                if (shopItemCardUI == null)
                {
                    continue;
                }

                shopItemCardUI.Init(buildingData);
            }

            //clear the list
            tempBuildingDataStorage[i].Clear();
        }

        //set the shop category inactive and active accordingly
        InitCategoryShown(m_DefaultShopCategory);
    }
Ejemplo n.º 15
0
    public void ZeroRoadAround(Vector2Int key)
    {
        BaseBuildingsClass road = m_RoadSpriteRendererMap[key];

        road.SetSprite(BuildingDataBase.GetInstance().GetRoadSprite(RoadTypeList.NO_CONNECTION));
    }