Skip to content

Commit

Permalink
migrate to owo-ui, fix batch argument type suggestions being broken, …
Browse files Browse the repository at this point in the history
…add area selection hud, improve render task selection screen
  • Loading branch information
gliscowo committed Sep 12, 2022
1 parent 716b134 commit 8d0920e
Show file tree
Hide file tree
Showing 30 changed files with 752 additions and 648 deletions.
6 changes: 4 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ group = project.maven_group

repositories {
maven { url "https://maven.wispforest.io" }
mavenLocal()
}

loom {
Expand All @@ -25,14 +26,15 @@ dependencies {
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"

modImplementation 'com.ptsmods:devlogin:2.0'
// modImplementation 'com.ptsmods:devlogin:2.0'

modImplementation "io.wispforest:worldmesher:${project.worldmesher_version}"
include "io.wispforest:worldmesher:${project.worldmesher_version}"

modImplementation "io.wispforest:exo:${project.exo_version}"

modLocalRuntime "io.wispforest:owo-lib:${project.owo_version}"
modImplementation "io.wispforest:owo-lib:${project.owo_version}"
include "io.wispforest:owo-sentinel:${project.owo_version}"
}

processResources {
Expand Down
12 changes: 6 additions & 6 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# check these on https://fabricmc.net/develop
minecraft_base_version=1.19
minecraft_version=1.19
yarn_mappings=1.19+build.2
loader_version=0.14.7
minecraft_version=1.19.2
yarn_mappings=1.19.2+build.11
loader_version=0.14.9
# Mod Properties
mod_version=0.3.3
mod_version=0.4.0
maven_group=com.glisco
archives_base_name=isometric-renders
# Dependencies
# check this on https://modmuss50.me/fabric.html
fabric_version=0.58.0+1.19
fabric_version=0.61.0+1.19.2

# https://maven.wispforest.io/io/wispforest/worldmesher/
worldmesher_version=0.2.12+1.19
Expand All @@ -21,4 +21,4 @@ worldmesher_version=0.2.12+1.19
exo_version=0.1.5+1.19

# https://maven.wispforest.io/io/wispforest/owo-lib/
owo_version=0.7.3+1.19
owo_version=0.8.2+1.19
58 changes: 42 additions & 16 deletions src/main/java/com/glisco/isometricrenders/IsometricRenders.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,16 @@

import com.glisco.isometricrenders.command.IsorenderCommand;
import com.glisco.isometricrenders.render.TooltipRenderable;
import com.glisco.isometricrenders.screen.RenderScreen;
import com.glisco.isometricrenders.util.AreaSelectionHelper;
import com.glisco.isometricrenders.util.ImageIO;
import com.glisco.isometricrenders.util.ParticleRestriction;
import com.glisco.isometricrenders.widget.AreaSelectionComponent;
import com.glisco.isometricrenders.widget.IOStateComponent;
import io.wispforest.owo.ui.container.Containers;
import io.wispforest.owo.ui.container.FlowLayout;
import io.wispforest.owo.ui.core.Positioning;
import io.wispforest.owo.ui.core.Sizing;
import io.wispforest.owo.ui.hud.Hud;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
Expand All @@ -16,8 +22,8 @@
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.util.Identifier;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.lwjgl.glfw.GLFW;
Expand All @@ -44,25 +50,45 @@ public void onInitializeClient() {
TooltipRenderable.TooltipScreen.INSTANCE.init(newClient, 10000, 10000);
});

HudRenderCallback.EVENT.register((matrixStack, tickDelta) -> {
final MinecraftClient client = MinecraftClient.getInstance();
if (ImageIO.taskCount() < 1 || client.currentScreen != null) return;
KeyBindingHelper.registerKeyBinding(SELECT);

DrawableHelper.fill(matrixStack, 20, 20, 140, 60, 0x90000000);
client.textRenderer.draw(matrixStack, ImageIO.progressText(), 30, 30, 0xFFFFFF);

RenderScreen.drawExportProgressBar(matrixStack, 30, 45, 100, 50, 10);
});
final var ioStateId = "io-state";
final var areaSelectionHintId = "area-selection-hint";

KeyBindingHelper.registerKeyBinding(SELECT);
var hudId = new Identifier("isometric-renders", "hud");
Hud.add(hudId, () -> Containers.verticalFlow(Sizing.content(), Sizing.content()).positioning(Positioning.absolute(20, 20)));

ClientTickEvents.END_CLIENT_TICK.register(client -> {
if (!SELECT.wasPressed()) return;
HudRenderCallback.EVENT.register((matrixStack, tickDelta) -> {
var client = MinecraftClient.getInstance();
var isometricHud = (FlowLayout) Hud.getComponent(hudId);

final var ioState = isometricHud.childById(IOStateComponent.class, ioStateId);
if ((ioState == null) == (ImageIO.taskCount() > 0 && client.currentScreen == null)) {
if (ImageIO.taskCount() > 0 && client.currentScreen == null) {
isometricHud.child(new IOStateComponent().positioning(Positioning.absolute(20, 20)).id(ioStateId));
} else {
isometricHud.removeChild(ioState);
}
}

if (client.player.isSneaking()) {
AreaSelectionHelper.clear();
} else {
AreaSelectionHelper.select();
final var selectionHint = isometricHud.childById(AreaSelectionComponent.class, areaSelectionHintId);
if ((selectionHint == null) == AreaSelectionHelper.shouldDraw()) {
if (AreaSelectionHelper.shouldDraw()) {
isometricHud.child(new AreaSelectionComponent().id(areaSelectionHintId));
} else {
isometricHud.removeChild(selectionHint);
}
}
});

ClientTickEvents.END_CLIENT_TICK.register(client -> {
if (SELECT.wasPressed()) {
if (client.player.isSneaking()) {
AreaSelectionHelper.clear();
} else {
AreaSelectionHelper.select();
}
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> cont
final var input = builder.getRemaining();

if (input.codePoints().filter(value -> value == ' ').count() > 0 && input.contains("batch")) {
return CommandSource.suggestMatching(new String[]{"items", "blocks"}, builder.createOffset(builder.getStart() + input.length()));
return CommandSource.suggestMatching(new String[]{"items", "blocks"}, builder.createOffset(builder.getStart() + 6));
} else {
return CommandSource.suggestMatching(new String[]{"atlas", "batch"}, builder);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package com.glisco.isometricrenders.property;

import com.glisco.isometricrenders.render.Renderable;
import com.glisco.isometricrenders.screen.IsometricUI;
import com.glisco.isometricrenders.util.ClientRenderCallback;
import com.glisco.isometricrenders.widget.WidgetColumnBuilder;
import com.glisco.isometricrenders.util.Translate;
import io.wispforest.owo.ui.component.Components;
import io.wispforest.owo.ui.container.FlowLayout;
import io.wispforest.owo.ui.core.Insets;
import io.wispforest.owo.ui.core.Sizing;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.Vec3f;
Expand Down Expand Up @@ -30,29 +35,30 @@ public DefaultPropertyBundle() {
}

@Override
public void buildGuiControls(Renderable<?> renderable, WidgetColumnBuilder builder) {
builder.label("transform_options");
public void buildGuiControls(Renderable<?> renderable, FlowLayout container) {
IsometricUI.sectionHeader(container, "transform_options", false);

this.appendIntControls(builder, scale, "scale", 10);
this.appendIntControls(builder, rotation, "rotation", 45);
this.appendIntControls(builder, slant, "slant", 30);
this.appendIntControls(builder, lightAngle, "light_angle", 15);
this.appendIntControls(builder, rotationSpeed, "rotation_speed", 5);
IsometricUI.intControl(container, scale, "scale", 10);
IsometricUI.intControl(container, rotation, "rotation", 45);
IsometricUI.intControl(container, slant, "slant", 30);
IsometricUI.intControl(container, lightAngle, "light_angle", 15);
IsometricUI.intControl(container, rotationSpeed, "rotation_speed", 5);

// -------

builder.move(10);
builder.label("presets");
IsometricUI.sectionHeader(container, "presets", true);

builder.button("dimetric", 0, 60, button -> {
this.rotation.setToDefault();
this.slant.set(30);
});
builder.button("isometric", 65, 60, button -> {
this.rotation.setToDefault();
this.slant.set(36);
});
builder.nextRow();
try (var builder = IsometricUI.row(container)) {
builder.row.child(Components.button(Translate.gui("dimetric"), button -> {
this.rotation.setToDefault();
this.slant.set(30);
}).horizontalSizing(Sizing.fixed(60)).margins(Insets.right(5)));

builder.row.child(Components.button(Translate.gui("isometric"), button -> {
this.rotation.setToDefault();
this.slant.set(36);
}).horizontalSizing(Sizing.fixed(60)));
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,12 @@
package com.glisco.isometricrenders.property;

import com.glisco.isometricrenders.render.Renderable;
import com.glisco.isometricrenders.util.Translate;
import com.glisco.isometricrenders.widget.PropertySliderWidget;
import com.glisco.isometricrenders.widget.PropertyTextField;
import com.glisco.isometricrenders.widget.WidgetColumnBuilder;
import io.wispforest.owo.ui.container.FlowLayout;
import net.minecraft.client.util.math.MatrixStack;

public interface PropertyBundle {

void buildGuiControls(Renderable<?> renderable, WidgetColumnBuilder builder);
void buildGuiControls(Renderable<?> renderable, FlowLayout container);

void applyToViewMatrix(MatrixStack modelViewStack);

default void appendIntControls(WidgetColumnBuilder builder, IntProperty property, String name, int step) {
final var textField = new PropertyTextField(10, builder.currentY(), property);
builder.add(textField, textField.getHeight());
final var slider = new PropertySliderWidget(50, builder.currentY(), builder.width() - 55, Translate.gui(name), step, property);
builder.add(slider, slider.getHeight());

builder.nextRow();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@

import com.glisco.isometricrenders.property.DefaultPropertyBundle;
import com.glisco.isometricrenders.property.Property;
import com.glisco.isometricrenders.screen.IsometricUI;
import com.glisco.isometricrenders.util.ExportPathSpec;
import com.glisco.isometricrenders.util.ParticleRestriction;
import com.glisco.isometricrenders.util.Translate;
import com.glisco.isometricrenders.widget.WidgetColumnBuilder;
import com.mojang.blaze3d.systems.RenderSystem;
import io.wispforest.owo.ui.component.Components;
import io.wispforest.owo.ui.container.FlowLayout;
import io.wispforest.owo.ui.core.Insets;
import io.wispforest.owo.ui.core.Sizing;
import io.wispforest.worldmesher.WorldMesh;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.VertexConsumerProvider;
Expand Down Expand Up @@ -125,14 +129,13 @@ public static class AreaPropertyBundle extends DefaultPropertyBundle {
public final Property<Boolean> freezeEntities = Property.of(true);

@Override
public void buildGuiControls(Renderable<?> renderable, WidgetColumnBuilder builder) {
super.buildGuiControls(renderable, builder);
public void buildGuiControls(Renderable<?> renderable, FlowLayout container) {
super.buildGuiControls(renderable, container);
final var mesh = ((AreaRenderable) renderable).mesh;

builder.move(10);
builder.label("mesh_controls");
IsometricUI.sectionHeader(container, "mesh_controls", true);

builder.dynamicLabel(() -> {
IsometricUI.dynamicLabel(container, () -> {
var meshStatus = Translate.gui("mesh_status");
if (!mesh.getState().isBuildStage) {
meshStatus.append(Translate.gui("mesh_ready").formatted(Formatting.GREEN));
Expand All @@ -145,14 +148,14 @@ public void buildGuiControls(Renderable<?> renderable, WidgetColumnBuilder build
return meshStatus;
});

builder.propertyCheckbox(this.freezeEntities, "freeze_entities");
IsometricUI.booleanControl(container, this.freezeEntities, "freeze_entities");
this.freezeEntities.listen((booleanProperty, aBoolean) -> {
mesh.setFreezeEntities(aBoolean);
});

builder.button("rebuild_mesh", 0, 80, button -> {
mesh.scheduleRebuild();
});
container.child(Components.button(Translate.gui("rebuild_mesh"), button -> mesh.scheduleRebuild())
.horizontalSizing(Sizing.fixed(80))
.margins(Insets.top(5)));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@
import com.glisco.isometricrenders.property.DefaultPropertyBundle;
import com.glisco.isometricrenders.property.GlobalProperties;
import com.glisco.isometricrenders.property.PropertyBundle;
import com.glisco.isometricrenders.screen.IsometricUI;
import com.glisco.isometricrenders.util.ExportPathSpec;
import com.glisco.isometricrenders.util.ImageIO;
import com.glisco.isometricrenders.util.Translate;
import com.glisco.isometricrenders.widget.WidgetColumnBuilder;
import io.wispforest.owo.ui.component.Components;
import io.wispforest.owo.ui.container.FlowLayout;
import io.wispforest.owo.ui.core.Insets;
import io.wispforest.owo.ui.core.Sizing;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.Matrix4f;
Expand Down Expand Up @@ -117,25 +121,25 @@ public BatchPropertyBundle(PropertyBundle delegate) {
}

@Override
public void buildGuiControls(Renderable<?> renderable, WidgetColumnBuilder builder) {
public void buildGuiControls(Renderable<?> renderable, FlowLayout container) {
final BatchRenderable<?> batchRenderable = (BatchRenderable<?>) renderable;

this.delegate.buildGuiControls(batchRenderable.currentDelegate, builder);

builder.move(10);
builder.label("batch.controls");

final var startButton = builder.button("batch.start", 0, 60, button -> {
batchRenderable.start();
button.active = false;
});
builder.button("batch.reset", 65, 60, button -> {
batchRenderable.reset();
startButton.active = true;
});
builder.nextRow();
this.delegate.buildGuiControls(batchRenderable.currentDelegate, container);

IsometricUI.sectionHeader(container, "batch.controls", true);
try (var builder = IsometricUI.row(container)) {
final var startButton = Components.button(Translate.gui("batch.start"), button -> {
batchRenderable.start();
button.active = false;
});
builder.row.child(startButton.horizontalSizing(Sizing.fixed(60)).margins(Insets.right(5)));
builder.row.child(Components.button(Translate.gui("batch.reset"), button -> {
batchRenderable.reset();
startButton.active = true;
}));
}

builder.dynamicLabel(() -> Translate.gui(
IsometricUI.dynamicLabel(container, () -> Translate.gui(
"batch.remaining",
Math.max(0, batchRenderable.delegates.size() - batchRenderable.currentIndex - 1),
batchRenderable.delegates.size()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.glisco.isometricrenders.property.PropertyBundle;
import com.glisco.isometricrenders.util.ExportPathSpec;
import com.glisco.isometricrenders.widget.WidgetColumnBuilder;
import io.wispforest.owo.ui.container.FlowLayout;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.Matrix4f;
Expand All @@ -11,7 +11,7 @@ public class EmptyRenderable implements Renderable<PropertyBundle> {

private static final PropertyBundle EMPTY_BUNDLE = new PropertyBundle() {
@Override
public void buildGuiControls(Renderable<?> renderable, WidgetColumnBuilder builder) {}
public void buildGuiControls(Renderable<?> renderable, FlowLayout container) {}

@Override
public void applyToViewMatrix(MatrixStack modelViewStack) {}
Expand Down
Loading

0 comments on commit 8d0920e

Please sign in to comment.