void generarLista(int zonaBusqueda) { GameObject[] vectorNodos = new GameObject[100]; listaNodos = new List <GameObject>(); switch (zonaBusqueda) { case 1: vectorNodos = GameObject.FindGameObjectsWithTag("VertexZona1"); nodoDestino = vectorNodos[10]; break; case 2: vectorNodos = GameObject.FindGameObjectsWithTag("VertexZona2"); if (zonaAnterior == 1) { nodoDestino = vectorNodos[8]; } else if (zonaAnterior == 3) { nodoDestino = vectorNodos[6]; } break; case 3: vectorNodos = GameObject.FindGameObjectsWithTag("VertexZona3"); nodoDestino = vectorNodos[0]; break; } listaNodos = vectorNodos.ToList(); r = listaNodos.IndexOf(nodoDestino); }
public virtual State getState() { State state = new State(); GameObject[] objs = new GameObject[gameObjects.Count]; gameObjects.CopyTo(objs); state.GameObjects = objs.ToList(); return(state); }
public virtual void setState(State state) { if (state == null) { return; } close(); GameObject[] objs = new GameObject[state.GameObjects.Count]; state.GameObjects.CopyTo(objs); newObjects = objs.ToList(); }
void CreateRoom(Room room) { Vector3 drawPos = room.gridPos; drawPos.x *= 50;//aspect ratio of map sprite drawPos.z *= 50; var possibleRooms2 = new GameObject[_allRooms.Count]; _allRooms.CopyTo(possibleRooms2); var possibleRooms = possibleRooms2.ToList(); if (room.doorRight) { possibleRooms = possibleRooms.Intersect(RoomTemplates.Instance.RightRooms).ToList(); } else { possibleRooms = possibleRooms.Except(RoomTemplates.Instance.RightRooms).ToList(); } if (room.doorBot) { possibleRooms = possibleRooms.Intersect(RoomTemplates.Instance.DownRooms).ToList(); } else { possibleRooms = possibleRooms.Except(RoomTemplates.Instance.DownRooms).ToList(); } if (room.doorTop) { possibleRooms = possibleRooms.Intersect(RoomTemplates.Instance.UpRooms).ToList(); } else { possibleRooms = possibleRooms.Except(RoomTemplates.Instance.UpRooms).ToList(); } if (room.doorLeft) { possibleRooms = possibleRooms.Intersect(RoomTemplates.Instance.LeftRooms).ToList(); } else { possibleRooms = possibleRooms.Except(RoomTemplates.Instance.LeftRooms).ToList(); } Debug.Log(possibleRooms.Count); var placedRoom = RandomUtils.Choice(possibleRooms); _lastRoom = Instantiate(placedRoom, drawPos, placedRoom.transform.rotation); //_lastRoom.GetComponent<NavMeshSurface>().BuildNavMesh(); }
//Sense facts about every perceptible object from all definitions public void SenseFacts(List <FactDefinition> definitions, List <GameObject> perceptibles) { foreach (GameObject obj in perceptibles) { //objects to be compared with any perceptible obj to sense binary facts GameObject[] objs = new GameObject[perceptibles.Count]; perceptibles.CopyTo(objs); List <GameObject> objsList = objs.ToList(); objsList.Remove(obj); sensorySystem.SenseFactFromTag(obj); foreach (FactDefinition definition in definitions) { sensorySystem.SenseFactFromDefinition(obj, objsList, definition); } } }
void BuildPlatform(bool buildMidSections) { //Set Art switch (selectedPlatformArt) { case 0: platformEndSprite = Resources.Load <Sprite>("Blue Metal Platform_H_End"); break; default: break; } //Create Parent Object GameObject platformParent = new GameObject(); platformParent.name = "Platform"; //Build Platform Ends GameObject endLeft = null, endRight = null, endTop = null, endBottom = null; //For horizontal platforms. if (orientation == 0) { Object platformHPrefab = Resources.Load("PlatformH"); if (platformEndLeft) { endLeft = (GameObject)PrefabUtility.InstantiatePrefab(platformHPrefab); endLeft.name = "Platform End Left"; endLeft.transform.SetParent(platformParent.transform); endLeft.transform.localPosition = new Vector2((-platformWidth / 2) + 0.5f, 0); endLeft.transform.FindChild("Platform").GetComponent <SpriteRenderer>().sprite = platformEndSprite; endLeft.transform.FindChild("Platform Lit").GetComponent <SpriteRenderer>().sprite = platformEndSprite; endLeft.transform.FindChild("Platform Lit").GetComponent <SpriteRenderer>().sprite = platformEndSprite; } else { endLeft = new GameObject(); endLeft.name = "Platform End Left"; endLeft.tag = "Platform"; endLeft.transform.SetParent(platformParent.transform); endLeft.transform.localPosition = new Vector2((-platformWidth / 2), 0); } if (platformEndRight) { endRight = (GameObject)PrefabUtility.InstantiatePrefab(platformHPrefab); endRight.name = "Platform End Right"; endRight.transform.SetParent(platformParent.transform); endRight.transform.localPosition = new Vector2((platformWidth / 2) - 0.5f, 0); endRight.transform.localScale = new Vector3(-1, 1, 1); endRight.transform.FindChild("Platform").GetComponent <SpriteRenderer>().sprite = platformEndSprite; endRight.transform.FindChild("Platform Lit").GetComponent <SpriteRenderer>().sprite = platformEndSprite; } else { endRight = new GameObject(); endRight.name = "Platform End Right"; endRight.tag = "Platform"; endRight.transform.SetParent(platformParent.transform); endRight.transform.localPosition = new Vector2((platformWidth / 2), 0); } } // For vertical platforms. else { endTop = new GameObject(); endTop.name = "Platform End Top"; endTop.tag = "Platform"; endTop.transform.SetParent(platformParent.transform); endTop.transform.localPosition = new Vector2((-platformWidth / 2), 0); endBottom = new GameObject(); endBottom.name = "Platform End Bottom"; endBottom.tag = "Platform"; endBottom.transform.SetParent(platformParent.transform); endBottom.transform.localPosition = new Vector2((platformWidth / 2), 0); } //Build Doors if (doorCount > 0) { // For horizontal doors. if (orientation == 0) { Object interiorDoorHPrefab = Resources.Load("InteriorDoorH"); //Create Parent Object GameObject doorsParent = new GameObject("Doors"); doorsParent.transform.SetParent(platformParent.transform); for (int i = 0; i < doorCount; i++) { GameObject d = (GameObject)PrefabUtility.InstantiatePrefab(interiorDoorHPrefab); d.name = "InteriorDoorH" + (i + 1); d.transform.SetParent(doorsParent.transform); d.transform.localPosition = new Vector3(0, 0, -1); } } // For vertical doors. else { Object interiorDoorVPrefab = Resources.Load("InteriorDoorV"); //Create Parent Object GameObject doorsParent = new GameObject("Doors"); doorsParent.transform.SetParent(platformParent.transform); for (int i = 0; i < doorCount; i++) { GameObject d = (GameObject)PrefabUtility.InstantiatePrefab(interiorDoorVPrefab); d.name = "InteriorDoorV" + (i + 1); d.transform.SetParent(doorsParent.transform); d.transform.localPosition = new Vector3(0, 0, -1); d.transform.Rotate(0, 0, 90); } } } List <GameObject> doors = new List <GameObject>(); if (platformParent.transform.FindChild("Doors")) { foreach (Transform child in platformParent.transform.FindChild("Doors")) { doors.Add(child.gameObject); } } // Order doors and platform ends GameObject[] orderedObjects = new GameObject[0]; int objArrayPos = 0; //Add Platform Ends to ordered array if (orientation == 0) { System.Array.Resize(ref orderedObjects, orderedObjects.Length + 1); orderedObjects[objArrayPos] = endLeft; objArrayPos++; System.Array.Resize(ref orderedObjects, orderedObjects.Length + 1); orderedObjects[objArrayPos] = endRight; objArrayPos++; } else { System.Array.Resize(ref orderedObjects, orderedObjects.Length + 1); orderedObjects[objArrayPos] = endTop; objArrayPos++; System.Array.Resize(ref orderedObjects, orderedObjects.Length + 1); orderedObjects[objArrayPos] = endBottom; objArrayPos++; } //Add doors to ordered array if (doors.Count > 0) { foreach (GameObject door in doors) { System.Array.Resize(ref orderedObjects, orderedObjects.Length + 1); orderedObjects[objArrayPos] = door; objArrayPos++; } } //Order array from left to right orderedObjects = orderedObjects.OrderBy(go => go.transform.position.x).ToArray(); //Get leftmost and rightmost objects GameObject objectLeft = orderedObjects[0]; GameObject objectRight = orderedObjects[orderedObjects.Length - 1]; float start, end; if (objectLeft.GetComponent <Collider2D>()) { start = objectLeft.GetComponent <Collider2D>().bounds.max.x; } else { start = objectLeft.transform.position.x; } if (objectRight.GetComponent <Collider2D>()) { end = objectRight.GetComponent <Collider2D>().bounds.min.x; } else { end = objectRight.transform.position.x; } float difference = end - start; //Remove End objects from array List <GameObject> o = orderedObjects.ToList(); o.RemoveAt(0); o.RemoveAt(o.Count - 1); orderedObjects = o.ToArray(); ////Position Doors and Ends foreach (GameObject orderedObject in orderedObjects) { float objectSizeX = orderedObject.GetComponent <Collider2D>().bounds.size.x; float objectExtentsX = orderedObject.GetComponent <Collider2D>().bounds.extents.x; float totalObjectLength = objectSizeX * orderedObjects.Length; float leftOverSpace = difference - totalObjectLength; if (orientation == 0) { orderedObject.transform.position = new Vector3(start + objectExtentsX + (leftOverSpace / (orderedObjects.Length + 1)), orderedObject.transform.position.y, orderedObject.transform.position.z); start = orderedObject.GetComponent <Collider2D>().bounds.max.x; } else { orderedObject.transform.position = new Vector3(start + objectExtentsX + 0.15f + (leftOverSpace / (orderedObjects.Length + 1)), orderedObject.transform.position.y, orderedObject.transform.position.z); start = orderedObject.GetComponent <Collider2D>().bounds.max.x; } } if (orientation == 1) { platformParent.transform.Rotate(0, 0, -90); } if (buildMidSections) { BuildPlatformMidSections(platformParent); } //Parent to room if (selectedRoom) { platformParent.transform.SetParent(selectedRoom.transform); platformParent.transform.localPosition = new Vector3(0, 0, 0); } Selection.activeGameObject = platformParent; }
// Create fragments by mesh and pivots array private List <GameObject> CreateFragments(GameObject lastRoot = null) { // No mesh were cached if (meshes == null) { return(null); } // Clear array for new fragments GameObject[] fragArray = new GameObject[meshes.Length]; // Vars string goName = gameObject.name; string baseName = goName + "_sh_"; // Create root object GameObject root = lastRoot; if (lastRoot == null) { root = new GameObject(goName + "_root"); root.transform.position = transForm.position; root.transform.rotation = transForm.rotation; root.transform.parent = transForm.parent; rootChildList.Add(root.transform); } // KEVINJ: when operating on project assets, causes the new root object to be in the scene rather than a child of the prefab // Use https://docs.unity3d.com/ScriptReference/PrefabUtility.LoadPrefabContents.html in order to be able to set the parent // PrefabMode prefabMode = GetPrefabMode(gameObject); // if ( prefabMode != PrefabMode.Scene) // { // // PREFAB, AVOID CREATING INTO SCENE // root.transform.parent = transForm; // } // else // { // // ORIGINAL BEHAVIOR // root.transform.parent = transForm.parent; // } // Create instance for fragments GameObject fragInstance; if (advanced.copyComponents == true) { fragInstance = Instantiate(gameObject); fragInstance.transform.rotation = Quaternion.identity; fragInstance.transform.localScale = Vector3.one; // Destroy shatter DestroyImmediate(fragInstance.GetComponent <RayfireShatter>()); } else { fragInstance = new GameObject(); fragInstance.AddComponent <MeshFilter>(); fragInstance.AddComponent <MeshRenderer>(); } // Get original mats Material[] mats = skinnedMeshRend != null ? skinnedMeshRend.sharedMaterials : meshRenderer.sharedMaterials; // Create fragment objects for (int i = 0; i < meshes.Length; ++i) { // Rescale mesh if (rescaleFix != 1f) { RFFragment.RescaleMesh(meshes[i], rescaleFix); } // Instantiate. IMPORTANT do not parent when Instantiate GameObject fragGo = Instantiate(fragInstance); fragGo.transform.localScale = Vector3.one; // Set multymaterial MeshRenderer targetRend = fragGo.GetComponent <MeshRenderer>(); RFSurface.SetMaterial(origSubMeshIdsRF, mats, material, targetRend, i, meshes.Length); // Set fragment object name and tm fragGo.name = baseName + (i + 1); fragGo.transform.position = root.transform.position + (pivots[i] / rescaleFix); fragGo.transform.parent = root.transform; // Set fragment mesh MeshFilter mf = fragGo.GetComponent <MeshFilter>(); /*// KevinJ: #if UNITY_EDITOR * // Up to the caller to use AssetDatabase.RemoveObjectFromAsset to remove meshes from any prior calls to CreateFragments() * if (prefabMode == PrefabMode.Asset) * { * AssetDatabase.AddObjectToAsset(meshes[i], gameObject.scene.path); * } * else if (prefabMode == PrefabMode.PrefabEditingMode) * { * //string assetPath = UnityEditor.Experimental.GetPrefabStage(gameObject).prefabAssetPath; * //AssetDatabase.AddObjectToAsset(meshes[i], assetPath); * } #endif*/ mf.sharedMesh = meshes[i]; mf.sharedMesh.name = fragGo.name; // Set mesh collider MeshCollider mc = fragGo.GetComponent <MeshCollider>(); if (mc != null) { mc.sharedMesh = meshes[i]; } // Add in array fragArray[i] = fragGo; } // Destroy instance DestroyImmediate(fragInstance); // Empty lists meshes = null; pivots = null; origSubMeshIdsRF = new List <RFDictionary>(); return(fragArray.ToList()); }
// You can choose to have random items be created or pass in a chosen list. // If no list is provided, then random items are chosen. // This gets called from ItemSpawner after it spawns this itemStorer // gameObject. public void ItemSetup(bool large, int areaNumber, GameObject[] manualItemsChosen = null) { myAreaNumber = areaNumber; if(manualItemsChosen == null || manualItemsChosen.Count() == 0) { if(!large) // A small itemStorer was created. { // Half values. transform.localScale = Vector3.one * 0.5f; _totalItemsToCarry = Random.Range(1, 3); // Hold up to 2 when small. health = Mathf.RoundToInt(health * 0.5f); } else _totalItemsToCarry = Random.Range(3, 5); // Hold up to 4 when large. // More random choices with a higher appear rate. Very_High = 5 and // Very_Low = 1 _maxRandomToChooseFrom = (int)Manager_Game.ItemAppearRate; itemsCanDrop = new List<GameObject>(); for(int i = 0; i < _maxRandomToChooseFrom || itemsCanDrop.Count == _totalItemsToCarry; i++) { if(Random.value > 0.6f) { itemsCanDrop.Add(Manager_Game.instance.ICPrefabs[Random.Range(0, Manager_Game.instance.ICPrefabs.Count)]); continue; } if(Random.value > 0.5f) { itemsCanDrop.Add(Manager_Game.instance.ITPrefabs[Random.Range(0, Manager_Game.instance.ITPrefabs.Count)]); continue; } itemsCanDrop.Add(Manager_Game.instance.IWPrefabs[Random.Range(0, Manager_Game.instance.IWPrefabs.Count)]); } } else // Manually items chosen to choose from { List<GameObject> itemsToCreate = manualItemsChosen.ToList(); if(!large) { // If small we will remove half of the amount of items we have. transform.localScale = Vector3.one * 0.5f; if(itemsToCreate.Count > 1) { _totalItemsToCarry = Mathf.RoundToInt(itemsToCreate.Count / 2); for(int i = 0; i < _totalItemsToCarry; i++) { if(i != _totalItemsToCarry - 1) { // Random chance of removing this one if we aren't at the // end. if(Random.value > 0.5f) itemsToCreate.RemoveAt(i); } else itemsToCreate.RemoveAt(i); } } } // Large so keep all items chosen. else _totalItemsToCarry = itemsToCreate.Count; itemsCanDrop = itemsToCreate; } GetComponent<Rigidbody>().drag = large ? 20 : 10; }
private void initializePlayers() { currentPlayers = new List<GameObject>(); GameObject[] players = GameObject.FindGameObjectsWithTag("Player"); GameObject ghostPlayer = null; for (int i = 0; i < players.Length; ++i) { int playerReadyArrayIndex = players[i].GetComponent<Human>().playerNum - 1; if (!isPlayerReadyArray[playerReadyArrayIndex]) { players[i].SetActive(false); Camera.main.GetComponent<NewCameraBehavior>().targets.Remove(players[i]); } else { if (playerReadyArrayIndex == ghostPlayerIndex) { if (!isGhostAI) { ghostPlayer = (GameObject)GameObject.Instantiate(ghostPrefab, players[i].transform.position, players[i].transform.rotation); ghostPlayer.GetComponent<Ghost>().playerNum = players[i].GetComponent<Human>().playerNum; ghostPlayer.gameObject.tag = "Ghost"; if (!CatMode) { ghostPlayer.GetComponentInChildren<Text>().text = "P" + (ghostPlayerIndex + 1); } else { ghostPlayer.GetComponentInChildren<Text>().text = "MEOW"; } ghostPlayer.GetComponentInChildren<FadeOnTimeScale1>().timeScale = .45f; Camera.main.gameObject.GetComponent<NewCameraBehavior>().targets.Remove(players[i]); Destroy(players[i]); } else { ghostPlayer = (GameObject)GameObject.Instantiate(ghostAIPrefab, players[i].transform.position, players[i].transform.rotation); Camera.main.gameObject.GetComponent<NewCameraBehavior>().targets.Remove(players[i]); Destroy(players[i]); } } else { currentPlayers.Add(players[i]); } } } if (_SpriteSorter != null) { GameObject[]sortedPlayerList = new GameObject[4]; foreach (GameObject playerObject in currentPlayers) { _SpriteSorter.AddToAllLists(playerObject.GetComponent<SpriteRenderer>()); //sorts player list if (playerObject.name.Contains("1")) sortedPlayerList[0] = playerObject; else if (playerObject.name.Contains("2")) sortedPlayerList[1] = playerObject; else if (playerObject.name.Contains("3")) sortedPlayerList[2] = playerObject; else if (playerObject.name.Contains("4")) sortedPlayerList[3] = playerObject; } currentPlayers = sortedPlayerList.ToList(); } currentPlayers[ghostPlayerIndex] = ghostPlayer; for (int i = 0; i < currentPlayers.Count; i++) { if(currentPlayers[i] != null && currentPlayers[i].gameObject.tag != "Ghost") { Human playerHuman = currentPlayers[i].GetComponent<Human>(); if(!SceneStartedInEditor) playerHuman.IsFemaleWizard = isFemaleCharacter[i]; if (playerColorPalettes[i] == null) { if (playerHuman.IsFemaleWizard) playerColorPalettes[i] = womanColorPalettes[i]; else playerColorPalettes[i] = oldieColorPalettes[i]; } VerifyCorrectAnimController(i); PaletteSwapper currentPlayer_PS = currentPlayers[i].GetComponent<PaletteSwapper>(); currentPlayer_PS.currentPalette = playerColorPalettes[i]; currentPlayer_PS.SwapColors_Custom(currentPlayer_PS.currentPalette); int targetPaletteIndex = (int)char.GetNumericValue(currentPlayer_PS.currentPalette.name[0]); playerHuman.MainColor = currentPlayer_PS.currentPalette.newPalette[targetPaletteIndex]; playerNumText[i].color = playerHuman.MainColor; currentPlayers[i].GetComponent<SpriteRenderer>().material.SetColor("_OColor", playerNumText[i].color); playerHeartUIManagers[i].OccludeMat = currentPlayers[i].GetComponent<SpriteRenderer>().material; playerHeartUIManagers[i].SetHeartMaterial(); } } currentGhostPlayer = ghostPlayer; currentPlayers.RemoveAll(item => item == null); Camera.main.gameObject.GetComponent<NewCameraBehavior>().targets.Add(ghostPlayer); }
void BuildPlatform(bool buildMidSections) { //Set Art switch (selectedPlatformArt) { case 0: platformEndSprite = Resources.Load<Sprite>("Blue Metal Platform_H_End"); break; default: break; } //Create Parent Object GameObject platformParent = new GameObject(); platformParent.name = "Platform"; //Build Platform Ends GameObject endLeft = null, endRight = null, endTop = null, endBottom = null; //For horizontal platforms. if (orientation == 0) { Object platformHPrefab = Resources.Load("PlatformH"); if (platformEndLeft) { endLeft = (GameObject)PrefabUtility.InstantiatePrefab(platformHPrefab); endLeft.name = "Platform End Left"; endLeft.transform.SetParent(platformParent.transform); endLeft.transform.localPosition = new Vector2((-platformWidth / 2) + 0.5f, 0); endLeft.transform.FindChild("Platform").GetComponent<SpriteRenderer>().sprite = platformEndSprite; endLeft.transform.FindChild("Platform Lit").GetComponent<SpriteRenderer>().sprite = platformEndSprite; endLeft.transform.FindChild("Platform Lit").GetComponent<SpriteRenderer>().sprite = platformEndSprite; } else { endLeft = new GameObject(); endLeft.name = "Platform End Left"; endLeft.tag = "Platform"; endLeft.transform.SetParent(platformParent.transform); endLeft.transform.localPosition = new Vector2((-platformWidth / 2), 0); } if (platformEndRight) { endRight = (GameObject)PrefabUtility.InstantiatePrefab(platformHPrefab); endRight.name = "Platform End Right"; endRight.transform.SetParent(platformParent.transform); endRight.transform.localPosition = new Vector2((platformWidth / 2) - 0.5f, 0); endRight.transform.localScale = new Vector3(-1, 1, 1); endRight.transform.FindChild("Platform").GetComponent<SpriteRenderer>().sprite = platformEndSprite; endRight.transform.FindChild("Platform Lit").GetComponent<SpriteRenderer>().sprite = platformEndSprite; } else { endRight = new GameObject(); endRight.name = "Platform End Right"; endRight.tag = "Platform"; endRight.transform.SetParent(platformParent.transform); endRight.transform.localPosition = new Vector2((platformWidth / 2), 0); } } // For vertical platforms. else { endTop = new GameObject(); endTop.name = "Platform End Top"; endTop.tag = "Platform"; endTop.transform.SetParent(platformParent.transform); endTop.transform.localPosition = new Vector2((-platformWidth / 2), 0); endBottom = new GameObject(); endBottom.name = "Platform End Bottom"; endBottom.tag = "Platform"; endBottom.transform.SetParent(platformParent.transform); endBottom.transform.localPosition = new Vector2((platformWidth / 2), 0); } //Build Doors if (doorCount > 0) { // For horizontal doors. if (orientation == 0) { Object interiorDoorHPrefab = Resources.Load("InteriorDoorH"); //Create Parent Object GameObject doorsParent = new GameObject("Doors"); doorsParent.transform.SetParent(platformParent.transform); for (int i = 0; i < doorCount; i++) { GameObject d = (GameObject)PrefabUtility.InstantiatePrefab(interiorDoorHPrefab); d.name = "InteriorDoorH" + (i + 1); d.transform.SetParent(doorsParent.transform); d.transform.localPosition = new Vector3(0, 0, -1); } } // For vertical doors. else { Object interiorDoorVPrefab = Resources.Load("InteriorDoorV"); //Create Parent Object GameObject doorsParent = new GameObject("Doors"); doorsParent.transform.SetParent(platformParent.transform); for (int i = 0; i < doorCount; i++) { GameObject d = (GameObject)PrefabUtility.InstantiatePrefab(interiorDoorVPrefab); d.name = "InteriorDoorV" + (i + 1); d.transform.SetParent(doorsParent.transform); d.transform.localPosition = new Vector3(0, 0, -1); d.transform.Rotate(0, 0, 90); } } } List<GameObject> doors = new List<GameObject>(); if (platformParent.transform.FindChild("Doors")) { foreach (Transform child in platformParent.transform.FindChild("Doors")) doors.Add(child.gameObject); } // Order doors and platform ends GameObject[] orderedObjects = new GameObject[0]; int objArrayPos = 0; //Add Platform Ends to ordered array if (orientation == 0) { System.Array.Resize(ref orderedObjects, orderedObjects.Length + 1); orderedObjects[objArrayPos] = endLeft; objArrayPos++; System.Array.Resize(ref orderedObjects, orderedObjects.Length + 1); orderedObjects[objArrayPos] = endRight; objArrayPos++; } else { System.Array.Resize(ref orderedObjects, orderedObjects.Length + 1); orderedObjects[objArrayPos] = endTop; objArrayPos++; System.Array.Resize(ref orderedObjects, orderedObjects.Length + 1); orderedObjects[objArrayPos] = endBottom; objArrayPos++; } //Add doors to ordered array if (doors.Count > 0) { foreach (GameObject door in doors) { System.Array.Resize(ref orderedObjects, orderedObjects.Length + 1); orderedObjects[objArrayPos] = door; objArrayPos++; } } //Order array from left to right orderedObjects = orderedObjects.OrderBy(go => go.transform.position.x).ToArray(); //Get leftmost and rightmost objects GameObject objectLeft = orderedObjects[0]; GameObject objectRight = orderedObjects[orderedObjects.Length - 1]; float start, end; if (objectLeft.GetComponent<Collider2D>()) start = objectLeft.GetComponent<Collider2D>().bounds.max.x; else start = objectLeft.transform.position.x; if (objectRight.GetComponent<Collider2D>()) end = objectRight.GetComponent<Collider2D>().bounds.min.x; else end = objectRight.transform.position.x; float difference = end - start; //Remove End objects from array List<GameObject> o = orderedObjects.ToList(); o.RemoveAt(0); o.RemoveAt(o.Count - 1); orderedObjects = o.ToArray(); ////Position Doors and Ends foreach (GameObject orderedObject in orderedObjects) { float objectSizeX = orderedObject.GetComponent<Collider2D>().bounds.size.x; float objectExtentsX = orderedObject.GetComponent<Collider2D>().bounds.extents.x; float totalObjectLength = objectSizeX * orderedObjects.Length; float leftOverSpace = difference - totalObjectLength; if (orientation == 0) { orderedObject.transform.position = new Vector3(start + objectExtentsX + (leftOverSpace / (orderedObjects.Length + 1)), orderedObject.transform.position.y, orderedObject.transform.position.z); start = orderedObject.GetComponent<Collider2D>().bounds.max.x; } else { orderedObject.transform.position = new Vector3(start + objectExtentsX + 0.15f + (leftOverSpace / (orderedObjects.Length + 1)), orderedObject.transform.position.y, orderedObject.transform.position.z); start = orderedObject.GetComponent<Collider2D>().bounds.max.x; } } if (orientation == 1) platformParent.transform.Rotate(0, 0, -90); if (buildMidSections) BuildPlatformMidSections(platformParent); //Parent to room if (selectedRoom) { platformParent.transform.SetParent(selectedRoom.transform); platformParent.transform.localPosition = new Vector3(0, 0, 0); } Selection.activeGameObject = platformParent; }