package electrosphere.client.script; import org.graalvm.polyglot.HostAccess.Export; import org.joml.Vector3d; import electrosphere.client.entity.camera.CameraEntityUtils; import electrosphere.client.terrain.editing.TerrainEditing; import electrosphere.collision.CollisionEngine; import electrosphere.engine.Globals; import electrosphere.entity.Entity; /** * Utilities for interacting with voxels from the client */ public class ScriptClientVoxelUtils { /** * Increment to edit terrain by */ static final float EDIT_INCREMENT = 0.1f; /** * Applies the current voxel palette where the player's cursor is looking */ @Export public static void applyEdit(){ CollisionEngine collisionEngine = Globals.clientSceneWrapper.getCollisionEngine(); Entity camera = Globals.playerCamera; if( collisionEngine != null && camera != null ){ Vector3d eyePos = new Vector3d(CameraEntityUtils.getCameraEye(camera)); Vector3d centerPos = new Vector3d(CameraEntityUtils.getCameraCenter(camera)); Vector3d cursorPos = collisionEngine.rayCastPosition(new Vector3d(centerPos), new Vector3d(eyePos).mul(-1.0), CollisionEngine.DEFAULT_INTERACT_DISTANCE); if(Globals.clientSelectedVoxelType != null){ TerrainEditing.editTerrain(cursorPos, 1.1f, Globals.clientSelectedVoxelType.getId(), EDIT_INCREMENT); } } } }