/// <summary> /// Handles damage logic /// </summary> /// <param name="value"></param> protected override bool OnDamage(float value) { // Calculate damage after defense var damage = value - this.defense.maximum; // If there is damage to be taken if (damage > 0) { float healthPercentageLost = this.health.Reduce(damage); var damageReceived = new DamageReceivedEvent(); damageReceived.damage = damage; damageReceived.healthPercentageLost = healthPercentageLost; this.gameObject.Dispatch <DamageReceivedEvent>(damageReceived); // If the damage is exceeded if (this.health.current <= 0f) { this.Incapacitate(); } if (this.logging) { StratusDebug.Log("Received " + damage + " damage! Now at " + this.health.current + " health!", this); } // Announce that health has been modified this.gameObject.Dispatch <HealthModifiedEvent>(new HealthModifiedEvent(this)); return(true); } // If no damage was taken this.gameObject.Dispatch <DamageBlockedEvent>(new DamageBlockedEvent()); return(false); }
private void Start() { damageReceivedEvent = new DamageReceivedEvent(); unityEvents.Add(EventName.DamageReceivedEvent, damageReceivedEvent); EventManager.AddInvoker(EventName.DamageReceivedEvent, this); }