示例#1
0
 private void DoPlaceUnit(GameObject piece, GameObject location)
 {
     if (piece.activeInHierarchy)
     {
         return;
     }
     piece.SetActive(true);
     piece.name = "" + piece.GetComponent <NetworkedUnit>().unitType + identity;
     piece.GetComponent <NetworkedUnit>().SetLocation(location);
     piece.GetComponent <NetworkedUnit>().owner          = gameObject;
     piece.GetComponent <NetworkedUnit>().remainingMoves = 2;
     if (isLocalPlayer)
     {
         if (head != null)
         {
             DoublyLinkedListNode current = head;
             while (current.forward != head)
             {
                 current = current.forward;
             }
             NetworkedUnit        unit    = piece.GetComponent <NetworkedUnit>();
             DoublyLinkedListNode newNode = new DoublyLinkedListNode(unit, current, head);
             current.forward = newNode;
             head.prev       = newNode;
         }
         else
         {
             DoublyLinkedListNode newHead = new DoublyLinkedListNode(piece.GetComponent <NetworkedUnit>());
             newHead.forward = newHead;
             newHead.prev    = newHead;
             head            = newHead;
         }
     }
 }
示例#2
0
    public void SetLocation(GameObject newLoc)
    {
        // Check if gridElement has been assigned (this is for spawning)
        if (!gridElement)
        {
            FindGridElement();
        }
        // Handle Collisions; We're assuming newLoc always has a GridElement
        NetworkedGridElement otherGE = newLoc.GetComponent <NetworkedGridElement>();

        if (otherGE && otherGE.piece && otherGE.piece != gameObject)
        {
            //Debug.Log("Collided with: " + otherGE.piece.name);
            // Check to make sure we're working with a unit
            if (otherGE.piece.GetComponent <NetworkedGamePiece>() is NetworkedUnit)
            {
                NetworkedUnit otherUnit = otherGE.piece.GetComponent <NetworkedUnit>();
                otherUnit.GetComponent <NetworkedPlayer>().CmdReturnUnit(otherGE.piece);
                if (otherUnit is NetworkedPortalPlacer)
                {
                    otherUnit.GetComponent <NetworkedPortalPlacer>().PlacePortal(otherGE);
                }
                otherGE.piece = null;
                // check to see if the other piece has the flag
                if (otherUnit.flag)
                {
                    otherGE.piece = otherUnit.flag;
                }
            }
            else
            {
                // Check for flag
                if (otherGE.piece.GetComponent <NetworkedGamePiece>() is NetworkedFlag)
                {
                    Debug.Log("MAYDAY - A TRAP HAS LANDED ON THE FLAG AND THOMAS HASN'T FIGURED OUT HOW THIS SHOULD ACT.");
                }
                else if (otherGE.piece.GetComponent <NetworkedGamePiece>() is NetworkedTrap)
                {
                    Debug.Log("MAYDAY - A TRAP HAS LANDED ON A TRAP AND THOMAS HASN'T FIGURED OUT HOW THIS SHOULD ACT.");
                }
            }
        }
        transform.position = newLoc.transform.TransformPoint(Vector3.zero) + Vector3.forward * gameObject.transform.position.z;
        gridElement.piece  = null;
        gridElement        = newLoc.GetComponent <NetworkedGridElement>();
        gridElement.piece  = gameObject;
    }
示例#3
0
    private DoublyLinkedListNode FindNode(NetworkedUnit unit)
    {
        DoublyLinkedListNode current = head;

        if (current == null)
        {
            return(null);
        }
        do
        {
            if (current._item == unit)
            {
                break;
            }
            current = current.forward;
        } while (current.forward != head);
        return(current);
    }
示例#4
0
    public void RotateRight(NetworkedGridElement selectedGE)
    {
        DoublyLinkedListNode curNode = head;

        if (selectedGE.piece && selectedGE.piece.GetComponent <NetworkedGamePiece>() is NetworkedUnit)
        {
            NetworkedUnit selectedUnit = selectedGE.piece.GetComponent <NetworkedUnit>();
            curNode = FindNode(selectedUnit);
        }
        if (curNode == null)
        {
            return;
        }
        if (activeMenu is NetworkedGridMenu)
        {
            ((NetworkedGridMenu)activeMenu).ChangeElementSelected(curNode.prev._item.GetComponent <NetworkedUnit>().gridElement.gameObject);
        }
    }
示例#5
0
    public void SetLocation(GameObject newLoc)
    {
        transform.position = newLoc.transform.TransformPoint(Vector3.zero) + Vector3.forward * gameObject.transform.position.z;
        if (flag)
        {
            flag.transform.position = newLoc.transform.TransformPoint(Vector3.zero) + Vector3.forward * flag.transform.position.z;
            flag.GetComponent <NetworkedGamePiece>().gridElement = newLoc.GetComponent <NetworkedGridElement>();
            if (newLoc.GetComponent <NetworkedGridElement>().goal)
            {
                owner.GetComponent <NetworkedPlayer>().CmdEndLevel(owner.GetComponent <NetworkedPlayer>().identity);
                //grid.gameMan.EndLevel(owner.GetComponent<NetworkedPlayer>().identity);
            }
        }
        // Check if gridElement has been assigned (this is for spawning)
        if (!gridElement)
        {
            if (!FindGridElement())
            {
                Debug.Log(gridElement.piece);
            }
        }
        // Handle Collisions; We're assuming newLoc always has a GridElement
        NetworkedGridElement otherGE = newLoc.GetComponent <NetworkedGridElement>();

        if (otherGE && otherGE.piece && otherGE.piece != gameObject)
        {
            //Debug.Log("Collided with: " + otherGE.piece.name);
            // Check to make sure we're working with a unit
            if (otherGE.piece.GetComponent <NetworkedGamePiece>() is NetworkedUnit)
            {
                NetworkedUnit otherUnit = otherGE.piece.GetComponent <NetworkedUnit>();
                otherUnit.owner.GetComponent <NetworkedPlayer>().CmdReturnUnit(otherGE.piece);
                if (otherUnit.unitType == UnitType.Portalist)
                {
                    otherUnit.GetComponent <NetworkedPortalPlacer>().PlacePortal(otherGE);
                }
                otherGE.piece = null;
                // check to see if the other piece has the flag
                if (otherUnit.flag)
                {
                    otherGE.piece = otherUnit.flag;
                    flag          = null;
                }
                // make sure you don't have the flag
                if (flag)
                {
                    otherGE.piece = flag;
                    flag.GetComponent <NetworkedGamePiece>().gridElement = otherGE;
                    flag = null;
                }
                // Don't forget to kill yourself
                owner.GetComponent <NetworkedPlayer>().CmdReturnUnit(gameObject);
                if (unitType == UnitType.Portalist)
                {
                    GetComponent <NetworkedPortalPlacer>().PlacePortal(otherGE);
                }
                gridElement.piece = null;
                return;
            }
            else
            {
                // Check for flag
                if (otherGE.piece.GetComponent <NetworkedGamePiece>() is NetworkedFlag)
                {
                    flag           = otherGE.piece;
                    canAct         = false;
                    remainingMoves = 0;
                }
                else if (otherGE.piece.GetComponent <NetworkedGamePiece>() is NetworkedTrap)
                {
                    if (unitType == UnitType.Portalist)
                    {
                        this.GetComponent <NetworkedPortalPlacer>().PlacePortal(otherGE);
                    }
                    if (gridElement.piece == gameObject)
                    {
                        gridElement.piece = null;
                    }
                    if (!grid)
                    {
                        grid = FindObjectOfType <NetworkedGridMenu>();
                    }
                    owner.GetComponent <NetworkedPlayer>().CmdReturnUnit(gameObject);
                    if (flag)   // flags will destroy traps; currently no piece can destroy traps,
                                // so if a flag lands on one, it must either destroy the trap or the game is unwinnable
                                // it may be better to have traps pull/pushable, while the flag remains aloof. This would
                                // prevent the need to destroy the trap
                    {
                        Destroy(otherGE.piece);
                        otherGE.piece = flag;
                        flag.GetComponent <NetworkedGamePiece>().gridElement = otherGE;
                        flag = null;
                    }
                    return;
                }
            }
        }
        gridElement.piece = null;
        gridElement       = newLoc.GetComponent <NetworkedGridElement>();
        gridElement.piece = gameObject;

        if (flag)
        {
            flag.GetComponent <NetworkedGamePiece>().gridElement = gridElement;
            if (gridElement.goal)
            {
                // Player has moved the flag into the goal!
                // Someone should probably contact the gamemanager
                owner.GetComponent <NetworkedPlayer>().CmdEndLevel(owner.GetComponent <NetworkedPlayer>().identity);
                //grid.gameMan.EndLevel();
            }
        }

        if (grid == null)
        {
            grid = FindObjectOfType <NetworkedGridMenu>();
        }
        grid.UpdateDescription();
    }
示例#6
0
 public DoublyLinkedListNode(NetworkedUnit item, DoublyLinkedListNode prev = null, DoublyLinkedListNode forward = null)
 {
     _item        = item;
     this.prev    = prev;
     this.forward = forward;
 }
    public void TwistBoard(GameObject twistLoc)
    {
        if (gridElement.northNeighbor && gridElement.eastNeighbor && gridElement.southNeighbor && gridElement.westNeighbor)
        {
            for (int i = 0; i < rotationAmount; ++i)
            {
                List <GameObject> neighbors = new List <GameObject>();
                #region DisconnectWalls
                if (gridElement.northNeighbor.GetComponent <NetworkedGridElement>().northNeighbor)
                {
                    gridElement.northNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().southWall = false;
                    gridElement.northNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().southWall = false;
                    gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().southWall = false;
                }
                if (gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor)
                {
                    gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().westWall = false;
                    gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().westWall = false;
                    gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().westWall = false;
                }
                if (gridElement.southNeighbor.GetComponent <NetworkedGridElement>().southNeighbor)
                {
                    gridElement.southNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().northWall = false;
                    gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().northWall = false;
                    gridElement.southNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().northWall = false;
                }
                if (gridElement.westNeighbor.GetComponent <NetworkedGridElement>().westNeighbor)
                {
                    gridElement.westNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().eastWall = false;
                    gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().eastWall = false;
                    gridElement.westNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().eastWall = false;
                }
                #endregion
                #region Rotate Tiles
                gridElement.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                gridElement.northNeighbor.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                gridElement.eastNeighbor.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                gridElement.southNeighbor.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                gridElement.westNeighbor.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                #endregion
                #region Rotate Pieces
                if (gridElement.piece)
                {
                    gridElement.piece.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                    neighbors.Add(gridElement.piece);
                }
                if (gridElement.northNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    gridElement.northNeighbor.GetComponent <NetworkedGridElement>().piece.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                    neighbors.Add(gridElement.northNeighbor.GetComponent <NetworkedGridElement>().piece);
                }
                if (gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().piece.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                    neighbors.Add(gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().piece);
                }
                if (gridElement.southNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    gridElement.southNeighbor.GetComponent <NetworkedGridElement>().piece.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                    neighbors.Add(gridElement.southNeighbor.GetComponent <NetworkedGridElement>().piece);
                }
                if (gridElement.westNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    gridElement.westNeighbor.GetComponent <NetworkedGridElement>().piece.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                    neighbors.Add(gridElement.westNeighbor.GetComponent <NetworkedGridElement>().piece);
                }
                if (gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().piece.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                    neighbors.Add(gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().piece);
                }
                if (gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().piece.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                    neighbors.Add(gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().piece);
                }
                if (gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().piece.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                    neighbors.Add(gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().piece);
                }
                if (gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().piece.transform.RotateAround(gridElement.transform.position, Vector3.back, 90);
                    neighbors.Add(gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().piece);
                }
                #endregion
                #region Fix Neighbors
                gridElement.FindNeighbors();
                gridElement.northNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                gridElement.southNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                gridElement.westNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                if (gridElement.northNeighbor.GetComponent <NetworkedGridElement>().northNeighbor)
                {
                    gridElement.northNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                    gridElement.northNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                    gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                }
                if (gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor)
                {
                    gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                    gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                    gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                }
                if (gridElement.southNeighbor.GetComponent <NetworkedGridElement>().southNeighbor)
                {
                    gridElement.southNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                    gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                    gridElement.southNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                }
                if (gridElement.westNeighbor.GetComponent <NetworkedGridElement>().westNeighbor)
                {
                    gridElement.westNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                    gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                    gridElement.westNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().FindNeighbors();
                }
                #endregion
                #region FixWalls
                //this needs to correctly update neighbors too.
                UpdateWalls(gridElement);
                UpdateWalls(gridElement.northNeighbor.GetComponent <NetworkedGridElement>());
                UpdateWalls(gridElement.eastNeighbor.GetComponent <NetworkedGridElement>());
                UpdateWalls(gridElement.southNeighbor.GetComponent <NetworkedGridElement>());
                UpdateWalls(gridElement.westNeighbor.GetComponent <NetworkedGridElement>());
                UpdateWalls(gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>());
                UpdateWalls(gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>());
                UpdateWalls(gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>());
                UpdateWalls(gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>());
                #endregion
                #region FixWallSprites
                gridElement.UpdateWalls();
                gridElement.northNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                gridElement.southNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                gridElement.westNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                if (gridElement.northNeighbor.GetComponent <NetworkedGridElement>().northNeighbor)
                {
                    gridElement.northNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                    gridElement.northNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                    gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                }
                if (gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor)
                {
                    gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                    gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                    gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                }
                if (gridElement.southNeighbor.GetComponent <NetworkedGridElement>().southNeighbor)
                {
                    gridElement.southNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                    gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                    gridElement.southNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                }
                if (gridElement.westNeighbor.GetComponent <NetworkedGridElement>().westNeighbor)
                {
                    gridElement.westNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                    gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                    gridElement.westNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().UpdateWalls();
                }

                #endregion
                #region Fix Piece Rotation and Position
                if (gridElement.piece)
                {
                    UpdateRotation(gridElement.piece.GetComponent <NetworkedGamePiece>());
                }
                if (gridElement.northNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    UpdateRotation(gridElement.northNeighbor.GetComponent <NetworkedGridElement>().piece.GetComponent <NetworkedGamePiece>());
                }
                if (gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    UpdateRotation(gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().piece.GetComponent <NetworkedGamePiece>());
                }
                if (gridElement.southNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    UpdateRotation(gridElement.southNeighbor.GetComponent <NetworkedGridElement>().piece.GetComponent <NetworkedGamePiece>());
                }
                if (gridElement.westNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    UpdateRotation(gridElement.westNeighbor.GetComponent <NetworkedGridElement>().piece.GetComponent <NetworkedGamePiece>());
                }
                if (gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    UpdateRotation(gridElement.northNeighbor.GetComponent <NetworkedGridElement>().westNeighbor.GetComponent <NetworkedGridElement>().piece.GetComponent <NetworkedGamePiece>());
                }
                if (gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    UpdateRotation(gridElement.eastNeighbor.GetComponent <NetworkedGridElement>().northNeighbor.GetComponent <NetworkedGridElement>().piece.GetComponent <NetworkedGamePiece>());
                }
                if (gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    UpdateRotation(gridElement.southNeighbor.GetComponent <NetworkedGridElement>().eastNeighbor.GetComponent <NetworkedGridElement>().piece.GetComponent <NetworkedGamePiece>());
                }
                if (gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().piece)
                {
                    UpdateRotation(gridElement.westNeighbor.GetComponent <NetworkedGridElement>().southNeighbor.GetComponent <NetworkedGridElement>().piece.GetComponent <NetworkedGamePiece>());
                }
                #endregion
                #region Fix Grid Attributes and Colors
                UpdateGridAttributes();
                #endregion
                #region Fix Flag if carried
                foreach (GameObject neighbor in neighbors)
                {
                    NetworkedUnit neighborNetworkedUnit = neighbor.GetComponent <NetworkedUnit>();
                    if (neighborNetworkedUnit && neighborNetworkedUnit.flag)
                    {
                        Vector3 flagPosn = neighbor.transform.position;
                        flagPosn.z = neighborNetworkedUnit.flag.transform.position.z;
                        neighborNetworkedUnit.flag.transform.position = flagPosn;
                    }
                }
                #endregion
            }
        }
        GetComponent <AudioSource>().clip = act;
        GetComponent <AudioSource>().Play();
    }