-
Notifications
You must be signed in to change notification settings - Fork 0
/
DearImGuiDemoWindow.cs
221 lines (175 loc) · 8.33 KB
/
DearImGuiDemoWindow.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
using ImGuiNET;
using UnityEngine;
using UnityEngine.Events;
public class DearImGuiDemoWindow : MonoBehaviour
{
private static UnityAction OnUpdateLighting;
private static UnityAction OnLoadGame;
private static UnityAction OnSaveGame;
private void OnEnable() => ImGuiUn.Layout += OnLayout;
private void OnDisable() => ImGuiUn.Layout -= OnLayout;
private static readonly Vector4 TEXT_COLOR = new(1f, 0.8f, 0f, 1.0f);
private float m_Timeline = 0.5f;
private System.TimeSpan m_Time = System.TimeSpan.FromHours(12.0f);
private string m_Username = string.Empty;
private string m_Password = string.Empty;
private Vector3 m_SunColor = new(1.0f, 0.9f, 0f);
private bool m_WindowEnabled = false;
private bool m_EnableDayAndNightCycle = true;
private int m_DragInt = 0;
private int m_AccountCount = 0;
private bool m_ShowImGuiDemoWindow;
private static uint s_tab_bar_flags = (uint)ImGuiTabBarFlags.Reorderable;
static bool[] s_opened = { true, true, true, true }; // Persistent user state
/**
* DearImGui
* Manual - https://pthom.github.io/imgui_manual_online/manual/imgui_manual.html
*/
private void OnLayout()
{
// Begins ImGui window
if (!ImGui.Begin("Game Manager",
ref m_WindowEnabled,
ImGuiWindowFlags.MenuBar))
return;
ImGui.Checkbox("Enable Day And Night Cycle", ref m_EnableDayAndNightCycle);
// Make a float slider (label, value, min, max)
if (ImGui.SliderFloat("Time [%]", ref m_Timeline, 0f, 1f) && m_EnableDayAndNightCycle)
{
m_Time = System.TimeSpan.FromSeconds(m_Timeline * 86400f);
OnUpdateLighting?.Invoke();
}
// Display text of current in-game time
ImGui.TextColored(TEXT_COLOR, $"In-game Time: {m_Time:hh\\:mm}");
// Create color editor for Vector3
ImGui.ColorEdit3("Sun Color", ref m_SunColor);
// Creates a menu bar
if (ImGui.BeginMenuBar())
{
if (ImGui.BeginMenu("File"))
{
if (ImGui.MenuItem("Open", shortcut: "Ctrl+O"))
Debug.Log("Opening a file...");
if (ImGui.MenuItem("Save", shortcut: "Ctrl+S"))
Debug.Log("Saving a file...");
if (ImGui.MenuItem("Close", shortcut: "Ctrl+W"))
{
m_WindowEnabled = false;
Debug.Log("Closing this window...");
}
ImGui.EndMenu();
}
ImGui.EndMenuBar();
}
if (ImGui.Button("Load Game"))
{
OnLoadGame?.Invoke();
Debug.Log("Loading the game...");
}
if (ImGui.Button("Save Game"))
{
OnSaveGame?.Invoke();
Debug.Log("Saving the game...");
}
if (ImGui.Button("Create Account"))
{
Debug.Log("Creating account...");
m_AccountCount++;
}
ImGui.SameLine(0, -1);
ImGui.Text($"Account Count = {m_AccountCount}");
// Create input field (label, value, maxLength [uint])
ImGui.InputText("Username", ref m_Username, maxLength: 12u);
ImGui.InputText("Password", ref m_Password, maxLength: 16u);
ImGui.Text($"Mouse position: {ImGui.GetMousePos()}");
// Display contents in a scrolling region
ImGui.TextColored(TEXT_COLOR, "Important Stuff");
ImGui.BeginChild("Scrolling");
for (int n = 0; n < 50; n++)
ImGui.Text($"{n:0000}: Some text");
ImGui.EndChild();
// Generate samples and plot them
float[] samples = new float[100];
for (int n = 0; n < 100; n++)
samples[n] = Mathf.Sin((float)(n * 0.2f + ImGui.GetTime() * 1.5f));
ImGui.PlotLines("Samples", ref samples[0], 100);
ImGui.DragInt("Draggable Int", ref m_DragInt);
float framerate = ImGui.GetIO().Framerate;
ImGui.Text($"Application average {1000.0f / framerate:0.##} ms/frame ({framerate:0.#} FPS)");
if (m_ShowImGuiDemoWindow)
{
// Normally user code doesn't need/want to call this because positions are saved in .ini file anyway.
// Here we just want to make the demo initial state a bit more friendly!
ImGui.SetNextWindowPos(new Vector2(650, 20), ImGuiCond.FirstUseEver);
ImGui.ShowDemoWindow(ref m_ShowImGuiDemoWindow);
}
if (ImGui.TreeNode("Tabs"))
{
if (ImGui.TreeNode("Basic"))
{
ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags.None;
if (ImGui.BeginTabBar("MyTabBar", tab_bar_flags))
{
if (ImGui.BeginTabItem("Avocado"))
{
ImGui.Text("This is the Avocado tab!\nblah blah blah blah blah");
ImGui.EndTabItem();
}
if (ImGui.BeginTabItem("Broccoli"))
{
ImGui.Text("This is the Broccoli tab!\nblah blah blah blah blah");
ImGui.EndTabItem();
}
if (ImGui.BeginTabItem("Cucumber"))
{
ImGui.Text("This is the Cucumber tab!\nblah blah blah blah blah");
ImGui.EndTabItem();
}
ImGui.EndTabBar();
}
ImGui.Separator();
ImGui.TreePop();
}
if (ImGui.TreeNode("Advanced & Close Button"))
{
// Expose a couple of the available flags. In most cases you may just call BeginTabBar() with no flags (0).
ImGui.CheckboxFlags("ImGuiTabBarFlags_Reorderable", ref s_tab_bar_flags, (uint)ImGuiTabBarFlags.Reorderable);
ImGui.CheckboxFlags("ImGuiTabBarFlags_AutoSelectNewTabs", ref s_tab_bar_flags, (uint)ImGuiTabBarFlags.AutoSelectNewTabs);
ImGui.CheckboxFlags("ImGuiTabBarFlags_NoCloseWithMiddleMouseButton", ref s_tab_bar_flags, (uint)ImGuiTabBarFlags.NoCloseWithMiddleMouseButton);
if ((s_tab_bar_flags & (uint)ImGuiTabBarFlags.FittingPolicyMask) == 0)
s_tab_bar_flags |= (uint)ImGuiTabBarFlags.FittingPolicyDefault;
if (ImGui.CheckboxFlags("ImGuiTabBarFlags_FittingPolicyResizeDown", ref s_tab_bar_flags, (uint)ImGuiTabBarFlags.FittingPolicyResizeDown))
s_tab_bar_flags &= ~((uint)ImGuiTabBarFlags.FittingPolicyMask ^ (uint)ImGuiTabBarFlags.FittingPolicyResizeDown);
if (ImGui.CheckboxFlags("ImGuiTabBarFlags_FittingPolicyScroll", ref s_tab_bar_flags, (uint)ImGuiTabBarFlags.FittingPolicyScroll))
s_tab_bar_flags &= ~((uint)ImGuiTabBarFlags.FittingPolicyMask ^ (uint)ImGuiTabBarFlags.FittingPolicyScroll);
// Tab Bar
string[] names = { "Artichoke", "Beetroot", "Celery", "Daikon" };
for (int n = 0; n < s_opened.Length; n++)
{
if (n > 0) { ImGui.SameLine(); }
ImGui.Checkbox(names[n], ref s_opened[n]);
}
// Passing a bool* to BeginTabItem() is similar to passing one to Begin(): the underlying bool will be set to false when the tab is closed.
if (ImGui.BeginTabBar("MyTabBar", (ImGuiTabBarFlags)s_tab_bar_flags))
{
for (int n = 0; n < s_opened.Length; n++)
{
if (s_opened[n] && ImGui.BeginTabItem(names[n], ref s_opened[n]))
{
ImGui.Text($"This is the {names[n]} tab!");
if ((n & 1) != 0)
ImGui.Text("I am an odd tab.");
ImGui.EndTabItem();
}
}
ImGui.EndTabBar();
}
ImGui.Separator();
ImGui.TreePop();
}
ImGui.TreePop();
}
// Ends ImGui window
ImGui.End();
}
}