implement attach point offset and tweak human
This commit is contained in:
		
							parent
							
								
									74a9ea4a5f
								
							
						
					
					
						commit
						55cebdf33a
					
				| @ -236,7 +236,7 @@ | |||||||
|                     "equipPointId" : "handRight", |                     "equipPointId" : "handRight", | ||||||
|                     "bone" : "MiddleLower.R", |                     "bone" : "MiddleLower.R", | ||||||
|                     "offsetVector" : [], |                     "offsetVector" : [], | ||||||
|                     "offsetRotation" : [], |                     "offsetRotation" : [0.3057,0.2926,0.09933,0.9006], | ||||||
|                     "equipClassWhitelist" : [ |                     "equipClassWhitelist" : [ | ||||||
|                         "tool", |                         "tool", | ||||||
|                         "weapon", |                         "weapon", | ||||||
|  | |||||||
| @ -148,6 +148,7 @@ public class EntityDataStrings { | |||||||
|     public static final String ATTACH_PARENT = "attachParent"; |     public static final String ATTACH_PARENT = "attachParent"; | ||||||
|     public static final String ATTACH_TARGET_BONE = "attachTargetBone"; |     public static final String ATTACH_TARGET_BONE = "attachTargetBone"; | ||||||
|     public static final String ATTACH_CHILDREN_LIST = "attachChildrenList"; |     public static final String ATTACH_CHILDREN_LIST = "attachChildrenList"; | ||||||
|  |     public static final String ATTACH_ROTATION_OFFSET = "attachRotationOffset"; | ||||||
|      |      | ||||||
|     /* |     /* | ||||||
|     Item Entity |     Item Entity | ||||||
|  | |||||||
| @ -72,7 +72,7 @@ public class EquipState { | |||||||
|                             meshMask.queueMesh(modelName, toDraw); |                             meshMask.queueMesh(modelName, toDraw); | ||||||
|                         } |                         } | ||||||
|                         //attach to parent bone |                         //attach to parent bone | ||||||
|                         AttachUtils.attachEntityToEntityAtBone(parent, toEquip, point.getBone()); |                         AttachUtils.attachEntityToEntityAtBone(parent, toEquip, point.getBone(), AttachUtils.getEquipPointRotationOffset(point.getOffsetRotation())); | ||||||
|                         //make uncollidable |                         //make uncollidable | ||||||
|                         if(toEquip.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY) && toEquip.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){ |                         if(toEquip.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY) && toEquip.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){ | ||||||
|                             CollisionObject rigidBody = (CollisionObject)toEquip.getData(EntityDataStrings.PHYSICS_COLLISION_BODY); |                             CollisionObject rigidBody = (CollisionObject)toEquip.getData(EntityDataStrings.PHYSICS_COLLISION_BODY); | ||||||
| @ -88,7 +88,7 @@ public class EquipState { | |||||||
|             } else { |             } else { | ||||||
|                 //since we're not replacing meshes we must be attaching to a bone |                 //since we're not replacing meshes we must be attaching to a bone | ||||||
|                 equipMap.put(point.getEquipPointId(),toEquip); |                 equipMap.put(point.getEquipPointId(),toEquip); | ||||||
|                 AttachUtils.attachEntityToEntityAtBone(parent, toEquip, point.getBone()); |                 AttachUtils.attachEntityToEntityAtBone(parent, toEquip, point.getBone(), AttachUtils.getEquipPointRotationOffset(point.getOffsetRotation())); | ||||||
|                 if(toEquip.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY) && toEquip.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){ |                 if(toEquip.containsKey(EntityDataStrings.PHYSICS_COLLISION_BODY) && toEquip.containsKey(EntityDataStrings.PHYSICS_COLLIDABLE)){ | ||||||
|                     CollisionObject rigidBody = (CollisionObject)toEquip.getData(EntityDataStrings.PHYSICS_COLLISION_BODY); |                     CollisionObject rigidBody = (CollisionObject)toEquip.getData(EntityDataStrings.PHYSICS_COLLISION_BODY); | ||||||
|                     Globals.collisionEngine.deregisterPhysicsObject(rigidBody); |                     Globals.collisionEngine.deregisterPhysicsObject(rigidBody); | ||||||
|  | |||||||
| @ -23,11 +23,12 @@ import org.joml.Vector3f; | |||||||
| public class AttachUtils { | public class AttachUtils { | ||||||
|      |      | ||||||
|      |      | ||||||
|     public static void attachEntityToEntityAtBone(Entity parent, Entity toAttach, String boneName){ |     public static void attachEntityToEntityAtBone(Entity parent, Entity toAttach, String boneName, Quaternionf rotation){ | ||||||
|         Globals.entityManager.registerBoneAttachedEntity(toAttach); |         Globals.entityManager.registerBoneAttachedEntity(toAttach); | ||||||
|         toAttach.putData(EntityDataStrings.ATTACH_ENTITY_IS_ATTACHED, true); |         toAttach.putData(EntityDataStrings.ATTACH_ENTITY_IS_ATTACHED, true); | ||||||
|         toAttach.putData(EntityDataStrings.ATTACH_PARENT, parent); |         toAttach.putData(EntityDataStrings.ATTACH_PARENT, parent); | ||||||
|         toAttach.putData(EntityDataStrings.ATTACH_TARGET_BONE, boneName); |         toAttach.putData(EntityDataStrings.ATTACH_TARGET_BONE, boneName); | ||||||
|  |         toAttach.putData(EntityDataStrings.ATTACH_ROTATION_OFFSET, rotation); | ||||||
|         if(parent.containsKey(EntityDataStrings.ATTACH_CHILDREN_LIST)){ |         if(parent.containsKey(EntityDataStrings.ATTACH_CHILDREN_LIST)){ | ||||||
|             getChildrenList(parent).add(toAttach); |             getChildrenList(parent).add(toAttach); | ||||||
|         } else { |         } else { | ||||||
| @ -44,6 +45,8 @@ public class AttachUtils { | |||||||
|                 String targetBone; |                 String targetBone; | ||||||
|                 if((targetBone = (String)currentEntity.getData(EntityDataStrings.ATTACH_TARGET_BONE))!=null){ |                 if((targetBone = (String)currentEntity.getData(EntityDataStrings.ATTACH_TARGET_BONE))!=null){ | ||||||
|                     Actor parentActor = EntityUtils.getActor(parent); |                     Actor parentActor = EntityUtils.getActor(parent); | ||||||
|  |                     //get offset rotation | ||||||
|  |                     Quaternionf offsetRotation = getRotationOffset(currentEntity); | ||||||
|                     //transform bone space |                     //transform bone space | ||||||
|                     Vector3d position = new Vector3d(parentActor.getBonePosition(targetBone)); |                     Vector3d position = new Vector3d(parentActor.getBonePosition(targetBone)); | ||||||
|                     position = position.mul(((Vector3f)EntityUtils.getScale(parent))); |                     position = position.mul(((Vector3f)EntityUtils.getScale(parent))); | ||||||
| @ -57,7 +60,12 @@ public class AttachUtils { | |||||||
| //                    Quaternionf rotation = parentActor.getBoneRotation(targetBone); | //                    Quaternionf rotation = parentActor.getBoneRotation(targetBone); | ||||||
| //                    EntityUtils.getRotation(currentEntity).set(rotation).normalize(); | //                    EntityUtils.getRotation(currentEntity).set(rotation).normalize(); | ||||||
|                     Vector3d facingAngle = CreatureUtils.getFacingVector(parent); |                     Vector3d facingAngle = CreatureUtils.getFacingVector(parent); | ||||||
|                     EntityUtils.getRotation(currentEntity).rotationTo(new Vector3f(0,0,1), new Vector3f((float)facingAngle.x,(float)facingAngle.y,(float)facingAngle.z)).mul(parentActor.getBoneRotation(targetBone)).normalize(); |                     //calculate rotation of model | ||||||
|  |                     EntityUtils.getRotation(currentEntity) | ||||||
|  |                         .rotationTo(new Vector3f(0,0,1), new Vector3f((float)facingAngle.x,(float)facingAngle.y,(float)facingAngle.z)) | ||||||
|  |                         .mul(parentActor.getBoneRotation(targetBone)) | ||||||
|  |                         .mul(offsetRotation) | ||||||
|  |                         .normalize(); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @ -85,6 +93,10 @@ public class AttachUtils { | |||||||
|         return (Entity)e.getData(EntityDataStrings.ATTACH_PARENT); |         return (Entity)e.getData(EntityDataStrings.ATTACH_PARENT); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     protected static Quaternionf getRotationOffset(Entity e){ | ||||||
|  |         return (Quaternionf)e.getData(EntityDataStrings.ATTACH_ROTATION_OFFSET); | ||||||
|  |     } | ||||||
|  |      | ||||||
|     public static boolean hasChildren(Entity e){ |     public static boolean hasChildren(Entity e){ | ||||||
|         return e.containsKey(EntityDataStrings.ATTACH_CHILDREN_LIST) && !getChildrenList(e).isEmpty(); |         return e.containsKey(EntityDataStrings.ATTACH_CHILDREN_LIST) && !getChildrenList(e).isEmpty(); | ||||||
|     } |     } | ||||||
| @ -104,4 +116,9 @@ public class AttachUtils { | |||||||
|             parent.putData(EntityDataStrings.ATTACH_CHILDREN_LIST, childrenEntities); |             parent.putData(EntityDataStrings.ATTACH_CHILDREN_LIST, childrenEntities); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public static Quaternionf getEquipPointRotationOffset(List<Float> values){ | ||||||
|  |         return new Quaternionf(values.get(0),values.get(1),values.get(2),values.get(3)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -8,6 +8,8 @@ import electrosphere.entity.types.creature.CreatureUtils; | |||||||
| import electrosphere.entity.types.item.ItemUtils; | import electrosphere.entity.types.item.ItemUtils; | ||||||
| import electrosphere.game.server.ai.creature.MillAbout; | import electrosphere.game.server.ai.creature.MillAbout; | ||||||
| 
 | 
 | ||||||
|  | import org.joml.Quaterniond; | ||||||
|  | import org.joml.Quaternionf; | ||||||
| import org.joml.Vector3d; | import org.joml.Vector3d; | ||||||
| import org.joml.Vector3f; | import org.joml.Vector3f; | ||||||
| 
 | 
 | ||||||
| @ -23,7 +25,7 @@ public class UnitUtils { | |||||||
|         EntityUtils.getScale(goblin).set(0.005f); |         EntityUtils.getScale(goblin).set(0.005f); | ||||||
|         //give evil goblin sword |         //give evil goblin sword | ||||||
|         Entity goblinSword = ItemUtils.spawnBasicItem("Katana"); |         Entity goblinSword = ItemUtils.spawnBasicItem("Katana"); | ||||||
|         AttachUtils.attachEntityToEntityAtBone(goblin, goblinSword, "Bone.031"); |         AttachUtils.attachEntityToEntityAtBone(goblin, goblinSword, "Bone.031", new Quaternionf()); | ||||||
|         //attach ai to evil goblin |         //attach ai to evil goblin | ||||||
|         MillAbout.attachToCreature(goblin); |         MillAbout.attachToCreature(goblin); | ||||||
| //        MindlessAttacker.attachToCreature(goblin); | //        MindlessAttacker.attachToCreature(goblin); | ||||||
|  | |||||||
| @ -37,6 +37,7 @@ import java.util.Iterator; | |||||||
| import java.util.Random; | import java.util.Random; | ||||||
| import java.util.concurrent.TimeUnit; | import java.util.concurrent.TimeUnit; | ||||||
| import org.joml.Matrix4f; | import org.joml.Matrix4f; | ||||||
|  | import org.joml.Quaterniond; | ||||||
| import org.joml.Quaternionf; | import org.joml.Quaternionf; | ||||||
| import org.joml.Vector3f; | import org.joml.Vector3f; | ||||||
| import org.lwjgl.glfw.*; | import org.lwjgl.glfw.*; | ||||||
|  | |||||||
| @ -1,5 +1,8 @@ | |||||||
| package electrosphere.net.client.protocol; | package electrosphere.net.client.protocol; | ||||||
| 
 | 
 | ||||||
|  | import org.joml.Quaterniond; | ||||||
|  | import org.joml.Quaternionf; | ||||||
|  | 
 | ||||||
| import electrosphere.entity.Entity; | import electrosphere.entity.Entity; | ||||||
| import electrosphere.entity.EntityUtils; | import electrosphere.entity.EntityUtils; | ||||||
| import electrosphere.entity.types.attach.AttachUtils; | import electrosphere.entity.types.attach.AttachUtils; | ||||||
| @ -79,7 +82,7 @@ public class EntityProtocol { | |||||||
|                 Entity parent = Globals.entityManager.getEntityFromId(message.gettargetID()); |                 Entity parent = Globals.entityManager.getEntityFromId(message.gettargetID()); | ||||||
|                 LoggerInterface.loggerNetworking.DEBUG("Attach " + message.getentityID() + " to " + message.gettargetID() + " on bone " + message.getbone()); |                 LoggerInterface.loggerNetworking.DEBUG("Attach " + message.getentityID() + " to " + message.gettargetID() + " on bone " + message.getbone()); | ||||||
|                 if(child != null && parent != null){ |                 if(child != null && parent != null){ | ||||||
|                     AttachUtils.attachEntityToEntityAtBone(parent, child, message.getbone()); |                     AttachUtils.attachEntityToEntityAtBone(parent, child, message.getbone(), new Quaternionf()); | ||||||
|                 } |                 } | ||||||
|                 break; |                 break; | ||||||
|             case MOVEUPDATE: |             case MOVEUPDATE: | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user