Esempio n. 1
0
    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);
    }
Esempio n. 2
0
        public virtual State getState()
        {
            State state = new State();

            GameObject[] objs = new GameObject[gameObjects.Count];
            gameObjects.CopyTo(objs);
            state.GameObjects = objs.ToList();
            return(state);
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
    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();
    }
Esempio n. 5
0
    //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;
    }
Esempio n. 7
0
        // 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());
        }
Esempio n. 8
0
	// 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;
	}
Esempio n. 9
0
    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;
    }