From 863fd4b665b2b9b825fa3905912ba7c9665214f7 Mon Sep 17 00:00:00 2001 From: austin Date: Sun, 7 Nov 2021 17:10:23 -0500 Subject: [PATCH] Chunk physics more reliable with sharp inclines --- .../java/electrosphere/engine/LoadingThread.java | 4 ++-- .../java/electrosphere/entity/state/GravityTree.java | 2 +- .../game/collision/CollisionEngine.java | 12 ++++++++++-- .../server/terrain/manager/ServerTerrainChunk.java | 1 + 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/electrosphere/engine/LoadingThread.java b/src/main/java/electrosphere/engine/LoadingThread.java index 719d31c6..91edefa4 100644 --- a/src/main/java/electrosphere/engine/LoadingThread.java +++ b/src/main/java/electrosphere/engine/LoadingThread.java @@ -624,8 +624,8 @@ public class LoadingThread extends Thread { // StructureUtils.spawnBasicStructure("building1", new Vector3f(5,2.4f,5), new Quaternionf()); - Entity bow = ItemUtils.spawnBasicItem("Bow"); - EntityUtils.getPosition(bow).set(1, 1, 2); +// Entity bow = ItemUtils.spawnBasicItem("Bow"); +// EntityUtils.getPosition(bow).set(1, 1, 2); // NavMeshPathfinder.navigatePointToPointInMesh(G*lobals.navMeshManager.getMeshes().get(0), new Vector3d(10,0,5), new Vector3d(5,0,10)); diff --git a/src/main/java/electrosphere/entity/state/GravityTree.java b/src/main/java/electrosphere/entity/state/GravityTree.java index 2899ac50..8c2eadaf 100644 --- a/src/main/java/electrosphere/entity/state/GravityTree.java +++ b/src/main/java/electrosphere/entity/state/GravityTree.java @@ -107,7 +107,7 @@ public class GravityTree { if(hadGroundCollision()){ state = GravityTreeState.NOT_ACTIVE; if(!hadStructureCollision()){ - position.set(new Vector3d(position.x,Globals.commonWorldData.getElevationAtPoint(position) + 0.0001f,position.z)); +// position.set(new Vector3d(position.x,Globals.commonWorldData.getElevationAtPoint(position) + 0.0001f,position.z)); } gravityVelocity = 0; } else { diff --git a/src/main/java/electrosphere/game/collision/CollisionEngine.java b/src/main/java/electrosphere/game/collision/CollisionEngine.java index 7fcf9aa6..82731d0d 100644 --- a/src/main/java/electrosphere/game/collision/CollisionEngine.java +++ b/src/main/java/electrosphere/game/collision/CollisionEngine.java @@ -123,7 +123,11 @@ public class CollisionEngine { // System.out.println(EntityUtils.getPosition(impactor.getParent()) + " " + EntityUtils.getPosition(receiver.getParent())); // System.out.println(); // System.out.println("Terrain-creature collision: " + normal + " mag:" + magnitude); - receiver.addImpulse(new Impulse(new Vector3d(0,normal.y,0), magnitude*2, Collidable.TYPE_TERRAIN)); + if(normal.y > normal.x + normal.z){ + normal.x = 0; + normal.z = 0; + } + receiver.addImpulse(new Impulse(normal, magnitude * 2, Collidable.TYPE_TERRAIN)); break; case Collidable.TYPE_CREATURE: receiver.addImpulse(new Impulse(normal, magnitude, Collidable.TYPE_CREATURE)); @@ -145,7 +149,11 @@ public class CollisionEngine { // System.out.println(EntityUtils.getPosition(impactor.getParent()) + " " + EntityUtils.getPosition(receiver.getParent())); // System.out.println(); // System.out.println("Terrain-item collision: " + normal + " mag:" + magnitude); - receiver.addImpulse(new Impulse(new Vector3d(0,normal.y,0), magnitude*2, Collidable.TYPE_TERRAIN)); + if(normal.y > normal.x + normal.z){ + normal.x = 0; + normal.z = 0; + } + receiver.addImpulse(new Impulse(normal, magnitude * 2, Collidable.TYPE_TERRAIN)); break; case Collidable.TYPE_CREATURE: receiver.addImpulse(new Impulse(normal, Math.min(magnitude * 0.5,0.5), Collidable.TYPE_CREATURE)); diff --git a/src/main/java/electrosphere/game/server/terrain/manager/ServerTerrainChunk.java b/src/main/java/electrosphere/game/server/terrain/manager/ServerTerrainChunk.java index e1a5e45e..7af4dcaa 100644 --- a/src/main/java/electrosphere/game/server/terrain/manager/ServerTerrainChunk.java +++ b/src/main/java/electrosphere/game/server/terrain/manager/ServerTerrainChunk.java @@ -29,6 +29,7 @@ public class ServerTerrainChunk { long[][] randomizer = new long[5][5]; float[][] heightmap = new float[width + 1][width + 1]; ServerTerrainChunk rVal = new ServerTerrainChunk(x, y, heightmap, macroValues, randomizer); + rVal.addModification(new TerrainModification(x, y, 3, 3, 5)); return rVal; }