Panel and minecraft widget panels improvements
This commit is contained in:
parent
060edb8073
commit
e56a9477ef
@ -246,12 +246,12 @@ public class MatterPanelScreen extends MatteryScreen<MenuMatterPanel> {
|
||||
var button = new ButtonPanel(this, task_frame, 0, 0, 40, 20, new TranslatableComponent("otm.container.matter_panel.close"));
|
||||
button.setDock(Dock.RIGHT);
|
||||
button.setDockMargin(2, 0, 0, 0);
|
||||
button.bindOnPress(task_frame::remove);
|
||||
button.bind(task_frame::remove);
|
||||
|
||||
button = new ButtonPanel(this, task_frame, 0, 0, 80, 20, new TranslatableComponent("otm.container.matter_panel.cancel_task"));
|
||||
button.setDock(Dock.RIGHT);
|
||||
button.setDockMargin(2, 0, 0, 0);
|
||||
button.bindOnPress(() -> {
|
||||
button.bind(() -> {
|
||||
menu.requestTaskCancel(task.id());
|
||||
task_frame.remove();
|
||||
});
|
||||
@ -307,8 +307,8 @@ public class MatterPanelScreen extends MatteryScreen<MenuMatterPanel> {
|
||||
|
||||
var input_amount = new EditBoxPanel(this, row_2, 0, 0, 10, 20, new TextComponent("Input amount")) {
|
||||
@Override
|
||||
protected void factorize(EditBox widget, boolean recreation) {
|
||||
super.factorize(widget, recreation);
|
||||
protected void configureNew(EditBox widget, boolean recreation) {
|
||||
super.configureNew(widget, recreation);
|
||||
|
||||
widget.setMaxLength(6);
|
||||
|
||||
@ -334,18 +334,18 @@ public class MatterPanelScreen extends MatteryScreen<MenuMatterPanel> {
|
||||
};
|
||||
|
||||
var button = new ButtonPanel(this, row_1, 0, 0, 40, 20, new TranslatableComponent("otm.container.matter_panel.increase_by", 8));
|
||||
button.bindOnPress(() -> input_amount.increase(8));
|
||||
button.bind(() -> input_amount.increase(8));
|
||||
button.setDock(Dock.RIGHT);
|
||||
button.setDockMargin(2, 0, 0, 0);
|
||||
|
||||
button = new ButtonPanel(this, row_1, 0, 0, 40, 20, new TranslatableComponent("otm.container.matter_panel.increase_by", 64));
|
||||
button.setDock(Dock.RIGHT);
|
||||
button.bindOnPress(() -> input_amount.increase(64));
|
||||
button.bind(() -> input_amount.increase(64));
|
||||
button.setDockMargin(2, 0, 0, 0);
|
||||
|
||||
button = new ButtonPanel(this, row_1, 0, 0, 40, 20, new TranslatableComponent("otm.container.matter_panel.increase_by", 256));
|
||||
button.setDock(Dock.RIGHT);
|
||||
button.bindOnPress(() -> input_amount.increase(256));
|
||||
button.bind(() -> input_amount.increase(256));
|
||||
button.setDockMargin(2, 0, 0, 0);
|
||||
|
||||
slot.setDock(Dock.LEFT);
|
||||
@ -353,28 +353,28 @@ public class MatterPanelScreen extends MatteryScreen<MenuMatterPanel> {
|
||||
input_amount.setDock(Dock.FILL);
|
||||
|
||||
button = new ButtonPanel(this, row_3, 0, 0, 40, 20, new TranslatableComponent("otm.container.matter_panel.decrease_by", 8));
|
||||
button.bindOnPress(() -> input_amount.increase(-8));
|
||||
button.bind(() -> input_amount.increase(-8));
|
||||
button.setDock(Dock.RIGHT);
|
||||
button.setDockMargin(2, 0, 0, 0);
|
||||
|
||||
button = new ButtonPanel(this, row_3, 0, 0, 40, 20, new TranslatableComponent("otm.container.matter_panel.decrease_by", 64));
|
||||
button.setDock(Dock.RIGHT);
|
||||
button.bindOnPress(() -> input_amount.increase(-64));
|
||||
button.bind(() -> input_amount.increase(-64));
|
||||
button.setDockMargin(2, 0, 0, 0);
|
||||
|
||||
button = new ButtonPanel(this, row_3, 0, 0, 40, 20, new TranslatableComponent("otm.container.matter_panel.decrease_by", 256));
|
||||
button.setDock(Dock.RIGHT);
|
||||
button.bindOnPress(() -> input_amount.increase(-256));
|
||||
button.bind(() -> input_amount.increase(-256));
|
||||
button.setDockMargin(2, 0, 0, 0);
|
||||
|
||||
button = new ButtonPanel(this, row_4, 0, 0, 40, 20, new TranslatableComponent("otm.container.matter_panel.cancel"));
|
||||
button.setDock(Dock.RIGHT);
|
||||
button.bindOnPress(pattern_frame::remove);
|
||||
button.bind(pattern_frame::remove);
|
||||
button.setDockMargin(2, 0, 0, 0);
|
||||
|
||||
button = new ButtonPanel(this, row_4, 0, 0, 82, 20, new TranslatableComponent("otm.container.matter_panel.send"));
|
||||
button.setDock(Dock.RIGHT);
|
||||
button.bindOnPress(() -> {
|
||||
button.bind(() -> {
|
||||
int value = 1;
|
||||
|
||||
try {
|
||||
|
@ -220,9 +220,11 @@ public abstract class MatteryScreen<T extends MatteryMenu> extends AbstractConta
|
||||
var panel = panels.get(i);
|
||||
|
||||
if (happen_to_click) {
|
||||
panel.killFocus();
|
||||
panel.killFocusForEverythingExceptInner$overdrive_that_matters();
|
||||
} else if (panel.mouseClickedChecked(p_97748_, p_97749_, p_97750_)) {
|
||||
happen_to_click = true;
|
||||
} else {
|
||||
panel.killFocusForEverythingExceptInner$overdrive_that_matters();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,27 +0,0 @@
|
||||
package ru.dbotthepony.mc.otm.client.screen.panels;
|
||||
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class SupplierSlotPanel extends AbstractSlotPanel {
|
||||
protected Supplier<ItemStack> stack_getter;
|
||||
|
||||
public SupplierSlotPanel(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y, float width, float height, Supplier<ItemStack> supplier) {
|
||||
super(screen, parent, x, y, width, height);
|
||||
stack_getter = supplier;
|
||||
}
|
||||
|
||||
public SupplierSlotPanel(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y, Supplier<ItemStack> supplier) {
|
||||
this(screen, parent, x, y, REGULAR_DIMENSIONS, REGULAR_DIMENSIONS, supplier);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
protected ItemStack getItemStack() {
|
||||
return stack_getter.get();
|
||||
}
|
||||
}
|
@ -201,7 +201,7 @@ class ScreenAndroidStation constructor(p_97741_: AndroidStationMenu, p_97742_: I
|
||||
bottom.dock = Dock.BOTTOM
|
||||
|
||||
close.dock = Dock.LEFT
|
||||
close.bindOnPress { research!!.remove() }
|
||||
close.bind { research!!.remove() }
|
||||
|
||||
bottom.setDockMargin(0f, 0f, 4f, 4f)
|
||||
canvas!!.setDockMargin(4f, 4f, 4f, 4f)
|
||||
@ -230,7 +230,7 @@ class ScreenAndroidStation constructor(p_97741_: AndroidStationMenu, p_97742_: I
|
||||
SlotPanel(this, frame, menu.androidBattery, 38f, 17f)
|
||||
|
||||
val button = ButtonPanel(this, frame, 38f, 69f, 124f, 20f, TranslatableComponent("otm.gui.android_research"))
|
||||
button.bindOnPress(this::openResearchTree)
|
||||
button.bind(this::openResearchTree)
|
||||
|
||||
return frame
|
||||
}
|
||||
|
@ -124,10 +124,10 @@ class ScreenDriveViewer(menu: MenuDriveViewer, inventory: Inventory, title: Comp
|
||||
|
||||
val filter = menu.getFilter()
|
||||
if (filter != null) {
|
||||
orCreateWidget.message = TranslatableComponent("otm.filter.match_nbt", if (filter.matchNbt) yes else no)
|
||||
orCreateWidget.active = !isWidgetDisabled
|
||||
widget?.message = TranslatableComponent("otm.filter.match_nbt", if (filter.matchNbt) yes else no)
|
||||
widget?.active = !isWidgetDisabled
|
||||
} else {
|
||||
orCreateWidget.active = false
|
||||
widget?.active = false
|
||||
}
|
||||
}
|
||||
|
||||
@ -144,7 +144,8 @@ class ScreenDriveViewer(menu: MenuDriveViewer, inventory: Inventory, title: Comp
|
||||
!filter.matchNbt
|
||||
)
|
||||
)
|
||||
disableFor(20)
|
||||
|
||||
disableTicks = 20
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -156,11 +157,10 @@ class ScreenDriveViewer(menu: MenuDriveViewer, inventory: Inventory, title: Comp
|
||||
|
||||
val filter = menu.getFilter()
|
||||
if (filter != null) {
|
||||
orCreateWidget.message =
|
||||
TranslatableComponent("otm.filter.match_tag", if (filter.matchTag) yes else no)
|
||||
orCreateWidget.active = !isWidgetDisabled
|
||||
widget?.message = TranslatableComponent("otm.filter.match_tag", if (filter.matchTag) yes else no)
|
||||
widget?.active = !isWidgetDisabled
|
||||
} else {
|
||||
orCreateWidget.active = false
|
||||
widget?.active = false
|
||||
}
|
||||
}
|
||||
|
||||
@ -177,7 +177,8 @@ class ScreenDriveViewer(menu: MenuDriveViewer, inventory: Inventory, title: Comp
|
||||
!filter.matchTag
|
||||
)
|
||||
)
|
||||
disableFor(20)
|
||||
|
||||
disableTicks = 20
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -189,10 +190,10 @@ class ScreenDriveViewer(menu: MenuDriveViewer, inventory: Inventory, title: Comp
|
||||
|
||||
val filter = menu.getFilter()
|
||||
if (filter != null) {
|
||||
orCreateWidget.message = TranslatableComponent("otm.filter.blacklist", if (filter.isBlacklist) yes else no)
|
||||
orCreateWidget.active = !isWidgetDisabled
|
||||
widget?.message = TranslatableComponent("otm.filter.blacklist", if (filter.isBlacklist) yes else no)
|
||||
widget?.active = !isWidgetDisabled
|
||||
} else {
|
||||
orCreateWidget.active = false
|
||||
widget?.active = false
|
||||
}
|
||||
}
|
||||
|
||||
@ -208,7 +209,8 @@ class ScreenDriveViewer(menu: MenuDriveViewer, inventory: Inventory, title: Comp
|
||||
!filter.isBlacklist
|
||||
)
|
||||
)
|
||||
disableFor(20)
|
||||
|
||||
disableTicks = 20
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,12 +17,10 @@ class ScreenEnergyCounter(menu: MenuEnergyCounter, inventory: Inventory, title:
|
||||
var label: Label = object : Label(this@ScreenEnergyCounter, frame) {
|
||||
override fun tick() {
|
||||
super.tick()
|
||||
setText(
|
||||
TranslatableComponent(
|
||||
text = TranslatableComponent(
|
||||
"otm.item.power.passed",
|
||||
FormattingHelper.formatPower(menu.passed.value)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,12 +30,10 @@ class ScreenEnergyCounter(menu: MenuEnergyCounter, inventory: Inventory, title:
|
||||
label = object : Label(this@ScreenEnergyCounter, frame) {
|
||||
override fun tick() {
|
||||
super.tick()
|
||||
setText(
|
||||
TranslatableComponent(
|
||||
text = TranslatableComponent(
|
||||
"otm.item.power.average",
|
||||
FormattingHelper.formatPower(menu.average.value)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,12 +43,10 @@ class ScreenEnergyCounter(menu: MenuEnergyCounter, inventory: Inventory, title:
|
||||
label = object : Label(this@ScreenEnergyCounter, frame) {
|
||||
override fun tick() {
|
||||
super.tick()
|
||||
setText(
|
||||
TranslatableComponent(
|
||||
text = TranslatableComponent(
|
||||
"otm.item.power.last_20_ticks",
|
||||
FormattingHelper.formatPower(menu.last20Ticks.value)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,12 +56,10 @@ class ScreenEnergyCounter(menu: MenuEnergyCounter, inventory: Inventory, title:
|
||||
label = object : Label(this@ScreenEnergyCounter, frame) {
|
||||
override fun tick() {
|
||||
super.tick()
|
||||
setText(
|
||||
TranslatableComponent(
|
||||
text = TranslatableComponent(
|
||||
"otm.item.power.last_tick",
|
||||
FormattingHelper.formatPower(menu.lastTick.value)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,12 +70,10 @@ class ScreenEnergyCounter(menu: MenuEnergyCounter, inventory: Inventory, title:
|
||||
override fun tick() {
|
||||
super.tick()
|
||||
|
||||
setText(
|
||||
TranslatableComponent(
|
||||
text = TranslatableComponent(
|
||||
"block.overdrive_that_matters.energy_counter.facing",
|
||||
menu.inputDirection.value
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -93,7 +83,7 @@ class ScreenEnergyCounter(menu: MenuEnergyCounter, inventory: Inventory, title:
|
||||
val button = ButtonPanel(this, frame, 0f, 0f, 0f, 20f, TranslatableComponent("block.overdrive_that_matters.energy_counter.switch"))
|
||||
button.dock = Dock.TOP
|
||||
button.setDockMargin(4f, 0f, 4f, 0f)
|
||||
button.bindOnPress { menu.switchDirection.userInput() }
|
||||
button.bind { menu.switchDirection.userInput() }
|
||||
|
||||
return frame
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ class ScreenMatterBottler(menu: MenuMatterBottler, inventory: Inventory, title:
|
||||
progress = ProgressGaugePanel(this, frame, menu.progressWidget, 90f, PROGRESS_ARROW_TOP)
|
||||
|
||||
val mode = ButtonPanel(this, frame, 46f, 69f, 100f, 20f, TranslatableComponent("otm.matter_bottler.switch_mode"))
|
||||
mode.bindOnPress { menu.workFlow.switchValue() }
|
||||
mode.bind { menu.workFlow.switchValue() }
|
||||
|
||||
return frame
|
||||
}
|
||||
|
@ -1,34 +1,45 @@
|
||||
package ru.dbotthepony.mc.otm.client.screen.panels;
|
||||
package ru.dbotthepony.mc.otm.client.screen.panels
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.client.gui.components.Button;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen;
|
||||
import net.minecraft.client.gui.components.Button
|
||||
import net.minecraft.client.gui.components.Button.OnPress
|
||||
import net.minecraft.network.chat.Component
|
||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
open class ButtonPanel(
|
||||
screen: MatteryScreen<*>,
|
||||
parent: EditablePanel?,
|
||||
x: Float = 0f,
|
||||
y: Float = 0f,
|
||||
width: Float = 40f,
|
||||
height: Float = 20f,
|
||||
label: Component
|
||||
) : MinecraftWidgetPanel<Button>(screen, parent, x, y, width, height) {
|
||||
constructor(screen: MatteryScreen<*>, parent: EditablePanel?, label: Component) : this(screen, parent, x = 0f, label = label)
|
||||
|
||||
public class ButtonPanel extends MinecraftWidgetPanel<Button> {
|
||||
protected Runnable press_callback;
|
||||
|
||||
public ButtonPanel(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y, float width, float height, Component label) {
|
||||
super(screen, parent, x, y, width, height, (panel) -> {
|
||||
return new Button(0, 0, (int) panel.getWidth(), Math.min(20, (int) panel.getHeight()), label, (btn) -> ((ButtonPanel) panel).onPress()) {
|
||||
@Override
|
||||
public boolean isHoveredOrFocused() {
|
||||
return panel.isHovered();
|
||||
}
|
||||
};
|
||||
});
|
||||
var label = label
|
||||
set(value) {
|
||||
field = value
|
||||
widget?.message = value
|
||||
}
|
||||
|
||||
public void bindOnPress(Runnable runnable) {
|
||||
press_callback = runnable;
|
||||
}
|
||||
override fun copyValues(new_widget: Button, old_widget: Button) {}
|
||||
override fun configureNew(widget: Button, recreation: Boolean) {}
|
||||
|
||||
protected void onPress() {
|
||||
if (press_callback != null) {
|
||||
press_callback.run();
|
||||
override fun makeNew(): Button {
|
||||
return object : Button(0, 0, width.toInt(), height.toInt().coerceAtMost(20), label, OnPress { this@ButtonPanel.onPress() }) {
|
||||
override fun isHoveredOrFocused(): Boolean {
|
||||
return this@ButtonPanel.isHovered
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected var callback: Runnable? = null
|
||||
|
||||
fun bind(runnable: Runnable) {
|
||||
callback = runnable
|
||||
}
|
||||
|
||||
protected open fun onPress() {
|
||||
callback?.run()
|
||||
}
|
||||
}
|
@ -1,55 +1,54 @@
|
||||
package ru.dbotthepony.mc.otm.client.screen.panels;
|
||||
package ru.dbotthepony.mc.otm.client.screen.panels
|
||||
|
||||
import net.minecraft.client.gui.components.EditBox;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen;
|
||||
import net.minecraft.client.gui.components.EditBox
|
||||
import net.minecraft.network.chat.Component
|
||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class EditBoxPanel extends MinecraftWidgetPanel<EditBox> {
|
||||
public EditBoxPanel(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y, float width, float height, Component component) {
|
||||
super(screen, parent, x, y, width, height, (panel) -> {
|
||||
return new EditBox(screen.getFont(), 0, 0, (int) panel.getWidth(), Math.min(20, (int) panel.getHeight()), component) {
|
||||
@Override
|
||||
public boolean isHoveredOrFocused() {
|
||||
return panel.isHovered();
|
||||
}
|
||||
};
|
||||
});
|
||||
open class EditBoxPanel(
|
||||
screen: MatteryScreen<*>,
|
||||
parent: EditablePanel?,
|
||||
x: Float,
|
||||
y: Float,
|
||||
width: Float,
|
||||
height: Float,
|
||||
val defaultText: Component
|
||||
) : MinecraftWidgetPanel<EditBox>(screen, parent, x, y, width, height) {
|
||||
override fun makeNew(): EditBox {
|
||||
return object : EditBox(font, 0, 0, width.toInt(), height.toInt().coerceAtMost(20), defaultText) {
|
||||
override fun isHoveredOrFocused(): Boolean {
|
||||
return this@EditBoxPanel.isHovered
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void copyValues(EditBox new_widget, EditBox old_widget) {
|
||||
new_widget.setValue(old_widget.getValue());
|
||||
override fun isFocused(): Boolean {
|
||||
return this@EditBoxPanel.isFocused
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
if (widget != null)
|
||||
widget.tick();
|
||||
init {
|
||||
autoKillFocus = true
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void factorize(EditBox widget, boolean recreation) {
|
||||
widget.setFocus(isFocused());
|
||||
override fun copyValues(new_widget: EditBox, old_widget: EditBox) {
|
||||
new_widget.value = old_widget.value
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFocusChanged(boolean new_focused, boolean old_focused) {
|
||||
getOrCreateWidget().setFocus(new_focused);
|
||||
override fun tick() {
|
||||
super.tick()
|
||||
widget?.tick()
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean mouseClickedInner(double mouse_x, double mouse_y, int flag) {
|
||||
if (super.mouseClickedInner(mouse_x, mouse_y, flag)) {
|
||||
requestFocus();
|
||||
return true;
|
||||
override fun configureNew(widget: EditBox, recreation: Boolean) {
|
||||
widget.setFocus(isFocused)
|
||||
}
|
||||
|
||||
return false;
|
||||
override fun onFocusChanged(new: Boolean, old: Boolean) {
|
||||
widget?.setFocus(new)
|
||||
}
|
||||
|
||||
override fun mouseClickedInner(mouse_x: Double, mouse_y: Double, flag: Int): Boolean {
|
||||
super.mouseClickedInner(mouse_x, mouse_y, flag)
|
||||
requestFocus()
|
||||
return true
|
||||
}
|
||||
}
|
@ -202,9 +202,7 @@ open class EditablePanel @JvmOverloads constructor(
|
||||
accumulatedDepth += value
|
||||
}
|
||||
|
||||
fun font(): Font {
|
||||
return screen.font
|
||||
}
|
||||
val font: Font get() = screen.font
|
||||
|
||||
fun invalidateLayout() {
|
||||
needsInvalidation = true
|
||||
@ -687,6 +685,24 @@ open class EditablePanel @JvmOverloads constructor(
|
||||
return pos.x <= mouse_x && pos.x + boundingWidth > mouse_x && pos.y <= mouse_y && pos.y + boundingHeight > mouse_y
|
||||
}
|
||||
|
||||
fun killFocusForEverythingExcept(eclusion: EditablePanel) {
|
||||
for (child in children) {
|
||||
if (child !== eclusion) {
|
||||
child.killFocusForEverythingExceptInner()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun killFocusForEverythingExceptInner() {
|
||||
for (child in children) {
|
||||
child.killFocusForEverythingExceptInner()
|
||||
}
|
||||
|
||||
if (autoKillFocus) {
|
||||
killFocus()
|
||||
}
|
||||
}
|
||||
|
||||
final override fun mouseClicked(mouse_x: Double, mouse_y: Double, flag: Int): Boolean {
|
||||
if (!isVisible() || !acceptMouseInput) return false
|
||||
|
||||
@ -694,9 +710,8 @@ open class EditablePanel @JvmOverloads constructor(
|
||||
|
||||
for (child in children) {
|
||||
if (child.mouseClickedChecked(mouse_x, mouse_y, flag)) {
|
||||
killFocusForEverythingExcept(child)
|
||||
return true
|
||||
} else if (child.autoKillFocus) {
|
||||
child.killFocus()
|
||||
}
|
||||
}
|
||||
|
||||
@ -712,9 +727,8 @@ open class EditablePanel @JvmOverloads constructor(
|
||||
} else if (withinExtendedBounds(mouse_x, mouse_y)) {
|
||||
for (child in children) {
|
||||
if (child.mouseClickedChecked(mouse_x, mouse_y, flag)) {
|
||||
killFocusForEverythingExcept(child)
|
||||
return true
|
||||
} else if (child.autoKillFocus) {
|
||||
child.killFocus()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,60 +1,29 @@
|
||||
package ru.dbotthepony.mc.otm.client.screen.panels;
|
||||
package ru.dbotthepony.mc.otm.client.screen.panels
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.TextComponent;
|
||||
import ru.dbotthepony.mc.otm.client.render.RGBAColor;
|
||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen;
|
||||
import com.mojang.blaze3d.vertex.PoseStack
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.network.chat.TextComponent
|
||||
import ru.dbotthepony.mc.otm.client.render.RGBAColor
|
||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
open class Label @JvmOverloads constructor(
|
||||
screen: MatteryScreen<*>,
|
||||
parent: EditablePanel?,
|
||||
x: Float = 0f,
|
||||
y: Float = 0f,
|
||||
width: Float = 100f,
|
||||
height: Float = 10f,
|
||||
var text: Component = TextComponent("Label")
|
||||
) : EditablePanel(screen, parent, x, y, width, height) {
|
||||
constructor(screen: MatteryScreen<*>, parent: EditablePanel?, text: Component) : this(screen, parent, x = 0f, text = text)
|
||||
|
||||
public class Label extends EditablePanel {
|
||||
protected Component text = new TextComponent("Label");
|
||||
|
||||
public Label(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y, float width, float height) {
|
||||
super(screen, parent, x, y, width, height);
|
||||
setScissor(true);
|
||||
init {
|
||||
scissor = true
|
||||
}
|
||||
|
||||
public Label(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent) {
|
||||
super(screen, parent);
|
||||
setScissor(true);
|
||||
}
|
||||
var color = RGBAColor.SLATE_GRAY
|
||||
|
||||
public Label(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y) {
|
||||
super(screen, parent, x, y, 100, 12);
|
||||
setScissor(true);
|
||||
}
|
||||
|
||||
public Label(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y, float width, float height, Component text) {
|
||||
super(screen, parent, x, y, width, height);
|
||||
setScissor(true);
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public Label(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, Component text) {
|
||||
super(screen, parent);
|
||||
setScissor(true);
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public Label(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y, Component text) {
|
||||
super(screen, parent, x, y, 100, 12);
|
||||
setScissor(true);
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public Component getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public void setText(Component text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void innerRender(PoseStack stack, float mouse_x, float mouse_y, float flag) {
|
||||
font().draw(stack, text, 0, 0, RGBAColor.SLATE_GRAY.wholeinv());
|
||||
override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) {
|
||||
font.draw(stack, text, 0f, 0f, color.wholeinv())
|
||||
}
|
||||
}
|
||||
|
@ -1,149 +1,111 @@
|
||||
package ru.dbotthepony.mc.otm.client.screen.panels;
|
||||
package ru.dbotthepony.mc.otm.client.screen.panels
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.client.gui.components.AbstractWidget;
|
||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen;
|
||||
import com.mojang.blaze3d.systems.RenderSystem
|
||||
import com.mojang.blaze3d.vertex.PoseStack
|
||||
import net.minecraft.client.gui.components.AbstractWidget
|
||||
import org.lwjgl.opengl.GL11
|
||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
abstract class MinecraftWidgetPanel<T : AbstractWidget>(
|
||||
screen: MatteryScreen<*>,
|
||||
parent: EditablePanel?,
|
||||
x: Float,
|
||||
y: Float,
|
||||
width: Float,
|
||||
height: Float
|
||||
) : EditablePanel(screen, parent, x, y, width, height) {
|
||||
var widget: T? = null
|
||||
protected set
|
||||
|
||||
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
|
||||
|
||||
public class MinecraftWidgetPanel<T extends AbstractWidget> extends EditablePanel {
|
||||
public interface WidgetFactory<T extends AbstractWidget> {
|
||||
T create(MinecraftWidgetPanel<T> panel);
|
||||
var disableTicks = 0
|
||||
set(value) {
|
||||
field = value
|
||||
widget?.active = value > 0
|
||||
}
|
||||
|
||||
protected T widget;
|
||||
private final WidgetFactory<T> factory;
|
||||
val isWidgetDisabled: Boolean
|
||||
get() = disableTicks > 0
|
||||
|
||||
private int disable_ticks = 0;
|
||||
override fun tick() {
|
||||
super.tick()
|
||||
|
||||
@Nullable
|
||||
public T getWidget() {
|
||||
return widget;
|
||||
}
|
||||
|
||||
public MinecraftWidgetPanel(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y, float width, float height, WidgetFactory<T> factory) {
|
||||
super(screen, parent, x, y, width, height);
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
protected void copyValues(@Nonnull T new_widget, @Nonnull T old_widget) {
|
||||
|
||||
}
|
||||
|
||||
public void disableFor(int ticks) {
|
||||
disable_ticks = ticks;
|
||||
|
||||
if (ticks > 0) {
|
||||
getOrCreateWidget().active = false;
|
||||
if (disableTicks > 0) {
|
||||
disableTicks--
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isWidgetDisabled() {
|
||||
return disable_ticks > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
if (disable_ticks > 0) {
|
||||
disable_ticks--;
|
||||
|
||||
if (disable_ticks <= 0)
|
||||
getOrCreateWidget().active = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void recreate() {
|
||||
private fun recreate() {
|
||||
if (widget == null) {
|
||||
return;
|
||||
return
|
||||
}
|
||||
|
||||
var new_widget = factory.create(this);
|
||||
new_widget.visible = getVisible();
|
||||
new_widget.x = (int) getAbsoluteX();
|
||||
new_widget.y = (int) getAbsoluteY();
|
||||
val instance = makeNew()
|
||||
instance.visible = visible
|
||||
instance.x = absoluteX.toInt()
|
||||
instance.y = absoluteY.toInt()
|
||||
|
||||
if (disableTicks > 0) {
|
||||
instance.active = false
|
||||
}
|
||||
|
||||
val widget = widget
|
||||
if (widget != null)
|
||||
copyValues(new_widget, widget);
|
||||
copyValues(instance, widget)
|
||||
|
||||
widget = new_widget;
|
||||
|
||||
factorize(widget, true);
|
||||
this.widget = instance
|
||||
configureNew(instance, true)
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void widthUpdated(float new_value, float old_value) {
|
||||
recreate();
|
||||
override fun widthUpdated(new: Float, old: Float) {
|
||||
recreate()
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void heightUpdated(float new_value, float old_value) {
|
||||
recreate();
|
||||
override fun heightUpdated(new: Float, old: Float) {
|
||||
recreate()
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void visibilityChanges(boolean new_visible, boolean old_visible) {
|
||||
if (widget != null)
|
||||
widget.visible = new_visible;
|
||||
override fun visibilityChanges(new: Boolean, old: Boolean) {
|
||||
widget?.visible = new
|
||||
}
|
||||
|
||||
/**
|
||||
* Override in final classes to define values
|
||||
*
|
||||
* @param widget
|
||||
*/
|
||||
protected void factorize(T widget, boolean recreation) {
|
||||
protected abstract fun copyValues(new_widget: T, old_widget: T)
|
||||
protected abstract fun makeNew(): T
|
||||
protected abstract fun configureNew(widget: T, recreation: Boolean)
|
||||
|
||||
fun getOrCreateWidget(): T {
|
||||
val widget = this.widget
|
||||
if (widget != null) return widget
|
||||
|
||||
val instance = makeNew()
|
||||
instance.visible = visible
|
||||
|
||||
if (disableTicks > 0) {
|
||||
instance.active = false
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public T getOrCreateWidget() {
|
||||
if (widget != null)
|
||||
return widget;
|
||||
configureNew(instance, false)
|
||||
|
||||
widget = factory.create(this);
|
||||
widget.visible = getVisible();
|
||||
factorize(widget, false);
|
||||
|
||||
return widget;
|
||||
this.widget = instance
|
||||
return instance
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void innerRender(PoseStack stack, float mouse_x, float mouse_y, float flag) {
|
||||
RenderSystem.depthFunc(GL_ALWAYS);
|
||||
getOrCreateWidget().render(stack, (int) mouse_x, (int) mouse_y, flag);
|
||||
RenderSystem.depthFunc(GL_ALWAYS);
|
||||
override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) {
|
||||
RenderSystem.depthFunc(GL11.GL_ALWAYS)
|
||||
getOrCreateWidget().render(stack, mouse_x.toInt(), mouse_y.toInt(), flag)
|
||||
RenderSystem.depthFunc(GL11.GL_ALWAYS)
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean charTypedInternal(char p_94732_, int p_94733_) {
|
||||
return getOrCreateWidget().charTyped(p_94732_, p_94733_);
|
||||
override fun charTypedInternal(p_94732_: Char, p_94733_: Int) = getOrCreateWidget().charTyped(p_94732_, p_94733_)
|
||||
override fun keyPressedInternal(p_94745_: Int, p_94746_: Int, p_94747_: Int) = getOrCreateWidget().keyPressed(p_94745_, p_94746_, p_94747_)
|
||||
override fun keyReleasedInternal(p_94750_: Int, p_94751_: Int, p_94752_: Int) = getOrCreateWidget().keyReleased(p_94750_, p_94751_, p_94752_)
|
||||
|
||||
override fun mouseClickedInner(mouse_x: Double, mouse_y: Double, mouse_click_type: Int): Boolean {
|
||||
val (x1, y1) = screenToLocal(mouse_x, mouse_y)
|
||||
return getOrCreateWidget().mouseClicked(x1.toDouble(), y1.toDouble(), mouse_click_type)
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean keyPressedInternal(int p_94745_, int p_94746_, int p_94747_) {
|
||||
return getOrCreateWidget().keyPressed(p_94745_, p_94746_, p_94747_);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean keyReleasedInternal(int p_94750_, int p_94751_, int p_94752_) {
|
||||
return getOrCreateWidget().keyReleased(p_94750_, p_94751_, p_94752_);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean mouseClickedInner(double mouse_x, double mouse_y, int flag) {
|
||||
var pos = screenToLocal(mouse_x, mouse_y);
|
||||
return getOrCreateWidget().mouseClicked(pos.x(), pos.y(), flag);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean mouseReleasedInner(double mouse_x, double mouse_y, int flag) {
|
||||
var pos = screenToLocal(mouse_x, mouse_y);
|
||||
return getOrCreateWidget().mouseReleased(pos.x(), pos.y(), flag);
|
||||
override fun mouseReleasedInner(mouse_x: Double, mouse_y: Double, flag: Int): Boolean {
|
||||
val (x1, y1) = screenToLocal(mouse_x, mouse_y)
|
||||
return getOrCreateWidget().mouseReleased(x1.toDouble(), y1.toDouble(), flag)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user