Exemplo n.º 1
0
 public void Add(BaseAIEvent aiEvent)
 {
     if (events.Contains(aiEvent))
     {
         Debug.LogWarning("Attempting to add duplicate AI event: " + aiEvent.EventType);
         return;
     }
     aiEvent.Reset();
     events.Add(aiEvent);
 }
Exemplo n.º 2
0
 public void Tick(float deltaTime, StateStatus stateStatus)
 {
     foreach (BaseAIEvent @event in events)
     {
         @event.Tick(deltaTime, eventListener);
     }
     inBlock           = false;
     currentEventIndex = 0;
     for (currentEventIndex = 0; currentEventIndex < events.Count; currentEventIndex++)
     {
         BaseAIEvent baseAIEvent  = events[currentEventIndex];
         BaseAIEvent baseAIEvent2 = ((currentEventIndex < events.Count - 1) ? events[currentEventIndex + 1] : null);
         if (baseAIEvent2 != null && baseAIEvent2.EventType == AIEventType.And && !inBlock)
         {
             inBlock = true;
         }
         if (baseAIEvent.EventType != AIEventType.And)
         {
             if (baseAIEvent.ShouldExecute)
             {
                 baseAIEvent.Execute(Memory, senses, stateStatus);
                 baseAIEvent.PostExecute();
             }
             bool result = baseAIEvent.Result;
             if (inBlock)
             {
                 if (result)
                 {
                     if ((baseAIEvent2 != null && baseAIEvent2.EventType != AIEventType.And) || baseAIEvent2 == null)
                     {
                         inBlock = false;
                         if (baseAIEvent.HasValidTriggerState)
                         {
                             baseAIEvent.TriggerStateChange(eventListener, baseAIEvent.ID);
                             break;
                         }
                     }
                 }
                 else
                 {
                     inBlock           = false;
                     currentEventIndex = FindNextEventBlock() - 1;
                 }
             }
             else if (result && baseAIEvent.HasValidTriggerState)
             {
                 baseAIEvent.TriggerStateChange(eventListener, baseAIEvent.ID);
                 break;
             }
         }
     }
 }
Exemplo n.º 3
0
 private int FindNextEventBlock()
 {
     for (int i = currentEventIndex; i < events.Count; i++)
     {
         BaseAIEvent baseAIEvent  = events[i];
         BaseAIEvent baseAIEvent2 = ((i < events.Count - 1) ? events[i + 1] : null);
         if (baseAIEvent2 != null && baseAIEvent2.EventType != AIEventType.And && baseAIEvent.EventType != AIEventType.And)
         {
             return(i + 1);
         }
     }
     return(events.Count + 1);
 }
Exemplo n.º 4
0
 public void Init(ProtoBuf.AIStateContainer container, BaseEntity owner)
 {
     ID              = container.id;
     State           = (AIState)container.state;
     InputMemorySlot = container.inputMemorySlot;
     Events          = new List <BaseAIEvent>();
     if (container.events == null)
     {
         return;
     }
     foreach (AIEventData @event in container.events)
     {
         BaseAIEvent baseAIEvent = BaseAIEvent.CreateEvent((AIEventType)@event.eventType);
         baseAIEvent.Init(@event, owner);
         baseAIEvent.Reset();
         Events.Add(baseAIEvent);
     }
 }