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))); }
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"); } } }