Пример #1
0
    public override void OnAttemptEnter()
    {
        //If not movable, simply don't care
        if (moveable == false)
        {
            return;
        }

        CardinalDirections.Directions playerComesFrom = PlayerComingFrom(GridGenerator.Instacne.activePlayer, myTile);

        //Go north
        if (playerComesFrom == CardinalDirections.Directions.S) //Player coming from south
        {
            if (myTile.neighbourNorth != null)                  //my tile has a nothern neighbour
            {
                if (myTile.neighbourNorth.isBlocking == false)
                {
                    myTile = myTile.neighbourNorth;           //Change tile

                    GridTile oldTile = myTile.neighbourSouth; //Find old tile
                    oldTile.UnbindMyObsticle();               //Unbind me
                    this.transform.parent = myTile.transform;

                    StartCoroutine(MoveThingToPosition(myTile));   //Move to new tile
                }
            }
        }

        //Go south
        if (playerComesFrom == CardinalDirections.Directions.N) //Player coming from north
        {
            if (myTile.neighbourSouth != null)                  //my tile has a southern neighbour
            {
                if (myTile.neighbourSouth.isBlocking == false)
                {
                    myTile = myTile.neighbourSouth;           //Change tile

                    GridTile oldTile = myTile.neighbourNorth; //Find old tile
                    oldTile.UnbindMyObsticle();               //Unbind me
                    this.transform.parent = myTile.transform;

                    StartCoroutine(MoveThingToPosition(myTile));   //Move to new tile
                }
            }
        }

        //Go east
        if (playerComesFrom == CardinalDirections.Directions.W) //Player coming from west
        {
            if (myTile.neighbourEast != null)                   //my tile has a eastern neighbour
            {
                if (myTile.neighbourEast.isBlocking == false)
                {
                    myTile = myTile.neighbourEast;           //Change tile

                    GridTile oldTile = myTile.neighbourWest; //Find old tile
                    oldTile.UnbindMyObsticle();              //Unbind me
                    this.transform.parent = myTile.transform;

                    StartCoroutine(MoveThingToPosition(myTile));   //Move to new tile
                }
            }
        }

        //Go west
        if (playerComesFrom == CardinalDirections.Directions.E) //Player coming from east
        {
            if (myTile.neighbourWest != null)                   //my tile has a western neighbour
            {
                if (myTile.neighbourWest.isBlocking == false)
                {
                    myTile = myTile.neighbourWest;           //Change tile

                    GridTile oldTile = myTile.neighbourEast; //Find old tile
                    oldTile.UnbindMyObsticle();              //Unbind me
                    this.transform.parent = myTile.transform;

                    StartCoroutine(MoveThingToPosition(myTile));   //Move to new tile
                }
            }
        }
    }
Пример #2
0
    public static CardinalDirections.Directions PlayerComingFrom(Player _player, GridTile targetTile)
    {
        CardinalDirections.Directions output = CardinalDirections.Directions.N;

        //East
        if (targetTile.neighbourEast != null)
        {
            if (_player.currentTile == targetTile.neighbourEast)
            {
                output = CardinalDirections.Directions.E;
                return(output);
            }
        }

        //West
        if (targetTile.neighbourWest != null)
        {
            if (_player.currentTile == targetTile.neighbourWest)
            {
                output = CardinalDirections.Directions.W;
                return(output);
            }
        }

        //North
        if (targetTile.neighbourNorth != null)
        {
            if (_player.currentTile == targetTile.neighbourNorth)
            {
                output = CardinalDirections.Directions.N;
                return(output);
            }
        }

        //South
        if (targetTile.neighbourSouth != null)
        {
            if (_player.currentTile == targetTile.neighbourSouth)
            {
                output = CardinalDirections.Directions.S;
                return(output);
            }
        }

        #region Legacy

        /*Debug.Log("Player: " + _player.name);
         * Debug.Log("PlayerTile: " + _player.currentTile.name);
         * Debug.Log("x: " + gridX + ", y: " + gridY);
         *
         *
         * //East
         * if (_player.currentTile.coordinates.x == gridX + 1 && _player.currentTile.coordinates.y != gridY)
         * {
         *  output = CardinalDirections.Directions.E;
         *  return output;
         * }
         *
         * //West
         * if (_player.currentTile.coordinates.x == gridX - 1 && _player.currentTile.coordinates.y != gridY)
         * {
         *  output = CardinalDirections.Directions.W;
         *  return output;
         * }
         *
         * //North
         * if (_player.currentTile.coordinates.y == gridY + 1 && _player.currentTile.coordinates.x != gridX)
         * {
         *  output = CardinalDirections.Directions.N;
         *  return output;
         * }
         *
         * //West
         * if (_player.currentTile.coordinates.y == gridY - 1 && _player.currentTile.coordinates.x != gridX)
         * {
         *  output = CardinalDirections.Directions.S;
         *  return output;
         * }*/
        #endregion

        Debug.LogError("Player Coming from unkown direction, outputting North");
        return(output);
    }