Skip to content

Commit d084ca5

Browse files
committed
修复绘图桌帮助界面
移动Alignment 优化档案UI
1 parent f3a93b8 commit d084ca5

28 files changed

+133
-82
lines changed

src/main/java/com/teammoeg/chorda/client/ClientUtils.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import net.minecraft.client.Minecraft;
2424
import net.minecraft.client.gui.Font;
2525
import net.minecraft.client.gui.Gui;
26+
import net.minecraft.client.gui.screens.Screen;
2627
import net.minecraft.client.player.LocalPlayer;
2728
import net.minecraft.core.BlockPos;
2829
import net.minecraft.core.Direction;
@@ -32,7 +33,6 @@
3233
import net.minecraft.util.RandomSource;
3334
import net.minecraft.world.entity.player.Player;
3435
import net.minecraft.world.level.Level;
35-
3636
import org.joml.Quaternionf;
3737

3838
import java.util.function.Function;
@@ -79,6 +79,9 @@ public static Gui getGui() {
7979
public static LocalPlayer getLocalPlayer() {
8080
return getMc().player;
8181
}
82+
public static Screen getScreen() {
83+
return getMc().screen;
84+
}
8285
public static void spawnFireParticles2(Level worldIn, BlockPos pos) {
8386
RandomSource random = worldIn.getRandom();
8487
// Upward flame

src/main/java/com/teammoeg/chorda/client/cui/CUIDebugHelper.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package com.teammoeg.chorda.client.cui;
2121

2222
import com.teammoeg.chorda.client.ClientUtils;
23+
import com.teammoeg.chorda.client.RenderingHint;
2324
import com.teammoeg.chorda.client.cui.base.TooltipBuilder;
2425
import com.teammoeg.chorda.client.cui.base.UIElement;
2526
import com.teammoeg.chorda.client.cui.base.UILayer;
@@ -61,7 +62,7 @@ public static void toggleDebug() {
6162
isDebugEnabled=!isDebugEnabled;
6263
}
6364

64-
public static void renderDebug(GuiGraphics graphics, int x, int y, CUIScreen manager) {
65+
public static void renderDebug(GuiGraphics graphics, int x, int y, RenderingHint hint, CUIScreen manager) {
6566
if (!isDebugEnabled() || Screen.hasAltDown() || !shouldRender(manager)) return;
6667
// debug
6768
var ele = UILayer.hoveredEle;
@@ -84,15 +85,23 @@ public static void renderDebug(GuiGraphics graphics, int x, int y, CUIScreen man
8485
}
8586
}
8687
// 选中的元素
87-
int color = Color.HSBtoRGB((depth+1) / 6F, 1, 1);
88+
int color = getDepthColor(depth);
8889
var bound = new Rect(ele.getScreenX()+ x, ele.getScreenY()+ y, ele.getWidth(), ele.getHeight());
90+
ele.renderDebug(graphics, x, y, ele.getX(), ele.getHeight(), hint, depth+1);
8991
CGuiHelper.drawRect(graphics, bound, Colors.setAlpha(color, 0.1F));
9092
CGuiHelper.drawBox(graphics, bound, color, false);
9193
graphics.pose().popPose();
9294
}
9395

96+
public static int getDepthColor(int depth) {
97+
return Color.HSBtoRGB((depth + 1) / 6F, 1, 1);
98+
}
99+
94100
public static void getDebugTooltip(TooltipBuilder list, Font font, CUIScreen manager) {
95-
if (Screen.hasControlDown() || !shouldRender(manager)) return;
101+
if (!Screen.hasControlDown() || !shouldRender(manager)) {
102+
UILayer.hoveredEle = null;
103+
return;
104+
}
96105
// debug
97106
list.translateZ(1200);
98107
if (!list.isEmpty())

src/main/java/com/teammoeg/chorda/client/cui/base/PrimaryLayer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ public final void render(GuiGraphics graphics, int x, int y, int w, int h, Rende
169169
StencilHelper.resetStencilState();
170170
super.render(graphics, x, y, w, h, hint);
171171
StencilHelper.clearStencil();
172-
CUIDebugHelper.renderDebug(graphics, x, y, getManager());
172+
CUIDebugHelper.renderDebug(graphics, x, y, hint, getManager());
173173
}
174174

175175
@Override

src/main/java/com/teammoeg/chorda/client/cui/base/UIElement.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@
4444
*/
4545
public class UIElement {
4646
/**
47-
* 获取父元素。
48-
* @return 当前元素的父节点,可能为 null(顶层元素)
47+
* 获取当前元素的父节点,可能为 null(顶层元素)
4948
*/
5049
@Getter
5150
protected UIElement parent;
@@ -325,6 +324,12 @@ public boolean hasTooltip() {
325324
public void render(GuiGraphics graphics, int x, int y, int w, int h, RenderingHint hint) {
326325
}
327326

327+
/**
328+
* 渲染额外的自定义调试信息
329+
* @param depth 元素深度
330+
*/
331+
public void renderDebug(GuiGraphics graphics, int x, int y, int w, int h, RenderingHint hint, int depth) {}
332+
328333
// ==================== 事件处理 ====================
329334
/**
330335
* 鼠标按下事件。

src/main/java/com/teammoeg/chorda/client/cui/base/UILayer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
import org.joml.Matrix4f;
3737
import org.joml.Vector2f;
3838
import org.joml.Vector3d;
39-
import org.joml.Vector3f;
4039

40+
import javax.annotation.Nullable;
4141
import java.util.ArrayList;
4242
import java.util.List;
4343

@@ -413,6 +413,7 @@ public void drawBackground(GuiGraphics graphics, int x, int y, int w, int h, Ren
413413
/**
414414
* 获取选中的元素,仅用于调试
415415
*/
416+
@Nullable
416417
public static UIElement hoveredEle;
417418
public void drawElement(GuiGraphics graphics, UIElement element,int parX,int parY, int x, int y, int w, int h,RenderingHint hint) {
418419
int childX=element.getX()+x;

src/main/java/com/teammoeg/chorda/client/cui/category/CategoryHelper.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.teammoeg.chorda.client.cui.base.UILayer;
2424
import com.teammoeg.chorda.text.Components;
2525
import com.teammoeg.frostedheart.content.archive.ArchiveCategory;
26+
import com.teammoeg.frostedheart.content.tips.TipHelper;
2627
import net.minecraft.client.resources.language.I18n;
2728
import net.minecraft.network.chat.Component;
2829

@@ -176,4 +177,23 @@ public static Component translatePath(String path) {
176177
}
177178
return c;
178179
}
180+
181+
public static Category toCategory(UILayer parent, UILayer layer) {
182+
var main = new Category(parent, layer.getTitle());
183+
184+
for (UIElement ele : layer.getElements()) {
185+
if (ele instanceof UILayer l) {
186+
main.add(toCategory(main, l));
187+
} else {
188+
main.add(new Entry(main, ele.getTitle()) {
189+
@Override
190+
public String getIdentifier() {
191+
return TipHelper.randomString();
192+
}
193+
});
194+
}
195+
}
196+
197+
return main;
198+
}
179199
}

src/main/java/com/teammoeg/frostedheart/content/archive/Alignment.java renamed to src/main/java/com/teammoeg/chorda/client/cui/contentpanel/Alignment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*
1818
*/
1919

20-
package com.teammoeg.frostedheart.content.archive;
20+
package com.teammoeg.chorda.client.cui.contentpanel;
2121

2222
public enum Alignment {
2323
LEFT, CENTER, RIGHT

src/main/java/com/teammoeg/chorda/client/cui/contentpanel/ContentPanel.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import com.teammoeg.chorda.client.cui.theme.Theme;
2828
import com.teammoeg.chorda.client.cui.widgets.LayerScrollBar;
2929
import com.teammoeg.chorda.client.cui.widgets.ScrollBar;
30-
import com.teammoeg.frostedheart.content.archive.Alignment;
3130
import lombok.Getter;
3231
import lombok.Setter;
3332
import net.minecraft.client.gui.GuiGraphics;

src/main/java/com/teammoeg/chorda/client/cui/contentpanel/ImageLine.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
package com.teammoeg.chorda.client.cui.contentpanel;
2121

2222
import com.teammoeg.chorda.client.RenderingHint;
23+
import com.teammoeg.chorda.client.cui.CUIDebugHelper;
2324
import com.teammoeg.chorda.client.cui.base.TooltipBuilder;
2425
import com.teammoeg.chorda.client.cui.base.UIElement;
2526
import com.teammoeg.chorda.client.icon.FlatIcon;
2627
import com.teammoeg.chorda.client.ui.CGuiHelper;
2728
import com.teammoeg.chorda.client.ui.UV;
2829
import com.teammoeg.chorda.math.Colors;
29-
import com.teammoeg.frostedheart.content.archive.Alignment;
3030
import lombok.Getter;
3131
import lombok.Setter;
3232
import net.minecraft.client.gui.GuiGraphics;
@@ -51,6 +51,7 @@ public class ImageLine extends Line<ImageLine> {
5151
protected UV overrideUV;
5252
@Setter
5353
protected int blitColor = Colors.WHITE;
54+
protected int imgX, imgY;
5455

5556
public ImageLine(UIElement parent, ResourceLocation imageLocation, Alignment alignment) {
5657
super(parent, alignment);
@@ -66,23 +67,27 @@ public ImageLine uvOverride(UV uv) {
6667
@Override
6768
public void render(GuiGraphics graphics, int x, int y, int w, int h, RenderingHint hint) {
6869
super.render(graphics, x, y, w, h, hint);
70+
// 图片无效时显示错误图标
6971
if (!isImgValid()) {
7072
FlatIcon.FILE_IMG_BROKEN.render(graphics.pose(), x+w/2-5, y+1, hint.theme(this).errorColor());
7173
return;
7274
}
73-
int imgX = switch (alignment) {
75+
// 计算图片位置
76+
imgX = switch (alignment) {
7477
case CENTER -> x + getWidth() / 2 - imgUV.getW() / 2;
7578
case RIGHT -> x + getWidth() - imgUV.getW() - 2;
7679
default -> x+2;
7780
};
78-
int imgY = y + h/2 - imgUV.getH()/2;
79-
CGuiHelper.bindTexture(imgLocation);
80-
CGuiHelper.blitColored(graphics.pose(),
81-
imgX, imgY,
82-
imgUV.getW(), imgUV.getH(),
83-
0, 0,
84-
imgUV.getW(), imgUV.getH(),
85-
imgUV.getW(), imgUV.getH(), blitColor);
81+
imgY = y + h/2 - imgUV.getH()/2;
82+
// 渲染图片
83+
imgUV.blitColored(graphics, imgLocation, imgX, imgY, blitColor);
84+
}
85+
86+
@Override
87+
public void renderDebug(GuiGraphics graphics, int x, int y, int w, int h, RenderingHint hint, int depth) {
88+
super.renderDebug(graphics, x, y, w, h, hint, depth);
89+
graphics.drawString(getFont(), imgUV.toString(), imgX, imgY-8, -1);
90+
CGuiHelper.drawBox(graphics, imgX, imgY, imgUV.getW(), imgUV.getH(), CUIDebugHelper.getDepthColor(depth), true);
8691
}
8792

8893
@Override

src/main/java/com/teammoeg/chorda/client/cui/contentpanel/ItemRow.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import com.teammoeg.chorda.client.RenderingHint;
2323
import com.teammoeg.chorda.client.cui.base.UIElement;
2424
import com.teammoeg.chorda.client.cui.widgets.ItemSlot;
25-
import com.teammoeg.frostedheart.content.archive.Alignment;
2625
import net.minecraft.client.gui.GuiGraphics;
2726
import net.minecraft.network.chat.Component;
2827
import net.minecraft.world.item.ItemStack;

0 commit comments

Comments
 (0)