public void ProcessScoutAttack(DamageShipEvent e) { if (_shipAttackedThisRound) { ProcessDamage(e); } }
public void ProcessDamage(DamageShipEvent e) { _shipAttackedThisRound = true; if (e.IgnoreShields || Shields == 0) { Hull -= e.Damage; Hull = Math.Max(0, Hull); string msg = $"{e.Message} and caused {e.Damage} hull damage. "; _eventManager.Trigger("AppendMessage", new DefaultEvent(msg)); return; } string message = ""; Shields -= e.Damage; if (Shields < 0) { Hull -= Math.Abs(Shields); Hull = Math.Max(0, Hull); message = $"{e.Message} which destroyed our shields and caused {Math.Abs(Shields)} hull damage. "; Shields = 0; } else { message = $"{e.Message} and caused {e.Damage} damage to our shields. "; } _eventManager.Trigger("AppendMessage", new DefaultEvent(message)); }
public override void Activate(EventManager eventManager) { if (IsDisabled) { return; } var damageEvent = new DamageShipEvent(Name, Damage, $"{Name} opened fire"); eventManager.Trigger("ScoutAttack", damageEvent); }
public override void OnDestroy(EventManager eventManager = null) { if (IsDisabled) { eventManager.Trigger("AppendMessage", new DefaultEvent($"{SoundFx.ThreatDestroyed()}{Name} exploded, but our stasis beam prevented damage to our ship. ")); return; } eventManager.Trigger("AppendMessage", new DefaultEvent($"{SoundFx.ThreatDestroyed()} ")); var eventArgs = new DamageShipEvent(Name, Damage, $"{Name} exploded"); eventManager.Trigger("DamageShip", eventArgs); }
public override void Activate(EventManager eventManager) { if (IsDisabled) { return; } eventManager.Trigger("AppendMessage", new DefaultEvent(SoundFx.SolarWinds)); var eventArgs = new DamageShipEvent(Name, 5, $"The extreme heat from the {Name} affected the ship systems"); eventManager.Trigger("DamageShip", eventArgs); eventManager.Trigger("DiscardThreat", new DefaultThreatEvent(this)); }
public void InitializeEvents(EventManager eventManager) { _eventManager = eventManager; // create events _eventManager.On("ScannerDrawThreatCard", (e) => { // scanners detected a threat, draw a card if (ThreatDeck.Count < 1) { // if threat deck is empty deal 1 damage to the player ship var damageEvent = new DamageShipEvent(string.Empty, 1, $"We have three locked threats in our scanners, but the threat deck is empty. An unknown entity opened fire"); eventManager.Trigger("DamageShip", damageEvent); return; } _eventManager.Trigger("AppendMessage", new DefaultEvent("Our scanners are detecting a new threat. ")); DrawThreat(); }); _eventManager.On("DiscardThreat", (e) => { var threat = ((DefaultThreatEvent)e).Threat; threat.OnDestroy(_eventManager); _eventManager.Trigger("MissionCleanup", (DefaultThreatEvent)e); if (threat is InternalThreat it) { InternalThreats.Remove(it); } else if (threat is ExternalThreat et) { ExternalThreats.Remove(et); } }); _eventManager.On("CloakedThreatsActivated", (e) => _rollThreatDieAgain = true); _eventManager.On("RemoveCrewFromMission", (e) => RemoveCrewFromMission((RemoveCrewFromMissionEvent)e)); _eventManager.On("TimeWarpActivated", (e) => HealExternalThreats()); }