public GridNavigationTask(State t_startState, State t_goalState, float t_inflationFactor, ref List <State> t_path, float t_tunnelDistanceThreshold, float t_tunnelTimeThreshold, ref List <State> t_spaceTimePath, GridTimeDomain t_gridTimeDomain, TaskPriority t_taskPriority, TaskManager taskManager) : base(taskManager, t_taskPriority) // defaults to a real-time task -- now what happens when both this and Global are first put in queue ?? { taskType = TaskType.GridNavigationTask; startState = t_startState; goalState = t_goalState; // EVENT : startState will trigger GridNavigationTask that STATE_CHANGED startState.registerObserver(Event.STATE_POSITION_CHANGED, this); // EVENT : goalState will trigger GridNavigationTask that STATE_CHANGED goalState.registerObserver(Event.STATE_POSITION_CHANGED, this); // EVENT : goalState will trigger GridNavigationTask that it is GOAL_INVALID or VALID goalState.registerObserver(Event.GOAL_INVALID, this); goalState.registerObserver(Event.GOAL_VALID, this); inflationFactor = t_inflationFactor; //planner = t_planner; outputPlan = new Dictionary <DefaultState, ARAstarNode>(); path = t_path; // TODO : deprecate these lists List <PlanningDomainBase> domainList = new List <PlanningDomainBase>(); ARAstarDomain araStarDomain = new ARAstarDomain(); araStarDomain.setPlanningTask(this); domainList.Add(araStarDomain); gridPlanner = new ARAstarPlanner(); gridPlanner.init(ref domainList, 100); initialized = true; obstacleChanged = false; obstacleChangedData = new List <object> (); // tunnel planner variables tunnelDistanceThreshold = t_tunnelDistanceThreshold; tunnelTimeThreshold = t_tunnelTimeThreshold; gridTimeDomain = t_gridTimeDomain; spaceTimePath = t_spaceTimePath; spaceTimePathStatus = false; dynamicChange = false; currentlyExecutingTask = false; gridPathStatus = PathStatus.NoPath; }
// defaults to a real-time task -- now what happens when both this and Global are first put in queue ?? public GridNavigationTask(State t_startState, State t_goalState, float t_inflationFactor, ref List<State> t_path, float t_tunnelDistanceThreshold, float t_tunnelTimeThreshold, ref List<State> t_spaceTimePath, GridTimeDomain t_gridTimeDomain, TaskPriority t_taskPriority, TaskManager taskManager) : base(taskManager, t_taskPriority) { taskType = TaskType.GridNavigationTask; startState = t_startState; goalState = t_goalState; // EVENT : startState will trigger GridNavigationTask that STATE_CHANGED startState.registerObserver(Event.STATE_POSITION_CHANGED, this); // EVENT : goalState will trigger GridNavigationTask that STATE_CHANGED goalState.registerObserver(Event.STATE_POSITION_CHANGED, this); // EVENT : goalState will trigger GridNavigationTask that it is GOAL_INVALID or VALID goalState.registerObserver(Event.GOAL_INVALID, this); goalState.registerObserver(Event.GOAL_VALID, this); inflationFactor = t_inflationFactor; //planner = t_planner; outputPlan = new Dictionary<DefaultState, ARAstarNode>(); path = t_path; // TODO : deprecate these lists List<PlanningDomainBase> domainList = new List<PlanningDomainBase>(); ARAstarDomain araStarDomain = new ARAstarDomain (); araStarDomain.setPlanningTask(this); domainList.Add(araStarDomain); gridPlanner = new ARAstarPlanner(); gridPlanner.init(ref domainList, 100); initialized = true; obstacleChanged = false; obstacleChangedData = new List<object> (); // tunnel planner variables tunnelDistanceThreshold = t_tunnelDistanceThreshold; tunnelTimeThreshold = t_tunnelTimeThreshold; gridTimeDomain = t_gridTimeDomain; spaceTimePath = t_spaceTimePath; spaceTimePathStatus = false; dynamicChange = false; currentlyExecutingTask = false; gridPathStatus = PathStatus.NoPath; }
public GlobalNavigationtask(State t_startState, State t_goalState, int t_passableMask, TaskPriority t_taskPriority, TaskManager taskManager) : base(taskManager, t_taskPriority) // defaults to a real-time task unless the priority is explicitly set { taskType = TaskType.GlobalNavigationTask; startState = t_startState; goalState = t_goalState; // EVENT: globalNavigationTask is triggered by the goalState when STATE_CHANGED goalState.registerObserver(Event.STATE_POSITION_CHANGED, this); // NOTE: this does not replan when the start state changes passableMask = t_passableMask; }
// defaults to a real-time task unless the priority is explicitly set public GlobalNavigationtask(State t_startState, State t_goalState, int t_passableMask, TaskPriority t_taskPriority, TaskManager taskManager) : base(taskManager, t_taskPriority) { taskType = TaskType.GlobalNavigationTask; startState = t_startState; goalState = t_goalState; // EVENT: globalNavigationTask is triggered by the goalState when STATE_CHANGED goalState.registerObserver(Event.STATE_POSITION_CHANGED, this); // NOTE: this does not replan when the start state changes passableMask = t_passableMask; }
private void _MoveToNextTaskForExecution() { // we finished executing current plan currentPlanExecutionIndex = currentPlanExecutionIndex + 1; globalPath.RemoveAt(0); // we can remove the grid task, the local path and the space time path numGlobalPathWaypoints--; if (numGlobalPathWaypoints == 0) { Debug.LogWarning("REACHED GOAL or reached end of all calculated space time paths -- cannot execute any more"); goalReached = true; return; } gridNavigationTasks[currentPlanExecutionIndex - 1].currentlyExecutingTask = false; gridNavigationTasks[currentPlanExecutionIndex].currentlyExecutingTask = true; // WE UNREGISTER THE PREVIOUS TASK FROM THE NEIGHBOR AGENTS AND REGISTER THE CURRENT ONE neighborAgents.observable.unregisterObserver(Event.NEIGBHOR_AGENTS_CHANGED, gridNavigationTasks[currentPlanExecutionIndex - 1]); neighborObstacles.observable.unregisterObserver(Event.NEIGBHOR_DYNAMIC_OBSTACLES_CHANGED, gridNavigationTasks[currentPlanExecutionIndex - 1]); // WE REGISTER THE CURRENT ONE neighborAgents.observable.registerObserver(Event.NEIGBHOR_AGENTS_CHANGED, gridNavigationTasks[currentPlanExecutionIndex]); neighborObstacles.observable.registerObserver(Event.NEIGBHOR_DYNAMIC_OBSTACLES_CHANGED, gridNavigationTasks[currentPlanExecutionIndex]); // TODo: NOT SURE IF THIS IS CORREECT unregister with its old goal for previous task globalPath[0].unregisterObserver(Event.STATE_POSITION_CHANGED, gridNavigationTasks[currentPlanExecutionIndex - 1]); // JUST MANUALLY SENDING IT A START STATE CHANGED EVENT Vector3[] data = new Vector3[2]; data[0] = gridNavigationTasks[currentPlanExecutionIndex].startState.getPosition(); data[1] = currentState.getPosition(); gridNavigationTasks[currentPlanExecutionIndex].notifyEvent(Event.STATE_POSITION_CHANGED, data); // IMP :: we need to make the next task monitor the current start state now + unregister to previous start state gridNavigationTasks[currentPlanExecutionIndex].startState = currentState; currentState.registerObserver(Event.STATE_POSITION_CHANGED, gridNavigationTasks[currentPlanExecutionIndex]); gridNavigationTasks[currentPlanExecutionIndex].notifyEvent(Event.CURRENT_EXECUTING_TASK, null); }