Esempio n. 1
0
    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;
    }
Esempio n. 2
0
    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;
        }
    }