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);
        }
    }
示例#2
0
    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);
        }
    }