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); }
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(); }
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); } } }
public void RaiseDamagedEvent(int damage, DamageType type) { AnyDamagedEvent?.Invoke(this, damage, type); DamagedEvent?.Invoke(damage, type); }
public void Damage() { HealthPoints -= 10; DamagedEvent?.Invoke(this); }
private void OnDamagedEvent(DamagedEvent devent) { Units[devent.UnitId].Damage(devent.Amount); }