public static void DispatchDestructionDomainSignal(this GameObject critter, D20DispatcherKey dispKey) { var dispatcher = critter.GetDispatcher(); var dispIo = new DispIoD20Signal(); dispatcher?.Process(DispatcherType.DestructionDomain, dispKey, dispIo); }
public void D20SendSignal(GameObject obj, D20DispatcherKey key, object arg) { if (obj == null) { Logger.Warn("D20SendSignal called with null handle! Key was {0}", key); return; } var dispatcher = obj.GetDispatcher(); if (dispatcher == null) { Logger.Info("d20SendSignal(): Object {0} lacks a Dispatcher", obj); return; } DispIoD20Signal dispIO = DispIoD20Signal.Default; dispIO.obj = arg; dispatcher.Process(DispatcherType.D20Signal, key, dispIO); }
public void AdvanceTime(TimePoint time) { if (_lastAdvanceTime == default) { _lastAdvanceTime = time; return; } else if (time < _lastAdvanceTime) { _lastAdvanceTime = time; return; } var elapsedSeconds = (float)(time - _lastAdvanceTime).TotalSeconds; _lastAdvanceTime = time; foreach (var partyMember in GameSystems.Party.PartyMembers) { var dispatcher = partyMember.GetDispatcher(); if (dispatcher != null) { var dispIo = new DispIoD20Signal(); dispIo.TimePoint = time; dispatcher.Process(DispatcherType.D20AdvanceTime, D20DispatcherKey.NONE, dispIo); ((Dispatcher)dispatcher).RemoveExpiredConditions(); } } if (!GameSystems.Combat.IsCombatActive()) { AdvanceOutOfCombatTurns(elapsedSeconds); } if (!GameUiBridge.IsPartyPoolVisible()) { GameUiBridge.UpdatePartyUi(); } }