void OnGUI()
        {
            GUILayout.BeginHorizontal();

            if (GUILayout.Button("Convert"))
            {
                FighterConverter.Convert(fighter);
            }

            GUILayout.Label("Fighter Editor", EditorStyles.boldLabel);

            fighter = (FighterObject)EditorGUILayout.ObjectField(fighter, typeof(FighterObject), true);
            if (GUILayout.Button("Edit MoveSet"))
            {
                MoveSetEditor.Init(fighter);
            }
            GUILayout.EndHorizontal();
            if (!fighter)
            {
                return;
            }

            windowPos = EditorGUILayout.BeginScrollView(windowPos);
            GUILayout.BeginVertical(GUILayout.MaxWidth(800));
            GUILayout.BeginVertical("Box");

            GUILayout.BeginHorizontal();
            fighter.jumpStrength = EditorGUILayout.FloatField("Jump Strength", fighter.jumpStrength);
            fighter.speed        = EditorGUILayout.FloatField("Speed", fighter.speed);
            fighter.fallTime     = EditorGUILayout.FloatField("Fall Time", fighter.fallTime);
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            fighter.lifeMax          = EditorGUILayout.FloatField("Life", fighter.lifeMax);
            fighter.guardMax         = EditorGUILayout.FloatField("Guard", fighter.guardMax);
            fighter.stunMax          = EditorGUILayout.FloatField("Stun", fighter.stunMax);
            fighter.parryTime        = EditorGUILayout.FloatField("Parry Time", fighter.parryTime);
            fighter.parryPerfectTime = EditorGUILayout.FloatField("Perfect Parry Time", fighter.parryPerfectTime);
            GUILayout.EndHorizontal();

            //Fighter Properties
            GUILayout.BeginHorizontal();
            fighter.Stand  = EditorGUILayout.Popup("Stand", fighter.Stand, fighter.moves.ConvertAll <string>(MoveToName).ToArray());
            fighter.Crouch = EditorGUILayout.Popup("Crouch", fighter.Crouch, fighter.moves.ConvertAll <string>(MoveToName).ToArray());
            fighter.Walk   = EditorGUILayout.Popup("Walk", fighter.Walk, fighter.moves.ConvertAll <string>(MoveToName).ToArray());
            fighter.Hit    = EditorGUILayout.Popup("Hit", fighter.Hit, fighter.moves.ConvertAll <string>(MoveToName).ToArray());
            fighter.Block  = EditorGUILayout.Popup("Block", fighter.Block, fighter.moves.ConvertAll <string>(MoveToName).ToArray());
            fighter.Taunt  = EditorGUILayout.Popup("Taunt", fighter.Taunt, fighter.moves.ConvertAll <string>(MoveToName).ToArray());
            fighter.Fall   = EditorGUILayout.Popup("Fall", fighter.Fall, fighter.moves.ConvertAll <string>(MoveToName).ToArray());
            fighter.GetUp  = EditorGUILayout.Popup("Get Up", fighter.GetUp, fighter.moves.ConvertAll <string>(MoveToName).ToArray());
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            fighter.JumpStart    = EditorGUILayout.Popup("Jump Start", fighter.JumpStart, fighter.moves.ConvertAll <string>(MoveToName).ToArray());
            fighter.JumpFall     = EditorGUILayout.Popup("Jump Fall", fighter.JumpFall, fighter.moves.ConvertAll <string>(MoveToName).ToArray());
            fighter.JumpRecovery = EditorGUILayout.Popup("Jump Recovery", fighter.JumpRecovery, fighter.moves.ConvertAll <string>(MoveToName).ToArray());
            GUILayout.EndHorizontal();

            GUILayout.EndVertical();

            GUILayout.BeginHorizontal();
            int newMove = EditorGUILayout.Popup(selectedMove, fighter.moves.ConvertAll <string>(MoveToName).ToArray());

            if (selectedMove != newMove)
            {
                selectedMove = newMove;
                states.Clear();
                foreach (FighterState f in fighter.moves[selectedMove].frames)
                {
                    states.Add(new FighterStateEditor(f));
                }
            }
            if (selectedMove >= 0)
            {
                fighter.moves[selectedMove].name = GUILayout.TextField(fighter.moves[selectedMove].name);
            }
            if (GUILayout.Button("New Move"))
            {
                fighter.moves.Add(new Move());
                selectedMove = fighter.moves.Count - 1;
            }
            if (GUILayout.Button("Delete"))
            {
                fighter.moves.RemoveAt(selectedMove);
                if (selectedMove >= fighter.moves.Count)
                {
                    selectedMove = fighter.moves.Count - 1;
                }
            }
            GUILayout.EndHorizontal();
            if (selectedMove >= 0)
            {
                Move selMove = fighter.moves[selectedMove];
                selMove.attack = EditorGUILayout.Toggle("Is Attack?", selMove.attack);
                fighter.moves[selectedMove].velocity = EditorGUILayout.Vector2Field("Move Velocity", fighter.moves[selectedMove].velocity);
                selMove.defaultNext = EditorGUILayout.Popup("Default next:", selMove.defaultNext, fighter.GetMoveList());
                //Draw Preview
                FighterStateEditor.DrawState(fighter.moves[selectedMove].GetFrame((Time.time * fighter.moves[selectedMove].time_modifier)), fighter.moves[selectedMove].GetMaxHeight());
                fighter.moves[selectedMove].time_modifier = EditorGUILayout.Slider(fighter.moves[selectedMove].time_modifier, 0.0f, 5.0f);
                if (GUILayout.Button("Add State"))
                {
                    FighterState        s  = new FighterState();
                    List <FighterState> st = fighter.moves[selectedMove].frames;
                    if (st.Count > 0)
                    {
                        s.CopyFrom(st[st.Count - 1]);
                    }
                    fighter.moves[selectedMove].frames.Add(s);
                    states.Add(new FighterStateEditor(s));
                }

                statesScroll = EditorGUILayout.BeginScrollView(statesScroll);

                GUILayout.BeginHorizontal();
                for (int i = 0; i < states.Count; i++)
                {
                    GUILayout.BeginVertical("Box", GUILayout.MaxWidth(250));
                    GUILayout.BeginHorizontal();
                    if (i > 0 && GUILayout.Button("<"))
                    {
                        states.Insert(i - 1, states[i]);
                        states.RemoveAt(i + 1);
                    }
                    if (GUILayout.Button("Remove"))
                    {
                        fighter.moves[selectedMove].frames.RemoveAt(i);
                        states.RemoveAt(i);
                        i--;
                    }
                    if (i < states.Count - 1 && GUILayout.Button(">"))
                    {
                        Debug.Log("insert");
                        states.Insert(i + 2, states[i]);
                        states.RemoveAt(i);
                    }
                    GUILayout.EndHorizontal();
                    states[i].OnGUI();
                    GUILayout.EndVertical();
                }
                GUILayout.EndHorizontal();

                EditorGUILayout.EndScrollView();
            }
            GUILayout.EndVertical();
            EditorGUILayout.EndScrollView();
            EditorUtility.SetDirty(fighter);
        }