Beispiel #1
0
    public void UpdateEvent()
    {
        if (currentEvent == null)
        {
            if (eventQueue.Count > 0)
            {
                currentEvent = eventQueue.Dequeue();
                currentEvent.ResetEvent();
            }
            else
            {
                Goodbye();
            }
        }

        if (currentEvent != null)
        {
            if (!currentEvent.IsEventComplete())
            {
                currentEvent.UpdateEvent();
            }
            else
            {
                currentEvent = null;
            }
        }
    }
Beispiel #2
0
    public override void UpdateEvent()
    {
        if (currentEvent == null)
        {
            while (index < children.Count && !children[index].IsEventAvailable())
            {
                index++;
            }

            if (index < children.Count)
            {
                currentEvent = children[index];
            }
        }

        if (currentEvent != null)
        {
            if (!currentEvent.IsEventComplete())
            {
                currentEvent.UpdateEvent();
            }
            else
            {
                currentEvent = null;
                index++;
            }
        }
    }
    public override void ResetEvent()
    {
        foreach (NeverdawnEventBase e in children)
        {
            e.ResetEvent();
        }

        currentEvent = null;
        index        = 0;
    }
Beispiel #4
0
    internal static NeverdawnEventBase LoadEvent(XmlNode node)
    {
        string             eventType = node.Name;
        NeverdawnEventBase result    = null;

        if (eventType.Equals(EVENT_TYPE_SEQUENCE))
        {
            result = new NeverdawnSequence(node);
        }

        if (eventType.Equals(EVENT_TYPE_FIRST_MATCH))
        {
            result = new NeverdawnFirstMatch(node);
        }

        if (eventType.Equals(EVENT_TYPE_LAST_MATCH))
        {
            result = new NeverdawnLastMatch(node);
        }

        if (eventType.Equals(EVENT_TYPE_PHRASE))
        {
            result = new NeverdawnPhrase(node);
        }

        if (eventType.Equals(EVENT_TYPE_INVESTIGATION))
        {
            result = new NeverdawnInvestigateEvent();
        }

        if (eventType.Equals(EVENT_TYPE_DISCOVERY))
        {
            result = new NeverdawnDiscovery(node);
        }

        if (result != null)
        {
            result.id                = XmlUtil.Get(node, "id", string.Empty);
            result.conditions        = XmlUtil.GetArray(node, "if", ' ');
            result.inverseConditions = XmlUtil.GetArray(node, "not", ' ');
            result.targetId          = XmlUtil.Get(node, "target", string.Empty);
            result.children          = new List <NeverdawnEventBase>();
        }

        return(result);
    }
Beispiel #5
0
    public static NeverdawnEventBase LoadEvent(XmlNode node)
    {
        NeverdawnEventBase currentEvent = NeverdawnEventBase.LoadEvent(node);

        // Triggerable events
        if (currentEvent != null)
        {
            foreach (XmlNode childNode in node.ChildNodes)
            {
                NeverdawnEventBase childEvent = LoadEvent(childNode);

                if (childEvent != null)
                {
                    currentEvent.children.Add(childEvent);
                }
            }
        }

        return(currentEvent);
    }
Beispiel #6
0
    private void loadEvents()
    {
        events = new Dictionary <string, NeverdawnEventBase>();

        XmlDocument doc = NeverdawnScene.sceneEventsXml;

        XmlNodeList list = doc.GetElementsByTagName("events");

        if (list != null)
        {
            XmlNode eventsNode = list[0];

            if (eventsNode != null)
            {
                foreach (XmlNode node in eventsNode.ChildNodes)
                {
                    NeverdawnEventBase eventBase = NeverdawnUtility.LoadEvent(node);
                    events.Add(eventBase.id, eventBase);
                }
            }
        }
    }
    public override void UpdateEvent()
    {
        if (currentEvent == null)
        {
            currentEvent = children.FirstOrDefault(e => e.IsEventAvailable());
        }

        if (currentEvent != null)
        {
            if (currentEvent.IsEventComplete())
            {
                index = -1;
            }
            else
            {
                currentEvent.UpdateEvent();
            }
        }
        else
        {
            index = -1;
        }
    }
Beispiel #8
0
    private void questionSelected(TopicQuestion question)
    {
        if (question.trigger == null)
        {
            chatMessage.Discard();
        }
        else
        {
            chatMessage = null;

            if (question.trigger.Equals(string.Empty))
            {
                Topic topic = NeverdawnDatabase.GetTopic(question.topicId);
                selectedEvent = topic.defaultEvent;
            }
            else
            {
                selectedEvent = EventController.FindEvent(question.trigger);
            }

            selectedEvent.ResetEvent();
        }
    }
    public override void UpdateEvent()
    {
        if (mode == EventExecutionType.Sequence)
        {
            if (currentEvent == null)
            {
                while (index < events.Count && !events[index].IsEventAvailable())
                {
                    index++;
                }

                if (index < events.Count)
                {
                    currentEvent = events[index];
                }
            }

            if (currentEvent != null)
            {
                if (!currentEvent.IsEventComplete())
                {
                    currentEvent.UpdateEvent();
                }
                else
                {
                    currentEvent = null;
                    index++;
                }
            }
        }
        else if (mode == EventExecutionType.Parallel)
        {
            foreach (NeverdawnEventBase e in events)
            {
                if (e.IsEventAvailable() && !e.IsEventComplete())
                {
                    e.UpdateEvent();
                }
            }
        }
        else if (mode == EventExecutionType.FirstMatch)
        {
            if (currentEvent == null)
            {
                currentEvent = events.FirstOrDefault(e => e.IsEventAvailable());
            }

            if (currentEvent != null)
            {
                if (currentEvent.IsEventComplete())
                {
                    index = -1;
                }
                else
                {
                    currentEvent.UpdateEvent();
                }
            }
            else
            {
                index = -1;
            }
        }
    }