예제 #1
0
    void FixedUpdate()
    {
        behavior = (int)Behaviors.followpath;
        //target = GameObject.Find("Target");
        if (seen)
        {
            SeekClosestSpot();
            if (target.transform.position != oldTargetPos)
            {
                computePath();
            }
        }
        else
        {
            target = seekTarget;
        }
        //GameObject hidingSpot = GameObject.Find("HidingSpot(Clone)");
        //if (hidingSpot != null) {
        //	target = hidingSpot;
        //}


        for (int i = 0; i < 3; i++)
        {
            targetPos[i] = target.transform.position[i];
        }

        gscript.transferData();

        CalculateForce(agentID, targetPos, result);
        rigidbody.AddForce(result[0], result[1], result[2]);

        CalculateTorque(agentID, targetPos, result);
        rigidbody.AddTorque(result[0], result[1], result[2]);

        oldTargetPos = target.transform.position;
    }
예제 #2
0
    //public AudioClip AttackKnell;
    void FixedUpdate()
    {
        int     agentNum  = gscript.numAgents;
        Vector3 playerPos = player.transform.position;


        int hidingPoints = mscript.HPList.Count;

        flag = new bool [hidingPoints];
        for (int i = 0; i < hidingPoints; i++)
        {
            flag[i] = true;
        }

        if (gscript.hsmode == false)
        {
            target = GameObject.Find("Target");
        }
        else if (gscript.hsmode == true)
        {
            target = GameObject.Find("HidingSpot");
        }
        //path finding model
        if (gscript.hsmode == false)
        {
            if (target.transform.position != oldTargetPos)
            {
                computePathTarget(agentID);
            }
            gscript.transferData();

            CalculateForce(agentID, targetPos, result);
            rigidbody.AddForce(result[0], result[1], result[2]);

            CalculateTorque(agentID, targetPos, result);
            rigidbody.AddTorque(result[0], result[1], result[2]);

            oldTargetPos = target.transform.position;
        }

        //hide and seek model
        if (gscript.hsmode == true)
        {
            timer += Time.deltaTime;
            //mscript.maptimer = timer;
            if (timer > wakeupPeriod)
            {
                if (timer > gangupPeriod)
                {
                    timer = 0;
                }
                float disAgentPlayer = 0.0f;
                if (!frozen)
                {
                    target = player;
                    Vector3 pPos = player.transform.position;
                    for (int j = 0; j < 3; j++)
                    {
                        targetPos[j] = target.transform.position[j];
                        startPos[j]  = transform.position[j];
                    }
                    disAgentPlayer = (targetPos[0] - startPos[0]) * (targetPos[0] - startPos[0]) + (targetPos[1] - startPos[1]) * (targetPos[1] - startPos[1]) + (targetPos[2] - startPos[2]) * (targetPos[2] - startPos[2]);
                    if (disAgentPlayer > 200.0f)
                    {
                        behavior = (int)Behaviors.followpath;
                        if (target.transform.position != oldTargetPos)
                        {
                            SetPath(agentID, startPos, targetPos);
                        }
                    }
                    else
                    {
                        behavior = (int)Behaviors.flee;
                    }

                    gscript.transferData();

                    CalculateForce(agentID, targetPos, result);
                    rigidbody.AddForce(result[0], result[1], result[2]);

                    CalculateTorque(agentID, targetPos, result);
                    rigidbody.AddTorque(result[0], result[1], result[2]);

                    oldTargetPos = target.transform.position;
                }
            }
            else
            {
                if (frozen)
                {
                    rigidbody.velocity        = new Vector3(0.0f, 0.0f, 0.0f);
                    rigidbody.angularVelocity = new Vector3(0.0f, 0.0f, 0.0f);
                    rescueMission             = false;
                }
                else
                {
                    if (!checkFrozen())
                    {
                        for (int i = 0; i < agentNum; i++)
                        {
                            agentPos = gscript.agentData[i].gPos;
                            float distanceSquare = (agentPos[0] - playerPos[0]) * (agentPos[0] - playerPos[0]) + (agentPos[1] - playerPos[1]) * (agentPos[1] - playerPos[1]) + (agentPos[2] - playerPos[2]) * (agentPos[2] - playerPos[2]);

                            if (distanceSquare < 200.0)
                            {
                                gscript.agentData[i].behavior = (int)Behaviors.flee;
                            }
                            else if ((distanceSquare < 600.0) && (distanceSquare >= 200.0))
                            {
                                gscript.agentData[i].behavior = (int)Behaviors.followpath;
                            }
                            else
                            {
                                gscript.agentData[i].behavior = (int)Behaviors.wander;
                            }
                        }

                        rescueMission = false;
                        int currentBeh = gscript.agentData[agentID].behavior;

                        target = GameObject.Find("HidingSpot");
                        if (currentBeh == (int)Behaviors.followpath)
                        {
                            behavior = (int)Behaviors.followpath;
                            for (int i = 0; i < agentNum; i++)
                            {
                                if (target.transform.position != oldTargetPos)
                                {
                                    int id = (int)(gscript.agentData[i].agentID);
                                    computePathHiding(id);
                                }
                            }

                            gscript.transferData();

                            CalculateForce(agentID, targetPos, result);
                            rigidbody.AddForce(result[0], result[1], result[2]);

                            CalculateTorque(agentID, targetPos, result);
                            rigidbody.AddTorque(result[0], result[1], result[2]);

                            oldTargetPos = target.transform.position;
                        }
                        else if (currentBeh == (int)Behaviors.flee)
                        {
                            target   = player;
                            behavior = (int)Behaviors.flee;
                            Vector3 pPos = player.transform.position;
                            for (int j = 0; j < 3; j++)
                            {
                                targetPos[j] = pPos[j];
                            }

                            gscript.transferData();

                            CalculateForce(agentID, targetPos, result);
                            rigidbody.AddForce(result[0], result[1], result[2]);

                            CalculateTorque(agentID, targetPos, result);
                            rigidbody.AddTorque(result[0], result[1], result[2]);

                            oldTargetPos = target.transform.position;
                        }
                        else if (currentBeh == (int)Behaviors.wander)
                        {
                            behavior = (int)Behaviors.wander;

                            gscript.transferData();

                            CalculateForce(agentID, targetPos, result);
                            rigidbody.AddForce(result[0], result[1], result[2]);

                            CalculateTorque(agentID, targetPos, result);
                            rigidbody.AddTorque(result[0], result[1], result[2]);

                            oldTargetPos = target.transform.position;
                        }
                        else
                        {
                        }
                    }
                    else
                    {
                        int currentDie = checkFrozenNum();
                        if (!rescueMission)
                        {
                            target = gscript.agents[currentDie];
                            for (int j = 0; j < 3; j++)
                            {
                                targetPos[j] = target.transform.position[j];
                                startPos[j]  = transform.position[j];
                            }
                            behavior = (int)Behaviors.followpath;
                            if (target.transform.position != oldTargetPos)
                            {
                                SetPath(agentID, startPos, targetPos);
                            }

                            rescueMission = true;

                            gscript.transferData();

                            CalculateForce(agentID, targetPos, result);
                            rigidbody.AddForce(result[0], result[1], result[2]);

                            CalculateTorque(agentID, targetPos, result);
                            rigidbody.AddTorque(result[0], result[1], result[2]);

                            oldTargetPos = target.transform.position;
                        }
                        else
                        {
                            target = gscript.agents[currentDie];
                            for (int j = 0; j < 3; j++)
                            {
                                targetPos[j] = target.transform.position[j];
                                startPos[j]  = transform.position[j];
                            }
                            behavior = (int)Behaviors.followpath;
                            if (target.transform.position != oldTargetPos)
                            {
                                SetPath(agentID, startPos, targetPos);
                            }

                            gscript.transferData();

                            CalculateForce(agentID, targetPos, result);
                            rigidbody.AddForce(result[0], result[1], result[2]);

                            CalculateTorque(agentID, targetPos, result);
                            rigidbody.AddTorque(result[0], result[1], result[2]);

                            oldTargetPos = target.transform.position;
                        }
                    }
                }
            }
        }
    }