Skip to content

Commit 6ea2758

Browse files
authored
Merge pull request #4 from JumperOnJava/Magic-numbers-refactor
Refactored GUI code (#3)
2 parents f09d736 + bd5cef7 commit 6ea2758

File tree

1 file changed

+152
-97
lines changed

1 file changed

+152
-97
lines changed

src/main/java/io/github/jumperonjava/customcursor/CursorEditScreen.java

Lines changed: 152 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,14 @@
66
import io.github.jumperonjava.customcursor.util.SliderWidget;
77
import io.github.jumperonjava.customcursor.util.VersionFunctions;
88
import net.minecraft.client.gui.DrawContext;
9-
import net.minecraft.client.gui.screen.GameModeSelectionScreen;
109
import net.minecraft.client.gui.screen.Screen;
1110
import net.minecraft.client.gui.widget.ButtonWidget;
1211
import net.minecraft.client.gui.widget.TextFieldWidget;
13-
import net.minecraft.client.render.RenderLayer;
1412
import net.minecraft.text.Text;
1513
import net.minecraft.util.Identifier;
16-
import net.minecraft.util.math.ColorHelper;
1714
import net.minecraft.util.math.MathHelper;
1815
import net.minecraft.util.math.Vec2f;
1916

20-
import java.util.Random;
2117
import java.util.function.Consumer;
2218
import java.util.function.Function;
2319

@@ -26,7 +22,7 @@ public class CursorEditScreen extends Screen {
2622
private final CursorSettings targetConfig;
2723
private final Screen parent;
2824

29-
public CursorEditScreen(Screen parent,CursorSettings cursorConfig, Consumer<CursorSettings> onSuccess) {
25+
public CursorEditScreen(Screen parent, CursorSettings cursorConfig, Consumer<CursorSettings> onSuccess) {
3026
super(Text.empty());
3127
this.parent = parent;
3228
this.onSuccess = onSuccess;
@@ -38,137 +34,196 @@ public void close() {
3834
client.setScreen(parent);
3935
}
4036

37+
private int centerX;
38+
private int centerY;
39+
40+
private final int previewSize = 128;
41+
private int previewPosX;
42+
private int previewPosY;
43+
4144
@Override
4245
protected void init() {
46+
47+
centerX = width / 2;
48+
centerY = height / 2;
49+
50+
previewPosX = (width - previewSize) / 2;
51+
previewPosY = centerY;
52+
4353
super.init();
44-
int heightOffset = (int) (24*2.75);
45-
var field = new TextFieldWidget(client.textRenderer,width/2-128,height/2+heightOffset-64-24-22,256,20,Text.empty());
46-
field.setMaxLength(512);
47-
field.setText(this.targetConfig.identifier.toString());
48-
field.setChangedListener((s)->{
49-
try{
50-
setIdentifier( Identifier.tryParse(s));
51-
}
52-
catch (Exception e){e.printStackTrace();}
54+
55+
Function<Boolean, Text> textfunc = (Boolean b) -> Text.translatable("customcursor.edit.enabled." + b);
56+
var toggleWidget = new ButtonWidget.Builder(textfunc.apply(this.targetConfig.enabled), (buttonWidget) -> {
57+
this.targetConfig.enabled = !targetConfig.enabled;
58+
buttonWidget.setMessage(textfunc.apply(this.targetConfig.enabled));
5359
});
54-
addDrawableChild(new ButtonWidget.Builder(Text.translatable("customcursor.edit.confirm"),this::confirm)
55-
.dimensions(width/2-128,height/2+heightOffset-64-24-22*0,126,20).build());
56-
addDrawableChild(new ButtonWidget.Builder(Text.translatable("customcursor.edit.cancel"),(f)->close())
57-
.dimensions(width/2+2,height/2+heightOffset-64-24-22*0,126,20).build());
58-
addDrawableChild(new ButtonWidget.Builder(Text.translatable("customcursor.edit.folder"),(b)->{
60+
61+
var confrmButton = new ButtonWidget.Builder(Text.translatable("customcursor.edit.confirm"), this::confirm);
62+
var cancelButton = new ButtonWidget.Builder(Text.translatable("customcursor.edit.cancel"), (f) -> close());
63+
var folderButton = new ButtonWidget.Builder(Text.translatable("customcursor.edit.folder"), (b) -> {
5964
AskScreen.ask(
6065
new FolderTextureAskList(
6166
CustomCursorInit.TEXTURE_FOLDER,
6267
this::setIdentifier,
63-
()->{}
68+
() -> {
69+
}
6470
)
6571
);
66-
})
67-
.dimensions(width/2-128,height/2+heightOffset-64-24-22*2,256,20).build());
68-
var xSlider = new SliderWidget(width/2-128,height/2+heightOffset-64-24-22*3,126,20,Text.translatable("customcursor.edit.x"),0.,1.,this.targetConfig.x,1/64f);
69-
var ySlider = new SliderWidget(width/2+2,height/2+heightOffset-64-24-22*3,126,20,Text.translatable("customcursor.edit.y"),0.,1.,this.targetConfig.y,1/64f);
70-
Function<Boolean,Text> textfunc = (Boolean b) -> {
71-
return Text.translatable("customcursor.edit.enabled."+b);
72-
};
73-
var enabledButtonWidget = new ButtonWidget.Builder(textfunc.apply(this.targetConfig.enabled),(buttonWidget)->{
74-
this.targetConfig.enabled=!targetConfig.enabled;
75-
buttonWidget.setMessage(textfunc.apply(this.targetConfig.enabled));
76-
})
77-
.dimensions(width/2-128,height/2+heightOffset-64-24-22*5,256,20).build();
72+
});
73+
74+
int rowSize = 24;
75+
int columnSize = 128;
76+
77+
var rowCount = 6;
78+
var columnCount = 2;
79+
80+
var startColumnPos = centerX - (columnCount * columnSize) / 2;
81+
var startRowPos = centerY - rowCount * rowSize;
82+
83+
var rows = new int[rowCount];
84+
var columns = new int[columnCount];
85+
86+
var padding = 2;
87+
var sizePadding = padding*2;
88+
89+
for (int i = 0; i < rowCount; i++) {
90+
rows[i] = startRowPos + rowSize * i + padding;
91+
}
92+
for (int i = 0; i < columnCount; i++) {
93+
columns[i] = startColumnPos + columnSize * i+ padding;
94+
}
95+
96+
int columnSizePadding = columnSize - sizePadding;
97+
int twoColumnSizePadding = columnSize * 2 - sizePadding;
98+
int rowSizePadding = rowSize - sizePadding;
99+
100+
toggleWidget = toggleWidget.dimensions(columns[0], rows[0], twoColumnSizePadding, rowSizePadding);
101+
folderButton = folderButton.dimensions(columns[0], rows[3], twoColumnSizePadding, rowSizePadding);
102+
confrmButton = confrmButton.dimensions(columns[0], rows[5], columnSizePadding, rowSizePadding);
103+
cancelButton = cancelButton.dimensions(columns[1], rows[5], columnSizePadding, rowSizePadding);
104+
105+
78106
var maxsize = 256.;
79-
var size = new SliderWidget(width/2-128,height/2+heightOffset-64-24-22*4,256,20,Text.translatable("customcursor.edit.size"),0,maxsize,this.targetConfig.y,1);
80-
size.setValueOwn(this.targetConfig.size/maxsize);
81-
xSlider.setChangedListener(d->this.targetConfig.x=(float)(double)d);
82-
ySlider.setChangedListener(d->this.targetConfig.y=(float)(double)d);
83-
size.setChangedListener(d->this.targetConfig.size=(int)(double)d);
84-
85-
addDrawableChild(xSlider);
86-
addDrawableChild(ySlider);
87-
addDrawableChild(enabledButtonWidget);
88-
addDrawableChild(size);
89-
addDrawableChild(field);
107+
var imagePathField = new TextFieldWidget(client.textRenderer, columns[0], rows[4], twoColumnSizePadding, rowSizePadding, Text.empty());
108+
var sizeSlider = new SliderWidget(columns[0], rows[1], twoColumnSizePadding, rowSizePadding, Text.translatable("customcursor.edit.size"), 0, maxsize, this.targetConfig.y, 1);
109+
var xPosSlider = new SliderWidget(columns[0], rows[2], columnSizePadding, rowSizePadding, Text.translatable("customcursor.edit.x"), 0., 1., this.targetConfig.x, 1 / 64f);
110+
var yPosSlider = new SliderWidget(columns[1], rows[2], columnSizePadding, rowSizePadding, Text.translatable("customcursor.edit.y"), 0., 1., this.targetConfig.y, 1 / 64f);
111+
112+
113+
sizeSlider.setValueOwn(this.targetConfig.size / maxsize);
114+
115+
xPosSlider.setChangedListener(d -> this.targetConfig.x = (float) (double) d);
116+
yPosSlider.setChangedListener(d -> this.targetConfig.y = (float) (double) d);
117+
sizeSlider.setChangedListener(d -> this.targetConfig.size = (int) (double) d);
118+
119+
imagePathField.setMaxLength(512);
120+
imagePathField.setText(this.targetConfig.identifier.toString());
121+
imagePathField.setChangedListener((s) -> {
122+
try {
123+
setIdentifier(Identifier.tryParse(s));
124+
} catch (Exception e) {
125+
e.printStackTrace();
126+
}
127+
});
128+
129+
addDrawableChild(toggleWidget.build());
130+
addDrawableChild(confrmButton.build());
131+
addDrawableChild(cancelButton.build());
132+
addDrawableChild(folderButton.build());
133+
addDrawableChild(imagePathField);
134+
addDrawableChild(sizeSlider);
135+
addDrawableChild(xPosSlider);
136+
addDrawableChild(yPosSlider);
137+
addDrawable(this::renderCheckerboard);
138+
addDrawable(this::renderPreview);
90139
}
91140

92141
private void setIdentifier(Identifier identifier) {
93142
this.targetConfig.identifier = identifier;
94143
}
95144

96145
private void confirm(ButtonWidget buttonWidget) {
97-
try{
146+
try {
98147
onSuccess.accept(targetConfig);
148+
} catch (Exception e) {
149+
e.printStackTrace();
99150
}
100-
catch (Exception e){e.printStackTrace();}
101151
this.close();
102152
}
103-
private float bgx=0,bgy=0,color,rot;
153+
154+
155+
//? if <= 1.20.1 {
104156
@Override
105157
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
106-
int heightOffset = (int) (24*2.75 );
107-
//? if <= 1.20.1 {
108158
renderBackground(context);
109-
//?} else {
110-
/*renderBackground(context,mouseX,mouseY,delta);
111-
*///?}
112159
super.render(context, mouseX, mouseY, delta);
113-
var vec = new Vec2f(mouseX-width/2,mouseY-height/2).normalize().multiply(delta);
114-
bgx += vec.x;
115-
bgy += vec.y;
116-
color+=delta*0.05;
117-
var n = 2;
118-
renderCheckerboard(
160+
}
161+
//?}
162+
163+
private void renderPreview(DrawContext context, int mouseX, int mouseY, float delta){
164+
165+
VersionFunctions.drawTexture(context, this.targetConfig.identifier, previewPosX, previewPosY, 0, 0, previewSize, previewSize, previewSize, previewSize);
166+
VersionFunctions.drawTexture(
119167
context,
120-
delta,
121-
VersionFunctions.ColorHelper.getArgb(255,
122-
(int) (128+64*Math.pow(Math.sin(color+0*Math.PI/3),n)),
123-
(int) (128+64*Math.pow(Math.sin(color+2*Math.PI/3),n)),
124-
(int) (128+64*Math.pow(Math.sin(color+4*Math.PI/3),n))
125-
),
126-
VersionFunctions.ColorHelper.getArgb(255,
127-
(int) ((192+63*Math.pow(Math.cos(color+0*Math.PI/3),n))),
128-
(int) ((192+63*Math.pow(Math.cos(color+2*Math.PI/3),n))),
129-
(int) ((192+63*Math.pow(Math.cos(color+4*Math.PI/3),n)))
130-
)
168+
Identifier.of("customcursor", "textures/gui/pointer.png"),
169+
(int) (previewPosX + this.targetConfig.x * previewSize) - 4,
170+
(int) (previewPosY + this.targetConfig.y * previewSize) - 4,
171+
0, 0,
172+
8, 8,
173+
8, 8);
174+
}
175+
176+
private float bgx = 0, bgy = 0, color;
177+
178+
private void renderCheckerboard(DrawContext context, int mouseX, int mouseY, float delta) {
179+
180+
//generates slowly changing pastel colors for backround
181+
color += delta * 0.05f;
182+
var n = 2;
183+
var color1 = VersionFunctions.ColorHelper.getArgb(255,
184+
(int) (128 + 64 * Math.pow(Math.sin(color + 0 * Math.PI / 3), n)),
185+
(int) (128 + 64 * Math.pow(Math.sin(color + 2 * Math.PI / 3), n)),
186+
(int) (128 + 64 * Math.pow(Math.sin(color + 4 * Math.PI / 3), n))
187+
);
188+
var color2 = VersionFunctions.ColorHelper.getArgb(255,
189+
(int) ((192 + 63 * Math.pow(Math.cos(color + 0 * Math.PI / 3), n))),
190+
(int) ((192 + 63 * Math.pow(Math.cos(color + 2 * Math.PI / 3), n))),
191+
(int) ((192 + 63 * Math.pow(Math.cos(color + 4 * Math.PI / 3), n)))
131192
);
132193

133-
try{
134-
//? if < 1.20.3 {
135-
VersionFunctions.drawTexture(context,this.targetConfig.identifier,width/2-64,height/2+heightOffset-64,0,0,128,128, 128,128);
136-
//?} else {
137-
/*VersionFunctions.drawTexture(context,this.targetConfig.identifier,width/2-64,height/2+heightOffset-64,0,0,128,128, 128,128);
138-
*///?}
139-
}
140-
catch (Exception e){
141-
CustomCursorInit.LOGGER.warn("Failed to find texture %s".formatted(this.targetConfig.identifier.toString()));
142-
}
194+
float r = VersionFunctions.ColorHelper.getRed(color1) / 255f;
195+
float g = VersionFunctions.ColorHelper.getGreen(color1) / 255f;
196+
float b = VersionFunctions.ColorHelper.getBlue(color1) / 255f;
143197

144-
VersionFunctions.drawTexture(context,Identifier.of("customcursor","textures/gui/pointer.png"), (int) (width/2-64+this.targetConfig.x*128)-4, (int) (height/2-64+this.targetConfig.y*128)+heightOffset-4,0,0,8,8, 8,8);
145-
}
198+
199+
var vec = new Vec2f(mouseX - (previewPosX+previewSize/2f), mouseY - (previewPosY+previewSize/2f)).normalize().multiply(delta);
200+
bgx += vec.x;
201+
bgy += vec.y;
202+
203+
context.fill(previewPosX, previewPosY, previewPosX + previewSize, previewPosY + previewSize, color2);
204+
context.enableScissor(previewPosX, previewPosY, previewPosX + previewSize, previewPosY + previewSize);
146205

147206

148-
private void renderCheckerboard(DrawContext context, float delta, int color1, int color2) {
149-
int heightOffset = (int) (24*2.75);
150-
context.fill(width/2-64,height/2+heightOffset-64,width/2+64,height/2+heightOffset+64,color2);
151-
context.enableScissor(width/2-64,height/2+heightOffset-64,width/2+64,height/2+heightOffset+64);
152-
rot+=new Random().nextFloat(-0.5f,0.5f)*delta/4;
153-
//bgx+=Math.sin(rot)/9;
154-
//bgy+=Math.cos(rot)/9;
155-
//bgx+=delta/9;
156-
//bgy+=delta/9;
207+
var cellsize = previewSize/8;
157208
context.getMatrices().push();
158-
context.getMatrices().translate((width/2-64+MathHelper.floorMod(bgx,16)-16),(height/2+heightOffset-64+MathHelper.floorMod(bgy,16)-16),0);
159-
float r = VersionFunctions.ColorHelper.getRed(color1)/255f;
160-
float g = VersionFunctions.ColorHelper.getGreen(color1)/255f;
161-
float b = VersionFunctions.ColorHelper.getBlue(color1)/255f;
162-
RenderSystem.setShaderColor(r,g,b,255);
163-
VersionFunctions.drawTexture(context,Identifier.of("customcursor","textures/gui/backgroundcheckerboard.png"),
209+
context.getMatrices().translate(
210+
(previewPosX + MathHelper.floorMod(bgx, cellsize) - cellsize),
211+
(previewPosY + MathHelper.floorMod(bgy, cellsize) - cellsize),
212+
0);
213+
RenderSystem.setShaderColor(r, g, b, 255);
214+
215+
int checkerRenderSize = previewSize + cellsize;
216+
VersionFunctions.drawTexture(context, Identifier.of("customcursor", "textures/gui/backgroundcheckerboard.png"),
164217
0,
165218
0,
166219
0,
167-
0,144,144,144,144);
168-
RenderSystem.setShaderColor(1,1,1,1);
220+
0, checkerRenderSize, checkerRenderSize, checkerRenderSize, checkerRenderSize);
221+
RenderSystem.setShaderColor(1, 1, 1, 1);
222+
169223
context.getMatrices().pop();
170224
context.disableScissor();
171225
}
226+
172227
public static CursorEditScreen createCursorEditScreen(Screen parent) {
173228
return new CursorEditScreen(parent, CustomCursorInit.getConfig().pointer, c -> {
174229
var cfg = new CursorConfigStorage();

0 commit comments

Comments
 (0)