Icons for modifier settings and replace modes. Rendering mirror lines and areas in world.

Removed shaders.
This commit is contained in:
Christian Knaapen
2023-02-02 00:45:21 +01:00
parent d4cb0c6858
commit 07667efe98
18 changed files with 281 additions and 610 deletions

View File

@@ -29,7 +29,13 @@ public class AllIcons implements ScreenElement {
I_SETTINGS = newRow(), I_SETTINGS = newRow(),
I_UNDO = next(), I_UNDO = next(),
I_REDO = next(), I_REDO = next(),
I_REPLACE = next(); I_REPLACE = next(),
I_REPLACE_AIR = next(),
I_REPLACE_BLOCKS_AND_AIR = next(),
I_REPLACE_BLOCKS = next(),
I_REPLACE_OFFHAND_FILTERED = next(),
I_PROTECT_TILE_ENTITIES = next();
public static final AllIcons public static final AllIcons
I_DISABLE = newRow(), I_DISABLE = newRow(),
@@ -71,7 +77,15 @@ public class AllIcons implements ScreenElement {
I_HIDE_LINES = next(), I_HIDE_LINES = next(),
I_SHOW_LINES = next(), I_SHOW_LINES = next(),
I_HIDE_AREAS = next(), I_HIDE_AREAS = next(),
I_SHOW_AREAS = next(); I_SHOW_AREAS = next(),
I_X_OFF = next(),
I_X_ON = next(),
I_Y_OFF = next(),
I_Y_ON = next(),
I_Z_OFF = next(),
I_Z_ON = next(),
I_ALTERNATE_OFF = next(),
I_ALTERNATE_ON = next();
public AllIcons(int x, int y) { public AllIcons(int x, int y) {

View File

@@ -115,11 +115,11 @@ public class ModeOptions {
OPEN_MODIFIER_SETTINGS("open_modifier_settings", AllIcons.I_SETTINGS), OPEN_MODIFIER_SETTINGS("open_modifier_settings", AllIcons.I_SETTINGS),
OPEN_PLAYER_SETTINGS("open_player_settings", AllIcons.I_SETTINGS), OPEN_PLAYER_SETTINGS("open_player_settings", AllIcons.I_SETTINGS),
REPLACE_ONLY_AIR("replace_only_air", AllIcons.I_REPLACE), REPLACE_ONLY_AIR("replace_only_air", AllIcons.I_REPLACE_AIR),
REPLACE_BLOCKS_AND_AIR("replace_blocks_and_air", AllIcons.I_REPLACE), REPLACE_BLOCKS_AND_AIR("replace_blocks_and_air", AllIcons.I_REPLACE_BLOCKS_AND_AIR),
REPLACE_ONLY_BLOCKS("replace_only_blocks", AllIcons.I_REPLACE), REPLACE_ONLY_BLOCKS("replace_only_blocks", AllIcons.I_REPLACE_BLOCKS),
REPLACE_FILTERED_BY_OFFHAND("replace_filtered_by_offhand", AllIcons.I_REPLACE), REPLACE_FILTERED_BY_OFFHAND("replace_filtered_by_offhand", AllIcons.I_REPLACE_OFFHAND_FILTERED),
TOGGLE_PROTECT_TILE_ENTITIES("toggle_protect_tile_entities", AllIcons.I_REPLACE), TOGGLE_PROTECT_TILE_ENTITIES("toggle_protect_tile_entities", AllIcons.I_PROTECT_TILE_ENTITIES),
NORMAL_SPEED("normal_speed", AllIcons.I_NORMAL_SPEED), NORMAL_SPEED("normal_speed", AllIcons.I_NORMAL_SPEED),
FAST_SPEED("fast_speed", AllIcons.I_FAST_SPEED), FAST_SPEED("fast_speed", AllIcons.I_FAST_SPEED),

View File

@@ -91,21 +91,21 @@ public class RadialMirror extends BaseModifier {
if (angleToCenter < -0.751 * Math.PI || angleToCenter > 0.749 * Math.PI) { if (angleToCenter < -0.751 * Math.PI || angleToCenter > 0.749 * Math.PI) {
blockEntry.rotation = blockEntry.rotation.getRotated(Rotation.CLOCKWISE_180); blockEntry.rotation = blockEntry.rotation.getRotated(Rotation.CLOCKWISE_180);
if (alternate) { if (alternate) {
blockEntry.mirrorZ = !blockEntry.mirrorZ; // blockEntry.mirrorX = !blockEntry.mirrorX;
} }
} else if (angleToCenter < -0.251 * Math.PI) { } else if (angleToCenter < -0.251 * Math.PI) {
blockEntry.rotation = blockEntry.rotation.getRotated(Rotation.CLOCKWISE_90); blockEntry.rotation = blockEntry.rotation.getRotated(Rotation.CLOCKWISE_90);
if (alternate) { if (alternate) {
blockEntry.mirrorX = !blockEntry.mirrorX; // blockEntry.mirrorZ = !blockEntry.mirrorZ;
} }
} else if (angleToCenter > 0.249 * Math.PI) { } else if (angleToCenter > 0.249 * Math.PI) {
blockEntry.rotation = blockEntry.rotation.getRotated(Rotation.COUNTERCLOCKWISE_90); blockEntry.rotation = blockEntry.rotation.getRotated(Rotation.COUNTERCLOCKWISE_90);
if (alternate) { if (alternate) {
blockEntry.mirrorX = !blockEntry.mirrorX; // blockEntry.mirrorZ = !blockEntry.mirrorZ;
} }
} else { } else {
if (alternate) { if (alternate) {
blockEntry.mirrorZ = !blockEntry.mirrorZ; // blockEntry.mirrorX = !blockEntry.mirrorX;
} }
} }
} }

View File

@@ -47,13 +47,13 @@ public class PartialItemModelRenderer {
render(model, RenderTypes.getItemPartialSolid(), light); render(model, RenderTypes.getItemPartialSolid(), light);
} }
public void renderSolidGlowing(BakedModel model, int light) { // public void renderSolidGlowing(BakedModel model, int light) {
render(model, RenderTypes.getGlowingSolid(), light); // render(model, RenderTypes.getGlowingSolid(), light);
} // }
//
public void renderGlowing(BakedModel model, int light) { // public void renderGlowing(BakedModel model, int light) {
render(model, RenderTypes.getGlowingTranslucent(), light); // render(model, RenderTypes.getGlowingTranslucent(), light);
} // }
public void render(BakedModel model, RenderType type, int light) { public void render(BakedModel model, RenderType type, int light) {
if (stack.isEmpty()) if (stack.isEmpty())

View File

@@ -20,7 +20,7 @@ import java.io.IOException;
// TODO 1.17: use custom shaders instead of vanilla ones // TODO 1.17: use custom shaders instead of vanilla ones
public class RenderTypes extends RenderStateShard { public class RenderTypes extends RenderStateShard {
public static final ShaderStateShard GLOWING_SHADER = new ShaderStateShard(() -> Shaders.glowingShader); // public static final ShaderStateShard GLOWING_SHADER = new ShaderStateShard(() -> Shaders.glowingShader);
private static final RenderType OUTLINE_SOLID = private static final RenderType OUTLINE_SOLID =
RenderType.create(createLayerName("outline_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, false, RenderType.create(createLayerName("outline_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, false,
@@ -49,33 +49,33 @@ public class RenderTypes extends RenderStateShard {
.createCompositeState(false)); .createCompositeState(false));
} }
public static RenderType getGlowingSolid(ResourceLocation texture) { // public static RenderType getGlowingSolid(ResourceLocation texture) {
return RenderType.create(createLayerName("glowing_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, // return RenderType.create(createLayerName("glowing_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256,
true, false, RenderType.CompositeState.builder() // true, false, RenderType.CompositeState.builder()
.setShaderState(GLOWING_SHADER) // .setShaderState(GLOWING_SHADER)
.setTextureState(new TextureStateShard(texture, false, false)) // .setTextureState(new TextureStateShard(texture, false, false))
.setCullState(CULL) // .setCullState(CULL)
.setLightmapState(LIGHTMAP) // .setLightmapState(LIGHTMAP)
.setOverlayState(OVERLAY) // .setOverlayState(OVERLAY)
.createCompositeState(true)); // .createCompositeState(true));
} // }
//
// private static final RenderType GLOWING_SOLID_DEFAULT = getGlowingSolid(InventoryMenu.BLOCK_ATLAS);
//
// public static RenderType getGlowingSolid() {
// return GLOWING_SOLID_DEFAULT;
// }
private static final RenderType GLOWING_SOLID_DEFAULT = getGlowingSolid(InventoryMenu.BLOCK_ATLAS); // public static RenderType getGlowingTranslucent(ResourceLocation texture) {
// return RenderType.create(createLayerName("glowing_translucent"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS,
public static RenderType getGlowingSolid() { // 256, true, true, RenderType.CompositeState.builder()
return GLOWING_SOLID_DEFAULT; // .setShaderState(GLOWING_SHADER)
} // .setTextureState(new TextureStateShard(texture, false, false))
// .setTransparencyState(TRANSLUCENT_TRANSPARENCY)
public static RenderType getGlowingTranslucent(ResourceLocation texture) { // .setLightmapState(LIGHTMAP)
return RenderType.create(createLayerName("glowing_translucent"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, // .setOverlayState(OVERLAY)
256, true, true, RenderType.CompositeState.builder() // .createCompositeState(true));
.setShaderState(GLOWING_SHADER) // }
.setTextureState(new TextureStateShard(texture, false, false))
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
.setLightmapState(LIGHTMAP)
.setOverlayState(OVERLAY)
.createCompositeState(true));
}
private static final RenderType ADDITIVE = RenderType.create(createLayerName("additive"), DefaultVertexFormat.BLOCK, private static final RenderType ADDITIVE = RenderType.create(createLayerName("additive"), DefaultVertexFormat.BLOCK,
VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder() VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder()
@@ -91,11 +91,11 @@ public class RenderTypes extends RenderStateShard {
return ADDITIVE; return ADDITIVE;
} }
private static final RenderType GLOWING_TRANSLUCENT_DEFAULT = getGlowingTranslucent(InventoryMenu.BLOCK_ATLAS); // private static final RenderType GLOWING_TRANSLUCENT_DEFAULT = getGlowingTranslucent(InventoryMenu.BLOCK_ATLAS);
public static RenderType getGlowingTranslucent() { // public static RenderType getGlowingTranslucent() {
return GLOWING_TRANSLUCENT_DEFAULT; // return GLOWING_TRANSLUCENT_DEFAULT;
} // }
private static final RenderType ITEM_PARTIAL_SOLID = private static final RenderType ITEM_PARTIAL_SOLID =
RenderType.create(createLayerName("item_partial_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, RenderType.create(createLayerName("item_partial_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true,
@@ -146,15 +146,15 @@ public class RenderTypes extends RenderStateShard {
super(null, null, null); super(null, null, null);
} }
@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD) // @EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
private static class Shaders { // private static class Shaders {
private static ShaderInstance glowingShader; // private static ShaderInstance glowingShader;
//
@SubscribeEvent // @SubscribeEvent
public static void onRegisterShaders(RegisterShadersEvent event) throws IOException { // public static void onRegisterShaders(RegisterShadersEvent event) throws IOException {
ResourceManager resourceManager = event.getResourceManager(); // ResourceManager resourceManager = event.getResourceManager();
event.registerShader(new ShaderInstance(resourceManager, Create.asResource("glowing_shader"), DefaultVertexFormat.NEW_ENTITY), shader -> glowingShader = shader); // event.registerShader(new ShaderInstance(resourceManager, Create.asResource("glowing_shader"), DefaultVertexFormat.NEW_ENTITY), shader -> glowingShader = shader);
} // }
} // }
} }

View File

@@ -89,7 +89,7 @@ public class MirrorEntry extends BaseModifierEntry<Mirror> {
//Axis buttons //Axis buttons
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
final int index = i; final int index = i;
IconButton button = new IconButton(0, 0, AllIcons.I_SHOW_LINES) IconButton button = new IconButton(0, 0, i == 0 ? AllIcons.I_X_ON : i == 1 ? AllIcons.I_Y_OFF : AllIcons.I_Z_OFF)
.withCallback(() -> { .withCallback(() -> {
modifier.toggleMirrorAxis(index); modifier.toggleMirrorAxis(index);
onValueChanged(); onValueChanged();
@@ -191,42 +191,42 @@ public class MirrorEntry extends BaseModifierEntry<Mirror> {
//Toggle offset button //Toggle offset button
if (modifier.position.x == Math.floor(modifier.position.x)) { if (modifier.position.x == Math.floor(modifier.position.x)) {
toggleOffsetButton.setIcon(AllIcons.I_BLOCK_CENTER); toggleOffsetButton.setIcon(AllIcons.I_BLOCK_CENTER);
toggleOffsetButton.setToolTip(Components.literal("Set mirror position to center of block, for uneven numbered builds.")); toggleOffsetButton.setToolTip(Components.literal("Set position to center of block, for uneven numbered builds."));
} }
else { else {
toggleOffsetButton.setIcon(AllIcons.I_BLOCK_CORNER); toggleOffsetButton.setIcon(AllIcons.I_BLOCK_CORNER);
toggleOffsetButton.setToolTip(Components.literal("Set mirror position to corner of block, for even numbered builds.")); toggleOffsetButton.setToolTip(Components.literal("Set position to corner of block, for even numbered builds."));
} }
//Axis buttons //Axis buttons
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
IconButton button = axisButtons.get(i); IconButton button = axisButtons.get(i);
if (modifier.getMirrorAxis(i)) { if (modifier.getMirrorAxis(i)) {
button.setIcon(AllIcons.I_SHOW_LINES); button.setIcon(i == 0 ? AllIcons.I_X_ON : i == 1 ? AllIcons.I_Y_ON : AllIcons.I_Z_ON);
} }
else { else {
button.setIcon(AllIcons.I_HIDE_LINES); button.setIcon(i == 0 ? AllIcons.I_X_OFF : i == 1 ? AllIcons.I_Y_OFF : AllIcons.I_Z_OFF);
} }
} }
//Show lines button //Show lines button
if (modifier.drawLines) { if (modifier.drawLines) {
showLinesButton.setIcon(AllIcons.I_SHOW_LINES); showLinesButton.setIcon(AllIcons.I_SHOW_LINES);
showLinesButton.setToolTip(Components.literal("Hide mirror lines")); showLinesButton.setToolTip(Components.literal("Showing mirror lines"));
} }
else { else {
showLinesButton.setIcon(AllIcons.I_HIDE_LINES); showLinesButton.setIcon(AllIcons.I_HIDE_LINES);
showLinesButton.setToolTip(Components.literal("Show mirror lines")); showLinesButton.setToolTip(Components.literal("Not showing mirror lines"));
} }
//Show areas button //Show areas button
if (modifier.drawPlanes) { if (modifier.drawPlanes) {
showAreasButton.setIcon(AllIcons.I_SHOW_AREAS); showAreasButton.setIcon(AllIcons.I_SHOW_AREAS);
showAreasButton.setToolTip(Components.literal("Hide mirror areas")); showAreasButton.setToolTip(Components.literal("Showing mirror areas"));
} }
else { else {
showAreasButton.setIcon(AllIcons.I_HIDE_AREAS); showAreasButton.setIcon(AllIcons.I_HIDE_AREAS);
showAreasButton.setToolTip(Components.literal("Show mirror areas")); showAreasButton.setToolTip(Components.literal("Not showing mirror areas"));
} }
} }
} }

View File

@@ -98,7 +98,7 @@ public class RadialMirrorEntry extends BaseModifierEntry<RadialMirror> {
listeners.add(slicesInput); listeners.add(slicesInput);
//Alternate //Alternate
alternateButton = new IconButton(0, 0, AllIcons.I_SHOW_AREAS) alternateButton = new IconButton(0, 0, AllIcons.I_ALTERNATE_OFF)
.withCallback(() -> { .withCallback(() -> {
modifier.alternate = !modifier.alternate; modifier.alternate = !modifier.alternate;
onValueChanged(); onValueChanged();
@@ -108,7 +108,9 @@ public class RadialMirrorEntry extends BaseModifierEntry<RadialMirror> {
//Radius //Radius
radiusInput = new LabeledScrollInput(0, 0, 27, 18) radiusInput = new LabeledScrollInput(0, 0, 27, 18)
.withRange(0, ReachHelper.getMaxMirrorRadius(Minecraft.getInstance().player)) .withRange(0, ReachHelper.getMaxMirrorRadius(Minecraft.getInstance().player))
.titled(Component.literal("Radius. Use Reach Upgrade items to increase maximum.")) .titled(Minecraft.getInstance().player.isCreative() ?
Component.literal("Radius") :
Component.literal("Radius. Use Reach Upgrade items to increase maximum."))
.calling(value -> { .calling(value -> {
modifier.radius = value; modifier.radius = value;
onValueChanged(); onValueChanged();
@@ -199,41 +201,41 @@ public class RadialMirrorEntry extends BaseModifierEntry<RadialMirror> {
//Toggle offset button //Toggle offset button
if (modifier.position.x == Math.floor(modifier.position.x)) { if (modifier.position.x == Math.floor(modifier.position.x)) {
toggleOffsetButton.setIcon(AllIcons.I_BLOCK_CENTER); toggleOffsetButton.setIcon(AllIcons.I_BLOCK_CENTER);
toggleOffsetButton.setToolTip(Components.literal("Set radialMirror position to center of block, for uneven numbered builds.")); toggleOffsetButton.setToolTip(Components.literal("Set position to center of block, for uneven numbered builds."));
} }
else { else {
toggleOffsetButton.setIcon(AllIcons.I_BLOCK_CORNER); toggleOffsetButton.setIcon(AllIcons.I_BLOCK_CORNER);
toggleOffsetButton.setToolTip(Components.literal("Set radialMirror position to corner of block, for even numbered builds.")); toggleOffsetButton.setToolTip(Components.literal("Set position to corner of block, for even numbered builds."));
} }
//Toggle alternate button //Toggle alternate button
if (modifier.alternate) { if (modifier.alternate) {
alternateButton.setIcon(AllIcons.I_SHOW_AREAS); alternateButton.setIcon(AllIcons.I_ALTERNATE_ON);
alternateButton.setToolTip(Components.literal("Alternate the direction of every other slice: Currently ON")); alternateButton.setToolTip(Components.literal("Alternating the direction of every other slice."));
} }
else { else {
alternateButton.setIcon(AllIcons.I_HIDE_AREAS); alternateButton.setIcon(AllIcons.I_ALTERNATE_OFF);
alternateButton.setToolTip(Components.literal("Alternate the direction of every other slice. Currently OFF")); alternateButton.setToolTip(Components.literal("Alternate the direction of every other slice. Currently off."));
} }
//Show lines button //Show lines button
if (modifier.drawLines) { if (modifier.drawLines) {
showLinesButton.setIcon(AllIcons.I_SHOW_LINES); showLinesButton.setIcon(AllIcons.I_SHOW_LINES);
showLinesButton.setToolTip(Components.literal("Hide radial mirror lines")); showLinesButton.setToolTip(Components.literal("Showing mirror lines"));
} }
else { else {
showLinesButton.setIcon(AllIcons.I_HIDE_LINES); showLinesButton.setIcon(AllIcons.I_HIDE_LINES);
showLinesButton.setToolTip(Components.literal("Show radial mirror lines")); showLinesButton.setToolTip(Components.literal("Not showing mirror lines"));
} }
//Show areas button //Show areas button
if (modifier.drawPlanes) { if (modifier.drawPlanes) {
showAreasButton.setIcon(AllIcons.I_SHOW_AREAS); showAreasButton.setIcon(AllIcons.I_SHOW_AREAS);
showAreasButton.setToolTip(Components.literal("Hide radial mirror areas")); showAreasButton.setToolTip(Components.literal("Showing mirror areas"));
} }
else { else {
showAreasButton.setIcon(AllIcons.I_HIDE_AREAS); showAreasButton.setIcon(AllIcons.I_HIDE_AREAS);
showAreasButton.setToolTip(Components.literal("Show radial mirror areas")); showAreasButton.setToolTip(Components.literal("Not showing mirror areas"));
} }
} }
} }

View File

@@ -1,33 +1,16 @@
package nl.requios.effortlessbuilding.render; package nl.requios.effortlessbuilding.render;
import com.mojang.blaze3d.shaders.Uniform;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat; import com.mojang.blaze3d.vertex.VertexFormat;
import net.minecraft.client.renderer.RenderStateShard; import net.minecraft.client.renderer.RenderStateShard;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.ShaderInstance;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.phys.Vec3;
import nl.requios.effortlessbuilding.EffortlessBuilding;
import java.util.OptionalDouble; import java.util.OptionalDouble;
public class BuildRenderTypes extends RenderType { public class BuildRenderTypes extends RenderType {
public static ResourceLocation shaderMaskTextureLocation = new ResourceLocation(EffortlessBuilding.MODID, "textures/shader_mask.png");
public static final RenderType LINES; public static final RenderType LINES;
public static final RenderType PLANES; public static final RenderType PLANES;
public static ShaderInstance dissolveShaderInstance;
private static final ShaderStateShard RENDERTYPE_DISSOLVE_SHADER = new ShaderStateShard(() -> dissolveShaderInstance);
//Between 0 and 7, but dont override vanilla textures
//Also update dissolve.fsh SamplerX
private static final int maskTextureIndex = 2;
static { static {
final LineStateShard LINE = new LineStateShard(OptionalDouble.of(2.0)); final LineStateShard LINE = new LineStateShard(OptionalDouble.of(2.0));
final int INITIAL_BUFFER_SIZE = 128; final int INITIAL_BUFFER_SIZE = 128;
@@ -64,69 +47,7 @@ public class BuildRenderTypes extends RenderType {
DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.TRIANGLE_STRIP, INITIAL_BUFFER_SIZE, false, false, renderState); DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.TRIANGLE_STRIP, INITIAL_BUFFER_SIZE, false, false, renderState);
} }
// Dummy constructor needed to make java happy
public BuildRenderTypes(String p_173178_, VertexFormat p_173179_, VertexFormat.Mode p_173180_, int p_173181_, boolean p_173182_, boolean p_173183_, Runnable p_173184_, Runnable p_173185_) { public BuildRenderTypes(String p_173178_, VertexFormat p_173179_, VertexFormat.Mode p_173180_, int p_173181_, boolean p_173182_, boolean p_173183_, Runnable p_173184_, Runnable p_173185_) {
super(p_173178_, p_173179_, p_173180_, p_173181_, p_173182_, p_173183_, p_173184_, p_173185_); super(p_173178_, p_173179_, p_173180_, p_173181_, p_173182_, p_173183_, p_173184_, p_173185_);
} }
public static RenderType getBlockPreviewRenderType(float dissolve, BlockPos blockPos, BlockPos firstPos, BlockPos secondPos, boolean red) {
String stateName = "eb_texturing_" + dissolve + "_" + blockPos + "_" + firstPos + "_" + secondPos + "_" + red;
TexturingStateShard MY_TEXTURING = new TexturingStateShard(stateName, () -> {
setShaderParameters(dissolveShaderInstance, dissolve, Vec3.atLowerCornerOf(blockPos), Vec3.atLowerCornerOf(firstPos), Vec3.atLowerCornerOf(secondPos), blockPos == secondPos, red);
RenderSystem.setShaderColor(1f, 1f, 1f, 0.8f);
}, () -> {});
RenderType.CompositeState renderState = RenderType.CompositeState.builder()
.setShaderState(RENDERTYPE_DISSOLVE_SHADER)
.setTexturingState(MY_TEXTURING)
.setTextureState(RenderStateShard.BLOCK_SHEET_MIPPED)
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
.setLightmapState(RenderStateShard.NO_LIGHTMAP)
.setCullState(RenderStateShard.CULL)
.setOutputState(RenderStateShard.TRANSLUCENT_TARGET)
.createCompositeState(true);
//Unique name for every combination, otherwise it will reuse the previous one
String name = "eb_block_previews_" + dissolve + "_" + blockPos + "_" + firstPos + "_" + secondPos + "_" + red;
return RenderType.create(name,
DefaultVertexFormat.BLOCK, VertexFormat.Mode.QUADS, 2097152, true, true, renderState);
}
private static void setShaderParameters(ShaderInstance shader, final float dissolve, final Vec3 blockpos,
final Vec3 firstpos, final Vec3 secondpos,
final boolean highlight, final boolean red) {
Uniform percentileUniform = shader.getUniform("dissolve");
Uniform highlightUniform = shader.getUniform("highlight");
Uniform redUniform = shader.getUniform("red");
Uniform blockposUniform = shader.getUniform("blockpos");
Uniform firstposUniform = shader.getUniform("firstpos");
Uniform secondposUniform = shader.getUniform("secondpos");
RenderSystem.setShaderTexture(maskTextureIndex, shaderMaskTextureLocation);
if (percentileUniform != null) percentileUniform.set(dissolve); else EffortlessBuilding.log("percentileUniform is null");
if (highlightUniform != null) highlightUniform.set(highlight ? 1 : 0); else EffortlessBuilding.log("highlightUniform is null");
if (redUniform != null) redUniform.set(red ? 1 : 0); else EffortlessBuilding.log("redUniform is null");
if (blockposUniform != null) blockposUniform.set((float) blockpos.x, (float) blockpos.y, (float) blockpos.z); else EffortlessBuilding.log("blockposUniform is null");
if (firstposUniform != null) firstposUniform.set((float) firstpos.x, (float) firstpos.y, (float) firstpos.z); else EffortlessBuilding.log("firstposUniform is null");
if (secondposUniform != null) secondposUniform.set((float) secondpos.x, (float) secondpos.y, (float) secondpos.z); else EffortlessBuilding.log("secondposUniform is null");
}
private class ShaderInfo {
float dissolve;
Vec3 blockPos;
Vec3 firstPos;
Vec3 secondPos;
boolean red;
public ShaderInfo(float dissolve, Vec3 blockPos, Vec3 firstPos, Vec3 secondPos, boolean red) {
this.dissolve = dissolve;
this.blockPos = blockPos;
this.firstPos = firstPos;
this.secondPos = secondPos;
this.red = red;
}
}
} }

View File

@@ -2,165 +2,181 @@ package nl.requios.effortlessbuilding.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource.BufferSource;
import com.mojang.math.Matrix4f; import com.mojang.math.Matrix4f;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import nl.requios.effortlessbuilding.EffortlessBuildingClient;
import nl.requios.effortlessbuilding.buildmodifier.BaseModifier;
import nl.requios.effortlessbuilding.buildmodifier.Mirror; import nl.requios.effortlessbuilding.buildmodifier.Mirror;
import nl.requios.effortlessbuilding.buildmodifier.RadialMirror; import nl.requios.effortlessbuilding.buildmodifier.RadialMirror;
import java.awt.*; import java.awt.*;
import java.util.List;
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public class ModifierRenderer { public class ModifierRenderer {
// protected static final Color colorX = new Color(255, 72, 52); protected static final Color colorX = new Color(255, 72, 52);
// protected static final Color colorY = new Color(67, 204, 51); protected static final Color colorY = new Color(67, 204, 51);
// protected static final Color colorZ = new Color(52, 247, 255); protected static final Color colorZ = new Color(52, 247, 255);
// protected static final Color colorRadial = new Color(52, 247, 255); protected static final Color colorRadial = new Color(52, 247, 255);
// protected static final int lineAlpha = 200; protected static final int lineAlpha = 200;
// protected static final int planeAlpha = 50; protected static final int planeAlpha = 50;
// protected static final Vec3 epsilon = new Vec3(0.001, 0.001, 0.001); //prevents z-fighting protected static final Vec3 epsilon = new Vec3(0.001, 0.001, 0.001); //prevents z-fighting
//
// public static void render(PoseStack matrixStack, MultiBufferSource.BufferSource renderTypeBuffer, ModifierSettingsManager.ModifierSettings modifierSettings) { public static void render(PoseStack ms, BufferSource buffer) {
// //Mirror lines and areas List<BaseModifier> modifierSettingsList = EffortlessBuildingClient.BUILD_MODIFIERS.getModifierSettingsList();
// Mirror.MirrorSettings m = modifierSettings.getMirrorSettings();
// if (m != null && m.enabled && (m.mirrorX || m.mirrorY || m.mirrorZ)) { for (BaseModifier modifierSettings : modifierSettingsList) {
// Vec3 pos = m.position.add(epsilon); if (modifierSettings == null) continue;
// int radius = m.radius; if (modifierSettings instanceof Mirror) {
// renderMirror(ms, buffer, (Mirror) modifierSettings);
// if (m.mirrorX) { } else if (modifierSettings instanceof RadialMirror) {
// Vec3 posA = new Vec3(pos.x, pos.y - radius, pos.z - radius); renderRadialMirror(ms, buffer, (RadialMirror) modifierSettings);
// Vec3 posB = new Vec3(pos.x, pos.y + radius, pos.z + radius); }
// }
// drawMirrorPlane(matrixStack, renderTypeBuffer, posA, posB, colorX, m.drawLines, m.drawPlanes, true); }
// }
// if (m.mirrorY) { //Mirror lines and areas
// Vec3 posA = new Vec3(pos.x - radius, pos.y, pos.z - radius); private static void renderMirror(PoseStack ms, BufferSource buffer, Mirror m) {
// Vec3 posB = new Vec3(pos.x + radius, pos.y, pos.z + radius);
// if (m != null && m.enabled && (m.mirrorX || m.mirrorY || m.mirrorZ)) {
// drawMirrorPlaneY(matrixStack, renderTypeBuffer, posA, posB, colorY, m.drawLines, m.drawPlanes); Vec3 pos = m.position.add(epsilon);
// } int radius = m.radius;
// if (m.mirrorZ) {
// Vec3 posA = new Vec3(pos.x - radius, pos.y - radius, pos.z); if (m.mirrorX) {
// Vec3 posB = new Vec3(pos.x + radius, pos.y + radius, pos.z); Vec3 posA = new Vec3(pos.x, pos.y - radius, pos.z - radius);
// Vec3 posB = new Vec3(pos.x, pos.y + radius, pos.z + radius);
// drawMirrorPlane(matrixStack, renderTypeBuffer, posA, posB, colorZ, m.drawLines, m.drawPlanes, true);
// } drawMirrorPlane(ms, buffer, posA, posB, colorX, m.drawLines, m.drawPlanes, true);
// }
// //Draw axis coordinated colors if two or more axes are enabled if (m.mirrorY) {
// //(If only one is enabled the lines are that planes color) Vec3 posA = new Vec3(pos.x - radius, pos.y, pos.z - radius);
// if (m.drawLines && ((m.mirrorX && m.mirrorY) || (m.mirrorX && m.mirrorZ) || (m.mirrorY && m.mirrorZ))) { Vec3 posB = new Vec3(pos.x + radius, pos.y, pos.z + radius);
// drawMirrorLines(matrixStack, renderTypeBuffer, m);
// } drawMirrorPlaneY(ms, buffer, posA, posB, colorY, m.drawLines, m.drawPlanes);
// } }
// if (m.mirrorZ) {
// //Radial mirror lines and areas Vec3 posA = new Vec3(pos.x - radius, pos.y - radius, pos.z);
// RadialMirror.RadialMirrorSettings r = modifierSettings.getRadialMirrorSettings(); Vec3 posB = new Vec3(pos.x + radius, pos.y + radius, pos.z);
// if (r != null && r.enabled) {
// Vec3 pos = r.position.add(epsilon); drawMirrorPlane(ms, buffer, posA, posB, colorZ, m.drawLines, m.drawPlanes, true);
// int radius = r.radius; }
//
// float angle = 2f * ((float) Math.PI) / r.slices; //Draw axis coordinated colors if two or more axes are enabled
// Vec3 relStartVec = new Vec3(radius, 0, 0); //(If only one is enabled the lines are that planes color)
// if (r.slices % 4 == 2) relStartVec = relStartVec.yRot(angle / 2f); if (m.drawLines && ((m.mirrorX && m.mirrorY) || (m.mirrorX && m.mirrorZ) || (m.mirrorY && m.mirrorZ))) {
// drawMirrorLines(ms, buffer, m);
// for (int i = 0; i < r.slices; i++) { }
// Vec3 relNewVec = relStartVec.yRot(angle * i); }
// Vec3 newVec = pos.add(relNewVec); }
//
// Vec3 posA = new Vec3(pos.x, pos.y - radius, pos.z); //Radial mirror lines and areas
// Vec3 posB = new Vec3(newVec.x, pos.y + radius, newVec.z); private static void renderRadialMirror(PoseStack ms, BufferSource buffer, RadialMirror r) {
// drawMirrorPlane(matrixStack, renderTypeBuffer, posA, posB, colorRadial, r.drawLines, r.drawPlanes, false);
// } if (r != null && r.enabled) {
// } Vec3 pos = r.position.add(epsilon);
// } int radius = r.radius;
//
// float angle = 2f * ((float) Math.PI) / r.slices;
// //----Mirror---- Vec3 relStartVec = new Vec3(radius, 0, 0);
// if (r.slices % 4 == 2) relStartVec = relStartVec.yRot(angle / 2f);
// protected static void drawMirrorPlane(PoseStack matrixStack, MultiBufferSource.BufferSource renderTypeBuffer, Vec3 posA, Vec3 posB, Color c, boolean drawLines, boolean drawPlanes, boolean drawVerticalLines) {
// for (int i = 0; i < r.slices; i++) {
//// GL11.glColor4d(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha); Vec3 relNewVec = relStartVec.yRot(angle * i);
// Matrix4f matrixPos = matrixStack.last().pose(); Vec3 newVec = pos.add(relNewVec);
//
// if (drawPlanes) { Vec3 posA = new Vec3(pos.x, pos.y - radius, pos.z);
// VertexConsumer buffer = RenderHandler.beginPlanes(renderTypeBuffer); Vec3 posB = new Vec3(newVec.x, pos.y + radius, newVec.z);
// drawMirrorPlane(ms, buffer, posA, posB, colorRadial, r.drawLines, r.drawPlanes, false);
// buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex(); }
// buffer.vertex(matrixPos, (float) posA.x, (float) posB.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex(); }
// buffer.vertex(matrixPos, (float) posB.x, (float) posA.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex(); }
// buffer.vertex(matrixPos, (float) posB.x, (float) posB.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// //backface (using triangle strip) protected static void drawMirrorPlane(PoseStack ms, BufferSource renderTypeBuffer, Vec3 posA, Vec3 posB, Color c, boolean drawLines, boolean drawPlanes, boolean drawVerticalLines) {
// buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// buffer.vertex(matrixPos, (float) posA.x, (float) posB.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex(); // GL11.glColor4d(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha);
// Matrix4f matrixPos = ms.last().pose();
// RenderHandler.endPlanes(renderTypeBuffer);
// } if (drawPlanes) {
// VertexConsumer buffer = RenderHandler.beginPlanes(renderTypeBuffer);
// if (drawLines) {
// VertexConsumer buffer = RenderHandler.beginLines(renderTypeBuffer); buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// buffer.vertex(matrixPos, (float) posA.x, (float) posB.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// Vec3 middle = posA.add(posB).scale(0.5); buffer.vertex(matrixPos, (float) posB.x, (float) posA.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// buffer.vertex(matrixPos, (float) posA.x, (float) middle.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex(); buffer.vertex(matrixPos, (float) posB.x, (float) posB.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// buffer.vertex(matrixPos, (float) posB.x, (float) middle.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex(); //backface (using triangle strip)
// if (drawVerticalLines) { buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// buffer.vertex(matrixPos, (float) middle.x, (float) posA.y, (float) middle.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex(); buffer.vertex(matrixPos, (float) posA.x, (float) posB.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// buffer.vertex(matrixPos, (float) middle.x, (float) posB.y, (float) middle.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex();
// } RenderHandler.endPlanes(renderTypeBuffer);
// }
// RenderHandler.endLines(renderTypeBuffer);
// } if (drawLines) {
// } VertexConsumer buffer = RenderHandler.beginLines(renderTypeBuffer);
//
// protected static void drawMirrorPlaneY(PoseStack matrixStack, MultiBufferSource.BufferSource renderTypeBuffer, Vec3 posA, Vec3 posB, Color c, boolean drawLines, boolean drawPlanes) { Vec3 middle = posA.add(posB).scale(0.5);
// buffer.vertex(matrixPos, (float) posA.x, (float) middle.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex();
//// GL11.glColor4d(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()); buffer.vertex(matrixPos, (float) posB.x, (float) middle.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex();
// Matrix4f matrixPos = matrixStack.last().pose(); if (drawVerticalLines) {
// buffer.vertex(matrixPos, (float) middle.x, (float) posA.y, (float) middle.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex();
// if (drawPlanes) { buffer.vertex(matrixPos, (float) middle.x, (float) posB.y, (float) middle.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex();
// VertexConsumer buffer = RenderHandler.beginPlanes(renderTypeBuffer); }
//
// buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex(); RenderHandler.endLines(renderTypeBuffer);
// buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex(); }
// buffer.vertex(matrixPos, (float) posB.x, (float) posA.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex(); }
// buffer.vertex(matrixPos, (float) posB.x, (float) posA.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// //backface (using triangle strip) protected static void drawMirrorPlaneY(PoseStack matrixStack, BufferSource renderTypeBuffer, Vec3 posA, Vec3 posB, Color c, boolean drawLines, boolean drawPlanes) {
// buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex(); // GL11.glColor4d(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha());
// Matrix4f matrixPos = matrixStack.last().pose();
// RenderHandler.endPlanes(renderTypeBuffer);
// } if (drawPlanes) {
// VertexConsumer buffer = RenderHandler.beginPlanes(renderTypeBuffer);
// if (drawLines) {
// VertexConsumer buffer = RenderHandler.beginLines(renderTypeBuffer); buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// Vec3 middle = posA.add(posB).scale(0.5); buffer.vertex(matrixPos, (float) posB.x, (float) posA.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// buffer.vertex(matrixPos, (float) middle.x, (float) middle.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex(); buffer.vertex(matrixPos, (float) posB.x, (float) posA.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// buffer.vertex(matrixPos, (float) middle.x, (float) middle.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex(); //backface (using triangle strip)
// buffer.vertex(matrixPos, (float) posA.x, (float) middle.y, (float) middle.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex(); buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
// buffer.vertex(matrixPos, (float) posB.x, (float) middle.y, (float) middle.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex(); buffer.vertex(matrixPos, (float) posA.x, (float) posA.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), planeAlpha).endVertex();
//
// RenderHandler.endLines(renderTypeBuffer); RenderHandler.endPlanes(renderTypeBuffer);
// } }
// }
// if (drawLines) {
// protected static void drawMirrorLines(PoseStack matrixStack, MultiBufferSource.BufferSource renderTypeBuffer, Mirror.MirrorSettings m) { VertexConsumer buffer = RenderHandler.beginLines(renderTypeBuffer);
//
//// GL11.glColor4d(100, 100, 100, 255); Vec3 middle = posA.add(posB).scale(0.5);
// VertexConsumer buffer = RenderHandler.beginLines(renderTypeBuffer); buffer.vertex(matrixPos, (float) middle.x, (float) middle.y, (float) posA.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex();
// Matrix4f matrixPos = matrixStack.last().pose(); buffer.vertex(matrixPos, (float) middle.x, (float) middle.y, (float) posB.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex();
// buffer.vertex(matrixPos, (float) posA.x, (float) middle.y, (float) middle.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex();
// Vec3 pos = m.position.add(epsilon); buffer.vertex(matrixPos, (float) posB.x, (float) middle.y, (float) middle.z).color(c.getRed(), c.getGreen(), c.getBlue(), lineAlpha).endVertex();
//
// buffer.vertex(matrixPos, (float) pos.x - m.radius, (float) pos.y, (float) pos.z).color(colorX.getRed(), colorX.getGreen(), colorX.getBlue(), lineAlpha).endVertex(); RenderHandler.endLines(renderTypeBuffer);
// buffer.vertex(matrixPos, (float) pos.x + m.radius, (float) pos.y, (float) pos.z).color(colorX.getRed(), colorX.getGreen(), colorX.getBlue(), lineAlpha).endVertex(); }
// buffer.vertex(matrixPos, (float) pos.x, (float) pos.y - m.radius, (float) pos.z).color(colorY.getRed(), colorY.getGreen(), colorY.getBlue(), lineAlpha).endVertex(); }
// buffer.vertex(matrixPos, (float) pos.x, (float) pos.y + m.radius, (float) pos.z).color(colorY.getRed(), colorY.getGreen(), colorY.getBlue(), lineAlpha).endVertex();
// buffer.vertex(matrixPos, (float) pos.x, (float) pos.y, (float) pos.z - m.radius).color(colorZ.getRed(), colorZ.getGreen(), colorZ.getBlue(), lineAlpha).endVertex(); protected static void drawMirrorLines(PoseStack matrixStack, BufferSource renderTypeBuffer, Mirror m) {
// buffer.vertex(matrixPos, (float) pos.x, (float) pos.y, (float) pos.z + m.radius).color(colorZ.getRed(), colorZ.getGreen(), colorZ.getBlue(), lineAlpha).endVertex();
// // GL11.glColor4d(100, 100, 100, 255);
// RenderHandler.endLines(renderTypeBuffer); VertexConsumer buffer = RenderHandler.beginLines(renderTypeBuffer);
// } Matrix4f matrixPos = matrixStack.last().pose();
Vec3 pos = m.position.add(epsilon);
buffer.vertex(matrixPos, (float) pos.x - m.radius, (float) pos.y, (float) pos.z).color(colorX.getRed(), colorX.getGreen(), colorX.getBlue(), lineAlpha).endVertex();
buffer.vertex(matrixPos, (float) pos.x + m.radius, (float) pos.y, (float) pos.z).color(colorX.getRed(), colorX.getGreen(), colorX.getBlue(), lineAlpha).endVertex();
buffer.vertex(matrixPos, (float) pos.x, (float) pos.y - m.radius, (float) pos.z).color(colorY.getRed(), colorY.getGreen(), colorY.getBlue(), lineAlpha).endVertex();
buffer.vertex(matrixPos, (float) pos.x, (float) pos.y + m.radius, (float) pos.z).color(colorY.getRed(), colorY.getGreen(), colorY.getBlue(), lineAlpha).endVertex();
buffer.vertex(matrixPos, (float) pos.x, (float) pos.y, (float) pos.z - m.radius).color(colorZ.getRed(), colorZ.getGreen(), colorZ.getBlue(), lineAlpha).endVertex();
buffer.vertex(matrixPos, (float) pos.x, (float) pos.y, (float) pos.z + m.radius).color(colorZ.getRed(), colorZ.getGreen(), colorZ.getBlue(), lineAlpha).endVertex();
RenderHandler.endLines(renderTypeBuffer);
}
} }

View File

@@ -29,24 +29,21 @@ public class RenderHandler {
public static void onRender(RenderLevelStageEvent event) { public static void onRender(RenderLevelStageEvent event) {
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_TRANSLUCENT_BLOCKS) return; if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_TRANSLUCENT_BLOCKS) return;
// Vec3 cameraPos = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition(); Vec3 cameraPos = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition();
//
PoseStack ms = event.getPoseStack();
// BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
// MultiBufferSource.BufferSource buffer = MultiBufferSource.immediate(bufferBuilder);
//
// Player player = Minecraft.getInstance().player;
// ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player);
//
// ms.pushPose();
// ms.translate(-cameraPos.x, -cameraPos.y, -cameraPos.z);
//
// //Mirror and radial mirror lines and areas
// ModifierRenderer.render(ms, buffer, modifierSettings);
//
// ms.popPose();
renderSubText(ms); PoseStack ms = event.getPoseStack();
BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
MultiBufferSource.BufferSource buffer = MultiBufferSource.immediate(bufferBuilder);
ms.pushPose();
ms.translate(-cameraPos.x, -cameraPos.y, -cameraPos.z);
//Mirror and radial mirror lines and areas
ModifierRenderer.render(ms, buffer);
ms.popPose();
// renderSubText(ms);
} }
@SubscribeEvent @SubscribeEvent

View File

@@ -1,105 +0,0 @@
#version 150
#moj_import <fog.glsl>
uniform sampler2D Sampler0;
uniform sampler2D Sampler2;
uniform float GameTime;
uniform vec4 ColorModulator;
uniform float FogStart;
uniform float FogEnd;
uniform vec4 FogColor;
uniform float dissolve; // Passed in via Callback
uniform int highlight;
uniform int red;
uniform vec3 blockpos;
uniform vec3 firstpos;
uniform vec3 secondpos;
in vec3 vertexPosition;
in float vertexDistance;
in vec4 vertexColor;
in vec2 texCoord0;
in vec4 normal;
out vec4 fragColor;
void main() {
//convert gametime to seconds (roughly)
float time = GameTime * 1200;
vec3 pixelposition = floor(vertexPosition * 8.0) / 8.0;
vec3 worldpos = blockpos + pixelposition.xyz;
vec4 texcolor = texture(Sampler0, texCoord0) * vertexColor * ColorModulator;
vec4 color = texcolor;
vec3 firstposc = firstpos + 0.51; //center in block
vec3 secondposc = secondpos + 0.5;
//find place in between first and second pos
float firstToSecond = length(secondposc - firstposc);
float place = 0.0;
if (firstToSecond > 0.5) {
float placeFromFirst = length(worldpos - firstposc) / firstToSecond;
float placeFromSecond = length(worldpos - secondposc) / firstToSecond;
place = (placeFromFirst + (1.0 - placeFromSecond)) / 2.0;
} //else only one block
//find 2d texture coordinate for noise texture based on world position
vec2 maskcoord = vec2(worldpos.y, worldpos.z);
if (abs(normal.y) > 0.5)
maskcoord = vec2(worldpos.x, worldpos.z);
if (abs(normal.z) > 0.5)
maskcoord = vec2(worldpos.x, worldpos.y);
maskcoord /= 20.0;
vec4 maskColor = texture(Sampler2, maskcoord);
float maskgs = maskColor.r;
color.rgb *= vertexColor.rgb;
//desaturate
color.rgb *= vec3(0.8);
//add blueish hue
color.rgb += vec3(-0.1, 0.0, 0.2);
//add pulsing blue
float pulse = (sin(time * 4.0) + 1.0) / 2.0;
color.rgb += 0.4 * vec3(-0.5, 0.2, 0.6) * pulse;
//add diagonal highlights
float diagTime = mod(time / 2.0, 1.4) - 0.2;
float diag = smoothstep(diagTime - 0.2, diagTime, place) - smoothstep(diagTime, diagTime + 0.2, place);
color.rgb += 0.2 * diag * vec3(0.0, 0.2, 0.4);
float diagTime2 = mod(time / 3.5, 1.4) - 0.2;
float diag2 = smoothstep(diagTime2 - 0.2, diagTime2, place) - smoothstep(diagTime2, diagTime2 + 0.2, place);
color.rgb += 0.2 * diag2 * vec3(0.0, 0.4, 0.8);
//add flat shading
// if (abs(normal.x) > 0.5)
// color.rgb -= 0.0;
if (abs(normal.y) > 0.5)
color.rgb += 0.05;
if (abs(normal.z) > 0.5)
color.rgb -= 0.05;
if (highlight == 1 && dissolve == 0.0) {
color.rgb += vec3(0.0, 0.1, -0.2);
}
if (red == 1) {
color.rgb += vec3(0.4, -0.3, -0.5);
}
color.r = max(0, min(1, color.r));
color.g = max(0, min(1, color.g));
color.b = max(0, min(1, color.b));
if (maskgs * 0.3 + place * 0.7 <= dissolve)
fragColor = vec4(texcolor.rgb, 0.0);
else fragColor = linear_fog(color, vertexDistance, FogStart, FogEnd, FogColor);
}

View File

@@ -1,37 +0,0 @@
{
"blend": {
"func": "add",
"srcrgb": "srcalpha",
"dstrgb": "1-srcalpha"
},
"vertex": "effortlessbuilding:dissolve",
"fragment": "effortlessbuilding:dissolve",
"attributes": [
"Position",
"Color",
"UV0",
"UV2",
"Normal"
],
"samplers": [
{ "name": "Sampler0" },
{ "name": "Sampler2" }
],
"uniforms": [
{ "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "ChunkOffset", "type": "float", "count": 3, "values": [ 0.0, 0.0, 0.0 ] },
{ "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] },
{ "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] },
{ "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] },
{ "name": "FogColor", "type": "float", "count": 4, "values": [ 0.0, 0.0, 0.0, 0.0 ] },
{ "name": "GameTime", "type": "float", "count": 1, "values": [ 0.0 ] },
{ "name": "dissolve", "type": "float", "count": 1, "values": [0.0] },
{ "name": "highlight", "type": "int", "count": 1, "values": [0] },
{ "name": "red", "type": "int", "count": 1, "values": [0] },
{ "name": "blockpos", "type": "float", "count": 3, "values": [0.0, 0.0, 0.0] },
{ "name": "firstpos", "type": "float", "count": 3, "values": [0.0, 0.0, 0.0] },
{ "name": "secondpos", "type": "float", "count": 3, "values": [0.0, 0.0, 0.0] }
]
}

View File

@@ -1,31 +0,0 @@
#version 150
#moj_import <light.glsl>
in vec3 Position;
in vec4 Color;
in vec2 UV0;
in ivec2 UV2;
in vec3 Normal;
uniform sampler2D Sampler2;
uniform mat4 ModelViewMat;
uniform mat4 ProjMat;
uniform vec3 ChunkOffset;
out vec3 vertexPosition;
out float vertexDistance;
out vec4 vertexColor;
out vec2 texCoord0;
out vec4 normal;
void main() {
gl_Position = ProjMat * ModelViewMat * vec4(Position + ChunkOffset, 1.0);
vertexPosition = gl_Position.xyz;
vertexDistance = length((ModelViewMat * vec4(Position + ChunkOffset, 1.0)).xyz);
vertexColor = Color;
texCoord0 = UV0;
normal = ProjMat * ModelViewMat * vec4(Normal, 0.0);
}

View File

@@ -1,24 +0,0 @@
#version 150
#moj_import <fog.glsl>
uniform sampler2D Sampler0;
uniform vec4 ColorModulator;
uniform float FogStart;
uniform float FogEnd;
uniform vec4 FogColor;
in float vertexDistance;
in vec4 vertexColor;
in vec4 lightMapColor;
in vec2 texCoord0;
in vec4 normal;
out vec4 fragColor;
void main() {
vec4 color = texture(Sampler0, texCoord0) * vertexColor * ColorModulator;
color *= lightMapColor;
fragColor = linear_fog(color, vertexDistance, FogStart, FogEnd, FogColor);
}

View File

@@ -1,31 +0,0 @@
{
"blend": {
"func": "add",
"srcrgb": "srcalpha",
"dstrgb": "1-srcalpha"
},
"vertex": "effortlessbuilding:glowing_shader",
"fragment": "effortlessbuilding:glowing_shader",
"attributes": [
"Position",
"Color",
"UV0",
"UV1",
"UV2",
"Normal"
],
"samplers": [
{ "name": "Sampler0" },
{ "name": "Sampler2" }
],
"uniforms": [
{ "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "IViewRotMat", "type": "matrix3x3", "count": 9, "values": [ 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] },
{ "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] },
{ "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] },
{ "name": "FogColor", "type": "float", "count": 4, "values": [ 0.0, 0.0, 0.0, 0.0 ] },
{ "name": "FogShape", "type": "int", "count": 1, "values": [ 0 ] }
]
}

View File

@@ -1,36 +0,0 @@
#version 150
#moj_import <fog.glsl>
in vec3 Position;
in vec4 Color;
in vec2 UV0;
in vec2 UV1;
in ivec2 UV2;
in vec3 Normal;
uniform sampler2D Sampler1;
uniform sampler2D Sampler2;
uniform mat4 ModelViewMat;
uniform mat4 ProjMat;
uniform mat3 IViewRotMat;
uniform int FogShape;
out float vertexDistance;
out vec4 vertexColor;
out vec4 lightMapColor;
out vec2 texCoord0;
out vec2 texCoord1;
out vec4 normal;
void main() {
gl_Position = ProjMat * ModelViewMat * vec4(Position, 1.0);
vertexDistance = fog_distance(ModelViewMat, IViewRotMat * Position, FogShape);
vertexColor = Color;
lightMapColor = texelFetch(Sampler2, UV2 / 16, 0);
texCoord0 = UV0;
texCoord1 = UV1;
normal = ProjMat * ModelViewMat * vec4(Normal, 0.0);
}

View File

@@ -1,15 +0,0 @@
#version 120
uniform sampler2D bgl_RenderedTexture;
void main() {
vec2 texcoord = vec2(gl_TexCoord[0]);
vec4 color = texture2D(bgl_RenderedTexture, texcoord);
float r = color.b * gl_Color.r;
float g = color.g * gl_Color.g;
float b = color.r * gl_Color.b;
float a = color.a * gl_Color.a;
gl_FragColor = vec4(r, g, b, a);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB