Skip to content

Commit 0af5cac

Browse files
authored
Feature: Manager Loggers (#146)
This adds a hud element with the ability to show debug log consoles for all managers.
1 parent 96c7b81 commit 0af5cac

28 files changed

+932
-61
lines changed

src/main/kotlin/com/lambda/gui/dsl/ImGuiBuilder.kt

Lines changed: 149 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,147 @@ package com.lambda.gui.dsl
3939
import com.lambda.gui.components.ClickGuiLayout
4040
import com.lambda.gui.dsl.ImGuiBuilder.text
4141
import com.lambda.util.math.Vec2d
42-
import imgui.*
43-
import imgui.ImGui.*
44-
import imgui.flag.*
45-
import imgui.type.*
42+
import imgui.ImDrawList
43+
import imgui.ImFont
44+
import imgui.ImGui
45+
import imgui.ImGui.begin
46+
import imgui.ImGui.beginChild
47+
import imgui.ImGui.beginCombo
48+
import imgui.ImGui.beginDragDropSource
49+
import imgui.ImGui.beginDragDropTarget
50+
import imgui.ImGui.beginGroup
51+
import imgui.ImGui.beginMainMenuBar
52+
import imgui.ImGui.beginMenu
53+
import imgui.ImGui.beginMenuBar
54+
import imgui.ImGui.beginPopup
55+
import imgui.ImGui.beginPopupContextItem
56+
import imgui.ImGui.beginPopupContextVoid
57+
import imgui.ImGui.beginPopupContextWindow
58+
import imgui.ImGui.beginPopupModal
59+
import imgui.ImGui.beginTabBar
60+
import imgui.ImGui.beginTabItem
61+
import imgui.ImGui.beginTooltip
62+
import imgui.ImGui.calcTextSize
63+
import imgui.ImGui.collapsingHeader
64+
import imgui.ImGui.colorButton
65+
import imgui.ImGui.colorEdit4
66+
import imgui.ImGui.colorPicker4
67+
import imgui.ImGui.dragFloat
68+
import imgui.ImGui.dragInt
69+
import imgui.ImGui.end
70+
import imgui.ImGui.endChild
71+
import imgui.ImGui.endCombo
72+
import imgui.ImGui.endDragDropSource
73+
import imgui.ImGui.endDragDropTarget
74+
import imgui.ImGui.endGroup
75+
import imgui.ImGui.endMainMenuBar
76+
import imgui.ImGui.endMenu
77+
import imgui.ImGui.endMenuBar
78+
import imgui.ImGui.endPopup
79+
import imgui.ImGui.endTabBar
80+
import imgui.ImGui.endTabItem
81+
import imgui.ImGui.endTooltip
82+
import imgui.ImGui.getBackgroundDrawList
83+
import imgui.ImGui.getColorU32
84+
import imgui.ImGui.getContentRegionAvail
85+
import imgui.ImGui.getCursorPosX
86+
import imgui.ImGui.getCursorPosY
87+
import imgui.ImGui.getFont
88+
import imgui.ImGui.getFontSize
89+
import imgui.ImGui.getForegroundDrawList
90+
import imgui.ImGui.getFrameHeight
91+
import imgui.ImGui.getFrameHeightWithSpacing
92+
import imgui.ImGui.getIO
93+
import imgui.ImGui.getItemID
94+
import imgui.ImGui.getItemRectMaxX
95+
import imgui.ImGui.getItemRectMaxY
96+
import imgui.ImGui.getItemRectMinX
97+
import imgui.ImGui.getItemRectMinY
98+
import imgui.ImGui.getStyle
99+
import imgui.ImGui.getVersion
100+
import imgui.ImGui.getWindowContentRegionMaxX
101+
import imgui.ImGui.getWindowContentRegionMaxY
102+
import imgui.ImGui.getWindowDrawList
103+
import imgui.ImGui.getWindowHeight
104+
import imgui.ImGui.getWindowPos
105+
import imgui.ImGui.getWindowPosX
106+
import imgui.ImGui.getWindowPosY
107+
import imgui.ImGui.getWindowSize
108+
import imgui.ImGui.getWindowViewport
109+
import imgui.ImGui.getWindowWidth
110+
import imgui.ImGui.image
111+
import imgui.ImGui.inputDouble
112+
import imgui.ImGui.inputFloat
113+
import imgui.ImGui.inputFloat2
114+
import imgui.ImGui.inputFloat3
115+
import imgui.ImGui.inputFloat4
116+
import imgui.ImGui.isAnyItemActive
117+
import imgui.ImGui.isAnyItemFocused
118+
import imgui.ImGui.isAnyItemHovered
119+
import imgui.ImGui.isItemActivated
120+
import imgui.ImGui.isItemActive
121+
import imgui.ImGui.isItemClicked
122+
import imgui.ImGui.isItemDeactivated
123+
import imgui.ImGui.isItemDeactivatedAfterEdit
124+
import imgui.ImGui.isItemEdited
125+
import imgui.ImGui.isItemFocused
126+
import imgui.ImGui.isItemHovered
127+
import imgui.ImGui.isItemToggledOpen
128+
import imgui.ImGui.isMouseClicked
129+
import imgui.ImGui.isWindowAppearing
130+
import imgui.ImGui.isWindowCollapsed
131+
import imgui.ImGui.isWindowHovered
132+
import imgui.ImGui.plotHistogram
133+
import imgui.ImGui.popFont
134+
import imgui.ImGui.popID
135+
import imgui.ImGui.popItemWidth
136+
import imgui.ImGui.popStyleColor
137+
import imgui.ImGui.popStyleVar
138+
import imgui.ImGui.popTextWrapPos
139+
import imgui.ImGui.pushFont
140+
import imgui.ImGui.pushID
141+
import imgui.ImGui.pushItemWidth
142+
import imgui.ImGui.pushStyleColor
143+
import imgui.ImGui.pushStyleVar
144+
import imgui.ImGui.pushTextWrapPos
145+
import imgui.ImGui.setClipboardText
146+
import imgui.ImGui.setCursorPosX
147+
import imgui.ImGui.setCursorPosY
148+
import imgui.ImGui.sliderFloat
149+
import imgui.ImGui.sliderInt
150+
import imgui.ImGui.textColored
151+
import imgui.ImGui.textUnformatted
152+
import imgui.ImGui.treeNode
153+
import imgui.ImGui.treePop
154+
import imgui.ImGuiIO
155+
import imgui.ImGuiStyle
156+
import imgui.ImGuiTextFilter
157+
import imgui.ImGuiViewport
158+
import imgui.ImVec2
159+
import imgui.flag.ImDrawListFlags
160+
import imgui.flag.ImGuiCol
161+
import imgui.flag.ImGuiColorEditFlags
162+
import imgui.flag.ImGuiComboFlags
163+
import imgui.flag.ImGuiDir
164+
import imgui.flag.ImGuiHoveredFlags
165+
import imgui.flag.ImGuiInputTextFlags
166+
import imgui.flag.ImGuiMouseButton
167+
import imgui.flag.ImGuiPopupFlags
168+
import imgui.flag.ImGuiSelectableFlags
169+
import imgui.flag.ImGuiTabBarFlags
170+
import imgui.flag.ImGuiTreeNodeFlags
171+
import imgui.flag.ImGuiWindowFlags
172+
import imgui.type.ImBoolean
173+
import imgui.type.ImDouble
174+
import imgui.type.ImFloat
175+
import imgui.type.ImInt
176+
import imgui.type.ImString
46177
import net.minecraft.util.math.Vec2f
47178
import net.minecraft.util.math.Vec3d
48179
import net.minecraft.util.math.Vec3i
49180
import java.awt.Color
50181
import kotlin.reflect.KMutableProperty0
182+
import imgui.ImGui.plotLines
51183

52184
typealias ProcedureBlock = ImGuiBuilder.() -> Unit
53185
typealias WrappedBlock<In, Out> = ImGuiBuilder.(In) -> Out
@@ -312,6 +444,18 @@ object ImGuiBuilder {
312444
@ImGuiDsl
313445
fun text(text: String) = textUnformatted(text)
314446

447+
/**
448+
* Text with coloring
449+
*
450+
* @param text The text to display
451+
*/
452+
@ImGuiDsl
453+
fun textColored(text: String, color: Color) {
454+
val floats = floatArrayOf(0f, 0f, 0f, 0f)
455+
val (r, g, b, a) = color.getColorComponents(floats)
456+
textColored(r, g, b, a, text)
457+
}
458+
315459
/**
316460
* Text with disabled coloring.
317461
*
@@ -1171,7 +1315,7 @@ object ImGuiBuilder {
11711315
*/
11721316
@ImGuiDsl
11731317
inline fun treeNode(label: String, id: String, block: ProcedureBlock) {
1174-
if (treeNode(label, id)) {
1318+
if (treeNode(id, label)) {
11751319
block()
11761320
treePop()
11771321
}

src/main/kotlin/com/lambda/interaction/construction/context/BreakContext.kt

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ import com.lambda.graphics.renderer.esp.DirectionMask
2121
import com.lambda.graphics.renderer.esp.DirectionMask.exclude
2222
import com.lambda.graphics.renderer.esp.ShapeBuilder
2323
import com.lambda.interaction.material.StackSelection
24+
import com.lambda.interaction.request.LogContext
25+
import com.lambda.interaction.request.LogContext.Companion.LogContextBuilder
26+
import com.lambda.interaction.request.LogContext.Companion.getLogContextBuilder
2427
import com.lambda.interaction.request.breaking.BreakConfig
25-
import com.lambda.interaction.request.breaking.BreakRequest
2628
import com.lambda.interaction.request.hotbar.HotbarManager
27-
import com.lambda.interaction.request.hotbar.HotbarRequest
2829
import com.lambda.interaction.request.rotating.RotationRequest
2930
import com.lambda.util.BlockUtils.emptyState
3031
import net.minecraft.block.BlockState
@@ -42,7 +43,7 @@ data class BreakContext(
4243
var instantBreak: Boolean,
4344
override var cachedState: BlockState,
4445
val sortMode: BreakConfig.SortMode
45-
) : BuildContext() {
46+
) : BuildContext(), LogContext {
4647
private val baseColor = Color(222, 0, 0, 25)
4748
private val sideColor = Color(222, 0, 0, 100)
4849

@@ -76,10 +77,16 @@ data class BreakContext(
7677
box(blockPos, cachedState, baseColor, sideColor, DirectionMask.ALL.exclude(result.side))
7778
}
7879

79-
fun requestSwap(breakRequest: BreakRequest, minKeepTicks: Int = 0): Boolean =
80-
HotbarRequest(
81-
hotbarIndex,
82-
breakRequest.hotbar,
83-
breakRequest.hotbar.keepTicks.coerceAtLeast(minKeepTicks)
84-
).submit(false).done
85-
}
80+
override fun getLogContextBuilder(): LogContextBuilder.() -> Unit = {
81+
group("Break Context") {
82+
text(blockPos.getLogContextBuilder())
83+
text(result.getLogContextBuilder())
84+
text(rotation.getLogContextBuilder())
85+
value("Hotbar Index", hotbarIndex)
86+
value("Instant Break", instantBreak)
87+
value("Cached State", cachedState)
88+
value("Expected State", expectedState)
89+
value("Sort Mode", sortMode)
90+
}
91+
}
92+
}

src/main/kotlin/com/lambda/interaction/construction/context/InteractionContext.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ package com.lambda.interaction.construction.context
1919

2020
import com.lambda.graphics.renderer.esp.DirectionMask.mask
2121
import com.lambda.graphics.renderer.esp.ShapeBuilder
22+
import com.lambda.interaction.request.LogContext
23+
import com.lambda.interaction.request.LogContext.Companion.LogContextBuilder
24+
import com.lambda.interaction.request.LogContext.Companion.getLogContextBuilder
2225
import com.lambda.interaction.request.Request.Companion.submit
2326
import com.lambda.interaction.request.hotbar.HotbarManager
2427
import com.lambda.interaction.request.hotbar.HotbarRequest
@@ -36,7 +39,7 @@ class InteractionContext(
3639
override var hotbarIndex: Int,
3740
override var cachedState: BlockState,
3841
override val expectedState: BlockState,
39-
) : BuildContext() {
42+
) : BuildContext(), LogContext {
4043
private val baseColor = Color(35, 254, 79, 25)
4144
private val sideColor = Color(35, 254, 79, 100)
4245

@@ -68,4 +71,15 @@ class InteractionContext(
6871
val validRotation = if (request.rotate) submit(rotation, false).done else true
6972
return hotbarRequest.done && validRotation
7073
}
74+
75+
override fun getLogContextBuilder(): LogContextBuilder.() -> Unit = {
76+
group("Interaction Context") {
77+
text(blockPos.getLogContextBuilder())
78+
text(result.getLogContextBuilder())
79+
text(rotation.getLogContextBuilder())
80+
value("Hotbar Index", hotbarIndex)
81+
value("Cached State", cachedState)
82+
value("Expected State", expectedState)
83+
}
84+
}
7185
}

src/main/kotlin/com/lambda/interaction/construction/context/PlaceContext.kt

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,17 @@
1818
package com.lambda.interaction.construction.context
1919

2020
import com.lambda.Lambda.mc
21-
import com.lambda.context.SafeContext
22-
import com.lambda.graphics.renderer.esp.DirectionMask
23-
import com.lambda.graphics.renderer.esp.DirectionMask.exclude
2421
import com.lambda.graphics.renderer.esp.DirectionMask.mask
2522
import com.lambda.graphics.renderer.esp.ShapeBuilder
23+
import com.lambda.interaction.request.LogContext
24+
import com.lambda.interaction.request.LogContext.Companion.LogContextBuilder
25+
import com.lambda.interaction.request.LogContext.Companion.getLogContextBuilder
2626
import com.lambda.interaction.request.Request.Companion.submit
2727
import com.lambda.interaction.request.hotbar.HotbarManager
2828
import com.lambda.interaction.request.hotbar.HotbarRequest
2929
import com.lambda.interaction.request.placing.PlaceRequest
3030
import com.lambda.interaction.request.rotating.RotationRequest
3131
import com.lambda.util.BlockUtils
32-
import com.lambda.util.BlockUtils.blockState
3332
import net.minecraft.block.BlockState
3433
import net.minecraft.util.hit.BlockHitResult
3534
import net.minecraft.util.math.BlockPos
@@ -45,7 +44,7 @@ data class PlaceContext(
4544
val sneak: Boolean,
4645
val insideBlock: Boolean,
4746
val currentDirIsValid: Boolean = false
48-
) : BuildContext() {
47+
) : BuildContext(), LogContext {
4948
private val baseColor = Color(35, 188, 254, 25)
5049
private val sideColor = Color(35, 188, 254, 100)
5150

@@ -83,4 +82,18 @@ data class PlaceContext(
8382
} else true
8483
return hotbarRequest.done && validRotation
8584
}
86-
}
85+
86+
override fun getLogContextBuilder(): LogContextBuilder.() -> Unit = {
87+
group("Place Context") {
88+
text(blockPos.getLogContextBuilder())
89+
text(result.getLogContextBuilder())
90+
text(rotation.getLogContextBuilder())
91+
value("Hotbar Index", hotbarIndex)
92+
value("Cached State", cachedState)
93+
value("Expected State", expectedState)
94+
value("Sneak", sneak)
95+
value("Inside Block", insideBlock)
96+
value("Current Dir Is Invalid", currentDirIsValid)
97+
}
98+
}
99+
}

0 commit comments

Comments
 (0)