Example #1
0
    protected override IEnumerator InternalExecuteRoutine(Effector effect, Result <bool> result)
    {
        DirectionCursor cursor = battle.SpawnDirectionCursor(actor.location);

        Result <EightDir> dirResult = new Result <EightDir>();

        yield return(cursor.SelectTargetDirRoutine(dirResult, actor, (Vector2Int v) => {
            float d = Mathf.Abs(actor.battler.transform.position.y - map.terrain.HeightAt(v.x, v.y));
            return d <= BattleEvent.AttackHeightMax && DefaultSelectRule(effect)(v);
        }, true));

        battle.DespawnDirCursor();

        if (dirResult.canceled)
        {
            result.Cancel();
        }
        else
        {
            float d = Mathf.Abs(actor.battler.transform.position.y -
                                map.terrain.HeightAt(actor.battler.location + dirResult.value.XY()));
            if (d <= BattleEvent.AttackHeightMax)
            {
                yield return(effect.ExecuteDirectionRoutine(dirResult.value));

                result.value = true;
            }
            else
            {
                result.Cancel();
            }
        }
    }
Example #2
0
 public override IEnumerator TryAIUse(AIController ai, Effector effect)
 {
     if (Vector2Int.Distance(actor.location, ai.pc.location) < 1.5)
     {
         battle.Log(actor + " used " + skill.skillName);
         EightDir dir = EightDirExtensions.DirectionOf(ai.pc.location - actor.location);
         return(effect.ExecuteDirectionRoutine(dir));
     }
     else
     {
         return(null);
     }
 }