class FlagMonitor extends EditorWindow {
    var scrollPosition:Vector2;
    var monitorEnabled:boolean;

    @MenuItem("Custom/Window/Flag Monitor")
    static function Init () {
        var window:FlagMonitor = EditorWindow.GetWindow(FlagMonitor);
        window.Show();
    }

    function OnGUI() {
        if (!Application.isPlaying) {
            GUILayout.Label("Game stopped");
            monitorEnabled = false;
        } else {
            var isChengeFlag:boolean = false;
            var flagCtrl:FlagController = FlagController.GetFlagCtrl();
                        
            EditorGUILayout.BeginVertical(GUILayout.MinWidth(290),GUILayout.MaxWidth(290));
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Index", GUILayout.MinWidth(50),GUILayout.MaxWidth(50));
            
            GUILayout.Label("0", GUILayout.MinWidth(10));
            GUILayout.Label("1", GUILayout.MinWidth(10));
            GUILayout.Label("2", GUILayout.MinWidth(10));
            GUILayout.Label("3", GUILayout.MinWidth(10));
            GUILayout.Label("4", GUILayout.MinWidth(10));
            GUILayout.Label("5", GUILayout.MinWidth(10));
            GUILayout.Label("6", GUILayout.MinWidth(10));
            GUILayout.Label("7", GUILayout.MinWidth(10));
            GUILayout.Label("8", GUILayout.MinWidth(10));
            GUILayout.Label("9", GUILayout.MinWidth(10));
            GUILayout.Label("a", GUILayout.MinWidth(10));
            GUILayout.Label("b", GUILayout.MinWidth(10));
            GUILayout.Label("c", GUILayout.MinWidth(10));
            GUILayout.Label("d", GUILayout.MinWidth(10));
            GUILayout.Label("e", GUILayout.MinWidth(10));
            GUILayout.Label("f", GUILayout.MinWidth(10));
            EditorGUILayout.Space();
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndVertical();
            
            scrollPosition = GUILayout.BeginScrollView(scrollPosition);
            EditorGUILayout.BeginVertical(GUILayout.MinWidth(300),GUILayout.MaxWidth(300));
            for (var i:int = 0; i < flagCtrl.flags.Count; i++) {
                if (i % 16 == 0) {
                    EditorGUILayout.BeginHorizontal();
                    GUILayout.Label(String.Format("{0:00000}", i));
                }
                var flg:boolean = EditorGUILayout.Toggle(flagCtrl.flags[i], GUILayout.MaxWidth(10));
                if (flg != flagCtrl.flags[i]) {
                    isChengeFlag = true;
                    flagCtrl.flags.Set(i, flg);
                }
                if (i % 16 == 15) {
                    EditorGUILayout.Space();
                    EditorGUILayout.EndHorizontal();
                }
            }
            EditorGUILayout.EndVertical();
            EditorGUILayout.EndScrollView();
            
            if (isChengeFlag) {
                FlagController.onChangeFlags();
            }
        }
    }
}