Exemplo n.º 1
0
        private bool Attack()
        {
            var attackUnit = _sequence[_count];
            var target     = attackUnit.Target;

            _count++;
            if (_count > 3)
            {
                _count = 0;
            }

            if (target.DEX > MyRandom.GetRandom(100))
            {
                Device.BeginInvokeOnMainThread(() =>
                                               DamagedEvent?.Invoke(this, new DamageEventArgs()
                {
                    Target = target, Damage = 0
                })
                                               );
                return(false);
            }

            var tmp           = AttackPower(attackUnit.Name) * attackUnit.AttackRatio * CalcStrongAttak(attackUnit.Name, attackUnit.AttackTargetUnit.Name);
            var creticalRatio = CalcCritical(target == _current ? _enemy : _current);
            var damage        = (int)(tmp * creticalRatio);

            target.CurrentHP -= damage;
            if (target.CurrentHP < 0)
            {
                target.CurrentHP = 0;
            }
            Device.BeginInvokeOnMainThread(() =>
                                           DamagedEvent?.Invoke(this, new DamageEventArgs()
            {
                Target = target, Damage = damage, IsCritical = creticalRatio != 1
            })
                                           );
            if (target.CurrentHP <= 0)
            {
                var winner = target == _current ? _enemy : _current;
                Device.BeginInvokeOnMainThread(() =>
                                               BattleFinshed?.Invoke(this, new BattleFinishedEventArgs()
                {
                    Winner = winner
                })
                                               );
                return(true);
            }


            return(false);
        }
Exemplo n.º 2
0
    void OnEnable()
    {
        currentHP = 10;
        // private so as not to incur weird race conditions
        // can you even have race conditions in single threaded code?
        _maxHP       = 10;
        invulnerable = false;

        damageModel = new GameObject("Damage Model");
        damageModel.transform.parent        = gameObject.transform;
        damageModel.transform.localPosition = Layers.ModelCharacter; // TODO: maybe not the character layer?
        damageModel.transform.localRotation = Quaternion.Euler(0, 0, 0);
        damageModel.layer     = 10;
        damageCollider        = damageModel.AddComponent <SphereCollider>();
        damageCollider.radius = 0.25f;

        damaged = new DamagedEvent();
    }
Exemplo n.º 3
0
    public void Damage(int amount)
    {
        if (!IsAlive)
        {
            return;
        }

        int oldAmount = CurrentHealth;

        CurrentHealth = Mathf.Max(CurrentHealth - amount, 0);
        if (oldAmount != CurrentHealth)
        {
            DamagedEvent?.Invoke(this, oldAmount - CurrentHealth);

            if (!IsAlive)
            {
                DeathEvent?.Invoke(this);
            }
        }
    }
Exemplo n.º 4
0
 public void RaiseDamagedEvent(int damage, DamageType type)
 {
     AnyDamagedEvent?.Invoke(this, damage, type);
     DamagedEvent?.Invoke(damage, type);
 }
Exemplo n.º 5
0
 public void Damage()
 {
     HealthPoints -= 10;
     DamagedEvent?.Invoke(this);
 }
Exemplo n.º 6
0
 private void OnDamagedEvent(DamagedEvent devent)
 {
     Units[devent.UnitId].Damage(devent.Amount);
 }