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