﻿using UnityEngine;
using UnityEditor;

// Editor Script, das dafür sorgt, dass die Ebenen im Inspector schön
// dargestellt werden.
[CustomPropertyDrawer(typeof(ScrollLayer))]
public class ScrollLayerDrawer : PropertyDrawer {

    // GUIs im Editor verwenden UnityGUI (ein Immediate-Mode-GUI system)
    // die Methode "OnGUI" wird zum Zeichnen der GUI vom Editor aufgerufen
    // wir bekommen Position, das Property, um das es geht, und den Text
    // für das Label mitgeliefert
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) {

        // Fange den Property-Bereich an
        EditorGUI.BeginProperty(position, label, property);
        {
            // Hole eine Control-ID für ein Control, das nie den Tastatur-Fokus bekommen kann
            int controlID = GUIUtility.GetControlID(FocusType.Passive);

            // Zeichne ein Label vor das Control, mit dem Text aus label
            position = EditorGUI.PrefixLabel(position, controlID, label);

            // Den aktuellen Einzug merken (brauchen wir später wieder)
            int indent = EditorGUI.indentLevel;
            // Den Einzug vorübergehend deaktivieren
            EditorGUI.indentLevel = 0;
            {

                // Den Platz verteilen
                Rect layerRootRect = new Rect(position.x, position.y, position.width * 0.3F, position.height);
                Rect scrollFactorRect = new Rect(position.x + position.width * 0.3F + 5, position.y, position.width * 0.7F - 5, position.height);

                // Die Felder an den vorgegebenen Positionen zeichnen
                EditorGUI.PropertyField(layerRootRect, property.FindPropertyRelative("layerRoot"), GUIContent.none);
                EditorGUI.Slider(scrollFactorRect, property.FindPropertyRelative("scrollFactor"), 0, 1, GUIContent.none);

            }
            // Den Einzug wieder zurücksetzen
            EditorGUI.indentLevel = indent;

        }
        EditorGUI.EndProperty();
    }
}

/*
 * Anmerkung: Die Blöcke nach EditorGUI.BeginProperty und EditorGUI.indentLevel = 0;
 * sind natürlich nicht notwendig oder gar von C# vorgeschrieben, helfen aber, den
 * Überblick über die in UnityGUI häufig verwenden Anfangs- und Endmethoden zu 
 * behalten. Vergisst man die nämlich mal, und hat keine solchen Blöcke ({...}),
 * sucht man sich gerade bei verschachtelten Strukturen die Augen aus dem Kopf.
 */