-
Notifications
You must be signed in to change notification settings - Fork 365
Expand file tree
/
Copy pathIMuiCover.java
More file actions
86 lines (69 loc) · 3.04 KB
/
IMuiCover.java
File metadata and controls
86 lines (69 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package com.gregtechceu.gtceu.api.cover;
import com.gregtechceu.gtceu.api.mui.GTGuiScreen;
import com.gregtechceu.gtceu.common.mui.GTGuiTextures;
import com.gregtechceu.gtceu.common.mui.GTGuiTheme;
import com.gregtechceu.gtceu.common.mui.GTMuiWidgets;
import brachy.modularui.api.IUIHolder;
import brachy.modularui.factory.SidedPosGuiData;
import brachy.modularui.screen.ModularPanel;
import brachy.modularui.screen.ModularScreen;
import brachy.modularui.screen.UISettings;
import brachy.modularui.value.BoolValue;
import brachy.modularui.value.sync.EnumSyncValue;
import brachy.modularui.value.sync.PanelSyncManager;
import brachy.modularui.widgets.SlotGroupWidget;
import brachy.modularui.widgets.layout.Flow;
public interface IMuiCover extends IUIHolder<SidedPosGuiData> {
default CoverBehavior self() {
return (CoverBehavior) this;
}
default boolean isRemote() {
return self().coverHolder.isRemote();
}
default boolean isRemoved() {
return self().coverHolder.isRemoved() || self().coverHolder.getCoverAtSide(self().attachedSide) != self();
}
default GTGuiTheme getUITheme() {
return GTGuiTheme.COVER;
}
@Override
default ModularScreen createScreen(SidedPosGuiData data, ModularPanel<?> mainPanel) {
return new GTGuiScreen(mainPanel);
}
@Override
default ModularPanel<?> buildUI(SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) {
ModularPanel<?> panel = ModularPanel.defaultPanel(self().coverDefinition.getId().getPath(), 176, 192 + 18);
panel.child(GTMuiWidgets.createTitleBar(this.self().getAttachItem(), 176, GTGuiTextures.BACKGROUND));
Flow column = Flow.column()
.top(7).margin(7, 0)
.childPadding(2)
.widthRel(1.0f).coverChildrenHeight();
createCoverUIRows(column, data, syncManager, settings);
return panel.child(column)
.child(SlotGroupWidget.playerInventory(false).left(7).bottom(7));
}
/**
* The default cover UI panel builds a single column with rows added by each cover.
*/
default void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManager syncManager,
UISettings settings) {}
/* Helper methods for UI creation with covers that are commonly used */
/**
* The color used for Cover UI text. Available for reference, but is
* handled automatically by the {@link GTGuiTheme#COVER} theme.
*/
int UI_TEXT_COLOR = 0xFF555555;
default Flow coverUIRow() {
return Flow.row()
.coverChildrenHeight()
.widthRel(1f)
.childPadding(2);
}
/**
* Get a BoolValue for use with toggle buttons which are "linked together,"
* meaning only one of them can be pressed at a time.
*/
default <T extends Enum<T>> BoolValue.Dynamic boolValueOf(EnumSyncValue<T> syncValue, T value) {
return new BoolValue.Dynamic(() -> syncValue.getValue() == value, $ -> syncValue.setValue(value));
}
}