void OnTriggerEnter(Collider pCollision) { //cars and pedestrians have reversed behaviours. If StopStation is on WALK, //pedestrians can walk and cars have to stop. If it's on STOP, //pedestrians have to stop and cars can keep going through their trajectory if (pCollision.transform.CompareTag("NPC")) { mColliders.Add(pCollision); switch (mCurrentState) { case States.WALK: pCollision.transform.GetComponent <PopulationEngine.NPCMotor> ().Walking(); break; case States.STOP: default: pCollision.transform.GetComponent <PopulationEngine.NPCMotor> ().Waiting(); break; } // Physics.IgnoreCollision (mCollider, pCollision, true); } else { if (pCollision.transform.CompareTag("Vehicle")) { PopulationEngine.NPCMotor motor = pCollision.transform.GetComponent <PopulationEngine.NPCMotor> (); RunOver runOver = pCollision.transform.GetComponent <RunOver> (); mColliders.Add(pCollision); switch (mCurrentState) { case States.WALK: if (motor) { motor.Waiting(); } else { runOver.Resume(); } break; case States.STOP: default: if (motor) { pCollision.transform.GetComponent <PopulationEngine.NPCMotor> ().Walking(); } else { runOver.Stop(); } break; } } } }
//if this is a vehicle and it was colliding with any Vehicle or NPC, resume moving now void OnCollisionExit(Collision pCollision) { // if (transform.CompareTag ("Vehicle")) // { if (pCollision.transform.CompareTag("internal_collider") || pCollision.transform.CompareTag("NPC")) { PopulationEngine.NPCMotor motor = transform.parent.parent.GetComponent <PopulationEngine.NPCMotor>(); RunOver runOver = transform.parent.parent.GetComponent <RunOver>(); if (motor) { motor.Walking(); } else { if (runOver) { runOver.Resume(); } } } // } }
// Update is called once per frame void Update() { switch (mCurrentState) { case States.WALK: // if (mCounter < 2) // { // // if (mCollider.radius < 1.25f * cOriginalColliderRadius) // { // mCollider.radius += cRadiusIncreaseSpeed * Time.deltaTime; // } else // { // ++mCounter; // mCollider.radius = 0.7f * cOriginalColliderRadius; // } // } for (int i = 0; i < mColliders.Count; ++i) { if (mColliders [i] != null) { if (mColliders [i].transform.CompareTag("NPC")) { mColliders [i].transform.GetComponent <PopulationEngine.NPCMotor> ().Walking(); } else { PopulationEngine.NPCMotor motor = mColliders [i].transform.GetComponent <PopulationEngine.NPCMotor> (); RunOver runOver = mColliders [i].transform.GetComponent <RunOver> (); if (motor) { mColliders [i].transform.GetComponent <PopulationEngine.NPCMotor> ().Waiting(); } else { runOver.Resume(); } } } } break; case States.STOP: default: for (int i = 0; i < mColliders.Count; ++i) { if (mColliders [i] != null) { if (mColliders [i].transform.CompareTag("NPC")) { mColliders [i].transform.GetComponent <PopulationEngine.NPCMotor> ().Waiting(); } else { PopulationEngine.NPCMotor motor = mColliders [i].transform.GetComponent <PopulationEngine.NPCMotor> (); RunOver runOver = mColliders [i].transform.GetComponent <RunOver> (); if (motor) { mColliders [i].transform.GetComponent <PopulationEngine.NPCMotor> ().Walking(); } else { runOver.Stop(); } } } } break; } }