Esempio n. 1
0
        private void CheckTriggers(ServerGameState state, EventBase ev)
        {
            var myEventFilter = new PredicatedEvent()
            {
                Event  = ev,
                Filter = ev.GetFilter(),
                Side   = PredicateSide.Friendly
            };

            var oppEventFilter = new PredicatedEvent()
            {
                Event  = ev,
                Filter = ev.GetFilter(),
                Side   = PredicateSide.Enemy
            };

            var myTriggeredEvents  = state.Me.Triggers.GetAssociatedEvents(myEventFilter);
            var oppTriggeredEvents = state.Opp.Triggers.GetAssociatedEvents(oppEventFilter);

            if (myTriggeredEvents.Any() || oppTriggeredEvents.Any())
            {
                // TODO: form and re-query chain of events
                // TODO: check the event orders / orders of minion appearances
                // TODO: re-call ProcessEvent() for each triggered event and return the resulting events
                throw new NotImplementedException();
            }
        }
Esempio n. 2
0
        public List <PredicatedEvent> GetAssociatedEvents(PredicatedEvent condition)
        {
            var mappedTriggers = new List <Trigger>();

            foreach (var trigger in triggers)
            {
                if (condition.Event.Type == trigger.Condition.Event.Type)
                {
                    // TODO: apply more generic condition checks
                    if (condition.Filter.Id == trigger.Condition.Filter.Id)
                    {
                        mappedTriggers.Add(trigger);
                    }
                }
            }

            var predicatedEvents = mappedTriggers.Select(x => x.Action).ToList();

            triggers.RemoveAll(x => x.IsOneTimeTrigger == true && mappedTriggers.Contains(x));

            return(predicatedEvents);
        }