diff --git a/client/src/main/java/core/engine/Engine.java b/client/src/main/java/core/engine/Engine.java index bfc9661..61ff0f8 100644 --- a/client/src/main/java/core/engine/Engine.java +++ b/client/src/main/java/core/engine/Engine.java @@ -123,7 +123,7 @@ public class Engine { Light light = new Light(new Vector3f(0,0,-20), new Vector3f(1,1,1)); //Generate Simple, Flat Terrain - Terrain terrain = new Terrain( loader, new ModelTexture(loader.loadTexture("white")), 16, 32, 7); + Terrain terrain = new Terrain( loader, new ModelTexture(loader.loadTexture("white")), 16, 16, 7); //Create Hexagon HexagonModel hexagonModel = new HexagonModel(); diff --git a/client/src/main/java/core/engine/toolbox/MousePicker.java b/client/src/main/java/core/engine/toolbox/MousePicker.java index 948270f..80525d3 100644 --- a/client/src/main/java/core/engine/toolbox/MousePicker.java +++ b/client/src/main/java/core/engine/toolbox/MousePicker.java @@ -3,6 +3,7 @@ package core.engine.toolbox; import core.engine.Engine; import core.engine.entity.Camera; import core.engine.terrain.Terrain; +import core.engine.terrain.TerrainTile; import org.lwjgl.system.windows.MOUSEINPUT; import utils.MatrixGraphicUtils; import utils.vectors.*; @@ -20,6 +21,7 @@ public class MousePicker { private Terrain terrain; private Vector3f currentTerrainPoint; + private TerrainTile currentTerrainTile; public MousePicker(Camera cam, Matrix4f projection, Terrain terrain) { camera = cam; @@ -39,11 +41,7 @@ public class MousePicker { public void update(float mouseX, float mouseY) { viewMatrix = MatrixGraphicUtils.createViewMatrix(camera); currentRay = calculateMouseRay(mouseX, mouseY); - if (intersectionInRange(0, RAY_RANGE, currentRay)) { - currentTerrainPoint = binarySearch(0, 0, RAY_RANGE, currentRay); - } else { - currentTerrainPoint = null; - } + currentTerrainPoint = calcCurrentTerrainIntersection(); } private Vector3f calculateMouseRay(float mouseX, float mouseY) { @@ -51,9 +49,7 @@ public class MousePicker { Vector2f normalizedCoords = getNormalisedDeviceCoordinates(mouseX, mouseY); Vector4f clipCoords = new Vector4f(normalizedCoords.x, normalizedCoords.y, -1.0f, 1.0f); Vector4f eyeCoords = toEyeCoords(clipCoords); - Vector3f worldRay = toWorldCoords(eyeCoords); - System.out.println(worldRay); - return worldRay; + return toWorldCoords(eyeCoords); } private Vector3f toWorldCoords(Vector4f eyeCoords) { @@ -78,52 +74,12 @@ public class MousePicker { //********************************************************** - private Vector3f getPointOnRay(Vector3f ray, float distance) { + private Vector3f calcCurrentTerrainIntersection() { Vector3f camPos = camera.getPosition(); - Vector3f start = new Vector3f(camPos.x, camPos.y, camPos.z); - Vector3f scaledRay = new Vector3f(ray.x * distance, ray.y * distance, ray.z * distance); - return Vector3f.add(start, scaledRay, null); + return null; } - private Vector3f binarySearch(int count, float start, float finish, Vector3f ray) { - float half = start + ((finish - start) / 2f); - if (count >= RECURSION_COUNT) { - Vector3f endPoint = getPointOnRay(ray, half); - Terrain terrain = getTerrain(endPoint.getX(), endPoint.getZ()); - if (terrain != null) { - return endPoint; - } else { - return null; - } - } - if (intersectionInRange(start, half, ray)) { - return binarySearch(count + 1, start, half, ray); - } else { - return binarySearch(count + 1, half, finish, ray); - } - } + //********************************************************** - private boolean intersectionInRange(float start, float finish, Vector3f ray) { - Vector3f startPoint = getPointOnRay(ray, start); - Vector3f endPoint = getPointOnRay(ray, finish); - if (!isUnderGround(startPoint) && isUnderGround(endPoint)) { - return true; - } else { - return false; - } - } - private boolean isUnderGround(Vector3f testPoint) { - Terrain terrain = getTerrain(testPoint.getX(), testPoint.getZ()); - float height = 0; - if (testPoint.y < height) { - return true; - } else { - return false; - } - } - - private Terrain getTerrain(float worldX, float worldZ) { - return terrain; - } }