Fixed crashes when using multiple chunks. FPS is still terrible though
This commit is contained in:
parent
4fa3592c98
commit
0a8db1cd02
@ -107,7 +107,7 @@ public class LayerWorld extends Layer {
|
||||
tmp_testControls.applyPlayerControls();
|
||||
|
||||
for (EntityData data : this.client.getWorld().getData().getEntities()) {
|
||||
tmp_applyFriction(data);
|
||||
tmp_applyFriction(data, tickLength);
|
||||
tmp_applyGravity(data, tickLength);
|
||||
tmp_renderCollisionModel(data);
|
||||
}
|
||||
@ -177,9 +177,9 @@ public class LayerWorld extends Layer {
|
||||
return new StaticModel(b);
|
||||
}
|
||||
|
||||
private void tmp_applyFriction(EntityData entity) {
|
||||
final float frictionCoeff = 1 - 1e-5f;
|
||||
entity.getVelocity().mul(frictionCoeff);
|
||||
private void tmp_applyFriction(EntityData entity, float tickLength) {
|
||||
final float frictionCoeff = Units.get(1e-5f, "kg/s");
|
||||
entity.getVelocity().mul((float) Math.exp(-frictionCoeff / entity.getCollisionMass() * tickLength));
|
||||
}
|
||||
|
||||
private static final float MC_g = Units.get("32 m/s^2");
|
||||
|
@ -55,7 +55,7 @@ public class WorldData {
|
||||
}
|
||||
|
||||
public void tmp_generate() {
|
||||
final int size = 1;
|
||||
final int size = 3;
|
||||
Vec3i cursor = new Vec3i(0, 0, 0);
|
||||
|
||||
for (cursor.x = -(size / 2); cursor.x <= (size / 2); ++cursor.x) {
|
||||
|
@ -133,6 +133,11 @@ public abstract class TickContextMutable implements BlockTickContext, TSTickCont
|
||||
protected Role role = Role.NONE;
|
||||
protected boolean isBeingBuilt = false;
|
||||
|
||||
/**
|
||||
* Updated lazily
|
||||
*/
|
||||
protected final Vec3i blockInChunk = new Vec3i();
|
||||
|
||||
/*
|
||||
* TickContextMutable
|
||||
*/
|
||||
@ -275,6 +280,11 @@ public abstract class TickContextMutable implements BlockTickContext, TSTickCont
|
||||
* Optimization
|
||||
*/
|
||||
|
||||
@Override
|
||||
public Vec3i getBlockInChunk() {
|
||||
return Coordinates.convertInWorldToInChunk(getBlockInWorld(), this.blockInChunk);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forEachBlock(Consumer<BlockTickContext> action) {
|
||||
checkContextState(Role.CHUNK);
|
||||
|
@ -5,6 +5,7 @@ import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
import glm.vec._3.i.Vec3i;
|
||||
import ru.windcorp.progressia.common.world.Coordinates;
|
||||
import ru.windcorp.progressia.common.world.block.BlockData;
|
||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
||||
import ru.windcorp.progressia.common.world.block.BlockRelation;
|
||||
@ -20,6 +21,10 @@ public interface BlockTickContext extends ChunkTickContext {
|
||||
*/
|
||||
Vec3i getBlockInWorld();
|
||||
|
||||
default Vec3i getBlockInChunk() {
|
||||
return Coordinates.convertInWorldToInChunk(getBlockInWorld(), null);
|
||||
}
|
||||
|
||||
default BlockLogic getBlock() {
|
||||
return getWorld().getBlock(getBlockInWorld());
|
||||
}
|
||||
|
@ -27,22 +27,22 @@ public interface TSTickContext extends BlockTickContext {
|
||||
ChunkLogic chunkLogic = getChunkLogic();
|
||||
if (chunkLogic == null) return null;
|
||||
|
||||
return chunkLogic.getTilesOrNull(getBlockInWorld(), getFace());
|
||||
return chunkLogic.getTilesOrNull(getBlockInChunk(), getFace());
|
||||
}
|
||||
|
||||
default TileLogicStack getTLS() {
|
||||
return getChunkLogic().getTiles(getBlockInWorld(), getFace());
|
||||
return getChunkLogic().getTiles(getBlockInChunk(), getFace());
|
||||
}
|
||||
|
||||
default TileDataStack getTDSOrNull() {
|
||||
ChunkData chunkData = getChunkData();
|
||||
if (chunkData == null) return null;
|
||||
|
||||
return chunkData.getTilesOrNull(getBlockInWorld(), getFace());
|
||||
return chunkData.getTilesOrNull(getBlockInChunk(), getFace());
|
||||
}
|
||||
|
||||
default TileDataStack getTDS() {
|
||||
return getChunkData().getTiles(getBlockInWorld(), getFace());
|
||||
return getChunkData().getTiles(getBlockInChunk(), getFace());
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -252,7 +252,7 @@ public class TestContent {
|
||||
TileData flowers = TileDataRegistry.getInstance().get("Test:YellowFlowers");
|
||||
TileData sand = TileDataRegistry.getInstance().get("Test:Sand");
|
||||
|
||||
Vec3i aPoint = new Vec3i(5, 0, bpc + bpc/2).sub(chunk.getPosition());
|
||||
Vec3i aPoint = new Vec3i(5, 0, bpc + bpc/4).sub(chunk.getPosition().mul_(ChunkData.BLOCKS_PER_CHUNK));
|
||||
Vec3i pos = new Vec3i();
|
||||
|
||||
for (int x = 0; x < bpc; ++x) {
|
||||
@ -280,6 +280,7 @@ public class TestContent {
|
||||
pos.set(x, y, 0);
|
||||
|
||||
for (pos.z = bpc - 1; pos.z >= 0 && chunk.getBlock(pos) == air; --pos.z);
|
||||
if (pos.z < 0) continue;
|
||||
|
||||
chunk.getTiles(pos, BlockFace.TOP).add(grass);
|
||||
for (BlockFace face : BlockFace.getFaces()) {
|
||||
|
Reference in New Issue
Block a user