예제 #1
0
    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));
        }
    }
예제 #2
0
    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;
    }
예제 #3
0
    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));
        }
    }