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; }
//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; } } } } } }