Skip to content

Commit b16e0fa

Browse files
merge imgui branch to internal merge (#1100)
* basic setup for imgui * try to fix workflows * same fix for mac and linux workflows * forgot about the debug builds * in game console using imgui, console commands, wip state and object inspector tools * forgot to revert this * use existing console bind to open imgui console, disable opening native console with bind for now * add recursive option to Character.getList, to include ones in folders for input text suggestions and to fix the character editor command not working with folders * debug option for disabling imgui multi viewports, disabled by default on linux due to issues * better way of handling autopause when imgui window is open, add temp f4 bind to open wip inspector and fix debug draw coordinates when multi viewport is disabled * compile fix for hscript config after foxlite was added * inspector progress, cleaned up ui, foxlite support, flxobject physics and flxtext properties * reorganize inspector code, split up properties and gizmo into different classes, wip 2d gizmo thats mostly functional, early setup for 3d gizmo * dummy commit to update foxlite on action builds * keybind option for inspector, finished up 2d gizmo * switch lime branch back to cne branch * flxtext properties compile fix and set default window pos/size on inspector windows * hopefully fix imgui autopause issues --------- Co-authored-by: Ralty <78720179+Raltyro@users.noreply.github.com>
1 parent e32a5ee commit b16e0fa

32 files changed

Lines changed: 3395 additions & 33 deletions

.github/workflows/linux.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ jobs:
4444
sudo apt-get install libvlc-dev libvlccore-dev
4545
- name: Installing/Updating libraries
4646
run: |
47+
haxelib --global update haxelib
4748
haxe -cp commandline -D analyzer-optimize --run Main setup -si
4849
- name: Building the game
4950
run: |
@@ -127,6 +128,7 @@ jobs:
127128
sudo apt-get install libvlc-dev libvlccore-dev
128129
- name: Installing/Updating libraries
129130
run: |
131+
haxelib --global update haxelib
130132
haxe -cp commandline -D analyzer-optimize --run Main setup -si
131133
- name: Building the game
132134
run: |

.github/workflows/macos.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ jobs:
3535
brew trust aws/tap
3636
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
3737
arch -x86_64 /usr/local/bin/brew install zlib
38+
haxelib --global update haxelib
3839
haxe -cp commandline -D analyzer-optimize --run Main setup -si
3940
- name: Building the game
4041
run: |
@@ -103,6 +104,7 @@ jobs:
103104
run: |
104105
brew trust aws/tap
105106
brew install zlib
107+
haxelib --global update haxelib
106108
haxe -cp commandline -D analyzer-optimize --run Main setup -si
107109
- name: Building the game
108110
run: |
@@ -218,6 +220,7 @@ jobs:
218220
brew trust aws/tap
219221
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
220222
arch -x86_64 /usr/local/bin/brew install zlib
223+
haxelib --global update haxelib
221224
haxe -cp commandline -D analyzer-optimize --run Main setup -si
222225
- name: Building the game
223226
run: |
@@ -285,6 +288,7 @@ jobs:
285288
run: |
286289
brew trust aws/tap
287290
brew install zlib
291+
haxelib --global update haxelib
288292
haxe -cp commandline -D analyzer-optimize --run Main setup -si
289293
- name: Building the game
290294
run: |

.github/workflows/windows.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ jobs:
3232
# export/release/windows/obj/
3333
- name: Installing/Updating libraries
3434
run: |
35+
haxelib --global update haxelib
3536
haxe -cp commandline -D analyzer-optimize --run Main setup -si --no-vscheck
3637
- name: Building the game
3738
run: |
@@ -104,6 +105,7 @@ jobs:
104105
# export/debug/windows/obj/
105106
- name: Installing/Updating libraries
106107
run: |
108+
haxelib --global update haxelib
107109
haxe -cp commandline -D analyzer-optimize --run Main setup -si --no-vscheck
108110
- name: Building the game
109111
run: |

assets/data/editors/layouts/stage/characterEditScreen.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595
import funkin.game.Character;
9696

9797
var curCharBox = new UIAutoCompleteTextBox(col(2), charTypeY, char.curCharacter, 145, 32);
98-
curCharBox.suggestItems = Character.getList(false);
98+
curCharBox.suggestItems = Character.getList(false, false, null, true);
9999
self.add(curCharBox);
100100
</exec>
101101
</section>

assets/languages/en/Options.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
<str id="devMenus">Developer Menus</str>
6262
<str id="openConsole">Open Console</str>
6363
<str id="reloadState">Reload State</str>
64+
<str id="openInspector">Open Inspector</str>
6465
</group>
6566
</group>
6667

@@ -233,6 +234,9 @@
233234

234235
<str id="legacyMemoryCounter-name">Legacy Memory Counter</str>
235236
<str id="legacyMemoryCounter-desc">If checked, the memory counter will show the Haxe GC memory usage and its peak (the original behavior) instead of the working set memory seen in Task Manager.</str>
237+
238+
<str id="imguiMultiViewport-name">ImGui Multi Viewport</str>
239+
<str id="imguiMultiViewport-desc">If checked, ImGui windows can be dragged out of the main viewport, disabled by default on Linux due to common bugs and issues.</str>
236240
</group>
237241

238242
</language>

project.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@
237237
<haxedef name="openfl_pool_events"/>
238238
<haxedef name="openfl-enable-handle-error"/>
239239
<haxedef name="openfl_no_custom_render_event"/>
240+
<haxedef name="IMGUI_ENABLED" if="lime-imgui" />
240241

241242
<haxedef name="HXCPP_M32" if="32bit"/>
242243
<haxedef name="HXCPP_DEBUG_LINK" if="debug"/>

source/funkin/backend/system/Controls.hx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ enum Control
3131
DEV_ACCESS;
3232
DEV_CONSOLE;
3333
DEV_RELOAD;
34+
DEV_INSPECTOR;
3435
}
3536

3637
enum KeyboardScheme
@@ -185,6 +186,12 @@ class Controls extends FlxActionSet
185186
@:pressed("dev-reload") public var DEV_RELOAD_HOLD(get, set): Bool;
186187
@:justReleased("dev-reload") public var DEV_RELOAD_R(get, set): Bool;
187188

189+
@:devModeOnly
190+
@:gamepad([])
191+
@:justPressed("dev-inspector") public var DEV_INSPECTOR(get, set): Bool;
192+
@:pressed("dev-inspector") public var DEV_INSPECTOR_HOLD(get, set): Bool;
193+
@:justReleased("dev-inspector") public var DEV_INSPECTOR_R(get, set): Bool;
194+
188195
@:allow(funkin.backend.utils.ControlsUtil)
189196
var byName:Map<String, FlxActionDigital> = [];
190197

source/funkin/backend/system/FunkinGame.hx

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package funkin.backend.system;
33
import flixel.FlxGame;
44
import flixel.FlxG;
55
import openfl.events.KeyboardEvent;
6+
import openfl.events.Event;
67

78
class FunkinGame extends FlxGame {
89
var skipNextTickUpdate:Bool = false;
10+
var manualPause:Bool = false; //fake autopause
911

1012
#if desktop
1113
var fullscreenListener:KeyboardEvent->Void;
@@ -34,6 +36,39 @@ class FunkinGame extends FlxGame {
3436

3537
override function __enterFrame(deltaTime:Float) {
3638
if (skipNextTickUpdate != (skipNextTickUpdate = false)) ticks = getTicks();
39+
if (manualPause) {
40+
var prevAutoPause = FlxG.autoPause;
41+
FlxG.autoPause = true;
42+
super.__enterFrame(deltaTime);
43+
FlxG.autoPause = prevAutoPause;
44+
draw();
45+
return;
46+
}
3747
super.__enterFrame(deltaTime);
3848
}
49+
50+
51+
override public function onFocus(_):Void {
52+
if (manualPause) return;
53+
super.onFocus(_);
54+
}
55+
56+
override public function onFocusLost(event:Event):Void {
57+
if (manualPause) return;
58+
super.onFocusLost(event);
59+
}
60+
61+
public function toggleManualPause() {
62+
var prevAutoPause = FlxG.autoPause;
63+
FlxG.autoPause = true;
64+
65+
if (!manualPause) {
66+
onFocusLost(null);
67+
manualPause = true;
68+
} else {
69+
manualPause = false;
70+
onFocus(null);
71+
}
72+
FlxG.autoPause = prevAutoPause;
73+
}
3974
}

source/funkin/backend/system/Logs.hx

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,34 @@ package funkin.backend.system;
22

33
import flixel.system.debug.log.LogStyle;
44
import flixel.system.frontEnds.LogFrontEnd;
5+
import funkin.backend.system.console.ConsoleUI;
56
import funkin.backend.utils.NativeAPI.ConsoleColor;
67
import funkin.backend.utils.NativeAPI;
78
import haxe.Log;
89

910
final class Logs {
1011
private static var __showing:Bool = false;
1112

13+
public static final LOG_WARNING_TEXT = ' WARNING ';
14+
public static final LOG_ERROR_TEXT = ' ERROR ';
15+
public static final LOG_TRACE_TEXT = ' TRACE ';
16+
public static final LOG_VERBOSE_TEXT = ' VERBOSE ';
17+
public static final LOG_SUCCESS_TEXT = ' SUCCESS ';
18+
public static final LOG_FAILURE_TEXT = ' FAILURE ';
19+
public static final LOG_INFORMATION_TEXT = ' INFORMATION ';
20+
1221
public static var nativeTrace = Log.trace;
1322
public static function init() {
1423
Log.trace = function(v:Dynamic, ?infos:Null<haxe.PosInfos>) {
1524
var data = [
16-
logText('${infos.fileName}:${infos.lineNumber}: ', CYAN),
17-
logText(Std.string(v))
25+
logText('${infos.fileName}:${infos.lineNumber}: ', CYAN, TRACE),
26+
logText(Std.string(v), LIGHTGRAY, TRACE)
1827
];
1928

2029
if (infos.customParams != null) {
2130
for (i in infos.customParams) {
2231
data.push(
23-
logText("," + Std.string(i))
32+
logText("," + Std.string(i), LIGHTGRAY, TRACE)
2433
);
2534
}
2635
}
@@ -77,30 +86,31 @@ final class Logs {
7786
public static function prepareColoredTrace(text:Array<LogText>, level:Level = INFO) {
7887
var time = Date.now();
7988
var superCoolText = [
80-
logText('[ '),
81-
logText('${Std.string(time.getHours()).addZeros(2)}:${Std.string(time.getMinutes()).addZeros(2)}:${Std.string(time.getSeconds()).addZeros(2)}', DARKMAGENTA),
82-
logText(' |'),
89+
logText('[ ', LIGHTGRAY, level),
90+
logText('${Std.string(time.getHours()).addZeros(2)}:${Std.string(time.getMinutes()).addZeros(2)}:${Std.string(time.getSeconds()).addZeros(2)}', DARKMAGENTA, level),
91+
logText(' |', LIGHTGRAY, level),
8392
switch (level)
8493
{
85-
case WARNING: logText(' WARNING ', DARKYELLOW);
86-
case ERROR: logText(' ERROR ', DARKRED);
87-
case TRACE: logText(' TRACE ', GRAY);
88-
case VERBOSE: logText(' VERBOSE ', DARKMAGENTA);
89-
case SUCCESS: logText(' SUCCESS ', GREEN);
90-
case FAILURE: logText(' FAILURE ', RED);
91-
default: logText(' INFORMATION ', CYAN);
94+
case WARNING: logText(LOG_WARNING_TEXT, DARKYELLOW, level);
95+
case ERROR: logText(LOG_ERROR_TEXT, DARKRED, level);
96+
case TRACE: logText(LOG_TRACE_TEXT, GRAY, level);
97+
case VERBOSE: logText(LOG_VERBOSE_TEXT, DARKMAGENTA, level);
98+
case SUCCESS: logText(LOG_SUCCESS_TEXT, GREEN, level);
99+
case FAILURE: logText(LOG_FAILURE_TEXT, RED, level);
100+
default: logText(LOG_INFORMATION_TEXT, CYAN, level);
92101
},
93-
logText('] ')
102+
logText('] ', LIGHTGRAY, level)
94103
];
95104
for(k=>e in superCoolText)
96105
text.insert(k, e);
97106
return text;
98107
}
99108

100-
public static function logText(text:String, color:ConsoleColor = LIGHTGRAY):LogText {
109+
public static function logText(text:String, color:ConsoleColor = LIGHTGRAY, level:Level = INFO):LogText {
101110
return {
102111
text: text,
103-
color: color
112+
color: color,
113+
level: level
104114
};
105115
}
106116

@@ -129,19 +139,24 @@ final class Logs {
129139
@:privateAccess
130140
nativeTrace([for(t in text) t.text].join(""));
131141
#end
142+
143+
#if IMGUI_ENABLED
144+
@:privateAccess
145+
ConsoleUI.instance.addToConsole(text);
146+
#end
132147
}
133148

134149
public inline static function traceColored(text:Array<LogText>, level:Level = INFO)
135150
__showInConsole(prepareColoredTrace(text, level));
136151

137152
public static function trace(text:String, level:Level = INFO, color:ConsoleColor = LIGHTGRAY, ?prefix:String) {
138-
var text = [logText(text, color)];
139-
if(prefix != null) text.insert(0, getPrefix(prefix));
153+
var text = [logText(text, color, level)];
154+
if(prefix != null) text.insert(0, getPrefix(prefix, level));
140155
traceColored(text, level);
141156
}
142157

143-
public inline static function getPrefix(prefix:String)
144-
return logText('[${prefix}] ', BLUE);
158+
public inline static function getPrefix(prefix:String, level:Level = INFO)
159+
return logText('[${prefix}] ', BLUE, level);
145160

146161
public inline static function infos(text:String, color:ConsoleColor = LIGHTGRAY, ?prefix:String)
147162
Logs.trace(text, INFO, color, prefix);
@@ -169,4 +184,5 @@ enum abstract Level(Int) {
169184
typedef LogText = {
170185
var text:String;
171186
var color:ConsoleColor;
187+
var level:Level;
172188
}

0 commit comments

Comments
 (0)