示例#1
0
    public override IEnumerator Hit(CharacterBase sender, Loc target, MainSystem sys)
    {
        Assert.IsTrue(sender is Player);
        // ターゲットの 1 歩前まで移動する
        Loc to = target.Backward(sender.Dir);

        yield return(Run((Player)sender, to, sys));
    }
示例#2
0
    // 前進する場合の移動先の候補を返す。進めない場合は後退する。
    private static Loc[] Advance(Loc fm, Dir dir)
    {
        var locs = new[] {
            fm.Forward(dir),
            fm.Forward(dir.Clockwise()),
            fm.Forward(dir.Anticlockwise()),
            fm.Forward(dir.Clockwise().Clockwise()),
            fm.Forward(dir.Anticlockwise().Anticlockwise()),
            fm.Backward(dir),
        };

        return(locs);
    }
示例#3
0
    public override IEnumerator Hit(CharacterBase sender, CharacterBase target, MainSystem sys)
    {
        Assert.IsTrue(target is Enemy);

        // target をsender.Dir 方向にふきとばす
        CharacterBase hitTarget;
        Loc           to = sys.FindHitTarget(target.Loc, sender.Dir, out hitTarget);

        // hitTarget != null なら他の敵と衝突した。TODO:5 ダメージ与える
        yield return(CAction.MoveEnemy((Enemy)target, to));

        // ふきとんだ後の着地点
        Loc loc = to.Backward(sender.Dir);

        target.UpdateLoc(loc);
        // 着地点が水ならワープ
        if (sys.IsWater(loc))
        {
            yield return(new SkillWarp().Use(target, sys));
        }
    }