Skip to content

Commit

Permalink
more work on research queue
Browse files Browse the repository at this point in the history
  • Loading branch information
Thepigcat76 committed Jan 22, 2025
1 parent a30ade3 commit de5760d
Show file tree
Hide file tree
Showing 9 changed files with 167 additions and 49 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.portingdeadmods.researchd.api.capabilties;

import com.portingdeadmods.researchd.api.research.ResearchInstance;
import com.portingdeadmods.researchd.utils.researches.data.ResearchQueue;

import java.util.List;
import java.util.Set;

public interface EntityResearch {
Set<ResearchInstance> researchQueue();
ResearchQueue researchQueue();

Set<ResearchInstance> researches();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.portingdeadmods.portingdeadlibs.utils.renderers.GuiUtils;
import com.portingdeadmods.researchd.Researchd;
import com.portingdeadmods.researchd.client.screens.list.TechListEntry;
import com.portingdeadmods.researchd.client.screens.queue.QueueEntryWidget;
import com.portingdeadmods.researchd.utils.researches.*;
import com.portingdeadmods.researchd.client.screens.graph.ResearchGraphWidget;
import com.portingdeadmods.researchd.client.screens.list.TechListWidget;
Expand Down Expand Up @@ -57,9 +58,10 @@ protected void init() {
addRenderableWidget(this.techList.startResearchButton);
addRenderableWidget(this.researchGraphWidget);
addRenderableWidget(this.selectedResearchWidget);
addRenderableWidget(this.researchQueueWidget.leftButton);
addRenderableWidget(this.researchQueueWidget.rightButton);
addRenderableWidget(this.researchQueueWidget.removeButton);
//addRenderableWidget(this.researchQueueWidget.leftButton);
//addRenderableWidget(this.researchQueueWidget.rightButton);
//addRenderableWidget(this.researchQueueWidget.removeButton);

}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@ public SelectedResearchWidget(int x, int y, int width, int height) {
protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float v) {
GuiUtils.drawImg(guiGraphics, BACKGROUND_TEXTURE, getX(), getY(), width, height);

guiGraphics.enableScissor(53, 55, 53 + 115, 55 + 48);

if (entry != null) {
entry.renderWidget(guiGraphics, mouseX, mouseY, v, 2);

guiGraphics.enableScissor(53, 55, 53 + 115, 55 + 48);

Font font = Minecraft.getInstance().font;
guiGraphics.drawString(font, Utils.registryTranslation(this.entry.getResearch().getResearch()), 12, 45, -1, false);
int lineHeight = font.lineHeight + 2;
Expand All @@ -62,10 +62,10 @@ protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, flo
height += methodEntry.getValue().isEmpty() ? 0 : methodEntry.getValue().getFirst().getClientMethod().height();
}

guiGraphics.drawString(font, "Effects", 56, 57 + height + 6, -1, false);
}
guiGraphics.drawString(font, "Effects", 56, 57 + height + 14, -1, false);

guiGraphics.disableScissor();
guiGraphics.disableScissor();
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public void setResearch(ResearchInstance research) {
}

@Override
protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) {
public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) {
GuiUtils.drawImg(guiGraphics, getResearch().getResearchStatus().getSpriteTexture(), getX(), getY(), WIDTH, HEIGHT);

RegistryAccess lookup = Minecraft.getInstance().level.registryAccess();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,82 @@
package com.portingdeadmods.researchd.client.screens.queue;

import com.mojang.blaze3d.vertex.PoseStack;
import com.portingdeadmods.researchd.Researchd;
import com.portingdeadmods.researchd.api.research.Research;
import com.portingdeadmods.researchd.api.research.ResearchInstance;
import com.portingdeadmods.researchd.client.screens.ResearchScreen;
import com.portingdeadmods.researchd.client.screens.list.TechListEntry;
import com.portingdeadmods.researchd.utils.researches.data.ResearchQueue;
import com.portingdeadmods.researchd.utils.researches.data.TechList;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.narration.NarrationElementOutput;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.resources.ResourceKey;
import net.minecraft.util.FastColor;

public class QueueEntryWidget extends AbstractWidget {
private ResearchScreen screen;
private ResearchQueue queue;
private final TechListEntry queueEntry;
private final int index;

public QueueEntryWidget(TechListEntry queueEntry, int x, int y) {
public QueueEntryWidget(ResearchScreen screen, TechListEntry queueEntry, int x, int y, int index) {
super(x, y, TechListEntry.WIDTH, TechListEntry.HEIGHT, CommonComponents.EMPTY);
this.queueEntry = queueEntry.copy();
this.queueEntry.setX(x);
this.queueEntry.setY(y);
this.index = index;
this.screen = screen;
}

public static QueueEntryWidget from(TechListEntry entry) {
return new QueueEntryWidget(entry, entry.getX(), entry.getY());
public void setQueue(ResearchQueue queue) {
this.queue = queue;
}

@Override
protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float v) {
this.queueEntry.render(guiGraphics, mouseX, mouseY, v);
this.queueEntry.renderWidget(guiGraphics, mouseX, mouseY, v);

if (this.isHovered()) {
guiGraphics.fillGradient(getX(), getY(), getX() + getWidth(), getY() + getHeight(), ChatFormatting.DARK_GRAY.getColor(), ChatFormatting.DARK_GRAY.getColor());
if (this.isHovering(guiGraphics, mouseX, mouseY, getX(), getY() + 17, getWidth(), getHeight() - 17)) {
Font font = Minecraft.getInstance().font;

int color = FastColor.ARGB32.color(120, 90, 90, 90);
guiGraphics.fillGradient(getX(), getY() + 17, getX() + getWidth(), getY() + getHeight(), color, color);

PoseStack poseStack = guiGraphics.pose();

poseStack.pushPose();
{
poseStack.translate(0, 0, 1000);
guiGraphics.drawString(font, "x", getX() + 10 - (font.width("x") / 2), getY() + 16, -1, false);
}
poseStack.popPose();
}
}

@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (this.isHovering(null, (int) mouseX, (int) mouseY, getX(), getY() + 17, getWidth(), getHeight() - 17)) {
Researchd.LOGGER.debug("removing");
this.screen.getResearchQueue().removeResearch(index);
return super.mouseClicked(mouseX, mouseY, button);
} else if (this.isHovered()) {
this.screen.getSelectedResearchWidget().setEntry(this.getEntry());
return super.mouseClicked(mouseX, mouseY, button);
}
return false;
}

public boolean isHovering(GuiGraphics guiGraphics, int mouseX, int mouseY, int x, int y, int width, int height) {
return (guiGraphics == null ||
guiGraphics.containsPointInScissor(mouseX, mouseY))
&& mouseX >= x && mouseY >= y && mouseX < x + width && mouseY < y + height;
}

public TechListEntry getEntry() {
return this.queueEntry;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@

import com.portingdeadmods.portingdeadlibs.utils.renderers.GuiUtils;
import com.portingdeadmods.researchd.Researchd;
import com.portingdeadmods.researchd.api.research.ResearchInstance;
import com.portingdeadmods.researchd.client.screens.ResearchScreen;
import com.portingdeadmods.researchd.client.screens.list.EntryType;
import com.portingdeadmods.researchd.client.screens.list.TechListEntry;
import com.portingdeadmods.researchd.client.screens.widgets.QueueControllsButton;
import com.portingdeadmods.researchd.registries.Researches;
import com.portingdeadmods.researchd.utils.researches.data.ResearchQueue;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.ImageButton;
Expand All @@ -25,36 +24,44 @@ public class ResearchQueueWidget extends AbstractWidget {
private static final int BACKGROUND_WIDTH = 174;
private static final int BACKGROUND_HEIGHT = 42;

private final List<QueueEntryWidget> queue;
private final List<QueueEntryWidget> widgetQueue;
private final ResearchQueue queue;
private final ResearchScreen screen;

public ImageButton leftButton;
public ImageButton rightButton;
public ImageButton removeButton;

public ResearchQueueWidget(ResearchScreen screen, int x, int y) {
super(x, y, BACKGROUND_WIDTH, BACKGROUND_HEIGHT, Component.empty());
this.queue = new ArrayList<>();
this.screen = screen;
this.widgetQueue = new ArrayList<>();
setLeftButton(-1);
setRightButton(-1);
setRemoveButton(-1);
this.queue = new ResearchQueue();
}

public void addEntry(TechListEntry entry) {
if (this.queue.size() >= 7) return;
if (this.widgetQueue.size() >= 7) return;
if (entry.getResearch().getResearchStatus() == EntryType.RESEARCHED) return;

for (QueueEntryWidget e : this.queue) {
if (e.getResearch().equals(entry.getResearch())) return;
for (QueueEntryWidget e : this.widgetQueue) {
if (e.getResearch().equals(entry.getResearch().getResearch())) return;
}

this.queue.add(new QueueEntryWidget(entry, 12 + this.queue.size() * TechListEntry.WIDTH, 17));
int index = this.queue.entries().size();
QueueEntryWidget widget = new QueueEntryWidget(this.screen, entry, 12 + this.widgetQueue.size() * TechListEntry.WIDTH, 17, index);
this.queue.add(entry.getResearch());
this.widgetQueue.add(widget);
widget.setQueue(this.queue);
}

public void removeEntry(int index) {
System.out.println("Removing entry at index: " + index);
List<QueueEntryWidget> copy = new ArrayList<>(this.queue);
List<QueueEntryWidget> copy = new ArrayList<>(this.widgetQueue);

this.queue.clear();
this.widgetQueue.clear();
copy.remove(index);

for (QueueEntryWidget entry : copy) {
Expand All @@ -64,22 +71,22 @@ public void removeEntry(int index) {

public void moveEntry(int index, boolean left) {
if (left && index == 0) return;
if (!left && index == this.queue.size() - 1) return;
if (!left && index == this.widgetQueue.size() - 1) return;

if (!left) index++;

String direction = left ? "left" : "right";
System.out.println("Moving entry at index " + index + " to the " + direction);

List<QueueEntryWidget> copy = new ArrayList<>(this.queue);
List<QueueEntryWidget> copy = new ArrayList<>(this.widgetQueue);

QueueEntryWidget entry1 = copy.get(index - 1);
QueueEntryWidget entry2 = copy.get(index);

copy.set(index - 1, entry2);
copy.set(index, entry1);

this.queue.clear();
this.widgetQueue.clear();
for (QueueEntryWidget entry : copy) {
addEntry(entry.getEntry());
}
Expand All @@ -89,7 +96,7 @@ public void moveEntry(int index, boolean left) {
protected void renderWidget(GuiGraphics guiGraphics, int i, int i1, float v) {
GuiUtils.drawImg(guiGraphics, BACKGROUND_TEXTURE, getX(), getY(), width, height);

for (QueueEntryWidget entry : this.queue) {
for (QueueEntryWidget entry : this.widgetQueue) {
entry.render(guiGraphics, i, i1, v);
}
}
Expand All @@ -101,23 +108,21 @@ protected void updateWidgetNarration(NarrationElementOutput narrationElementOutp

@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
int paddingX = getX() + 12;
int paddingY = 17 + getY();
if (
mouseX > paddingX &&
mouseX < paddingX + this.queue.size() * TechListEntry.WIDTH &&
mouseY > paddingY &&
mouseY < paddingY + TechListEntry.HEIGHT
) {
int indexX = ((int) mouseX - paddingX) / TechListEntry.WIDTH;
setLeftButton(indexX);
setRightButton(indexX);
setRemoveButton(indexX);
for (QueueEntryWidget widget : this.widgetQueue) {
if (widget.isHovered()) {
return widget.mouseClicked(mouseX, mouseY, button);
}
}

return false;
}

public void removeResearch(int index) {
if (this.queue.entries().size() > index) {
this.queue.remove(index);
this.widgetQueue.remove(index);
}
}

private void setLeftButton(int index) {
System.out.println("Setting left button to index: " + index);
if (index == -1) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,19 @@
import com.portingdeadmods.researchd.api.capabilties.EntityResearch;
import com.portingdeadmods.researchd.api.research.Research;
import com.portingdeadmods.researchd.api.research.ResearchInstance;
import com.portingdeadmods.researchd.utils.researches.data.ResearchQueue;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;

import java.util.*;
import java.util.stream.Collectors;

public record EntityResearchImpl(Set<ResearchInstance> researchQueue, Set<ResearchInstance> researches) {
public static final EntityResearchImpl EMPTY = new EntityResearchImpl(Collections.emptySet(), Collections.emptySet());
public record EntityResearchImpl(ResearchQueue researchQueue, Set<ResearchInstance> researches) {
public static final EntityResearchImpl EMPTY = new EntityResearchImpl(ResearchQueue.EMPTY, Collections.emptySet());

public static final Codec<EntityResearchImpl> CODEC = RecordCodecBuilder.create(instance -> instance.group(
CodecUtils.set(ResearchInstance.CODEC).fieldOf("researchQueue").forGetter(EntityResearchImpl::researchQueue),
ResearchQueue.CODEC.fieldOf("researchQueue").forGetter(EntityResearchImpl::researchQueue),
CodecUtils.set(ResearchInstance.CODEC).fieldOf("research").forGetter(EntityResearchImpl::researches)
).apply(instance, EntityResearchImpl::new));

Expand All @@ -30,14 +31,14 @@ public record EntityResearchImpl(Set<ResearchInstance> researchQueue, Set<Resear
);

private static EntityResearchImpl fromLists(List<ResearchInstance> researchQueue, List<ResearchInstance> researches) {
return new EntityResearchImpl(new HashSet<>(researchQueue), new HashSet<>(researches));
return new EntityResearchImpl(new ResearchQueue(researchQueue), new HashSet<>(researches));
}

private List<ResearchInstance> researchesAsList() {
return researches().stream().toList();
}

private List<ResearchInstance> queueAsList() {
return researchQueue().stream().toList();
return researchQueue().entries();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.portingdeadmods.researchd.api.capabilties.EntityResearch;
import com.portingdeadmods.researchd.api.research.ResearchInstance;
import com.portingdeadmods.researchd.data.ResearchdAttachments;
import com.portingdeadmods.researchd.utils.researches.data.ResearchQueue;
import net.minecraft.world.entity.player.Player;

import java.util.HashSet;
Expand All @@ -17,7 +18,7 @@ public EntityResearchWrapper(Player player) {
}

@Override
public Set<ResearchInstance> researchQueue() {
public ResearchQueue researchQueue() {
return player.getData(ResearchdAttachments.ENTITY_RESEARCH).researchQueue();
}

Expand Down
Loading

0 comments on commit de5760d

Please sign in to comment.