diff --git a/assets/Models/bow1.fbx b/assets/Models/bow1.fbx index ca6a0bef..2b8515dd 100644 Binary files a/assets/Models/bow1.fbx and b/assets/Models/bow1.fbx differ diff --git a/assets/Models/lockoncrosshair1.fbx b/assets/Models/lockoncrosshair1.fbx new file mode 100644 index 00000000..3349e74f Binary files /dev/null and b/assets/Models/lockoncrosshair1.fbx differ diff --git a/src/main/java/electrosphere/controls/ControlHandler.java b/src/main/java/electrosphere/controls/ControlHandler.java index b2c24de9..4f020acc 100644 --- a/src/main/java/electrosphere/controls/ControlHandler.java +++ b/src/main/java/electrosphere/controls/ControlHandler.java @@ -8,6 +8,7 @@ import electrosphere.entity.EntityUtils; import electrosphere.entity.state.AttackTree; import electrosphere.entity.state.movement.GroundMovementTree; import electrosphere.entity.state.movement.GroundMovementTree.MovementTreeState; +import electrosphere.entity.types.collision.CollisionObjUtils; import electrosphere.entity.types.item.ItemUtils; import electrosphere.main.Globals; import electrosphere.menu.MenuTransition; @@ -16,6 +17,7 @@ import electrosphere.util.Utilities; import java.util.HashMap; import java.util.List; import org.joml.Vector2f; +import org.joml.Vector3d; import org.joml.Vector3f; import static org.lwjgl.glfw.GLFW.*; import static org.lwjgl.glfw.GLFW.glfwGetCursorPos; @@ -376,6 +378,7 @@ public class ControlHandler { if(controls.get(DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM).isState() == true){ Entity bow = ItemUtils.spawnBasicItem("Bow"); EntityUtils.getPosition(bow).set(1, 5, 2); + CollisionObjUtils.positionCharacter(bow, new Vector3f(1, 5, 2)); } controls.get(DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM).setState(false); } diff --git a/src/main/java/electrosphere/engine/LoadingThread.java b/src/main/java/electrosphere/engine/LoadingThread.java index 55fdbe04..c25a687b 100644 --- a/src/main/java/electrosphere/engine/LoadingThread.java +++ b/src/main/java/electrosphere/engine/LoadingThread.java @@ -589,12 +589,12 @@ public class LoadingThread extends Thread { // //attach ai to evil goblin // MindlessAttacker.attachToCreature(goblin); -// StructureUtils.spawnBasicStructure("building1", new Vector3f(5,2.4f,5), new Quaternionf()); + StructureUtils.spawnBasicStructure("building1", new Vector3f(5,2.4f,5), new Quaternionf()); Entity bow = ItemUtils.spawnBasicItem("Bow"); EntityUtils.getPosition(bow).set(1, 1, 2); -// NavMeshPathfinder.navigatePointToPointInMesh(Globals.navMeshManager.getMeshes().get(0), new Vector3d(10,0,5), new Vector3d(5,0,10)); +// NavMeshPathfinder.navigatePointToPointInMesh(G*lobals.navMeshManager.getMeshes().get(0), new Vector3d(10,0,5), new Vector3d(5,0,10)); // NavMesh mesh = new NavMesh(); // NavCube cube = new NavCube(5,0,0,10,5,5); diff --git a/src/main/java/electrosphere/entity/state/GravityTree.java b/src/main/java/electrosphere/entity/state/GravityTree.java index 91f550ae..2899ac50 100644 --- a/src/main/java/electrosphere/entity/state/GravityTree.java +++ b/src/main/java/electrosphere/entity/state/GravityTree.java @@ -31,7 +31,7 @@ public class GravityTree { Entity parent; float gravityVelocity = 0; - float gravityAccel = 0.01f; + float gravityAccel = 0.0002f; CollisionObject body; Collidable collidable; diff --git a/src/main/java/electrosphere/entity/state/collidable/CollidableTree.java b/src/main/java/electrosphere/entity/state/collidable/CollidableTree.java index 6e72cc53..553d226b 100644 --- a/src/main/java/electrosphere/entity/state/collidable/CollidableTree.java +++ b/src/main/java/electrosphere/entity/state/collidable/CollidableTree.java @@ -37,30 +37,41 @@ public class CollidableTree { Vector3d offsetVector = new Vector3d(); Vector3d newPosition = new Vector3d(position); javax.vecmath.Matrix4f bodyTransformMatrix; + //have we hit a terrain impulse? + boolean hitTerrain = false; //handle impulses for(Impulse impulse : collidable.getImpulses()){ // collidable.getImpulses().remove(impulse); Vector3d impulseForce = new Vector3d(impulse.getDirection()).mul(impulse.getForce()); -// if(impulse.type.matches(Collidable.TYPE_TERRAIN)){ + if(impulse.type.matches(Collidable.TYPE_TERRAIN)){ + hitTerrain = true; // System.out.println("Impulse force: " + impulseForce); // System.out.println("Position: " + position); -// } -// if(impulse.type.matches(Collidable.TYPE_ITEM)){ -// if(parent.getDataKeys().contains(EntityDataStrings.GRAVITY_TREE)){ -// ((GravityTree)parent.getData(EntityDataStrings.GRAVITY_TREE)).start(); -// } -// } -// if(impulse.type.matches(Collidable.TYPE_CREATURE)){ -// if(parent.getDataKeys().contains(EntityDataStrings.GRAVITY_TREE)){ -// ((GravityTree)parent.getData(EntityDataStrings.GRAVITY_TREE)).start(); -// } -// } + } + if(impulse.type.matches(Collidable.TYPE_ITEM)){ + if(parent.getDataKeys().contains(EntityDataStrings.GRAVITY_TREE)){ + ((GravityTree)parent.getData(EntityDataStrings.GRAVITY_TREE)).start(); + } + } + if(impulse.type.matches(Collidable.TYPE_CREATURE)){ +// System.out.println(System.currentTimeMillis() + " creature hit!"); + if(parent.getDataKeys().contains(EntityDataStrings.GRAVITY_TREE)){ + ((GravityTree)parent.getData(EntityDataStrings.GRAVITY_TREE)).start(); + } + } // if(impulse.type.matches("movement")){ // System.out.println("Impulse force: " + impulseForce); // } offsetVector.add(impulseForce); } + + //the reasoning here is that if we have something above something else and it's pushing it into the terrain, + //we should instead just not push into terrain and push along terrain + if(hitTerrain && offsetVector.y < 0){ + offsetVector.y = 0; + } + //make sure we're in a valid (World bounds) position newPosition.add(offsetVector); if(!Globals.collisionEngine.checkCanOccupyPosition(Globals.commonWorldData, parent, newPosition)){ diff --git a/src/main/java/electrosphere/game/collision/CollisionEngine.java b/src/main/java/electrosphere/game/collision/CollisionEngine.java index 807d4bac..7fcf9aa6 100644 --- a/src/main/java/electrosphere/game/collision/CollisionEngine.java +++ b/src/main/java/electrosphere/game/collision/CollisionEngine.java @@ -129,9 +129,9 @@ public class CollisionEngine { receiver.addImpulse(new Impulse(normal, magnitude, Collidable.TYPE_CREATURE)); break; case Collidable.TYPE_STRUCTURE: - float realMag = 1f/(float)Math.pow(0.1, magnitude); +// float realMag = 1f/(float)Math.pow(0.1, magnitude); // System.out.println(normal + " - " + realMag); - receiver.addImpulse(new Impulse(normal, realMag, Collidable.TYPE_STRUCTURE)); + receiver.addImpulse(new Impulse(normal, magnitude, Collidable.TYPE_STRUCTURE)); // System.out.println("Structure-creature collision"); break; case Collidable.TYPE_ITEM: @@ -151,9 +151,9 @@ public class CollisionEngine { receiver.addImpulse(new Impulse(normal, Math.min(magnitude * 0.5,0.5), Collidable.TYPE_CREATURE)); break; case Collidable.TYPE_STRUCTURE: - float realMag = 1f/(float)Math.pow(0.1, magnitude); +// float realMag = 1f/(float)Math.pow(0.1, magnitude); // System.out.println(normal + " - " + realMag); - receiver.addImpulse(new Impulse(normal, realMag, Collidable.TYPE_STRUCTURE)); + receiver.addImpulse(new Impulse(normal, magnitude, Collidable.TYPE_STRUCTURE)); // System.out.println("Structure-creature collision"); break; case Collidable.TYPE_ITEM: