Exemplo n.º 1
0
        protected void Deactivate(QuestPin pin)
        {
            QuestObjectState state = GetState(pin);

            if (state.Locked || state.Active == QuestObjectState.ActivationState.Inactive)
            {
                return;
            }
            state.Active = QuestObjectState.ActivationState.Inactive;
            GameDebugger.Log(LogLevel.Debug, "QS: {0} '0x{1:X16}' deactivated", pin.GetType().Name, pin.Id);

            if (pin.Type == GraphPin.PinType.Input)
            {
                if (m_ActivelyChecked.ContainsKey(pin.Id))
                {
                    GameDebugger.Log(LogLevel.Debug, "QS: Removing {0} '0x{1:X16}' from the list of actively checked objects", pin.GetType().Name, pin.Id);
                    m_ActivelyChecked.Remove(pin.Id);
                }
            }

            foreach (QuestConnection connection in pin.Connections)
            {
                if (connection.Source != pin)
                {
                    continue;
                }
                Deactivate(connection);
            }

            if (pin.Type == GraphPin.PinType.Input)
            {
                Deactivate((BaseQuestObject)pin.Node);
            }
        }
Exemplo n.º 2
0
        protected void Lock(QuestPin pin, bool propagate)
        {
            QuestObjectState state = GetState(pin);

            if (state.Locked)
            {
                return;
            }
            state.Locked = true;
            GameDebugger.Log(LogLevel.Debug, "QS: {0} '0x{1:X16}' locked", pin.GetType().Name, pin.Id);

            if (pin.Type == GraphPin.PinType.Input)
            {
                if (m_ActivelyChecked.ContainsKey(pin.Id))
                {
                    GameDebugger.Log(LogLevel.Debug, "QS: Removing {0} '0x{1:X16}' from the list of actively checked objects", pin.GetType().Name, pin.Id);
                    m_ActivelyChecked.Remove(pin.Id);
                }
            }

            foreach (QuestConnection connection in pin.Connections)
            {
                Lock(connection, (connection.Target == pin));                 // propagate locking only on incoming connections
            }

            if (propagate && pin.Type == GraphPin.PinType.Output)
            {
                foreach (QuestPin otherPin in pin.Node.Outputs)
                {
                    if (otherPin == pin)
                    {
                        continue;
                    }
                    Lock(otherPin, false);
                }
                Lock((BaseQuestObject)pin.Node);
            }
        }