package me.xmrvizzy.skyblocker.utils.title;
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHudConfigScreen;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.text.Text;
import net.minecraft.util.math.MathHelper;
import java.util.ArrayList;
import java.util.List;
public class TitleContainer {
public static final MinecraftClient client = MinecraftClient.getInstance();
public static List
titles = new ArrayList<>();
public static void init() {
HudRenderCallback.EVENT.register(TitleContainer::draw);
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker")
.then(ClientCommandManager.literal("hud")
.then(ClientCommandManager.literal("titleContainer")
.executes(context -> {
client.send(() -> client.setScreen(new TitleContainerConfigScreen(Text.of("Title Container HUD Config"))));
return 1;
})))));
}
public static void addTitle(Title title) {
title.active = true;
title.lastX = 0;
title.lastY = SkyblockerConfig.get().general.titleContainer.y;
titles.add(title);
}
public static void addTitleWithDismiss(Title title, int ticks) {
addTitle(title);
SkyblockerMod.getInstance().scheduler.schedule(() -> {
title.active = false;
}, ticks);
}
public static void draw(DrawContext context, float tickDelta) {
draw(titles, SkyblockerConfig.get().general.titleContainer.x, SkyblockerConfig.get().general.titleContainer.y, context, tickDelta, false);
}
public static void draw(List titlesToDraw, int xPos, int yPos, DrawContext context, float tickDelta, boolean example) {
var client = MinecraftClient.getInstance();
TextRenderer textRenderer = client.textRenderer;
List toRemove = new ArrayList<>();
float scale = 3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F);
var direction = SkyblockerConfig.get().general.titleContainer.direction;
var alignment = SkyblockerConfig.get().general.titleContainer.alignment;
float x = 0;
float y;
float width = 0;
for (Title title : titlesToDraw) {
width += textRenderer.getWidth(title.text) * scale + 10;
}
if (alignment == SkyblockerConfig.Alignment.MIDDLE) {
if(direction == SkyblockerConfig.Direction.HORIZONTAL) {
x = xPos - width / 2;
} else {
if (titlesToDraw.size() > 0) {
if (titlesToDraw.size() > 0) {
x = xPos - (textRenderer.getWidth(titlesToDraw.get(0).text) / 2 * scale);
}
}
}
} else {
if (alignment == SkyblockerConfig.Alignment.LEFT) {
x = xPos;
} else {
if (titlesToDraw.size() > 0) {
x = xPos - (textRenderer.getWidth(titlesToDraw.get(0).text) * scale);
}
}
}
y = yPos;
for (Title title : titlesToDraw) {
context.getMatrices().push();
context.getMatrices().translate(title.lastX, title.lastY, 200);
context.getMatrices().scale(scale, scale, scale);
title.lastX = MathHelper.lerp(tickDelta * 0.5F, title.lastX, x);
title.lastY = MathHelper.lerp(tickDelta * 0.5F, title.lastY, y);
if(direction == SkyblockerConfig.Direction.HORIZONTAL) {
switch (alignment) {
case LEFT -> x += textRenderer.getWidth(title.text) * scale + 10;
case RIGHT -> x -= (textRenderer.getWidth(title.text) * scale + 10);
case MIDDLE -> x += textRenderer.getWidth(title.text) * scale + 10;
}
y = yPos;
} else {
switch (alignment) {
case LEFT -> x = xPos;
case RIGHT -> x = xPos - (textRenderer.getWidth(title.text) * scale);
case MIDDLE -> x = xPos - ((textRenderer.getWidth(title.text) * scale));
}
y += textRenderer.fontHeight * scale + 10;
}
context.drawText(textRenderer, title.text, 0, 0, title.color, true);
context.getMatrices().pop();
if (!title.active && !example) {
toRemove.add(title);
}
}
if (!example) {
titlesToDraw.removeAll(toRemove);
}
}
}