Esempio n. 1
0
    // Update is called once per frame
    void Update()
    {
        if (initialized && !allDone)
        {
            /* Behavior for trolley nurse */
            if (id == 0)
            {
                if (dest == Vector3.zero)
                {
                    agent.stoppingDistance = 200.0f;
                    dest = targetNPC.transform.position;
                    interaction.setTarget(targetNPC);
                    agent.SetDestination(dest);
                }

                else if (arrivedToDestination(250.0f) && !readyToLeave)
                {
                    if (agent.stoppingDistance > 100.0f)
                    {
                        agent.stoppingDistance = 90.0f;
                    }
                    if (arrivedToDestination(100.0f))
                    {
                        agent.Stop();
                        readyForLift = true;
                        if (partner.readyToLeave)
                        {
                            targetNPC.GetComponent <NavMeshAgent>().enabled = false;
                            targetNPC.transform.position = new Vector3(trolley.position.x, 24.0f, trolley.position.z);
                            targetNPC.transform.rotation = Quaternion.Euler(new Vector3(trolley.eulerAngles.x, trolley.eulerAngles.y + 90.0f, trolley.eulerAngles.z));

                            targetNPC.transform.SetParent(trolley);
                            targetNPC.transform.localPosition = new Vector3(targetNPC.transform.localPosition.x - 20f, targetNPC.transform.localPosition.y, targetNPC.transform.localPosition.z);
                            readyToLeave = true;
                            NavMeshHit hit;
                            dest = startPos;
                            NavMesh.SamplePosition(dest, out hit, 50.0f, NavMesh.AllAreas);
                            agent.stoppingDistance = 200.0f;
                            dest = hit.position;
                            moveToDest();
                            agent.Resume();
                        }
                    }
                }
                else if (partner.readyForLift && !arrivedToDestination(100.0f) && !readyToLeave)
                {
                    timer += Time.deltaTime;
                    if (timer > 5.0f)
                    {
                        timer = 0;
                        agent.Warp(agent.destination);
                    }
                }
            }

            /* Behavior for picker nurse */
            else if (id == 1)
            {
                if (dest == Vector3.zero)
                {
                    agent.stoppingDistance = 150.0f;
                    interaction.setTarget(targetNPC);
                    dest = interaction.getDestToTargetNPCSide(1, 16.0f);
                    moveToDest();
                }
                else if (arrivedToDestination(200.0f))
                {
                    agent.stoppingDistance = 50.0f;
                    if (!readyForLift)
                    {
                        readyForLift = true;
                    }
                    if (!anim.pickingup && !readyToLeave && partner.readyForLift)
                    {
                        if (interaction.RotateTowards(targetNPC.transform))
                        {
                            anim.pickfromfloor();
                        }
                    }
                    else if (anim.pickingup)
                    {
                        timer += Time.deltaTime;
                    }
                    if (timer > 2.0f)
                    {
                        readyToLeave = true;
                        timer        = 0;
                        anim.StopAll();
                        dest = startPos;
                        moveToDest();
                    }
                }
            }
            /* if npc is picked up and arrived to ER */
            if (readyToLeave && arrivedToDestination(200.0f))
            {
                /* Lower the stoppingDistance to make nurse with trolley more accurate with stopping */
                agent.stoppingDistance = 50.0f;
                if (readyToLeave && arrivedToDestination(100.0f))
                {
                    allDone = true;
                }
            }
            /*If stuck and partner already left, mark as allDone*/
            else if (readyToLeave && partner == null)
            {
                timer += Time.deltaTime;
                if (timer > 5.0f)
                {
                    allDone = true;
                }
            }
        }
    }
Esempio n. 2
0
    // Update is called once per frame
    void Update()
    {
        if (anim.waitforanim)
        {
            if (!agentPaused)
            {
                pause();
            }
            return;
        }
        if (agentPaused)
        {
            resume();
        }

        if (!agent.pathPending)
        {
            if (agent.enabled && agent.remainingDistance <= agent.stoppingDistance)
            {
                if (!agent.hasPath || agent.velocity.sqrMagnitude == 0f)
                {
                    disableMoveIndicator();
                }
            }
        }


        if (pickingup)
        {
            if (target != null)
            {
                if (arrivedToDestination(50.0f))
                {
                    if (interaction.RotateTowards(target.transform))
                    {
                        anim.pickup();
                        //TODO, actually pickup something
                        disableTarget();
                    }
                }
            }
        }

        /* If target is double clicked, walk to it and at destination do what ever needs to be done*/
        if (movingToTarget)
        {
            if (arrivedToDestination(10.0f) && target != null)
            {
                if (target.tag == "MedCabinet")
                {
                    GameObject.Find("Minigame1").GetComponent <Minigame1>().startMinigame();
                    disableTarget();
                    movingToTarget = false;
                }
                else if (target.tag == "Computer")
                {
                    target.GetComponent <Computer>().StartComputer();
                    disableTarget();
                    movingToTarget = false;
                }
                else if (target.tag == "TrashCan")
                {
                    movingToTarget = false;
                }
                else if (target.tag == "CoffeeMachine")
                {
                    Instantiate(TimeSkipPrefab);
                    movingToTarget = false;
                    disableTarget();
                }
            }
        }

        if (sitting)
        {
            if (arrivedToDestination(10.0f))
            {
                if (target != null)
                {
                    if (interaction.RotateAwayFrom(target.transform))
                    {
                        if (target.tag == "Chair2")
                        {
                            if (agent.enabled)
                            {
                                anim.sitwithrotation();
                            }
                        }
                        else
                        {
                            if (agent.enabled)
                            {
                                anim.sit();
                            }
                        }
                    }
                }
                else
                {
                    sitting = false;
                    objManager.unbookObject(target);
                }
            }
        }

        if (sleeping)
        {
            if (arrivedToDestination(10.0f))
            {
                if (target != null || target.tag == "Bed")
                {
                    if (interaction.RotateAwayFrom(target.transform))
                    {
                        if (!anim.sleeping)
                        {
                            anim.sleep();
                        }
                    }
                }
                else
                {
                    sleeping = false;
                    objManager.unbookObject(interaction.getBed());
                }
            }
        }
        if (followNpc)
        {
            if (target != null)
            {
                disableMoveIndicator();
                if (arrivedToDestination(20.0f))
                {
                    if (agent.hasPath)
                    {
                        agent.ResetPath();
                    }
                    interaction.RotateTowards(target.transform);
                }
                else
                {
                    walkToTarget();
                }
            }
        }

        handleInput();
    }