protected override IEnumerator Run(MainSystem sys) { // 攻撃キャラを、ターゲットとの中間に移動させる(攻撃アニメーションの代替) var src = Actor.Position; var dst = src; dst.x = (src.x + _target.Position.x) / 2; dst.y = (src.y + _target.Position.y) / 2; Actor.Position = dst; // ターゲットの方を向く Actor.ChangeDir(Actor.Loc.Toward(_target.Loc)); _target.HideDirection(); // ターゲットは攻撃者の方を向く。ただし以下の場合は振り向かない // - 目の前に敵が存在する // - 攻撃者が透明状態 if (!sys.ExistsEnemy(_target.Front()) && !Actor.IsInvisible()) { _target.ChangeDir(_target.Loc.Toward(Actor.Loc)); } _target.RemoveStatus(StatusType.Sleep); var dmg = 16 + new System.Random().Next(30); yield return(Anim.Par(sys, () => _target.DamageAnim(dmg), () => EffectAnim.PopupWhiteDigits(_target, dmg))); _target.DamageHp(dmg); Actor.Position = src; }
protected override IEnumerator Run(MainSystem sys) { // 攻撃キャラを、ターゲットの中間に移動させる(攻撃アニメーションの代替) var src = Actor.Position; var dst = src; dst.x = (src.x + _target.Position.x) / 2; dst.y = (src.y + _target.Position.y) / 2; Actor.Position = dst; var rand = new Random(); var dmg = 20 + rand.Next(-2, 5); _target.RemoveStatus(StatusType.Sleep); // TODO:Func<IEnumerator> ではなくて、IEnumerator を渡す yield return(Anim.Par(sys, () => _target.DamageAnim(dmg), () => EffectAnim.PopupWhiteDigits(_target, dmg))); _target.DamageHp(dmg); Actor.Position = src; if (_target.Hp <= 0) // 敵を倒したときに爆発アニメーション { var pos = _target.Position; _target.Destroy(); yield return(EffectAnim.Dead(pos)); } }
private IEnumerator Run(MainSystem sys) { _target.RemoveStatus(StatusType.Sleep); yield return(Anim.Par(sys, () => _target.DamageAnim(_damage), () => EffectAnim.PopupWhiteDigits(_target, _damage))); _target.DamageHp(_damage); if (_target.Hp <= 0 && _target is Enemy) { var pos = _target.Position; _target.Destroy(); yield return(EffectAnim.Dead(pos)); } AnimationFinished = true; }
public override IEnumerator Hit(CharacterBase sender, CharacterBase target, MainSystem sys) { yield return(EffectAnim.Thunder(target.Position)); int damage = 99; yield return(Anim.Par(sys, () => target.DamageAnim(damage), () => EffectAnim.PopupWhiteDigits(target, damage))); target.DamageHp(damage); if (target.Hp <= 0 && target is Enemy) { var pos = target.Position; target.Destroy(); yield return(EffectAnim.Dead(pos)); } }