@Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { lastTouchDown.set(screenX, screenY); lastDragProcessed.set(screenX, screenY); if (button == Input.Buttons.LEFT) { touchDownRay.set(viewport.getPickRay(screenX, screenY)); cameraController.processTouchDownLeft(touchDownRay); } else if (button == Input.Buttons.RIGHT) { cameraController.processTouchDownRight(); } return true; }
@Override public boolean mouseMoved(int screenX, int screenY) { movedRay.set(viewport.getPickRay(screenX, screenY)); Entity e = engine.rayTest(movedRay, mouseNavMeshPos, GameEngine.NAVMESH_FLAG, GameEngine.NAVMESH_FLAG, GameSettings.CAMERA_PICK_RAY_DST, null); if (e == null) mouseNavMeshPos.set(Float.NaN, Float.NaN, Float.NaN); notifyCursorWorldPosition(mouseNavMeshPos.x, mouseNavMeshPos.y, mouseNavMeshPos.z); mouseScreenPos.set(screenX, screenY); return true; }
@Override public boolean mouseMoved(int screenX, int screenY) { if (terrainAsset != null) { Ray ray = getProjectManager().current().currScene.viewport.getPickRay(screenX, screenY); terrainAsset.getTerrain().getRayIntersection(brushPos, ray); } mouseMoved = true; Shaders.INSTANCE.getTerrainShader().setPickerPosition(brushPos.x, brushPos.y, brushPos.z); return false; }
@Override public boolean touchDragged(int screenX, int screenY, int pointer) { dragCurrent.set(screenX, screenY); if (dragCurrent.dst2(lastTouchDown) > GameSettings.MOUSE_DRAG_THRESHOLD) { isDragging = true; if (Gdx.input.isButtonPressed(Input.Buttons.LEFT)) { dragCurrentRay.set(viewport.getPickRay(dragCurrent.x, dragCurrent.y)); lastDragProcessedRay.set(viewport.getPickRay(lastDragProcessed.x, lastDragProcessed.y)); cameraController.processDragPan(dragCurrentRay, lastDragProcessedRay); } else if (Gdx.input.isButtonPressed(Input.Buttons.RIGHT)) { cursorDelta.set(lastDragProcessed).sub(screenX, screenY).scl(GameSettings.MOUSE_SENSITIVITY); cameraController.processDragRotation(cursorDelta); } lastDragProcessed.set(screenX, screenY); } mouseMoved(screenX, screenY); return true; }
@Override public boolean touchUp(int screenX, int screenY, int pointer, int button) { if (!isDragging) { touchUpRay.set(viewport.getPickRay(screenX, screenY)); Entity hitEntity = engine.rayTest( touchUpRay, tmp, GameEngine.ALL_FLAG, GameEngine.ALL_FLAG, GameSettings.CAMERA_PICK_RAY_DST, visibleLayers); Gdx.app.debug(TAG, "Hit entity " + hitEntity); if (hitEntity instanceof GameCharacter) { characterController.handleCharacterSelection((GameCharacter) hitEntity); } else if (hitEntity == engine.getScene().navmeshBody) { characterController.handleMovementRequest(touchUpRay, visibleLayers); } } isDragging = false; dragCurrent.setZero(); lastDragProcessed.setZero(); return true; }
@Override public boolean mouseMoved(int screenX, int screenY) { if (this.model == null || modelInstance == null) return false; final ProjectContext context = getProjectManager().current(); final Ray ray = getProjectManager().current().currScene.viewport.getPickRay(screenX, screenY); if (context.currScene.terrains.size > 0 && modelInstance != null) { MeshPartBuilder.VertexInfo vi = TerrainUtils.getRayIntersectionAndUp(context.currScene.terrains, ray); if (vi != null) { if (shouldRespectTerrainSlope) { modelInstance.transform.setToLookAt(DEFAULT_ORIENTATION, vi.normal); } modelInstance.transform.setTranslation(vi.position); } } else { tempV3.set(getProjectManager().current().currScene.cam.position); tempV3.add(ray.direction.nor().scl(200)); modelInstance.transform.setTranslation(tempV3); } return false; }
if (state == TransformState.IDLE) return; Ray ray = getProjectManager().current().currScene.viewport.getPickRay(Gdx.input.getX(), Gdx.input.getY()); Vector3 rayEnd = getProjectManager().current().currScene.currentSelection.getLocalPosition(temp0); float dst = getProjectManager().current().currScene.cam.position.dst(rayEnd);