Пример #1
0
    private GameObject LoadInsideShop(WealthLevelShop wealthLevelShop, SizeShop sizeShop, float wealthValue)
    {
        GameObject[] shops;
        if (wealthLevelShop == WealthLevelShop.Poor)
        {
            shops = (sizeShop == SizeShop.Small) ? poorSmall : poorBig;
        }
        else if (wealthLevelShop == WealthLevelShop.Normal)
        {
            shops = (sizeShop == SizeShop.Small) ? normalSmall : normalBig;
        }
        else
        {
            shops = (sizeShop == SizeShop.Small) ? richSmall : richBig;
        }

        var shopDict = new Dictionary <GameObject, float>();

        foreach (var obj in shops)
        {
            shopDict.Add(obj, obj.GetComponent <ProceduralEntity>().wealthValue);
        }

        return(Instantiate(ProceduralCalculations.GetRandomTFromPool(shopDict, wealthValue)));
    }
Пример #2
0
    public void LoadShops(List <ObstructedLocation> obstructedLocations, float wealthLevel)
    {
        doorShopManager.Reset();

        int longSide  = 10;
        int shortSide = 7;

        WealthLevelShop choosenWealthLevelShop = (wealthLevel < tresholdPoorNormal)? WealthLevelShop.Poor :
                                                 ((wealthLevel < tresholdNormalRich)? WealthLevelShop.Normal : WealthLevelShop.Rich);

        GameObject[] choosenShops = (choosenWealthLevelShop == WealthLevelShop.Poor)? poorShops :
                                    ((choosenWealthLevelShop == WealthLevelShop.Normal)? normalShops : richShops);


        GameObject shopToPut;

        // 10 units for long
        // 7 units for short

        bool isShopObstructed;
        int  sideValue;
        int  middleObsIdx;

        GameObject shopParent;

        for (int h = 0; h < 2; h++)
        {
            bool isLong = (h == 0);
            sideValue        = (isLong) ? longSide : shortSide;
            isShopObstructed = (isLong)
                ? obstructedLocations.Contains(ObstructedLocation.Long)
                : obstructedLocations.Contains(ObstructedLocation.Short);
            middleObsIdx = (isLong) ? 4 : 2;

            for (int i = 0; i < 2; i++)
            {
                int        j   = 0;
                int        add = 0;
                SizeShop   choosenSizeShop;
                GameObject shop;



                while (j < sideValue)
                {
                    choosenSizeShop = SizeShop.Null;
                    if (j == middleObsIdx + 1 && isShopObstructed)
                    {
                        add       = 1;
                        shopToPut = noShops[0];
                    }
                    else if ((j == middleObsIdx && isShopObstructed) || (j == sideValue - 1))
                    {
                        add             = 1;
                        shopToPut       = choosenShops[0];
                        choosenSizeShop = SizeShop.Small;
                    }
                    else
                    {
                        if (ProceduralCalculations.GetRandomValue() < wealthLevel)
                        {
                            add             = 2;
                            shopToPut       = choosenShops[1];
                            choosenSizeShop = SizeShop.Big;
                        }
                        else
                        {
                            add             = 1;
                            shopToPut       = choosenShops[0];
                            choosenSizeShop = SizeShop.Small;
                        }
                    }


                    int x         = (isLong)? -100 + j * 20 : 100;
                    int z         = (isLong)? 70 : 70 - j * 20;
                    int yRotation = (isLong)? 0 : 90;

                    if (i == 1)
                    {
                        x        *= -1;
                        z        *= -1;
                        yRotation = (isLong)? 180 : 270;
                    }

                    j += add;



                    shopParent = new GameObject();
                    shopParent.transform.parent   = ProceduralManager.ParentMap;
                    shopParent.name               = "Shop";
                    shopParent.transform.position = new Vector3(x, 0, z);
                    shopToPut = Instantiate(shopToPut, shopParent.transform);
                    shopToPut.transform.position = new Vector3(x, 0, z);
                    shopToPut.transform.Rotate(0, yRotation, 0);

                    if (choosenSizeShop != SizeShop.Null)
                    {
                        shop = LoadInsideShop(choosenWealthLevelShop, choosenSizeShop, wealthLevel);
                        shop.transform.parent   = shopParent.transform;
                        shop.transform.position = new Vector3(x, 0, z);
                        shop.transform.Rotate(0, yRotation, 0);
                        shop.SetActive(false);

                        ShopEntity shopEntity = new ShopEntity();
                        shopEntity.ParentObjects = shop;
                        shopEntity.Animator      = shopToPut.GetComponent <Animator>();

                        shopEntity.Position = GetCenterDoor(shopToPut.transform.GetChild(0).position, shopToPut.transform.GetChild(1).position);

                        shopEntity.IsOpen = false;
                        doorShopManager.Add(shopEntity);
                    }
                }
            }
        }

        doorShopManager.EnableDoorShop();
    }
    public void OnGUI()
    {
        if (settings == null)
        {
            settings = AssetDatabase.LoadAssetAtPath <NestedPrefabCategorySettings>(pathToSetting);
            if (settings == null)
            {
                Debug.LogWarning("You need to create the NestedPrefabsCategories to be able to register your nested prefab");
                settings = CreateInstance <NestedPrefabCategorySettings>();
                AssetDatabase.CreateAsset(settings, pathToSetting);
                AssetDatabase.SaveAssets();
            }
        }

        if (onFirstOnGUI)
        {
            GetModelType();
            onFirstOnGUI = false;
        }

        EditorGUILayout.BeginVertical();
        EditorGUILayout.Space();
        GUILayout.Label("Catégorie :");
        EditorGUI.indentLevel++;
        if (EditorGUILayout.Toggle("Shop", selectedNestedPrefabCategory.categoryNameNested == NestedPrefabCategoryName.Shop))
        {
            if (selectedNestedPrefabCategory.categoryNameNested != NestedPrefabCategoryName.Shop)
            {
                selectedNestedPrefabCategory = settings.shopNestPrefab;
                GetModelType();
            }
        }

        if (EditorGUILayout.Toggle("Mall", selectedNestedPrefabCategory.categoryNameNested == NestedPrefabCategoryName.Mall))
        {
            if (selectedNestedPrefabCategory.categoryNameNested != NestedPrefabCategoryName.Mall)
            {
                selectedNestedPrefabCategory = settings.mallNestPrefab;
                GetModelType();
            }
        }

        if (EditorGUILayout.Toggle("Apartment", selectedNestedPrefabCategory.categoryNameNested == NestedPrefabCategoryName.Apartment))
        {
            if (selectedNestedPrefabCategory.categoryNameNested != NestedPrefabCategoryName.Apartment)
            {
                selectedNestedPrefabCategory = settings.apartmentNestPrefab;
                GetModelType();
            }
        }

        EditorGUI.indentLevel--;
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.EndVertical();

        if (selectedNestedPrefabCategory.categoryNameNested == NestedPrefabCategoryName.Shop)
        {
            GUILayout.Label("Wealth :");
            EditorGUI.indentLevel++;
            if (EditorGUILayout.Toggle("Poor", selectedWealthLevelShop == WealthLevelShop.Poor))
            {
                if (selectedWealthLevelShop != WealthLevelShop.Poor)
                {
                    selectedWealthLevelShop = WealthLevelShop.Poor;
                    GetModelType();
                }
            }

            if (EditorGUILayout.Toggle("Normal", selectedWealthLevelShop == WealthLevelShop.Normal))
            {
                if (selectedWealthLevelShop != WealthLevelShop.Normal)
                {
                    selectedWealthLevelShop = WealthLevelShop.Normal;
                    GetModelType();
                }
            }
            if (EditorGUILayout.Toggle("Rich", selectedWealthLevelShop == WealthLevelShop.Rich))
            {
                if (selectedWealthLevelShop != WealthLevelShop.Rich)
                {
                    selectedWealthLevelShop = WealthLevelShop.Rich;
                    GetModelType();
                }
            }
            EditorGUI.indentLevel--;

            EditorGUILayout.Space();

            GUILayout.Label("Size :");
            EditorGUI.indentLevel++;
            if (EditorGUILayout.Toggle("Small", selectedSizeShop == SizeShop.Small))
            {
                if (selectedSizeShop != SizeShop.Small)
                {
                    selectedSizeShop = SizeShop.Small;
                    GetModelType();
                }
            }
            if (EditorGUILayout.Toggle("Big", selectedSizeShop == SizeShop.Big))
            {
                if (selectedSizeShop != SizeShop.Big)
                {
                    selectedSizeShop = SizeShop.Big;
                    GetModelType();
                }
            }
            EditorGUI.indentLevel--;
            EditorGUILayout.Space();
            EditorGUILayout.Space();
            EditorGUILayout.Space();
        }
        else if (selectedNestedPrefabCategory.categoryNameNested == NestedPrefabCategoryName.Apartment)
        {
            GUILayout.Label("Size :");
            EditorGUI.indentLevel++;
            if (EditorGUILayout.Toggle("Tiny", seletectedSizeApartment == SizeApartment.Tiny))
            {
                if (seletectedSizeApartment != SizeApartment.Tiny)
                {
                    seletectedSizeApartment = SizeApartment.Tiny;
                    GetModelType();
                }
            }
            if (EditorGUILayout.Toggle("Small", seletectedSizeApartment == SizeApartment.Small))
            {
                if (seletectedSizeApartment != SizeApartment.Small)
                {
                    seletectedSizeApartment = SizeApartment.Small;
                    GetModelType();
                }
            }
            if (EditorGUILayout.Toggle("Normal", seletectedSizeApartment == SizeApartment.Medium))
            {
                if (seletectedSizeApartment != SizeApartment.Medium)
                {
                    seletectedSizeApartment = SizeApartment.Medium;
                    GetModelType();
                }
            }
            if (EditorGUILayout.Toggle("Big", seletectedSizeApartment == SizeApartment.Big))
            {
                if (seletectedSizeApartment != SizeApartment.Big)
                {
                    seletectedSizeApartment = SizeApartment.Big;
                    GetModelType();
                }
            }
            EditorGUI.indentLevel--;

            EditorGUILayout.Space();
        }

        if (EditorGUILayout.Toggle("Center", centerNewObject))
        {
            if (!centerNewObject)
            {
                centerNewObject = !centerNewObject;
            }
        }
        else
        {
            if (centerNewObject)
            {
                centerNewObject = !centerNewObject;
            }
        }

        if (settings.shopNestPrefab.categoryNameNested == settings.mallNestPrefab.categoryNameNested &&
            settings.mallNestPrefab.categoryNameNested == settings.apartmentNestPrefab.categoryNameNested &&
            settings.apartmentNestPrefab.categoryNameNested == settings.shopNestPrefab.categoryNameNested)
        {
            GUILayout.Label("Please fill correctly NestedPrefabCategorySettings in the Editor Folder");
        }
        else
        {
            if (GUILayout.Button("Create prefab") && AskCreatePrefab())
            {
                foreach (Transform child in prefabParent.transform)
                {
                    RecursivelyRemoveProceduralEntitiesChildren(child.gameObject);
                }

                string localPath = selectedNestedPrefabCategory.pathFolder;

                if (selectedNestedPrefabCategory.categoryNameNested == NestedPrefabCategoryName.Shop)
                {
                    localPath += selectedWealthLevelShop + "/" + selectedSizeShop + "/";
                }
                else if (selectedNestedPrefabCategory.categoryNameNested == NestedPrefabCategoryName.Apartment)
                {
                    localPath += seletectedSizeApartment + "/";
                }
                else if (selectedNestedPrefabCategory.categoryNameNested == NestedPrefabCategoryName.Mall)
                {
                    localPath += "Mall/";
                }



                if (!Directory.Exists(localPath))
                {
                    Directory.CreateDirectory(localPath);
                }

                localPath += prefabParent.name + ".prefab";

                localPath = AssetDatabase.GenerateUniqueAssetPath(localPath);

                PrefabUtility.SaveAsPrefabAssetAndConnect(prefabParent, localPath,
                                                          InteractionMode.AutomatedAction);

                GetModelType();

                Debug.Log("Nested prefab created");
            }
        }
    }