mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-10 20:11:35 +01:00
Oops engine stuff is okay again.
This commit is contained in:
parent
d0a6f4123b
commit
b7f0fe9b10
5 changed files with 16 additions and 8 deletions
|
@ -53,6 +53,8 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
|
|||
|
||||
protected float lastAngle = Float.NaN;
|
||||
|
||||
protected boolean firstFrame = true;
|
||||
|
||||
public FlyWheelInstance(InstancedTileRenderer<?> modelManager, FlywheelTileEntity tile) {
|
||||
super(modelManager, tile);
|
||||
}
|
||||
|
@ -87,6 +89,7 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
|
|||
}
|
||||
|
||||
updateLight();
|
||||
firstFrame = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -97,7 +100,7 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
|
|||
float speed = tile.visualSpeed.get(partialTicks) * 3 / 10f;
|
||||
float angle = tile.angle + speed * partialTicks;
|
||||
|
||||
if (Math.abs(angle - lastAngle) < 0.001) return;
|
||||
if (!firstFrame && Math.abs(angle - lastAngle) < 0.001) return;
|
||||
|
||||
MatrixStack ms = new MatrixStack();
|
||||
MatrixStacker msr = MatrixStacker.of(ms);
|
||||
|
@ -140,6 +143,7 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> im
|
|||
wheel.getInstance().setTransformNoCopy(ms);
|
||||
|
||||
lastAngle = angle;
|
||||
firstFrame = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -25,7 +25,6 @@ public class EngineInstance extends TileEntityInstance<EngineTileEntity> {
|
|||
InstancedTileRenderRegistry.instance.register(type, EngineInstance::new));
|
||||
}
|
||||
|
||||
protected BlockPos baseBlockPos;
|
||||
protected InstanceKey<ModelData> frame;
|
||||
|
||||
public EngineInstance(InstancedTileRenderer<?> modelManager, EngineTileEntity tile) {
|
||||
|
@ -44,8 +43,6 @@ public class EngineInstance extends TileEntityInstance<EngineTileEntity> {
|
|||
|
||||
Direction facing = lastState.get(BlockStateProperties.HORIZONTAL_FACING);
|
||||
|
||||
baseBlockPos = EngineBlock.getBaseBlockPos(lastState, pos);
|
||||
|
||||
this.frame = modelManager.getMaterial(RenderMaterials.MODELS).getModel(frame, lastState).createInstance();
|
||||
|
||||
float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing));
|
||||
|
@ -54,6 +51,7 @@ public class EngineInstance extends TileEntityInstance<EngineTileEntity> {
|
|||
MatrixStacker msr = MatrixStacker.of(ms);
|
||||
|
||||
msr.translate(getFloatingPos())
|
||||
.nudge(tile.hashCode())
|
||||
.centre()
|
||||
.rotate(Direction.UP, angle)
|
||||
.unCentre()
|
||||
|
@ -72,8 +70,8 @@ public class EngineInstance extends TileEntityInstance<EngineTileEntity> {
|
|||
|
||||
@Override
|
||||
public void updateLight() {
|
||||
int block = world.getLightLevel(LightType.BLOCK, baseBlockPos);
|
||||
int sky = world.getLightLevel(LightType.SKY, baseBlockPos);
|
||||
int block = world.getLightLevel(LightType.BLOCK, pos);
|
||||
int sky = world.getLightLevel(LightType.SKY, pos);
|
||||
|
||||
frame.getInstance().setBlockLight(block).setSkyLight(sky);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@ import com.simibubi.create.foundation.render.backend.gl.GlFog;
|
|||
import com.simibubi.create.foundation.render.backend.gl.GlFogMode;
|
||||
import com.simibubi.create.foundation.render.backend.gl.shader.*;
|
||||
import com.simibubi.create.foundation.render.backend.gl.versioned.GlFeatureCompat;
|
||||
import com.simibubi.create.foundation.render.backend.instancing.IFlywheelWorld;
|
||||
import net.minecraft.world.World;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.lwjgl.opengl.GL;
|
||||
|
@ -65,6 +67,10 @@ public class Backend {
|
|||
return (P) programs.get(spec).get(GlFog.getFogMode());
|
||||
}
|
||||
|
||||
public static boolean isFlywheelWorld(World world) {
|
||||
return world == Minecraft.getInstance().world || (world instanceof IFlywheelWorld && ((IFlywheelWorld) world).supportsFlywheel());
|
||||
}
|
||||
|
||||
public static boolean available() {
|
||||
return canUseVBOs();
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ public class FastRenderDispatcher {
|
|||
}
|
||||
|
||||
public static boolean available(World world) {
|
||||
return Backend.canUseInstancing() && !(world instanceof SchematicWorld);
|
||||
return Backend.canUseInstancing() && Backend.isFlywheelWorld(world);
|
||||
}
|
||||
|
||||
public static int getDebugMode() {
|
||||
|
|
|
@ -84,7 +84,7 @@ public class MatrixStacker {
|
|||
}
|
||||
|
||||
public MatrixStacker nudge(int id) {
|
||||
long randomBits = (long) id * 493286711L;
|
||||
long randomBits = (long) id * 31L * 493286711L;
|
||||
randomBits = randomBits * randomBits * 4392167121L + randomBits * 98761L;
|
||||
float xNudge = (((float) (randomBits >> 16 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F;
|
||||
float yNudge = (((float) (randomBits >> 20 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F;
|
||||
|
|
Loading…
Reference in a new issue