Skip to content

tttsaurus/Ingame-Info-Reborn

Repository files navigation

InGame Info Reborn InGame Info Reborn

Platform Codacy Badge

This is a spiritual successor of InGame-Info-XML, not a fork. It shares no code with the original project. The original design focused on structured in-game HUDs and simple GUIs — reactive, declarative, and composable by design. Over time, the scope has shifted to in-game editor oriented workflows.

Overview

This is a library mod that helps you to create in-game overlaid (or focused) GUI with ease.

Snipaste_2025-01-12_12-53-07 (Nothing will pop up with the default configuration!)

Architectural Modules Chart

Click to Expand
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

Example

<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");
}

Wiki

My Detailed Todo List:

Latest Build

In case you want to use the latest action build

  • Go to GitHub Actions
  • Click on the latest workflow
  • Scroll down to the bottom and download the Artifacts
  • Unzip and ingameinfo-[version].jar is the mod file

Credits

Packages

 
 
 

Contributors