Ejemplo n.º 1
0
    public void LoadRoom(List <ObstructedLocation> obstructedLocation, float wealthLevel)
    {
        GameObject wall = GetWall(GetWalls(obstructedLocation), wealthLevel);

        GameObject door = GetDoor(wealthLevel);

        int           indexRoom = GetRoom(wealthLevel);
        GameObject    room      = rooms[indexRoom];
        SizeApartment sizeRoom  = GetSizeByIndex(indexRoom);


        int nbDoors     = wall.transform.childCount * 4;
        int choosenDoor = Random.Range(0, nbDoors);

        GameObject instantiatedWall;
        GameObject instantiatedDoor;

        int nbInstalledDoor = 0;

        for (int i = 0; i < 4; i++)
        {
            instantiatedWall = Instantiate(wall, ProceduralManager.ParentMap);
            instantiatedWall.transform.position = new Vector3(0f, (i + 1) * 7.5f, 0f);

            foreach (Transform child in instantiatedWall.transform)
            {
                instantiatedDoor = Instantiate(door, ProceduralManager.ParentMap);
                instantiatedDoor.transform.position = child.position;
                RotateDoorTowardCenter(instantiatedDoor.transform, child);
                if (nbInstalledDoor == choosenDoor)
                {
                    LoadRoom(child, room);
                    LoadApartment(wealthLevel, child.position, sizeRoom);

                    instantiatedDoor.tag      = "TargetRoomDoor";
                    instantiatedDoor.isStatic = false;
                    GameManager.Instance().AppartmentTargetDoor(instantiatedDoor);
                }

                nbInstalledDoor++;
                Destroy(child.gameObject);
            }
        }
    }
Ejemplo n.º 2
0
    private void LoadApartment(float wealthValue, Vector3 position, SizeApartment sizeApartment)
    {
        GameObject[] rooms;

        switch (sizeApartment)
        {
        case SizeApartment.Small:
            rooms = smallContent;
            break;

        case SizeApartment.Medium:
            rooms = mediumContent;
            break;

        case SizeApartment.Big:
            rooms = bigContent;
            break;

        default:
            rooms = tinyContent;
            break;
        }

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

        foreach (var room in rooms)
        {
            roomDict.Add(room, room.GetComponent <ProceduralEntity>().wealthValue);
        }

        GameObject temp = Instantiate(ProceduralCalculations.GetRandomTFromPool(roomDict, wealthValue), ProceduralManager.ParentMap);

        temp.transform.position = position;

        RotateRoom(temp.transform, position);
    }
    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");
            }
        }
    }