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)); }
// 前進する場合の移動先の候補を返す。進めない場合は後退する。 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); }
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)); } }