예제 #1
0
        /// <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);
        }
예제 #2
0
 private void Start()
 {
     damageReceivedEvent = new DamageReceivedEvent();
     unityEvents.Add(EventName.DamageReceivedEvent, damageReceivedEvent);
     EventManager.AddInvoker(EventName.DamageReceivedEvent, this);
 }