void SetCautionAlarm(StateController controller) { Alarm alarm = controller.transform.GetComponent <Alarm>(); if (alarm != null) { alarm.alarmPhase = Alarm.AlarmPhase.Caution; alarm.ChangeAlarmRadiusColour(); } }
IEnumerator SoundAlarm(StateController controller) { controller.bHasStatedAction = true; float alarmAgainTIme = 0.2f; Alarm alarm = controller.GetComponent <Alarm>(); if (alarm != null) { alarm.alarmPhase = Alarm.AlarmPhase.Alarming; alarm.ChangeAlarmRadiusColour(); controller.onExitState += alarm.ChangeAlarmRadiusColour; while (controller.bHasStatedAction) { Collider2D[] objectsInAlarmSoundRadius = Physics2D.OverlapCircleAll(controller.transform.position, alarm.sensorDectecionRadius, alarm.objectsToAlertMask); for (int i = 0; i < objectsInAlarmSoundRadius.Length; ++i) { IReactable reactableObject = objectsInAlarmSoundRadius[i].GetComponent <IReactable>(); if (reactableObject != null) { //TODO add a raycast around here to limit distance or area that reactable object can me manipulated. if (controller.fov.visableTagets.Count > 0) { Transform firstDetectedObject = controller.fov.visableTagets[0]; reactableObject.React(Reactor.ReactorType.Alarm, alarm.reactionPriorityValue, firstDetectedObject, controller.transform); } } else { Debug.Log("IReactable = null on object : " + objectsInAlarmSoundRadius[i].gameObject.name); } } yield return(new WaitForSeconds(alarmAgainTIme)); } } }