public static void DispatchDestructionDomainSignal(this GameObject critter, D20DispatcherKey dispKey)
    {
        var dispatcher = critter.GetDispatcher();
        var dispIo     = new DispIoD20Signal();

        dispatcher?.Process(DispatcherType.DestructionDomain, dispKey, dispIo);
    }
Esempio n. 2
0
    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);
    }
Esempio n. 3
0
    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();
        }
    }