public IEnumerator TakePath(Vector3 targetPos, string itemToTarget) { //List<Vector3> pathList = new List<Vector3>(); //pathList.Add(targetPos); if (!isCreatedPath) { Node node = closedNodeList[closedNodeList.Count - 1]; while (node.parentNode != null) { pathList.Add(node.location); //print("reverse: " + node.location); node = node.parentNode; } pathList.Reverse(); isCreatedPath = true; } if (pathList != null) { foreach (Vector3 location in pathList) { loc = new Vector3(location.x, location.y, -1); Vector3 pos = new Vector3(simStatsScript.simPos.x, simStatsScript.simPos.y, 0); //print("simPos: " + simStatsScript.simPos); // print("location: " + location); ////above this is good MoveIE = StartCoroutine(GoTowardCR(loc)); yield return(MoveIE); while (new Vector3(simStatsScript.simPos.x, simStatsScript.simPos.y, -1) != loc) { simAIScript.GoToward(loc); } //This next stuff is to ensure that sim will change direction if another sim reaches the target first simAIScript.GetTargetPos(itemToTarget); if (simAIScript.targetPos != (Vector2)targetPos) { print("ok then"); isStillPathing = false; isTakePathTime = false; isGoing = false; isRunned = false; openNodeList.Clear(); closedNodeList.Clear(); yield break; } } } //!!!By this point, target destination has been reached!!! //clear lists so a new path can be created openNodeList.Clear(); closedNodeList.Clear(); //the isGoing bool is used in SimFSM script to keep the sim going toward targetPos even while it is there already //print("State: " + simAIScript.simFSMScript.taskState); isGoing = true; isStillPathing = false; isRunned = false; }
public void TaskStatesMethod() { switch (taskState) { case TaskFSM.None: break; case TaskFSM.GettingFood: //simAIScript.simPathfindingScript.isGoing = false; if (!simAIScript.simPathfindingScript.isTakePathTime) { if (!simAIScript.simPathfindingScript.isStillPathing) { simAIScript.GetTargetPosFridge(); simAIScript.simPathfindingScript.AStarPathMethod(simAIScript.targetPos); } else if (simAIScript.simPathfindingScript.isStillPathing) { //do nothing simAIScript.simPathfindingScript.isGoing = false; } } else if (simAIScript.simPathfindingScript.isTakePathTime) { simAIScript.simPathfindingScript.isStillPathing = true; cR = StartCoroutine(simAIScript.simPathfindingScript.TakePath(simAIScript.targetPos, "Fridge")); simAIScript.simPathfindingScript.isTakePathTime = false; } break; case TaskFSM.GettingCoffee: if (!simAIScript.simPathfindingScript.isTakePathTime) { if (!simAIScript.simPathfindingScript.isStillPathing) { simAIScript.GetTargetPosCoffeeMachine(); simAIScript.simPathfindingScript.AStarPathMethod(simAIScript.targetPos); } else if (simAIScript.simPathfindingScript.isStillPathing) { //do nothing simAIScript.simPathfindingScript.isGoing = false; } } else if (simAIScript.simPathfindingScript.isTakePathTime) { simAIScript.simPathfindingScript.isStillPathing = true; cR = StartCoroutine(simAIScript.simPathfindingScript.TakePath(simAIScript.targetPos, "CoffeeMachine")); simAIScript.simPathfindingScript.isTakePathTime = false; } break; case TaskFSM.UsingBathroom: simAIScript.GetTargetPosBathroomStall(); simAIScript.GoToward(simAIScript.targetPos); break; case TaskFSM.MakingWidget: if (!simAIScript.needToHaul) { if (!simAIScript.simPathfindingScript.isTakePathTime) { if (simAIScript.simPathfindingScript.isGoing) { simAIScript.GoToward(simAIScript.targetPos); } else if (!simAIScript.simPathfindingScript.isGoing) { if (!simAIScript.simPathfindingScript.isStillPathing) { simAIScript.GetTargetPosWidgetBench(); simAIScript.simPathfindingScript.AStarPathMethod(simAIScript.targetPos); } else if (simAIScript.simPathfindingScript.isStillPathing) { //do nothing } } } else if (simAIScript.simPathfindingScript.isTakePathTime) { simAIScript.simPathfindingScript.isStillPathing = true; cR = StartCoroutine(simAIScript.simPathfindingScript.TakePath(simAIScript.targetPos, "WidgetBench")); simAIScript.simPathfindingScript.isTakePathTime = false; } } else if (simAIScript.needToHaul) { //simAIScript.GetTargetPosHaulDropOff(); // simAIScript.HaulWidget(); } break; case TaskFSM.Sales: if (!simAIScript.simPathfindingScript.isTakePathTime) { if (simAIScript.simPathfindingScript.isGoing) { simAIScript.GoToward(simAIScript.targetPos); } else if (!simAIScript.simPathfindingScript.isGoing) { if (!simAIScript.simPathfindingScript.isStillPathing) { simAIScript.GetTargetPosSalesBench(); simAIScript.simPathfindingScript.AStarPathMethod(simAIScript.targetPos); } else if (simAIScript.simPathfindingScript.isStillPathing) { //do nothing } } } else if (simAIScript.simPathfindingScript.isTakePathTime) { simAIScript.simPathfindingScript.isStillPathing = true; cR = StartCoroutine(simAIScript.simPathfindingScript.TakePath(simAIScript.targetPos, "SalesBench")); simAIScript.simPathfindingScript.isTakePathTime = false; //simAIScript.simPathfindingScript.isGoing = false; } break; case TaskFSM.Drafting: if (!simAIScript.simPathfindingScript.isTakePathTime) { if (simAIScript.simPathfindingScript.isGoing) { simAIScript.GoToward(simAIScript.targetPos); } else if (!simAIScript.simPathfindingScript.isGoing) { if (!simAIScript.simPathfindingScript.isStillPathing) { simAIScript.GetTargetPosDraftingDesk(); simAIScript.simPathfindingScript.AStarPathMethod(simAIScript.targetPos); } else if (simAIScript.simPathfindingScript.isStillPathing) { //do nothing } } } else if (simAIScript.simPathfindingScript.isTakePathTime) { simAIScript.simPathfindingScript.isStillPathing = true; cR = StartCoroutine(simAIScript.simPathfindingScript.TakePath(simAIScript.targetPos, "DraftingDesk")); simAIScript.simPathfindingScript.isTakePathTime = false; //simAIScript.simPathfindingScript.isGoing = false; } break; } }