//The main function! This EXACT coroutine will be executed, even across frames.
    //See GameAction.cs for more information on how this function should work!
    public override IEnumerator TakeAction()
    {
        yield return(GameAction.StateCheck);

        CustomTile tile = Map.current.GetTile(intendedLocation);

        if (tile.BlocksMovement())
        {
            Debug.Log("Console Message: You don't can't do that.");
            yield break;
        }

        caller.connections.OnMove.Invoke();

        if (tile.currentlyStanding != null)
        {
            AttackAction attack = new AttackAction(tile.currentlyStanding);
            attack.Setup(caller);
            while (attack.action.MoveNext())
            {
                yield return(attack.action.Current);
            }
            yield break;
        }

        caller.SetPosition(intendedLocation);

        if (costs)
        {
            caller.energy -= caller.energyPerStep * tile.movementCost;
        }

        caller.UpdateLOS();
    }