public override void TriggerCb(uint id) { switch (id) { case 0: if (GetState().Equals(States.UserDriveRoute)) { ChangeState(States.UserApproachTraffic); } else if (GetState().Equals(States.AIDriveRoute)) { ChangeState(States.AIApproachTraffic); } break; case 1: //increase fog if (GetState().Equals(States.UserApproachTraffic) || GetState().Equals(States.AIApproachTraffic)) { RenderSettings.fogDensity = 0.5f; hudController.model.centerText = "Go straight"; } break; case 2: if (GetState().Equals(States.UserApproachTraffic)) { ChangeState(States.UserWarnCollision); } else if (GetState().Equals(States.AIApproachTraffic)) { ChangeState(States.AIWarnCollision); } break; case 3: if (GetState().Equals(States.UserDriveRoute) || GetState().Equals(States.AIDriveRoute)) { hudController.Clear(); hudController.model.centerText = "Turn right"; hudController.FlashImage(Resources.Load(VRAVEStrings.Right_Turn, typeof(Material)) as Material, 0.5f, 0.5f, 0.75f, 5, hudAsyncController); } break; case 4: //Debug.Log ("CollisionTrigger triggered"); if (GetState().Equals(States.UserWarnCollision)) { //Debug.Log ("Switching to UserStopped state"); ChangeState(States.UserStopped); } else if (GetState().Equals(States.AIWarnCollision)) { ChangeState(States.AIStopped); } break; case 5: if (GetState().Equals(States.UserDriveRoute) || GetState().Equals(States.AIDriveRoute)) { hudController.model.centerText = "Proceed through intersection"; } break; case 6: if (GetState().Equals(States.UserApproachTraffic) || GetState().Equals(States.AIApproachTraffic)) { hudController.Clear(); hudController.model.centerText = "Turn left"; hudController.FlashImage(Resources.Load(VRAVEStrings.Left_Turn, typeof(Material)) as Material, 0.5f, 0.5f, 0.75f, 5, hudAsyncController); } break; case 7: if (GetState().Equals(States.UserStopped)) { //audioController.playAudio (2); } else if (GetState().Equals(States.AIStopped)) { audioController.playAudio(4); } break; default: break; } }
/********************** TRIGGERS *****************************/ // Extend abstract method "ChangeState(uint id) // // This is used for reacting to "OnTriggerEnter" events, called by WaypointTrigger scripts public override void TriggerCb(uint id) { switch (id) { case 0: // AI intersection Path 1 waypoint 01 if (GetState().Equals(States.AIDrivingToIntersection)) { StartCoroutine(ChangeAIPaths(3f, ai_paths [0], carAI, () => { carController.MaxSpeed = 18f; })); } break; case 1: // Approaching intersection trigger if (GetState().Equals(States.AIDrivingToIntersection) || GetState().Equals(States.HumanDrivingToIntersection)) { ChangeState(States.AdvancingThroughIntersection); } else { hudController.Clear(); } break; // In the "intersection" part of the scenario, engage the unsuspecting AI car case 2: UnsuspectingAI.SetActive(true); if (GetState().Equals(States.HumanDrivingToIntersection)) { audioController.playAudio(7); } break; case 3: // post collision state change UserCar.GetComponent <CarUserControl> ().enabled = false; StartCoroutine(PostCollisionStateChange(5f)); break; case 4: // trash can trigger hudController.Clear(); if (GetState().Equals(States.HumanDrivingToTrashcan)) { trashCan.GetComponent <TrashCanAnimator> ().trashCanForce = 800; } else { trashCan.GetComponent <TrashCanAnimator> ().trashCanForce = 400; hudController.FlashImage(Resources.Load(VRAVEStrings.Warning_Img, typeof(Material)) as Material, 0.25f, 0.25f, 0.75f, 5, hudAsyncController); hudAsyncController.RepeatAudio(10, 1, 5); } trashCan.SetActive(true); trashCan.GetComponent <TrashCanAnimator> ().roll(); trashCanSensorResponseHandler.Enable = true; StartCoroutine(PostTrashcanStateChange(6f)); break; case 5: // trash can change AI path StartCoroutine(ChangeAIPaths(4f, ai_paths [2], unsuspectingCarAI, () => { unsuspectingCarAI.ReachTargetThreshold = 2f; UnsuspectingAI.GetComponent <CarController> ().MaxSpeed = 30f; })); break; case 6: // AI car trashcan path 2 waypoint 4 unsuspectingCarAI.CautiousSpeedFactor = 0.8f; break; case 7: // trash can change User path StartCoroutine(ChangeAIPaths(4f, ai_paths [4], carAI, () => { carAI.ReachTargetThreshold = 2f; carController.MaxSpeed = 32f; hudController.Clear(); })); break; case 8: carAI.CautiousSpeedFactor = 0.8f; break; case 9: // stop sign trigger // display stop sign on HUD, hudController.model.centerText = VRAVEStrings.Stop_Sign; hudController.FlashImage(Resources.Load(VRAVEStrings.Stop_Img, typeof(Material)) as Material, 0.5f, 0.5f, 0.5f, 5, hudAsyncController); break; case 10: // right turn trigger // display right turn sign on HUD, if (GetState().Equals(States.HumanDrivingToTrashcan) || GetState().Equals(States.AIDrivingToTrashcan)) { hudController.FlashImage(Resources.Load(VRAVEStrings.Right_Turn, typeof(Material)) as Material, 0.5f, 0.5f, 0.75f, 5, hudAsyncController); } break; } }