public void Initialize(ProblemDefinition problemDefinition, string planningSimulationWorldName) { var world = new World(planningSimulationWorldName); var stateManager = world.GetOrCreateSystem <StateManager>(); world.GetOrCreateSystem <SimulationSystemGroup>().AddSystemToUpdateList(stateManager); var playerLoop = UnityEngine.LowLevel.PlayerLoop.GetCurrentPlayerLoop(); ScriptBehaviourUpdateOrder.AddWorldToPlayerLoop(world, ref playerLoop); m_StateConverter = new PlannerStateConverter <TraitBasedObject, StateEntityKey, StateData, StateDataContext, StateManager>(problemDefinition, stateManager); m_Scheduler = new PlannerScheduler <StateEntityKey, ActionKey, StateManager, StateData, StateDataContext, ActionScheduler, DefaultCumulativeRewardEstimator, TerminationEvaluator, DestroyStatesJobScheduler>(); m_Scheduler.Initialize(stateManager, new DefaultCumulativeRewardEstimator(), new TerminationEvaluator(), problemDefinition.DiscountFactor); m_Executor = new Match3PlanExecutor(stateManager, m_StateConverter); // Ensure planning jobs are not running when destroying the state manager stateManager.Destroying += () => m_Scheduler.CurrentJobHandle.Complete(); }
public CleanExecutor(StateManager stateManager, PlannerStateConverter <TraitBasedObject, StateEntityKey, StateData, StateDataContext, StateManager> stateConverter) { m_StateManager = stateManager; m_StateConverter = stateConverter; }