private void OnBodyDamage(TurretDamage damage, string displayText) { Game.PlayEffect(EffectName.CustomFloatText, RotationCenter + Vector2.UnitY * 5, displayText); Game.PlayEffect(EffectName.Electric, RotationCenter); Game.PlayEffect(EffectName.Electric, RotationCenter); Game.PlaySound("ElectricSparks", RotationCenter); m_damage = m_damage | damage; }
public override void OnDamage(IObject obj, ObjectDamageArgs args) { foreach (var dc in m_damageableComponents) { if (dc.Object.UniqueID == obj.UniqueID) { // barrel component is indestructible and there are 4 dc. A cheap solution is // to randomize to have barrel damage instead when other dc takes damage if (RandomHelper.Between(0, 1) < (1f / 3f) - (1f / 4f)) { m_damageableComponents.First().OnDamage(args); } dc.OnDamage(args); break; } } // https://www.alanzucconi.com/2015/07/26/enum-flags-and-bitwise-operators/ if (m_barrel.Health == 0 && !HasDamage(TurretDamage.BarrelDamaged)) { Game.PlayEffect(EffectName.CustomFloatText, RotationCenter + Vector2.UnitY * 5, "Barrel Damaged"); m_damage = m_damage | TurretDamage.BarrelDamaged; } if (m_rotor.Health == 0 && !HasDamage(TurretDamage.RotorDamaged)) { OnBodyDamage(TurretDamage.RotorDamaged, "Rotor Damaged"); } if (m_sensor.Health == 0 && !HasDamage(TurretDamage.SensorDamaged)) { OnBodyDamage(TurretDamage.SensorDamaged, "Sensor Damaged"); } if (m_controller.Health == 0 && !HasDamage(TurretDamage.ControllerDamaged)) { OnBodyDamage(TurretDamage.ControllerDamaged, "Controller Damaged"); } if (Totaled() && !IsDestroyed) { Destroy(); } }
public bool HasDamage(TurretDamage damage) { return((m_damage & damage) == damage); }