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(); } }
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); }