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