mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-01-28 22:05:01 +01:00
Integrated BogeyRenderer To BogeyInstance (Also Corrected Rendering In Contraption)
This commit is contained in:
parent
4a82fcbca1
commit
9ded16fbab
2 changed files with 41 additions and 197 deletions
|
@ -41,12 +41,20 @@ import java.util.Set;
|
||||||
* overriden methods for each size
|
* overriden methods for each size
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Seperate From BogeyInstance So It Can Be Used Inworld
|
||||||
|
|
||||||
public abstract class BogeyRenderer {
|
public abstract class BogeyRenderer {
|
||||||
Map<BogeySize, Renderer> renderers = new EnumMap<>(BogeySize.class);
|
Map<BogeySize, Renderer> renderers = new EnumMap<>(BogeySize.class);
|
||||||
Map<PartialModel, ModelData[]> contraptionModelData = new HashMap<>();
|
Map<PartialModel, ModelData[]> contraptionModelData = new HashMap<>();
|
||||||
|
|
||||||
public Transform<?>[] getTransformsFromPartial(PartialModel model, boolean inContraption, int size) {
|
public Transform<?>[] getTransformsFromPartial(PartialModel model, PoseStack ms, boolean inContraption, int size) {
|
||||||
return inContraption ? contraptionModelData.get(model) : createModelData(model, size);
|
return (inContraption) ? transformContraptionModelData(model, ms) : createModelData(model, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Transform<?>[] transformContraptionModelData(PartialModel model, PoseStack ms) {
|
||||||
|
ModelData[] modelData = contraptionModelData.get(model);
|
||||||
|
Arrays.stream(modelData).forEach(modelDataElement -> modelDataElement.setTransform(ms));
|
||||||
|
return modelData;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Transform<?>[] createModelData(PartialModel model, int size) {
|
private Transform<?>[] createModelData(PartialModel model, int size) {
|
||||||
|
@ -57,9 +65,10 @@ public abstract class BogeyRenderer {
|
||||||
.toArray(SuperByteBuffer[]::new);
|
.toArray(SuperByteBuffer[]::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Transform<?> getTransformFromPartial(PartialModel model, boolean inContraption) {
|
public Transform<?> getTransformFromPartial(PartialModel model, PoseStack ms, boolean inContraption) {
|
||||||
BlockState air = Blocks.AIR.defaultBlockState();
|
BlockState air = Blocks.AIR.defaultBlockState();
|
||||||
return inContraption ? contraptionModelData.get(model)[0]
|
System.out.println(CachedBufferer.partial(model, air));
|
||||||
|
return inContraption ? contraptionModelData.get(model)[0].setTransform(ms)
|
||||||
: CachedBufferer.partial(model, air);
|
: CachedBufferer.partial(model, air);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,6 +112,12 @@ public abstract class BogeyRenderer {
|
||||||
return renderers.keySet();
|
return renderers.keySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void emptyTransforms() {
|
||||||
|
for (ModelData[] data : contraptionModelData.values())
|
||||||
|
for (ModelData model : data)
|
||||||
|
model.setEmptyTransform();
|
||||||
|
}
|
||||||
|
|
||||||
public void updateLight(int blockLight, int skyLight) {
|
public void updateLight(int blockLight, int skyLight) {
|
||||||
for (ModelData[] data : contraptionModelData.values())
|
for (ModelData[] data : contraptionModelData.values())
|
||||||
for (ModelData model : data)
|
for (ModelData model : data)
|
||||||
|
|
|
@ -6,230 +6,59 @@ import com.jozufozu.flywheel.core.Materials;
|
||||||
import com.jozufozu.flywheel.core.materials.model.ModelData;
|
import com.jozufozu.flywheel.core.materials.model.ModelData;
|
||||||
import com.jozufozu.flywheel.util.AnimationTickHolder;
|
import com.jozufozu.flywheel.util.AnimationTickHolder;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
import com.simibubi.create.AllBlockPartials;
|
import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock;
|
import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock;
|
||||||
|
import com.simibubi.create.content.logistics.trains.BogeyRenderer;
|
||||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
import com.simibubi.create.foundation.utility.Iterate;
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.world.level.BlockAndTintGetter;
|
import net.minecraft.world.level.BlockAndTintGetter;
|
||||||
import net.minecraft.world.level.LightLayer;
|
import net.minecraft.world.level.LightLayer;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
public sealed class BogeyInstance {
|
import java.util.EnumMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public abstract class BogeyInstance {
|
||||||
|
|
||||||
public final CarriageBogey bogey;
|
public final CarriageBogey bogey;
|
||||||
private final ModelData[] shafts;
|
public final BogeyRenderer renderer;
|
||||||
|
private final BogeyRenderer.BogeySize size;
|
||||||
|
|
||||||
protected BogeyInstance(CarriageBogey bogey, MaterialManager materialManager) {
|
public BogeyInstance(CarriageBogey bogey, BogeyRenderer renderer, BogeyRenderer.BogeySize size, MaterialManager materialManager) {
|
||||||
this.bogey = bogey;
|
this.bogey = bogey;
|
||||||
|
this.renderer = renderer;
|
||||||
|
this.size = size;
|
||||||
|
|
||||||
shafts = new ModelData[2];
|
renderer.initialiseContraptionModelData(materialManager, size);
|
||||||
|
|
||||||
materialManager.defaultSolid()
|
|
||||||
.material(Materials.TRANSFORMED)
|
|
||||||
.getModel(AllBlocks.SHAFT.getDefaultState()
|
|
||||||
.setValue(ShaftBlock.AXIS, Direction.Axis.Z))
|
|
||||||
.createInstances(shafts);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void remove() {
|
protected void hiddenFrame() {
|
||||||
for (ModelData shaft : shafts)
|
|
||||||
shaft.delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void hiddenFrame() {
|
|
||||||
beginFrame(0, null);
|
beginFrame(0, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void beginFrame(float wheelAngle, PoseStack ms) {
|
public void beginFrame(float wheelAngle, PoseStack ms) {
|
||||||
if (ms == null) {
|
if (ms == null) {
|
||||||
for (int i : Iterate.zeroAndOne)
|
renderer.emptyTransforms();
|
||||||
shafts[i].setEmptyTransform();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i : Iterate.zeroAndOne)
|
renderer.render(new CompoundTag(), wheelAngle, ms, this.size);
|
||||||
shafts[i].setTransform(ms)
|
};
|
||||||
.translate(-.5f, .25f, i * -1)
|
|
||||||
.centre()
|
|
||||||
.rotateZ(wheelAngle)
|
|
||||||
.unCentre();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateLight(BlockAndTintGetter world, CarriageContraptionEntity entity) {
|
public void updateLight(BlockAndTintGetter world, CarriageContraptionEntity entity) {
|
||||||
var lightPos = new BlockPos(getLightPos(entity));
|
var lightPos = new BlockPos(getLightPos(entity));
|
||||||
|
renderer.updateLight(world.getBrightness(LightLayer.BLOCK, lightPos),
|
||||||
updateLight(world.getBrightness(LightLayer.BLOCK, lightPos), world.getBrightness(LightLayer.SKY, lightPos));
|
world.getBrightness(LightLayer.SKY, lightPos));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vec3 getLightPos(CarriageContraptionEntity entity) {
|
private Vec3 getLightPos(CarriageContraptionEntity entity) {
|
||||||
if (bogey.getAnchorPosition() != null) {
|
return bogey.getAnchorPosition() != null ? bogey.getAnchorPosition()
|
||||||
return bogey.getAnchorPosition();
|
: entity.getLightProbePosition(AnimationTickHolder.getPartialTicks());
|
||||||
} else {
|
|
||||||
return entity.getLightProbePosition(AnimationTickHolder.getPartialTicks());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateLight(int blockLight, int skyLight) {
|
|
||||||
for (ModelData shaft : shafts) {
|
|
||||||
shaft.setBlockLight(blockLight)
|
|
||||||
.setSkyLight(skyLight);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class Frame extends BogeyInstance {
|
|
||||||
|
|
||||||
private final ModelData frame;
|
|
||||||
private final ModelData[] wheels;
|
|
||||||
|
|
||||||
public Frame(CarriageBogey bogey, MaterialManager materialManager) {
|
|
||||||
super(bogey, materialManager);
|
|
||||||
|
|
||||||
frame = materialManager.defaultSolid()
|
|
||||||
.material(Materials.TRANSFORMED)
|
|
||||||
.getModel(AllBlockPartials.BOGEY_FRAME)
|
|
||||||
.createInstance();
|
|
||||||
|
|
||||||
wheels = new ModelData[2];
|
|
||||||
|
|
||||||
materialManager.defaultSolid()
|
|
||||||
.material(Materials.TRANSFORMED)
|
|
||||||
.getModel(AllBlockPartials.SMALL_BOGEY_WHEELS)
|
|
||||||
.createInstances(wheels);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void beginFrame(float wheelAngle, PoseStack ms) {
|
|
||||||
super.beginFrame(wheelAngle, ms);
|
|
||||||
|
|
||||||
if (ms == null) {
|
|
||||||
frame.setEmptyTransform();
|
|
||||||
for (int side : Iterate.positiveAndNegative)
|
|
||||||
wheels[(side + 1) / 2].setEmptyTransform();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
frame.setTransform(ms);
|
|
||||||
|
|
||||||
for (int side : Iterate.positiveAndNegative) {
|
|
||||||
wheels[(side + 1) / 2].setTransform(ms)
|
|
||||||
.translate(0, 12 / 16f, side)
|
|
||||||
.rotateX(wheelAngle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateLight(int blockLight, int skyLight) {
|
|
||||||
super.updateLight(blockLight, skyLight);
|
|
||||||
frame.setBlockLight(blockLight)
|
|
||||||
.setSkyLight(skyLight);
|
|
||||||
for (ModelData wheel : wheels)
|
|
||||||
wheel.setBlockLight(blockLight)
|
|
||||||
.setSkyLight(skyLight);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
super.remove();
|
|
||||||
frame.delete();
|
|
||||||
for (ModelData wheel : wheels)
|
|
||||||
wheel.delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class Drive extends BogeyInstance {
|
|
||||||
|
|
||||||
private final ModelData[] secondShaft;
|
|
||||||
private final ModelData drive;
|
|
||||||
private final ModelData piston;
|
|
||||||
private final ModelData wheels;
|
|
||||||
private final ModelData pin;
|
|
||||||
|
|
||||||
public Drive(CarriageBogey bogey, MaterialManager materialManager) {
|
|
||||||
super(bogey, materialManager);
|
|
||||||
Material<ModelData> mat = materialManager.defaultSolid()
|
|
||||||
.material(Materials.TRANSFORMED);
|
|
||||||
|
|
||||||
secondShaft = new ModelData[2];
|
|
||||||
|
|
||||||
mat.getModel(AllBlocks.SHAFT.getDefaultState()
|
|
||||||
.setValue(ShaftBlock.AXIS, Direction.Axis.X))
|
|
||||||
.createInstances(secondShaft);
|
|
||||||
|
|
||||||
drive = mat.getModel(AllBlockPartials.BOGEY_DRIVE)
|
|
||||||
.createInstance();
|
|
||||||
piston = mat.getModel(AllBlockPartials.BOGEY_PISTON)
|
|
||||||
.createInstance();
|
|
||||||
wheels = mat.getModel(AllBlockPartials.LARGE_BOGEY_WHEELS)
|
|
||||||
.createInstance();
|
|
||||||
pin = mat.getModel(AllBlockPartials.BOGEY_PIN)
|
|
||||||
.createInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void beginFrame(float wheelAngle, PoseStack ms) {
|
|
||||||
super.beginFrame(wheelAngle, ms);
|
|
||||||
|
|
||||||
if (ms == null) {
|
|
||||||
for (int i : Iterate.zeroAndOne)
|
|
||||||
secondShaft[i].setEmptyTransform();
|
|
||||||
drive.setEmptyTransform();
|
|
||||||
piston.setEmptyTransform();
|
|
||||||
wheels.setEmptyTransform();
|
|
||||||
pin.setEmptyTransform();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i : Iterate.zeroAndOne)
|
|
||||||
secondShaft[i].setTransform(ms)
|
|
||||||
.translate(-.5f, .25f, .5f + i * -2)
|
|
||||||
.centre()
|
|
||||||
.rotateX(wheelAngle)
|
|
||||||
.unCentre();
|
|
||||||
|
|
||||||
drive.setTransform(ms);
|
|
||||||
piston.setTransform(ms)
|
|
||||||
.translate(0, 0, 1 / 4f * Math.sin(AngleHelper.rad(wheelAngle)));
|
|
||||||
|
|
||||||
wheels.setTransform(ms)
|
|
||||||
.translate(0, 1, 0)
|
|
||||||
.rotateX(wheelAngle);
|
|
||||||
pin.setTransform(ms)
|
|
||||||
.translate(0, 1, 0)
|
|
||||||
.rotateX(wheelAngle)
|
|
||||||
.translate(0, 1 / 4f, 0)
|
|
||||||
.rotateX(-wheelAngle);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateLight(int blockLight, int skyLight) {
|
|
||||||
super.updateLight(blockLight, skyLight);
|
|
||||||
for (ModelData shaft : secondShaft)
|
|
||||||
shaft.setBlockLight(blockLight)
|
|
||||||
.setSkyLight(skyLight);
|
|
||||||
drive.setBlockLight(blockLight)
|
|
||||||
.setSkyLight(skyLight);
|
|
||||||
piston.setBlockLight(blockLight)
|
|
||||||
.setSkyLight(skyLight);
|
|
||||||
wheels.setBlockLight(blockLight)
|
|
||||||
.setSkyLight(skyLight);
|
|
||||||
pin.setBlockLight(blockLight)
|
|
||||||
.setSkyLight(skyLight);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove() {
|
|
||||||
super.remove();
|
|
||||||
for (ModelData shaft : secondShaft)
|
|
||||||
shaft.delete();
|
|
||||||
drive.delete();
|
|
||||||
piston.delete();
|
|
||||||
wheels.delete();
|
|
||||||
pin.delete();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue