math class refactoring start
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				studiorailgun/Renderer/pipeline/head This commit looks good
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	studiorailgun/Renderer/pipeline/head This commit looks good
				
			This commit is contained in:
		
							parent
							
								
									b1b0ef0708
								
							
						
					
					
						commit
						9958a6c5d4
					
				| @ -16,7 +16,6 @@ Things that feel bad: | ||||
|     Can't instantly start/stop blocking | ||||
|     Attack animation feels slow | ||||
|     Hands don't align with blade | ||||
|       Need to be able to visualize bones | ||||
|   No audio | ||||
|   Short movement bursts feel jittery | ||||
|     Part of this may be cylinder collidable instead of capsule | ||||
|  | ||||
| @ -495,6 +495,7 @@ Fix jump bugginess | ||||
| (08/01/2024) | ||||
| Fix server entity camera rotation | ||||
| Fix world bounds application | ||||
| Bone debug rendering | ||||
| 
 | ||||
| # TODO | ||||
| 
 | ||||
|  | ||||
| @ -3,7 +3,7 @@ package electrosphere.audio; | ||||
| import org.joml.Vector3d; | ||||
| import org.joml.Vector3f; | ||||
| 
 | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| import static org.lwjgl.openal.AL10.*; | ||||
| 
 | ||||
|  | ||||
| @ -12,7 +12,7 @@ import electrosphere.entity.EntityUtils; | ||||
| import electrosphere.entity.types.camera.CameraEntityUtils; | ||||
| import electrosphere.net.parser.net.message.EntityMessage; | ||||
| import electrosphere.renderer.ui.events.MouseEvent; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| /** | ||||
|  * Handler for camera-related events and controls | ||||
|  | ||||
| @ -8,7 +8,7 @@ import electrosphere.server.datacell.ServerDataCell; | ||||
| import electrosphere.server.datacell.utils.EntityLookupUtils; | ||||
| import electrosphere.server.poseactor.PoseActor; | ||||
| import electrosphere.server.poseactor.PoseActorUtils; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| import org.joml.Quaterniond; | ||||
| import org.joml.Vector3d; | ||||
|  | ||||
| @ -33,7 +33,7 @@ import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree; | ||||
| import electrosphere.renderer.actor.Actor; | ||||
| import electrosphere.server.datacell.Realm; | ||||
| import electrosphere.server.poseactor.PoseActor; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| import java.util.List; | ||||
| import java.util.concurrent.CopyOnWriteArrayList; | ||||
|  | ||||
| @ -24,7 +24,7 @@ import electrosphere.entity.EntityDataStrings; | ||||
| import electrosphere.entity.EntityUtils; | ||||
| import electrosphere.entity.state.hitbox.HitboxCollectionState.HitboxState.HitboxShapeType; | ||||
| import electrosphere.game.data.collidable.HitboxData; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| /** | ||||
|  * The state of the collection of all hitboxes on this entity | ||||
|  | ||||
| @ -27,7 +27,7 @@ import electrosphere.net.synchronization.annotation.SyncedField; | ||||
| import electrosphere.net.synchronization.annotation.SynchronizableEnum; | ||||
| import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree; | ||||
| import electrosphere.renderer.anim.Animation; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| import electrosphere.renderer.actor.Actor; | ||||
| 
 | ||||
| import java.util.concurrent.CopyOnWriteArrayList; | ||||
|  | ||||
| @ -36,7 +36,7 @@ import electrosphere.script.utils.AccessTransforms; | ||||
| import electrosphere.server.datacell.utils.DataCellSearchUtils; | ||||
| import electrosphere.server.poseactor.PoseActor; | ||||
| import electrosphere.server.utils.ServerScriptUtils; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| import java.util.concurrent.CopyOnWriteArrayList; | ||||
| 
 | ||||
|  | ||||
| @ -11,7 +11,7 @@ import electrosphere.renderer.actor.Actor; | ||||
| import electrosphere.server.datacell.ServerDataCell; | ||||
| import electrosphere.server.datacell.utils.ServerEntityTagUtils; | ||||
| import electrosphere.server.poseactor.PoseActor; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| import java.util.LinkedList; | ||||
| import java.util.List; | ||||
|  | ||||
| @ -6,7 +6,7 @@ import electrosphere.entity.EntityCreationUtils; | ||||
| import electrosphere.entity.EntityDataStrings; | ||||
| import electrosphere.entity.EntityUtils; | ||||
| import electrosphere.entity.btree.BehaviorTree; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| import org.joml.Matrix4d; | ||||
| import org.joml.Matrix4f; | ||||
|  | ||||
| @ -73,8 +73,8 @@ import electrosphere.server.datacell.utils.ServerBehaviorTreeUtils; | ||||
| import electrosphere.server.datacell.utils.ServerEntityTagUtils; | ||||
| import electrosphere.server.poseactor.PoseActor; | ||||
| import electrosphere.server.poseactor.PoseActorUtils; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.Utilities; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| /** | ||||
|  * Utilities for creating creatures on the client and server | ||||
|  | ||||
| @ -19,7 +19,7 @@ import electrosphere.game.data.collidable.HitboxData; | ||||
| import electrosphere.game.data.projectile.ProjectileType; | ||||
| import electrosphere.server.datacell.Realm; | ||||
| import electrosphere.server.datacell.utils.ServerBehaviorTreeUtils; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| public class ProjectileUtils { | ||||
|      | ||||
|  | ||||
| @ -1,13 +1,8 @@ | ||||
| package electrosphere.renderer.actor; | ||||
| 
 | ||||
| import org.joml.Quaterniond; | ||||
| import org.joml.Vector3d; | ||||
| 
 | ||||
| import electrosphere.engine.Globals; | ||||
| import electrosphere.entity.Entity; | ||||
| import electrosphere.entity.EntityUtils; | ||||
| import electrosphere.entity.types.creature.CreatureUtils; | ||||
| import electrosphere.util.MathUtils; | ||||
| 
 | ||||
| /** | ||||
|  * Utils for dealing with actors | ||||
| @ -46,44 +41,4 @@ public class ActorUtils { | ||||
|     } | ||||
|      | ||||
|      | ||||
|     /** | ||||
|      * Gets the world position of a bone | ||||
|      * @param actorEntity The entity that has a bone | ||||
|      * @param boneName The name of the bone | ||||
|      */ | ||||
|     public static Vector3d getBoneWorldPosition(Entity actorEntity, String boneName){ | ||||
|         Actor actor = EntityUtils.getActor(actorEntity); | ||||
|         Vector3d localPos = new Vector3d(actor.getBonePosition(boneName)); | ||||
| 
 | ||||
|         //transform bone space | ||||
|         Vector3d position = new Vector3d(localPos); | ||||
|         position = position.mul(EntityUtils.getScale(actorEntity)); | ||||
|         position = position.rotate(new Quaterniond(EntityUtils.getRotation(actorEntity))); | ||||
|         //transform worldspace | ||||
|         position.add(new Vector3d(EntityUtils.getPosition(actorEntity))); | ||||
|         return position; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Gets the global rotation of the bone | ||||
|      * @param actorEntity The entity with the bone | ||||
|      * @param boneName The name of the bone | ||||
|      * @return The global rotation of the bone | ||||
|      */ | ||||
|     public static Quaterniond getBoneWorldRotation(Entity actorEntity, String boneName){ | ||||
|         Actor actor = EntityUtils.getActor(actorEntity); | ||||
|         Quaterniond localRot = actor.getBoneRotation(boneName); | ||||
| 
 | ||||
|         Vector3d facingAngle = CreatureUtils.getFacingVector(actorEntity); | ||||
|         if(facingAngle == null){ | ||||
|             facingAngle = MathUtils.getOriginVector(); | ||||
|         } | ||||
|         //calculate rotation of model | ||||
|         return new Quaterniond() | ||||
|             .rotationTo(MathUtils.getOriginVector(), new Vector3d(facingAngle.x,facingAngle.y,facingAngle.z)) | ||||
|             .mul(localRot) | ||||
|             .normalize(); | ||||
|     } | ||||
|      | ||||
|      | ||||
| } | ||||
|  | ||||
| @ -14,10 +14,10 @@ import electrosphere.renderer.OpenGLState; | ||||
| import electrosphere.renderer.RenderPipelineState; | ||||
| import electrosphere.renderer.RenderingEngine; | ||||
| import electrosphere.renderer.actor.Actor; | ||||
| import electrosphere.renderer.actor.ActorUtils; | ||||
| import electrosphere.renderer.model.Bone; | ||||
| import electrosphere.renderer.model.Model; | ||||
| import electrosphere.renderer.pipelines.RenderPipeline; | ||||
| import electrosphere.util.math.MathBones; | ||||
| 
 | ||||
| /** | ||||
|  * Renders the bones for a given mesh | ||||
| @ -71,8 +71,8 @@ public class DebugBonesPipeline implements RenderPipeline { | ||||
|             Model boneModel = Globals.assetManager.fetchModel("Models/basic/geometry/unitcylinder.fbx"); | ||||
|             boneModel.getMaterials().get(0).set_diffuse(Globals.textureDiffuseDefault); | ||||
|             for(Bone bone : targetActor.getBoneValues()){ | ||||
|                 Vector3d bonePos = ActorUtils.getBoneWorldPosition(targetEntity, bone.boneID); | ||||
|                 Quaterniond boneRot = ActorUtils.getBoneWorldRotation(targetEntity, bone.boneID); | ||||
|                 Vector3d bonePos = MathBones.getBoneWorldPosition(targetEntity, bone.boneID); | ||||
|                 Quaterniond boneRot = MathBones.getBoneWorldRotation(targetEntity, bone.boneID); | ||||
| 
 | ||||
|                 //put pos + rot into model | ||||
|                 Vector3f cameraModifiedPosition = new Vector3f((float)bonePos.x,(float)bonePos.y,(float)bonePos.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)); | ||||
|  | ||||
| @ -18,7 +18,7 @@ import electrosphere.engine.Main; | ||||
| import electrosphere.logger.LoggerInterface; | ||||
| import electrosphere.menu.tutorial.TutorialMenus; | ||||
| import electrosphere.util.FileUtils; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| /** | ||||
|  * Interface for executing scripts in the game engine | ||||
|  | ||||
| @ -13,7 +13,7 @@ import electrosphere.entity.types.item.ItemUtils; | ||||
| import electrosphere.server.ai.AITree; | ||||
| import electrosphere.server.datacell.Realm; | ||||
| import electrosphere.server.datacell.utils.DataCellSearchUtils; | ||||
| import electrosphere.util.MathUtils; | ||||
| import electrosphere.util.math.MathUtils; | ||||
| 
 | ||||
| import org.joml.Quaterniond; | ||||
| import org.joml.Vector3d; | ||||
|  | ||||
							
								
								
									
										58
									
								
								src/main/java/electrosphere/util/math/MathBones.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/main/java/electrosphere/util/math/MathBones.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | ||||
| package electrosphere.util.math; | ||||
| 
 | ||||
| import org.joml.Quaterniond; | ||||
| import org.joml.Vector3d; | ||||
| 
 | ||||
| import electrosphere.entity.Entity; | ||||
| import electrosphere.entity.EntityUtils; | ||||
| import electrosphere.entity.types.creature.CreatureUtils; | ||||
| import electrosphere.renderer.actor.Actor; | ||||
| 
 | ||||
| /** | ||||
|  * Math functions related to bones | ||||
|  */ | ||||
| public class MathBones { | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * Gets the world position of a bone | ||||
|      * @param actorEntity The entity that has a bone | ||||
|      * @param boneName The name of the bone | ||||
|      */ | ||||
|     public static Vector3d getBoneWorldPosition(Entity actorEntity, String boneName){ | ||||
|         Actor actor = EntityUtils.getActor(actorEntity); | ||||
|         Vector3d localPos = new Vector3d(actor.getBonePosition(boneName)); | ||||
| 
 | ||||
|         //transform bone space | ||||
|         Vector3d position = new Vector3d(localPos); | ||||
|         position = position.mul(EntityUtils.getScale(actorEntity)); | ||||
|         position = position.rotate(new Quaterniond(EntityUtils.getRotation(actorEntity))); | ||||
|         //transform worldspace | ||||
|         position.add(new Vector3d(EntityUtils.getPosition(actorEntity))); | ||||
|         return position; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Gets the global rotation of the bone | ||||
|      * @param actorEntity The entity with the bone | ||||
|      * @param boneName The name of the bone | ||||
|      * @return The global rotation of the bone | ||||
|      */ | ||||
|     public static Quaterniond getBoneWorldRotation(Entity actorEntity, String boneName){ | ||||
|         Actor actor = EntityUtils.getActor(actorEntity); | ||||
|         Quaterniond localRot = actor.getBoneRotation(boneName); | ||||
| 
 | ||||
|         Vector3d facingAngle = CreatureUtils.getFacingVector(actorEntity); | ||||
|         if(facingAngle == null){ | ||||
|             facingAngle = MathUtils.getOriginVector(); | ||||
|         } | ||||
|         //calculate rotation of model | ||||
|         return new Quaterniond() | ||||
|             .rotationTo(MathUtils.getOriginVector(), new Vector3d(facingAngle.x,facingAngle.y,facingAngle.z)) | ||||
|             .mul(localRot) | ||||
|             .normalize(); | ||||
|     } | ||||
|      | ||||
|      | ||||
| } | ||||
| @ -1,4 +1,4 @@ | ||||
| package electrosphere.util; | ||||
| package electrosphere.util.math; | ||||
| 
 | ||||
| import org.joml.Quaterniond; | ||||
| import org.joml.Vector3d; | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user