void Awake() { // State machine // -- IDLE -- idle_state = new RhandorIdleState(this); // -- PATROL -- patrol_state = new RhandorPatrolState(this); LoadNeutralPatrol(); // -- ALERT -- alert_state = new RhandorAlertState(this); LoadAlertPatrol(); // -- SPOTTED -- spotted_state = new RhandorSpottedState(this); // -- SPOTTED -- support_state = new RhandorSupportState(this); // -- CORPSE -- corpse_state = new RhandorCorpseState(this); if (neutral_patrol.is_synchronized) { LoadSynchronousConfiguration(neutral_patrol); } if (alert_patrol.is_synchronized) { LoadSynchronousConfiguration(alert_patrol); } if (neutral_patrol.path_attached == alert_patrol.path_attached) { same_neutral_alert_path = true; } render = GetComponent <SpriteRenderer>(); type = ENEMY_TYPES.RHANDOR; initial_forward_direction = transform.forward; time_recovering_timer = max_time_recovering = 2.0f; alarm_system = GameObject.FindGameObjectWithTag(Tags.game_controller).GetComponent <AlarmSystem>(); last_spotted_position = GameObject.FindGameObjectWithTag(Tags.game_controller).GetComponent <LastSpottedPosition>(); enemy_field_view = GetComponent <EnemyFieldView>(); enemy_manager = GetComponentInParent <EnemyManager>(); //Every enemy should be child of the enemy manager agent = GetComponent <NavMeshAgent>(); // Agent for NavMesh //Insert all menus in the dictionary RadialMenu_ObjectInteractable[] menus_scripts = GetComponents <RadialMenu_ObjectInteractable>(); foreach (RadialMenu_ObjectInteractable menu_script in menus_scripts) { menus.Add(menu_script.id, menu_script); } }
void OnSceneGUI() { EnemyFieldView item = (EnemyFieldView)target; Handles.color = Color.green; Handles.DrawWireArc(item.transform.position, Vector3.up, Vector3.forward, 360, item.view_radius); Vector3 view_angle_A = item.DirectionFromAngle(-item.view_angle / 2, false); Vector3 view_angle_B = item.DirectionFromAngle(item.view_angle / 2, false); Handles.DrawLine(item.transform.position, item.transform.position + view_angle_A * item.view_radius); Handles.DrawLine(item.transform.position, item.transform.position + view_angle_B * item.view_radius); Handles.color = Color.red; foreach (Transform visible_target in item.visible_targets) { Handles.DrawLine(item.transform.position, visible_target.position); } }