43 lines
1.4 KiB
Java
43 lines
1.4 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|