private void Execute(RammingMove move)
    {
        ship.Ram();

        Hide();

        Finish();
    }
    private void Finish()
    {
        wasExecuted = true;

        possibleMoves.Clear();
        ramMove = null;

        if (OnMoveComplete != null)
        {
            OnMoveComplete();
        }
    }
    public void Show()
    {
        Coord pos = ship.CoordInFront();

        if (MapController.instance.IsWithinMap(pos))
        {
            if (MapController.instance.GetTile(pos).ship != null)
            {
                // ram
                posHighlight = TileHighlighter.instance.CreateHighlight(pos, 5);

                ramMove = new RammingMove(this, pos, posHighlight);

                Tile tile = MapController.instance.GetTile(pos);
                tile.OnMouseClick += ramMove.OnMouseClick;
            }
            else
            {
                // move
                posHighlight = TileHighlighter.instance.CreateHighlight(pos, 2);

                for (int d = -1; d <= 1; d++)
                {
                    int   facing      = (int)Mathf.Repeat(ship.facing + d, 8);
                    Coord destination = pos + Coord.neighbours[facing];

                    if (MapController.instance.IsWithinMap(destination))
                    {
                        Highlight hl = TileHighlighter.instance.CreateHighlight(destination, 3, facing);

                        PossibleMove move = new PossibleMove(this, destination, hl, facing);

                        Tile destTile = MapController.instance.GetTile(destination);
                        destTile.OnMouseClick += move.OnMouseClick;

                        possibleMoves.Add(move);
                    }
                }
            }
        }
    }