223 lines
5.2 KiB
C#
223 lines
5.2 KiB
C#
#define CUIDEBUG
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Diagnostics;
|
|
using System.Runtime.CompilerServices;
|
|
using System.IO;
|
|
|
|
using Barotrauma;
|
|
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Input;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
|
|
|
|
namespace QICrabUI
|
|
{
|
|
public class CUIDebugWindow : CUIFrame
|
|
{
|
|
public static CUIDebugWindow Main;
|
|
|
|
public CUIVerticalList EventsComponent;
|
|
public CUIVerticalList DebugIDsComponent;
|
|
public CUIPages Pages;
|
|
public CUIMultiButton PickIDButton;
|
|
|
|
public List<CUIDebugEventComponent> Events = new List<CUIDebugEventComponent>();
|
|
public int target;
|
|
public bool Loop { get; set; } = true;
|
|
|
|
|
|
|
|
public void Capture(CUIDebugEvent e)
|
|
{
|
|
if (EventsComponent == null) return;
|
|
|
|
if (target > 200) return;
|
|
|
|
if (Events.Count < target + 1)
|
|
{
|
|
CUIDebugEventComponent ec = new CUIDebugEventComponent(e);
|
|
Events.Add(ec);
|
|
EventsComponent.Append(ec);
|
|
|
|
ec.OnMouseEnter += (m) => ec.Value.Target.DebugHighlight = true;
|
|
ec.OnMouseLeave += (m) => ec.Value.Target.DebugHighlight = false;
|
|
}
|
|
else
|
|
{
|
|
Events[target].Value = e;
|
|
}
|
|
|
|
target++;
|
|
}
|
|
|
|
public void Flush()
|
|
{
|
|
if (Loop) target = 0;
|
|
//Events.ForEach(e => e.Flush());
|
|
}
|
|
|
|
public void MakeIDList()
|
|
{
|
|
DebugIDsComponent.Visible = false;
|
|
DebugIDsComponent.RemoveAllChildren();
|
|
|
|
List<CUIComponent> l = new List<CUIComponent>();
|
|
|
|
if (CUI.Main is not null)
|
|
{
|
|
RunRecursiveOn(CUI.Main, (component) =>
|
|
{
|
|
if (!component.IgnoreDebug) l.Add(component);
|
|
});
|
|
}
|
|
|
|
foreach (CUIComponent c in l)
|
|
{
|
|
CUIToggleButton b = new CUIToggleButton(c.ToString())
|
|
{
|
|
State = c.Debug,
|
|
IgnoreDebug = true,
|
|
Style = new CUIStyle(){
|
|
{"TextAlign", "[0,0]"}
|
|
},
|
|
AddOnMouseDown = (m) =>
|
|
{
|
|
c.Debug = !c.Debug;
|
|
MakeIDList();
|
|
},
|
|
AddOnMouseEnter = (m) => c.DebugHighlight = true,
|
|
AddOnMouseLeave = (m) => c.DebugHighlight = false,
|
|
};
|
|
|
|
DebugIDsComponent.Append(b);
|
|
}
|
|
DebugIDsComponent.Visible = true;
|
|
l.Clear();
|
|
}
|
|
|
|
public CUIDebugWindow() : base()
|
|
{
|
|
this.ZIndex = 1000;
|
|
this.Layout = new CUILayoutVerticalList();
|
|
|
|
this["handle"] = new CUIComponent()
|
|
{
|
|
Absolute = new CUINullRect(null, null, null, 20),
|
|
};
|
|
|
|
this["handle"]["closebutton"] = new CUIButton("X")
|
|
{
|
|
Anchor = new Vector2(1, 0.5f),
|
|
Style = new CUIStyle(){
|
|
{"MasterColor", "Red"}
|
|
},
|
|
AddOnMouseDown = (e) =>
|
|
{
|
|
CUIDebugWindow.Close();
|
|
},
|
|
};
|
|
|
|
this["controls"] = new CUIComponent()
|
|
{
|
|
FitContent = new CUIBool2(false, true),
|
|
};
|
|
|
|
this["controls"]["loop"] = new CUIToggleButton("loop")
|
|
{
|
|
Relative = new CUINullRect(0, 0, 0.5f, null),
|
|
AddOnStateChange = (state) =>
|
|
{
|
|
Loop = state;
|
|
Events?.Clear();
|
|
EventsComponent?.RemoveAllChildren();
|
|
},
|
|
State = Loop,
|
|
};
|
|
|
|
|
|
this["controls"].Append(PickIDButton = new CUIMultiButton()
|
|
{
|
|
Relative = new CUINullRect(0.5f, 0, 0.5f, null),
|
|
Style = new CUIStyle(){
|
|
{"InactiveColor", "0,0,0,128"},
|
|
{"MousePressedColor", "0,255,255,64"}
|
|
},
|
|
ConsumeDragAndDrop = false,
|
|
|
|
Options = new string[]{
|
|
"Debug events", "Debugged components"
|
|
}
|
|
});
|
|
|
|
Append(Pages = new CUIPages()
|
|
{
|
|
FillEmptySpace = new CUIBool2(false, true),
|
|
Style = new CUIStyle(){
|
|
{"BackgroundColor", "0,0,32,128"}
|
|
},
|
|
IgnoreDebug = true,
|
|
});
|
|
|
|
EventsComponent = new CUIVerticalList()
|
|
{
|
|
Relative = new CUINullRect(0, 0, 1, 1),
|
|
Scrollable = true,
|
|
IgnoreDebug = true,
|
|
};
|
|
|
|
DebugIDsComponent = new CUIVerticalList()
|
|
{
|
|
Relative = new CUINullRect(0, 0, 1, 1),
|
|
Scrollable = true,
|
|
IgnoreDebug = true,
|
|
};
|
|
|
|
PickIDButton.OnSelect += (s) =>
|
|
{
|
|
if (PickIDButton.SelectedIndex == 0)
|
|
{
|
|
MakeIDList();
|
|
Pages.Open(EventsComponent);
|
|
}
|
|
else Pages.Open(DebugIDsComponent);
|
|
};
|
|
PickIDButton.Select(0);
|
|
|
|
this["controls"].Get<CUIToggleButton>("loop").State = true;
|
|
|
|
IgnoreDebug = true;
|
|
}
|
|
|
|
public static CUIDebugWindow Open()
|
|
{
|
|
if (CUI.Main == null) return null;
|
|
|
|
CUIDebugWindow w = new CUIDebugWindow()
|
|
{
|
|
Absolute = new CUINullRect(10, 370, 500, 370),
|
|
};
|
|
CUI.Main.Append(w);
|
|
CUIDebugWindow.Main = w;
|
|
CUI.Main.OnTreeChanged += () => w.MakeIDList();
|
|
return w;
|
|
}
|
|
|
|
public static void Close()
|
|
{
|
|
if (CUIDebugWindow.Main == null) return;
|
|
|
|
CUIDebugWindow.Main.RemoveSelf();
|
|
CUIDebugWindow.Main.Revealed = false;
|
|
CUIDebugWindow.Main = null;
|
|
}
|
|
|
|
public CUIDebugWindow(float? x = null, float? y = null, float? w = null, float? h = null) : this()
|
|
{
|
|
Relative = new CUINullRect(x, y, w, h);
|
|
}
|
|
}
|
|
} |