private void OnDamage(DamageFrame f) { if (Disabled) { return; } foreach (SpawnObject a in SpawnOnDamage) { GameObject o = Instantiate(a.spawnObject, LevelLoader.TemporaryObjects); o.transform.position = (Vector3)f.hitPosition + a.position; } }
void Damageable.Damage(DamageFrame damageFrame) { }
void Damageable.Damage(DamageFrame frame) { if (Invulnerable) { return; } if (Faction != Factions.AgainstAll) { if (frame.attacker != null) { if (frame.attacker.Faction != Factions.AgainstAll) { if (frame.attacker.Faction == Faction) { return; } } } } OnDamage.Invoke(frame); if (frame.attacker != null) { if (frame.attacker.Faction == Factions.Player) { frame.amount = (int)System.Math.Round((double)frame.amount * ((double)Difficulty.PlayerDamage / 100d)); } else { frame.amount = (int)System.Math.Round((double)frame.amount * ((double)Difficulty.EnemyDamage / 100d)); } } frame.amount *= 100; frame.amount /= 100 + Armor; Messaging.GUI.DamageIndicator.Invoke(frame.hitPosition, AxMath.OneThousanth(frame.amount).ToString(), frame.damageType); HitPoints -= frame.amount; if (frame.attacker != null) { frame.attacker.OnDealDamage.Invoke(frame.amount); } softDamageFrame.amount = frame.amount; GenerateSoftDamage.Invoke(softDamageFrame); SoftDamage += softDamageFrame.amount; if (HitPoints <= 0) { OnDeath.Invoke(); if (CurrentWeapon != null) { Destroy(CurrentWeapon.gameObject); } Destroy(gameObject); } }