2021-11-20 15:40:23 +01:00
|
|
|
package com.minelittlepony.unicopia.client;
|
|
|
|
|
|
|
|
import com.minelittlepony.unicopia.item.UItems;
|
|
|
|
import com.mojang.blaze3d.systems.RenderSystem;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import org.spongepowered.include.com.google.common.base.Objects;
|
|
|
|
|
|
|
|
import net.minecraft.client.gui.DrawableHelper;
|
|
|
|
import net.minecraft.client.render.GameRenderer;
|
|
|
|
import net.minecraft.client.toast.Toast;
|
|
|
|
import net.minecraft.client.toast.ToastManager;
|
|
|
|
import net.minecraft.client.util.math.MatrixStack;
|
|
|
|
import net.minecraft.text.Text;
|
|
|
|
import net.minecraft.util.Identifier;
|
|
|
|
|
|
|
|
public class DiscoveryToast implements Toast {
|
|
|
|
private static final long MAX_AGE = 5000L;
|
2022-06-25 00:19:55 +02:00
|
|
|
private static final Text TITLE = Text.translatable("unicopia.toast.discoveries.title");
|
|
|
|
private static final Text DESCRIPTION = Text.translatable("unicopia.toast.discoveries.description");
|
2021-11-20 15:40:23 +01:00
|
|
|
|
|
|
|
private final List<Identifier> discoveries = new ArrayList<>();
|
|
|
|
private long startTime;
|
|
|
|
|
|
|
|
private boolean justUpdated;
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Toast.Visibility draw(MatrixStack matrices, ToastManager manager, long startTime) {
|
|
|
|
if (justUpdated) {
|
|
|
|
this.startTime = startTime;
|
|
|
|
justUpdated = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (discoveries.isEmpty()) {
|
|
|
|
return Toast.Visibility.HIDE;
|
|
|
|
}
|
|
|
|
|
2022-12-18 22:07:24 +01:00
|
|
|
RenderSystem.setShader(GameRenderer::getPositionTexProgram);
|
2021-11-20 15:40:23 +01:00
|
|
|
RenderSystem.setShaderTexture(0, TEXTURE);
|
|
|
|
RenderSystem.setShaderColor(1.0F, 1, 1, 1);
|
|
|
|
manager.drawTexture(matrices, 0, 0, 0, 32, getWidth(), getHeight());
|
2021-12-22 10:15:09 +01:00
|
|
|
manager.getClient().textRenderer.draw(matrices, TITLE, 30, 7, -11534256);
|
|
|
|
manager.getClient().textRenderer.draw(matrices, DESCRIPTION, 30, 18, -16777216);
|
2021-11-20 15:40:23 +01:00
|
|
|
|
|
|
|
Identifier icon = discoveries.get((int)(startTime / Math.max(1L, MAX_AGE / discoveries.size()) % discoveries.size()));
|
|
|
|
|
|
|
|
MatrixStack matrixStack = RenderSystem.getModelViewStack();
|
|
|
|
matrixStack.push();
|
|
|
|
matrixStack.scale(0.6F, 0.6F, 1);
|
|
|
|
RenderSystem.applyModelViewMatrix();
|
2021-12-22 10:15:09 +01:00
|
|
|
manager.getClient().getItemRenderer().renderInGui(UItems.SPELLBOOK.getDefaultStack(), 3, 3);
|
2021-11-20 15:40:23 +01:00
|
|
|
matrixStack.pop();
|
|
|
|
RenderSystem.applyModelViewMatrix();
|
|
|
|
|
|
|
|
RenderSystem.setShaderTexture(0, icon);
|
|
|
|
DrawableHelper.drawTexture(matrices, 8, 8, 1, 0, 0, 16, 16, 16, 16);
|
|
|
|
|
2021-12-22 10:15:09 +01:00
|
|
|
// manager.getClient().getItemRenderer().renderInGui(recipe.getOutput(), 8, 8);
|
2021-11-20 15:40:23 +01:00
|
|
|
|
|
|
|
return startTime - this.startTime >= MAX_AGE ? Toast.Visibility.HIDE : Toast.Visibility.SHOW;
|
|
|
|
}
|
|
|
|
|
|
|
|
public DiscoveryToast addDiscoveries(Identifier icon) {
|
|
|
|
if (!discoveries.contains(icon)) {
|
|
|
|
discoveries.add(icon);
|
|
|
|
}
|
|
|
|
justUpdated = true;
|
|
|
|
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
class Discovery {
|
|
|
|
final Identifier icon;
|
|
|
|
final Text description;
|
|
|
|
|
|
|
|
Discovery(Identifier icon, Text description) {
|
|
|
|
this.icon = icon;
|
|
|
|
this.description = description;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean equals(Object o) {
|
|
|
|
return o instanceof Discovery
|
|
|
|
&& Objects.equal(icon, ((Discovery) o).icon)
|
|
|
|
&& Objects.equal(description, ((Discovery) o).description);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int hashCode() {
|
|
|
|
return Objects.hashCode(icon, description);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void show(ToastManager manager, Identifier icon) {
|
|
|
|
DiscoveryToast existing = manager.getToast(DiscoveryToast.class, TYPE);
|
|
|
|
if (existing == null) {
|
|
|
|
manager.add(new DiscoveryToast().addDiscoveries(icon));
|
|
|
|
} else {
|
|
|
|
existing.addDiscoveries(icon);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|