예제 #1
0
        private void CreateAITask(uint aiID, uint targetID, float deltaTime, int iterations)
        {
            mAIIterator.Add(aiID);
            var resultPlacement = new BlockingCollection <VehicleControls>(1);

            mControlResults[aiID] = resultPlacement;
            var requestPlacement = new BlockingCollection <SimulationState>(1);

            mControlRequests[aiID] = requestPlacement;
            MonteCarloVehicleAI ai = new MonteCarloVehicleAI(aiID, targetID, deltaTime, SimulationData, iterations);   //TODO: inconsistently assuming delta time fixed here and otherwise elsewhere
            Action aiAction        = () =>
            {
                while (true)
                {
                    SimulationState state    = requestPlacement.Take();
                    VehicleControls controls = ai.ComputeControl(state);
                    resultPlacement.Add(controls);
                }
            };
            Task aiTask = new Task(aiAction);

            requestPlacement.Add(ActiveState);
            aiTask.Start();
        }