From 1c0ea25fb53a8af2f48ebc7ec5ad9b1b55ee1741 Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 23 Mar 2022 00:23:59 -0400 Subject: [PATCH] partway to iron sight --- .vscode/settings.json | 3 +- assets/Textures/ui/crosshair.png | Bin 0 -> 1194 bytes .../electrosphere/controls/CameraHandler.java | 90 ++++++++++++++++++ .../controls/ControlHandler.java | 83 +++++----------- .../entity/EntityDataStrings.java | 6 ++ .../entity/state/ironsight/IronSightTree.java | 70 ++++++++++++++ .../entity/state/rotator/RotatorTree.java | 2 +- .../types/camera/CameraEntityUtils.java | 22 ++++- src/main/java/electrosphere/main/Globals.java | 6 ++ .../net/server/ServerConnectionHandler.java | 2 + .../electrosphere/renderer/actor/Actor.java | 1 + .../actor/ActorNodeTransformMask.java | 30 ++++++ 12 files changed, 251 insertions(+), 64 deletions(-) create mode 100644 assets/Textures/ui/crosshair.png create mode 100644 src/main/java/electrosphere/controls/CameraHandler.java create mode 100644 src/main/java/electrosphere/entity/state/ironsight/IronSightTree.java create mode 100644 src/main/java/electrosphere/renderer/actor/ActorNodeTransformMask.java diff --git a/.vscode/settings.json b/.vscode/settings.json index e0f15db2..36c8128d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "java.configuration.updateBuildConfiguration": "automatic" + "java.configuration.updateBuildConfiguration": "automatic", + "java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m" } \ No newline at end of file diff --git a/assets/Textures/ui/crosshair.png b/assets/Textures/ui/crosshair.png new file mode 100644 index 0000000000000000000000000000000000000000..deaa349e38a10a130be9a894f4debd89f489d9a5 GIT binary patch literal 1194 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrU~I{Bb`J1#c2+1T%1_J8No8Qr zm{>c}*5j~)%+dJhrAngg%_4;-0_Lvi=(6w)0vjmGgfWf6=U*%xE{UqVHv!>mEm&&6zLf zeD7opnp0=p2wdPr8l3NpL1>hYZGi>w6Zd(F+!(o!<~a`QdS(fd_>Uos>c2K zrI8Q!9F1IiCF1qGKdlS*Y@77V>TKeXjV&yb1QZvy8EI`0SQ@H))TQfNvfMw#ZpPuoMeu!MP|k zu_QG`p**uBL&4qCHz2%`Pn>~)smasDF{I+w+q(z7LIP!ue|#Tk9KfX#B_Vi~o5OK+ zhr+7xu5Y>3T`@m+Sl32<<#1);Vx1}ElKkq-pQtm9l1+0QUrH74n}2p{VZpO`pP!zK z?fK(4NyT%L%GO0&DlU0WYn*++>chS%pN@)1-TI@_KY5S$ruk1&CzXaTo6B%*(jJdX z=TFp4a$mddxKlST!{MqW|7vm=-bygsZ>;Nm!0x^!< zOlB;I@RFQk)v)X5_lD&M+-iSRcrmyi$g5o(%l2W(V}`iWJwFfcT6X(D+}#J0zdh9c zAoimoh{ZcNu0*tg;SPJ4+P@zr+h_jwl;J=B&@|ZG&e&!>dk)k2#{A{H4+MTN)Uf6G zOtE;oYLmxeW6u8@TX${S9KrUEVfuNY1Nsk2ZS#C=zHMg`Z`3xO7W(Y>Z?^n%59@M8 zcSM 100.0f) { + pitch = 100.0f; + } + if (pitch < -99.0f) { + pitch = -99.0f; + } + } + + updateGlobalCamera(); + } + + public void updateRadialOffset(Vector3f offset){ + radialOffset = offset; + } + + public void updateGlobalCamera(){ + cameraSpeed = 2.5f * Main.deltaTime; + + if(Crosshair.getCrosshairActive()){ + + // if(Globals.playerCharacter != null){ + // Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter); + // CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z)); + // } + + Vector3d characterPos = EntityUtils.getPosition(Globals.playerCharacter); + Vector3d targetPos = Crosshair.getTargetPosition(); + Vector3d diffed = new Vector3d(targetPos).sub(characterPos).mul(-1).normalize(); + cameraRotationVector.set((float)diffed.x, 0.5f, (float)diffed.z).normalize(); + + yaw = (float)Math.toDegrees(Math.atan2(diffed.z, diffed.x)); + + CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch); + CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw); + + } else { + CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch); + CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw); + + // if(Globals.playerCharacter != null){ + // Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter); + // CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z)); + // } + + cameraRotationVector.x = 0 + (float) Math.cos(yaw / 180.0f * Math.PI) * 1; + cameraRotationVector.y = 0 + (float) Math.sin(pitch / 180.0f * Math.PI) * 1; + cameraRotationVector.z = 0 + (float) Math.sin(yaw / 180.0f * Math.PI) * 1; + cameraRotationVector.normalize(); + } + //update view matrix offset + float xFactor = (float)Math.cos(yaw / 180.0f * Math.PI); + float yFactor = (float)Math.sin(yaw / 180.0f * Math.PI); + // Vector3f radialOffset = CameraEntityUtils.getOrbitalCameraRadialOffset(Globals.playerCamera); + Vector3f trueOffset = new Vector3f(radialOffset).mul(xFactor,1.0f,yFactor); + CameraEntityUtils.setOrbitalCameraRadialOffset(Globals.playerCamera, trueOffset); + // float cam_Player_Orbit_Magnitude = CameraEntityUtils.getCameraOrbitRadius(Globals.playerCamera); + cameraRotationVector.mul(CameraEntityUtils.getOrbitalCameraDistance(Globals.playerCamera)); + CameraEntityUtils.setCameraEye(Globals.playerCamera, cameraRotationVector); + + Globals.viewMatrix = CameraEntityUtils.getCameraViewMatrix(Globals.playerCamera); + } + +} diff --git a/src/main/java/electrosphere/controls/ControlHandler.java b/src/main/java/electrosphere/controls/ControlHandler.java index 0073d48d..1b1e7aef 100644 --- a/src/main/java/electrosphere/controls/ControlHandler.java +++ b/src/main/java/electrosphere/controls/ControlHandler.java @@ -10,6 +10,7 @@ import electrosphere.entity.state.AttackTree; import electrosphere.entity.state.equip.EquipState; import electrosphere.entity.state.inventory.InventoryUtils; import electrosphere.entity.state.inventory.UnrelationalInventoryState; +import electrosphere.entity.state.ironsight.IronSightTree; import electrosphere.entity.state.movement.GroundMovementTree; import electrosphere.entity.state.movement.GroundMovementTree.MovementRelativeFacing; import electrosphere.entity.state.movement.GroundMovementTree.MovementTreeState; @@ -72,6 +73,7 @@ public class ControlHandler { public static final String INPUT_CODE_DROP = "drop"; public static final String INPUT_CODE_INVENTORY_OPEN = "inventoryOpen"; public static final String INPUT_CODE_CHARACTER_OPEN = "characterOpen"; + public static final String INPUT_CODE_IRON_SIGHT = "ironSight"; public static final String DATA_STRING_INPUT_CODE_MENU_INCREMENT = "menuIncrement"; public static final String DATA_STRING_INPUT_CODE_MENU_DECREMENT = "menuDecrement"; @@ -187,12 +189,13 @@ public class ControlHandler { handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_FALL, new Control(ControlType.KEY,GLFW_KEY_LEFT_CONTROL)); handler.addControl(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_LEFT)); handler.addControl(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU, new Control(ControlType.KEY,GLFW_KEY_ESCAPE)); - handler.addControl(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_RIGHT)); + handler.addControl(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR, new Control(ControlType.KEY,GLFW_KEY_CAPS_LOCK)); handler.addControl(INPUT_CODE_SPRINT, new Control(ControlType.KEY,GLFW_KEY_LEFT_SHIFT)); handler.addControl(INPUT_CODE_INTERACT, new Control(ControlType.KEY,GLFW_KEY_E)); handler.addControl(INPUT_CODE_DROP, new Control(ControlType.KEY,GLFW_KEY_Y)); handler.addControl(INPUT_CODE_INVENTORY_OPEN, new Control(ControlType.KEY,GLFW_KEY_I)); handler.addControl(INPUT_CODE_CHARACTER_OPEN, new Control(ControlType.KEY,GLFW_KEY_C)); + handler.addControl(INPUT_CODE_IRON_SIGHT, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_RIGHT)); /* Map the menu navigation controls @@ -332,64 +335,8 @@ public class ControlHandler { Camera rotation */ mainGameControlList.add(controls.get(INPUT_CODE_CAMERA_ROTATION)); - controls.get(INPUT_CODE_CAMERA_ROTATION).setOnMove(new Control.MouseCallback(){ - - float mouseSensitivity = .1f; - float cameraSpeed; - float yaw = 150; - float pitch = 50; - Vector3f cameraRotationVector = new Vector3f(); - public void execute(MouseEvent event){ - - cameraSpeed = 2.5f * Main.deltaTime; - - if(Globals.controlHandler != null && !Globals.controlHandler.isMouseVisible()){ - yaw = yaw + event.getDeltaX() * mouseSensitivity; - pitch = pitch - event.getDeltaY() * mouseSensitivity; - - if (pitch > 100.0f) { - pitch = 100.0f; - } - if (pitch < -99.0f) { - pitch = -99.0f; - } - } - - if(Crosshair.getCrosshairActive()){ - - // if(Globals.playerCharacter != null){ - // Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter); - // CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z)); - // } - - Vector3d characterPos = EntityUtils.getPosition(Globals.playerCharacter); - Vector3d targetPos = Crosshair.getTargetPosition(); - Vector3d diffed = new Vector3d(targetPos).sub(characterPos).mul(-1).normalize(); - cameraRotationVector.set((float)diffed.x, 0.5f, (float)diffed.z).normalize(); - - yaw = (float)Math.toDegrees(Math.atan2(diffed.z, diffed.x)); - - CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch); - CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw); - - } else { - CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch); - CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw); - - // if(Globals.playerCharacter != null){ - // Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter); - // CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z)); - // } - - float cam_Player_Orbit_Magnitude = 5f; - cameraRotationVector.x = 0 + (float) Math.cos(yaw / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; - cameraRotationVector.y = 0 + (float) Math.sin(pitch / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; - cameraRotationVector.z = 0 + (float) Math.sin(yaw / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; - cameraRotationVector.normalize(); - } - CameraEntityUtils.setCameraEye(Globals.playerCamera, cameraRotationVector); - - Globals.viewMatrix = CameraEntityUtils.getCameraViewMatrix(Globals.playerCamera); + controls.get(INPUT_CODE_CAMERA_ROTATION).setOnMove(new Control.MouseCallback(){public void execute(MouseEvent event){ + Globals.cameraHandler.handleMouseEvent(event); }}); /* Move forward @@ -658,6 +605,24 @@ public class ControlHandler { } } }}); + + mainGameControlList.add(controls.get(INPUT_CODE_IRON_SIGHT)); + controls.get(INPUT_CODE_IRON_SIGHT).setOnPress(new ControlMethod() {public void execute() { + if(Globals.playerCharacter != null){ + IronSightTree ironSightTree = IronSightTree.getIronSightTree(Globals.playerCharacter); + if(ironSightTree != null){ + ironSightTree.start(); + } + } + }}); + controls.get(INPUT_CODE_IRON_SIGHT).setOnRelease(new ControlMethod() {public void execute() { + if(Globals.playerCharacter != null){ + IronSightTree ironSightTree = IronSightTree.getIronSightTree(Globals.playerCharacter); + if(ironSightTree != null){ + ironSightTree.release(); + } + } + }}); /* Interact diff --git a/src/main/java/electrosphere/entity/EntityDataStrings.java b/src/main/java/electrosphere/entity/EntityDataStrings.java index a732c8f7..0d2eddc0 100644 --- a/src/main/java/electrosphere/entity/EntityDataStrings.java +++ b/src/main/java/electrosphere/entity/EntityDataStrings.java @@ -62,6 +62,7 @@ public class EntityDataStrings { */ public static final String DATA_STRING_CAMERA_ORBIT_TARGET = "cameraOrbitTarget"; public static final String DATA_STRING_CAMERA_ORBIT_DISTANCE = "cameraOrbitDistance"; + public static final String CAMERA_ORBIT_RADIAL_OFFSET = "cameraOrbitRadialOffset"; /* Light Entity @@ -205,6 +206,11 @@ public class EntityDataStrings { Inventory in general */ public static final String NATURAL_INVENTORY = "inventoryNatural"; + + /* + Iron sight + */ + public static final String IRON_SIGHT_TREE = "ironSightTree"; /* Entity categories diff --git a/src/main/java/electrosphere/entity/state/ironsight/IronSightTree.java b/src/main/java/electrosphere/entity/state/ironsight/IronSightTree.java new file mode 100644 index 00000000..b73f94df --- /dev/null +++ b/src/main/java/electrosphere/entity/state/ironsight/IronSightTree.java @@ -0,0 +1,70 @@ +package electrosphere.entity.state.ironsight; + +import org.joml.Vector3f; + +import electrosphere.entity.Entity; +import electrosphere.entity.EntityDataStrings; +import electrosphere.entity.state.BehaviorTree; +import electrosphere.entity.types.camera.CameraEntityUtils; +import electrosphere.main.Globals; + +public class IronSightTree implements BehaviorTree { + + static enum IronSightTreeState { + ACTIVE, + INACTIVE, + } + + IronSightTreeState state = IronSightTreeState.INACTIVE; + boolean cameraZoomedIn = false; + + float regularRadius = 1.0f; + float zoomedInRadius = 0.1f; + Vector3f offcenterOffset = new Vector3f(-0.1f,1,0); + + + public void start(){ + state = IronSightTreeState.ACTIVE; + } + + public void release(){ + state = IronSightTreeState.INACTIVE; + } + + @Override + public void simulate() { + switch(state){ + case ACTIVE: + if(!cameraZoomedIn){ + cameraZoomedIn = true; + CameraEntityUtils.setOrbitalCameraDistance(Globals.playerCamera, zoomedInRadius); + Globals.cameraHandler.updateRadialOffset(new Vector3f(0,1,0.5f)); + Globals.cameraHandler.updateGlobalCamera(); + } + break; + case INACTIVE: + if(cameraZoomedIn){ + cameraZoomedIn = false; + CameraEntityUtils.setOrbitalCameraDistance(Globals.playerCamera, regularRadius); + Globals.cameraHandler.updateRadialOffset(new Vector3f(0,1,0)); + Globals.cameraHandler.updateGlobalCamera(); + } + break; + } + } + + public static IronSightTree getIronSightTree(Entity creature){ + Object rVal; + if((rVal = creature.getData(EntityDataStrings.IRON_SIGHT_TREE)) != null && rVal instanceof IronSightTree){ + return (IronSightTree) rVal; + } + return null; + } + + public static void attachIronSightTree(Entity player){ + IronSightTree ironSightTree = new IronSightTree(); + player.putData(EntityDataStrings.IRON_SIGHT_TREE, ironSightTree); + Globals.entityManager.registerBehaviorTree(ironSightTree); + } + +} diff --git a/src/main/java/electrosphere/entity/state/rotator/RotatorTree.java b/src/main/java/electrosphere/entity/state/rotator/RotatorTree.java index 780c9d74..0aaee507 100644 --- a/src/main/java/electrosphere/entity/state/rotator/RotatorTree.java +++ b/src/main/java/electrosphere/entity/state/rotator/RotatorTree.java @@ -58,7 +58,7 @@ public class RotatorTree { // currentRotation. } if(followsView){ - + // Quaternionf currentRotation = entityActor.getBoneRotation(parentBone); } } //recurse to children diff --git a/src/main/java/electrosphere/entity/types/camera/CameraEntityUtils.java b/src/main/java/electrosphere/entity/types/camera/CameraEntityUtils.java index ca305f76..84244728 100644 --- a/src/main/java/electrosphere/entity/types/camera/CameraEntityUtils.java +++ b/src/main/java/electrosphere/entity/types/camera/CameraEntityUtils.java @@ -23,6 +23,8 @@ public class CameraEntityUtils { rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_TYPE, EntityDataStrings.DATA_STRING_CAMERA_TYPE_BASIC); rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_CENTER, center); rVal.putData(EntityDataStrings .DATA_STRING_CAMERA_EYE, eye); + rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_ORBIT_DISTANCE, 1.0f); + rVal.putData(EntityDataStrings.CAMERA_ORBIT_RADIAL_OFFSET, new Vector3f(0,1,0)); rVal.putData(EntityDataStrings.CAMERA_PITCH, 0.0f); rVal.putData(EntityDataStrings.CAMERA_YAW, 0.0f); return rVal; @@ -33,7 +35,9 @@ public class CameraEntityUtils { Globals.entityManager.registerEntity(rVal); rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_TYPE, EntityDataStrings.DATA_STRING_CAMERA_TYPE_ORBIT); rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_CENTER, center); - rVal.putData(EntityDataStrings .DATA_STRING_CAMERA_EYE, eye); + rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_EYE, eye); + rVal.putData(EntityDataStrings.DATA_STRING_CAMERA_ORBIT_DISTANCE, 1.0f); + rVal.putData(EntityDataStrings.CAMERA_ORBIT_RADIAL_OFFSET, new Vector3f(0,1,0)); rVal.putData(EntityDataStrings.CAMERA_PITCH, 0.0f); rVal.putData(EntityDataStrings.CAMERA_YAW, 0.0f); BehaviorTree entityTrackingTree = new BehaviorTree() { @@ -42,7 +46,7 @@ public class CameraEntityUtils { // TODO Auto-generated method stub if(toTrack != null){ Vector3d entityPos = EntityUtils.getPosition(toTrack); - CameraEntityUtils.setCameraCenter(rVal, new Vector3f((float)entityPos.x,(float)entityPos.y,(float)entityPos.z)); + CameraEntityUtils.setCameraCenter(rVal, new Vector3f((float)entityPos.x,(float)entityPos.y,(float)entityPos.z).add(getOrbitalCameraRadialOffset(rVal))); } } }; @@ -57,6 +61,18 @@ public class CameraEntityUtils { public static float getOrbitalCameraDistance(Entity camera){ return (float)camera.getData(EntityDataStrings.DATA_STRING_CAMERA_ORBIT_DISTANCE); } + + public static void setOrbitalCameraDistance(Entity camera, float distance){ + camera.putData(EntityDataStrings.DATA_STRING_CAMERA_ORBIT_DISTANCE, distance); + } + + public static Vector3f getOrbitalCameraRadialOffset(Entity camera){ + return (Vector3f)camera.getData(EntityDataStrings.CAMERA_ORBIT_RADIAL_OFFSET); + } + + public static void setOrbitalCameraRadialOffset(Entity camera, Vector3f offset){ + camera.putData(EntityDataStrings.CAMERA_ORBIT_RADIAL_OFFSET, offset); + } public static void setCameraCenter(Entity camera, Vector3f center){ camera.putData(EntityDataStrings.DATA_STRING_CAMERA_CENTER, center); @@ -97,7 +113,7 @@ public class CameraEntityUtils { } public static Matrix4f getCameraViewMatrix(Entity camera){ - Vector3f cameraCenter = new Vector3f(0,1,0); + Vector3f cameraCenter = new Vector3f(0,0,0);//getViewMatrixCenterOffset(camera); Vector3f cameraEye = new Vector3f(cameraCenter).add(getCameraEye(camera)); Vector3f cameraUp = new Vector3f(0,1.0f,0); // System.out.println("eye: " + cameraEye); diff --git a/src/main/java/electrosphere/main/Globals.java b/src/main/java/electrosphere/main/Globals.java index d598e54d..8c8577e1 100644 --- a/src/main/java/electrosphere/main/Globals.java +++ b/src/main/java/electrosphere/main/Globals.java @@ -8,6 +8,7 @@ import electrosphere.renderer.texture.Texture; import electrosphere.renderer.texture.TextureMap; import com.google.gson.Gson; import electrosphere.audio.AudioEngine; +import electrosphere.controls.CameraHandler; import electrosphere.controls.ControlCallback; import electrosphere.controls.ControlHandler; import electrosphere.controls.MouseCallback; @@ -151,6 +152,11 @@ public class Globals { // Database stuff // public static DatabaseController dbController = new DatabaseController(); + + // + //Camera handler stuff + // + public static CameraHandler cameraHandler = new CameraHandler(); // //current world diff --git a/src/main/java/electrosphere/net/server/ServerConnectionHandler.java b/src/main/java/electrosphere/net/server/ServerConnectionHandler.java index 37b7c3f0..ea75609a 100644 --- a/src/main/java/electrosphere/net/server/ServerConnectionHandler.java +++ b/src/main/java/electrosphere/net/server/ServerConnectionHandler.java @@ -3,6 +3,7 @@ package electrosphere.net.server; import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.Entity; import electrosphere.entity.EntityUtils; +import electrosphere.entity.state.ironsight.IronSightTree; import electrosphere.entity.types.item.ItemUtils; import electrosphere.entity.types.attach.AttachUtils; import electrosphere.entity.types.collision.CollisionObjUtils; @@ -106,6 +107,7 @@ public class ServerConnectionHandler implements Runnable { newPlayerObject.setWorldY(Globals.serverWorldData.convertRealToChunkSpace(Globals.spawnPoint.z)); Globals.dataCellManager.addPlayer(newPlayerObject); Globals.dataCellManager.movePlayer(newPlayerObject, Globals.serverWorldData.convertRealToChunkSpace(Globals.spawnPoint.x), Globals.serverWorldData.convertRealToChunkSpace(Globals.spawnPoint.z)); + IronSightTree.attachIronSightTree(newPlayerCharacter); // //spawn player sword // Entity sword = ItemUtils.spawnBasicItem("Katana"); // AttachUtils.attachEntityToEntityAtBone(newPlayerCharacter, sword, "Bone.031"); diff --git a/src/main/java/electrosphere/renderer/actor/Actor.java b/src/main/java/electrosphere/renderer/actor/Actor.java index f5b3f9b7..af539533 100644 --- a/src/main/java/electrosphere/renderer/actor/Actor.java +++ b/src/main/java/electrosphere/renderer/actor/Actor.java @@ -29,6 +29,7 @@ public class Actor { ActorMeshMask meshMask = new ActorMeshMask(); List shaderMasks = new LinkedList(); Map textureMap = null; + Map nodeTransformMaskMap; public Actor(String modelPath){ this.modelPath = modelPath; diff --git a/src/main/java/electrosphere/renderer/actor/ActorNodeTransformMask.java b/src/main/java/electrosphere/renderer/actor/ActorNodeTransformMask.java new file mode 100644 index 00000000..e9541ff0 --- /dev/null +++ b/src/main/java/electrosphere/renderer/actor/ActorNodeTransformMask.java @@ -0,0 +1,30 @@ +package electrosphere.renderer.actor; + +import org.joml.Quaternionf; +import org.joml.Vector3f; + +public class ActorNodeTransformMask { + + Vector3f translation; + Quaternionf rotation; + Vector3f scale; + + public ActorNodeTransformMask(Vector3f translation, Quaternionf rotation, Vector3f scale){ + this.translation = translation; + this.rotation = rotation; + this.scale = scale; + } + + public Vector3f getTranslation(){ + return translation; + } + + public Quaternionf getRotation(){ + return rotation; + } + + public Vector3f getScale(){ + return scale; + } + +}