diff --git a/src/main/java/com/flowpowered/engine/entity/FlowEntity.java b/src/main/java/com/flowpowered/engine/entity/FlowEntity.java index 32ef141..9dc7aa6 100644 --- a/src/main/java/com/flowpowered/engine/entity/FlowEntity.java +++ b/src/main/java/com/flowpowered/engine/entity/FlowEntity.java @@ -118,10 +118,10 @@ public WorldReference getWorld() { void finalizeRun() { FlowWorld worldLive = (FlowWorld) getWorld().get(); FlowWorld worldSnapshot = (FlowWorld) physics.getSnapshottedTransform().getPosition().getWorld().get(); - //Move entity from Region A to Region B + //Move entity from World A to World B if (worldSnapshot != worldLive) { worldSnapshot.getEntityManager().removeEntity(this); - //Add entity to Region B + //Add entity to World B worldLive.getEntityManager().addEntity(this); physics.crossInto(worldSnapshot, worldLive); } diff --git a/src/main/java/com/flowpowered/engine/entity/FlowPhysics.java b/src/main/java/com/flowpowered/engine/entity/FlowPhysics.java index 6f6ea09..08177e6 100644 --- a/src/main/java/com/flowpowered/engine/entity/FlowPhysics.java +++ b/src/main/java/com/flowpowered/engine/entity/FlowPhysics.java @@ -66,7 +66,10 @@ public FlowPhysics activate(final float mass, final CollisionShape shape, Dynami deactivate(); Transform transform = live.get(); body = sim.createRigidBody(new org.spout.physics.math.Transform(ReactConverter.toReactVector3(transform.getPosition().getVector()), new Quaternion(0, 0, 0, 1)), mass, shape); - body.setMaterial(new Material()); + Material mat = new Material(); + mat.setBounciness(0f); + mat.setFrictionCoefficient(0f); + body.setMaterial(mat); activated = true; return this; } @@ -74,7 +77,9 @@ public FlowPhysics activate(final float mass, final CollisionShape shape, Dynami public void crossInto(final FlowWorld from, final FlowWorld to) { if (entity != null && from != null && body != null) { from.getPhysicsManager().queuePreUpdateTask((w) -> w.destroyRigidBody(body)); + Material mat = body.getMaterial(); body = to.getPhysicsManager().getSimulation().createRigidBody(body.getTransform(), body.getMass(), body.getCollisionShape()); + body.setMaterial(mat); } } @@ -272,8 +277,11 @@ public void onPrePhysicsTick() { if (body == null) { return; } - final org.spout.physics.math.Vector3 positionLiveToReact = ReactConverter.toReactVector3(live.get().getPosition().getVector()); - body.getTransform().setPosition(positionLiveToReact); + org.spout.physics.math.Transform toReact = ReactConverter.toReactTransform(live.get()); + if (!body.getTransform().equals(toReact)) { + body.setIsSleeping(false); + } + body.getTransform().set(toReact); } /** diff --git a/src/main/java/com/flowpowered/engine/geo/chunk/FlowChunk.java b/src/main/java/com/flowpowered/engine/geo/chunk/FlowChunk.java index 0dc616a..db972f5 100644 --- a/src/main/java/com/flowpowered/engine/geo/chunk/FlowChunk.java +++ b/src/main/java/com/flowpowered/engine/geo/chunk/FlowChunk.java @@ -46,8 +46,10 @@ import com.flowpowered.math.GenericMath; import com.flowpowered.math.vector.Vector3f; import gnu.trove.map.hash.TShortObjectHashMap; +import org.spout.physics.ReactDefaults; import org.spout.physics.body.RigidBody; import org.spout.physics.collision.shape.BoxShape; +import org.spout.physics.engine.Material; import org.spout.physics.math.Quaternion; import org.spout.physics.math.Transform; import org.spout.physics.math.Vector3; @@ -83,11 +85,12 @@ public FlowChunk(FlowRegion region, int x, int y, int z, int generationIndex, At if (y < 0) { ((FlowWorld) region.getWorld().get()).getPhysicsManager().queuePreUpdateTask((w) -> { RigidBody b = w.createRigidBody( - new Transform(ReactConverter.toReactVector3(getBlockX(), getBlockY(), getBlockZ()), Quaternion.identity()), + new Transform(ReactConverter.toReactVector3(getBlockX() + 8, getBlockY() + 8, getBlockZ() + 8), Quaternion.identity()), 1f, new BoxShape(new Vector3(8f, 8f, 8f)) ); b.enableMotion(false); + b.setMaterial(new Material(0, ReactDefaults.DEFAULT_FRICTION_COEFFICIENT)); }); } }