Beispiel #1
0
        /// <summary>
        /// The iteration loop is :
        ///     * Making a choice over a builded <see cref="_AI._DecisionTree.DecisionTree"/>.
        ///     * Queueing <see cref="AEvent"/> based on AI choice.
        /// </summary>
        /// <param name="p_eventQueue"></param>
        public override void Execute(EventQueue p_eventQueue)
        {
            ExternalHooks.Profiler_BeginSample("EntityTurnIterationEvent");

            if (TurnIteration.Iterate(Entity, p_eventQueue))
            {
                EventQueue.enqueueEvent(p_eventQueue, EntityTurnIterationEvent.alloc(Entity));
            }
            else
            {
                EventQueue.enqueueEvent(p_eventQueue, EntityTurnIterationEndEvent.alloc(Entity));
            }

            ExternalHooks.Profiler_EndSample();
        }
Beispiel #2
0
        public override void Execute(EventQueue p_eventQueue)
        {
            Entity l_nextTurnEntity = TurnTimelineAlgorithm.IncrementTimeline(TurnTimeline);

            if (l_nextTurnEntity != null)
            {
                ActionPoint.resetActionPoints(EntityComponent.get_component <ActionPoint>(l_nextTurnEntity));

                MyEvent <Entity> .broadcast(ref l_nextTurnEntity.OnEntityTurnStart, ref l_nextTurnEntity);

                // We wait for the EntityActionQueue to finish.
                EventQueue.enqueueEvent(p_eventQueue, IterateAndWaitForEmptyQueue.alloc(EntityActionQueue));

                // We enqueue an EndTurnEvent to trigger end turn related events. The EndTurnEvent will enqueue another StartTurnEvent on completion.
                EventQueue.enqueueEvent(p_eventQueue, EndTurnEvent.alloc(TurnTimeline, EntityActionQueue, l_nextTurnEntity));

                EventQueue.clearAll(EntityActionQueue);
                EventQueue.enqueueEvent(EntityActionQueue, EntityTurnIterationEvent.alloc(l_nextTurnEntity));
            }
        }