// Hide or show attribute depending on the StartingState
    override public void OnInspectorGUI()
    {
        serializedObject.Update();

        GUI.enabled = false;
        EditorGUILayout.ObjectField("Script", MonoScript.FromMonoBehaviour((GuardController)target), typeof(GuardController), false);
        GUI.enabled = true;
        EditorGUILayout.PropertyField(innerState_Prop, true);

        EditorGUILayout.PropertyField(state_Prop);
        StartingState s = (StartingState)state_Prop.intValue;

        switch (s)
        {
        case StartingState.Patrol:
            EditorGUILayout.PropertyField(waypoints_Prop, true);
            EditorGUILayout.PropertyField(idle_Prop);
            break;

        case StartingState.Idle:
            EditorGUILayout.PropertyField(idle_Prop);
            break;
        }
        serializedObject.ApplyModifiedProperties();
    }
    void InstantiateGuards(Dungeon dungeon)
    {
        RandomIndexPicker <Corridor> corridorPicker = new RandomIndexPicker <Corridor> (dungeon.corridors);
        int guardNum = Mathf.FloorToInt(difficulty * 5f * corridorPicker.Count());

        for (int i = 0; i < guardNum; i++)
        {
            if (corridorPicker.IsEmpty())
            {
                break;
            }

            // Generate random values
            int randomState = Random.Range(0, 10);
            //int randomState = 0;
            if (randomState > 2)
            {
                randomState = 0;
            }
            StartingState   state    = (StartingState)randomState;
            float           idle     = Random.value * Random.Range(1, 5) + 1f;
            Characteristics chara    = Characteristics.random(difficulty);
            Corridor        corridor = corridorPicker.Pick();

            // Instantiate guard
            GameObject guard = Instantiate(guardPrefab, tile_size * new Vector3(corridor.start.x, corridor.start.y, 0), Quaternion.identity, transform);

            // Edit guardController values
            GuardController guardController = guard.GetComponent <GuardController> ();
            guardController.startingState = state;
            guardController.idleDuration  = idle;
            guardController.innerState.characteristics = chara;

            // Patroling state
            if (state == StartingState.Patrol)
            {
                GuardBuildWaypoints(dungeon, guardController, corridor, tile_size);
            }

            // Absorb bar
            GameObject absorbBar    = Instantiate(guardAbsorbBar, canvas.transform);
            AbsorbBar  absorbScript = guard.GetComponent <AbsorbBar> ();
            absorbScript.bar          = absorbBar.GetComponent <RectTransform> ();
            absorbScript.targetCanvas = canvas.GetComponent <RectTransform> ();
            absorbScript.maxAmout     = 1;
        }
    }