"In-game HUDs and GUIs done with structure — reactive, declarative, composable, and built to handle the rest."
This is a Work-In-Progress spiritual successor of InGame-Info-XML, not a fork. If you like this project, don't forget to give it a star⭐!
Suggestions/PRs are welcome
This is a library mod that helps you to create in-game overlaid (or focused) GUI with ease.
(Nothing will pop up with the default configuration!)
| Module | Role | Status |
|---|---|---|
| MVVM Base | Separates logic (ViewModel) from rendering (View) | ✅ Done |
| XAML-Style DSL For View | Declarative XAML-style layout to build static UI trees | ✅ Done |
| Reactive Binding | View reacts to changes in ViewModel automatically | ✅ Done |
| Compose (Injected via Slot) | Immediate-mode UI embedded in ViewModel | ⚠️ Partially |
| Snapshot Diffing | Virtual tree diffing for Compose-based UI | ✅ Done |
| Shared Context | Shared runtime context between ViewModel and Compose blocks | ✅ Done |
| DOM-Like Event System | Input propagation and event capturing/bubbling | ✅ Done |
| Interactable Control | Captures input, intercepts propagation (works with Event System) | ✅ Done |
| Fixed / Render Update | Dual update loop for logic vs render | ✅ Done |
| Annotation Driven Auto-Interpolation | Utility for smooth interpolation during render updates | ✅ Done |
| Render Op Queue | Abstract draw commands for controls | ✅ Done |
| UI Decoration | Draw custom visuals on existing controls | ✅ Mostly Done |
| Transition API | Externally trigger view transitions | 🚧 Planned |
| Theme Manager | Global theme system (colors, font scale, etc) | ✅ Mostly Done |
| Modal Layer | Stack-based modal / dialog system | 🚧 Planned |
<VerticalGroup>
<Text uid = "fps">
...
</Group>
// snippet from View and ViewModel classes
@Reactive(targetUid = "fps", property = "text", initiativeSync = true)
public ReactiveObject<String> fpsText = new ReactiveObject<>(){};
EventCenter.gameFpsEvent.addListener((fps) ->
{
fpsText.set("FPS: " + fps);
});
// registration entry point
@SubscribeEvent
public static void onIgiRuntimeEntryPoint(IgiRuntimeEntryPointEvent event)
{
event.runtime.initPhase
.registerMvvm("example", ExampleViewModel.class)
.openGuiOnStartup("example");
}
Currently working on the architecture.
Not adding controls or QoL updates.
My Detailed Todo List:
Implementation Overview:
In case you want to use the latest action build
Artifactsingameinfo-[version].jar is the mod file