Attaching items to entity's bones
This commit is contained in:
		
							parent
							
								
									7379afbbc7
								
							
						
					
					
						commit
						323a966516
					
				| @ -75,10 +75,27 @@ public class EntityDataStrings { | |||||||
|     public static final String DATA_STRING_COLLISION_ENTITY_TYPE_SPHERE = "collisionSphere"; |     public static final String DATA_STRING_COLLISION_ENTITY_TYPE_SPHERE = "collisionSphere"; | ||||||
|      |      | ||||||
|     public static final String COLLISION_ENTITY_DATA_TYPE = "collisionDataType"; |     public static final String COLLISION_ENTITY_DATA_TYPE = "collisionDataType"; | ||||||
|  |     public static final String COLLISION_ENTITY_DATA_TYPE_HIT = "collisionDataTypeHit"; | ||||||
|  |     public static final String COLLISION_ENTITY_DATA_TYPE_HURT = "collisionDataTypeHurt"; | ||||||
|      |      | ||||||
|     public static final String COLLISION_ENTITY_DATA_PARENT = "collisionDataParent"; |     public static final String COLLISION_ENTITY_DATA_PARENT = "collisionDataParent"; | ||||||
|      |      | ||||||
|     public static final String COLLISION_ENTITY_DATA_BONE = "collisionDataBone"; |     public static final String COLLISION_ENTITY_DATA_BONE = "collisionDataBone"; | ||||||
|  |     public static final String COLLISION_ENTITY_DATA_SIZE = "collisionSphereSize"; | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     /* | ||||||
|  |     Attach Entity | ||||||
|  |     */ | ||||||
|  |     public static final String ATTACH_ENTITY_IS_ATTACHED = "attachIsAttached"; | ||||||
|  |     public static final String ATTACH_PARENT = "attachParent"; | ||||||
|  |     public static final String ATTACH_TARGET_BONE = "attachTargetBone"; | ||||||
|  |      | ||||||
|  |     /* | ||||||
|  |     Item Entity | ||||||
|  |     */ | ||||||
|  |     public static final String ITEM_IS_ITEM = "itemIsItem"; | ||||||
|  |     public static final String ITEM_TYPE = "itemType"; | ||||||
|      |      | ||||||
|      |      | ||||||
| } | } | ||||||
|  | |||||||
| @ -17,6 +17,8 @@ public class EntityManager { | |||||||
|     static CopyOnWriteArrayList<Entity> moveableList = new CopyOnWriteArrayList(); |     static CopyOnWriteArrayList<Entity> moveableList = new CopyOnWriteArrayList(); | ||||||
|     static CopyOnWriteArrayList<Entity> lightList = new CopyOnWriteArrayList(); |     static CopyOnWriteArrayList<Entity> lightList = new CopyOnWriteArrayList(); | ||||||
|     static CopyOnWriteArrayList<Entity> uiList = new CopyOnWriteArrayList(); |     static CopyOnWriteArrayList<Entity> uiList = new CopyOnWriteArrayList(); | ||||||
|  |     static CopyOnWriteArrayList<Entity> itemList = new CopyOnWriteArrayList(); | ||||||
|  |     static CopyOnWriteArrayList<Entity> attachList = new CopyOnWriteArrayList(); | ||||||
|      |      | ||||||
|     public EntityManager(){ |     public EntityManager(){ | ||||||
|          |          | ||||||
| @ -59,6 +61,22 @@ public class EntityManager { | |||||||
|         return uiList; |         return uiList; | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |     public void registerItemEntity(Entity e){ | ||||||
|  |         itemList.add(e); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public CopyOnWriteArrayList<Entity> getItemEntities(){ | ||||||
|  |         return itemList; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public void registerAttachedEntity(Entity e){ | ||||||
|  |         attachList.add(e); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public CopyOnWriteArrayList<Entity> getAttachedEntities(){ | ||||||
|  |         return attachList; | ||||||
|  |     } | ||||||
|  |      | ||||||
|     public void deregisterEntity(Entity e){ |     public void deregisterEntity(Entity e){ | ||||||
|         if(lightList.contains(e)){ |         if(lightList.contains(e)){ | ||||||
|             lightList.remove(e); |             lightList.remove(e); | ||||||
| @ -76,6 +94,9 @@ public class EntityManager { | |||||||
|         if(uiList.contains(e)){ |         if(uiList.contains(e)){ | ||||||
|             uiList.remove(e); |             uiList.remove(e); | ||||||
|         } |         } | ||||||
|  |         if(itemList.contains(e)){ | ||||||
|  |             itemList.remove(e); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     public void overrideEntityId(Entity e, int id){ |     public void overrideEntityId(Entity e, int id){ | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ public class CreatureUtils { | |||||||
|         CreatureType rawType = Globals.entityTypeMap.get(creatureId); |         CreatureType rawType = Globals.entityTypeMap.get(creatureId); | ||||||
|         Entity rVal = EntityUtils.spawnDrawableEntity(rawType.getModelPath()); |         Entity rVal = EntityUtils.spawnDrawableEntity(rawType.getModelPath()); | ||||||
|         for(HitboxData hitboxdata : rawType.getHitboxes()){ |         for(HitboxData hitboxdata : rawType.getHitboxes()){ | ||||||
|             Globals.hitboxManager.registerHitbox(HitboxUtils.spawnRegularHitbox(rVal, hitboxdata.getBone())); |             Globals.hitboxManager.registerHitbox(HitboxUtils.spawnRegularHitbox(rVal, hitboxdata.getBone(), hitboxdata.getSize())); | ||||||
|         } |         } | ||||||
|         rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_IS_CREATURE, true); |         rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_IS_CREATURE, true); | ||||||
|         rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_TYPE, creatureId); |         rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_TYPE, creatureId); | ||||||
|  | |||||||
| @ -7,6 +7,7 @@ package electrosphere.entity.types.creature.creaturemap; | |||||||
| public class HitboxData { | public class HitboxData { | ||||||
|     String type; |     String type; | ||||||
|     String bone; |     String bone; | ||||||
|  |     float size; | ||||||
| 
 | 
 | ||||||
|     public String getType() { |     public String getType() { | ||||||
|         return type; |         return type; | ||||||
| @ -16,5 +17,9 @@ public class HitboxData { | |||||||
|         return bone; |         return bone; | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |     public float getSize() { | ||||||
|  |         return size; | ||||||
|  |     } | ||||||
|  |      | ||||||
|      |      | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,10 +15,20 @@ import org.joml.Vector4f; | |||||||
| public class HitboxUtils { | public class HitboxUtils { | ||||||
|      |      | ||||||
|      |      | ||||||
|     public static Entity spawnRegularHitbox(Entity parent, String bone){ |     public static Entity spawnRegularHitbox(Entity parent, String bone, float size){ | ||||||
|         Entity rVal = new Entity(); |         Entity rVal = new Entity(); | ||||||
|         rVal.putData(EntityDataStrings.COLLISION_ENTITY_DATA_PARENT, parent); |         rVal.putData(EntityDataStrings.COLLISION_ENTITY_DATA_PARENT, parent); | ||||||
|         rVal.putData(EntityDataStrings.COLLISION_ENTITY_DATA_BONE, bone); |         rVal.putData(EntityDataStrings.COLLISION_ENTITY_DATA_BONE, bone); | ||||||
|  |         rVal.putData(EntityDataStrings.COLLISION_ENTITY_DATA_SIZE,size); | ||||||
|  |         rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3f(0,0,0)); | ||||||
|  |         return rVal; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public static Entity spawnRegularHurtbox(Entity parent, String bone, float size){ | ||||||
|  |         Entity rVal = new Entity(); | ||||||
|  |         rVal.putData(EntityDataStrings.COLLISION_ENTITY_DATA_PARENT, parent); | ||||||
|  |         rVal.putData(EntityDataStrings.COLLISION_ENTITY_DATA_BONE, bone); | ||||||
|  |         rVal.putData(EntityDataStrings.COLLISION_ENTITY_DATA_SIZE,size); | ||||||
|         rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3f(0,0,0)); |         rVal.putData(EntityDataStrings.DATA_STRING_POSITION, new Vector3f(0,0,0)); | ||||||
|         return rVal; |         return rVal; | ||||||
|     } |     } | ||||||
|  | |||||||
							
								
								
									
										45
									
								
								src/main/java/electrosphere/entity/types/item/ItemUtils.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/main/java/electrosphere/entity/types/item/ItemUtils.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | |||||||
|  | package electrosphere.entity.types.item; | ||||||
|  | 
 | ||||||
|  | import electrosphere.entity.Entity; | ||||||
|  | import electrosphere.entity.EntityDataStrings; | ||||||
|  | import electrosphere.entity.EntityUtils; | ||||||
|  | import electrosphere.entity.state.MovementTree; | ||||||
|  | import electrosphere.entity.types.creature.creaturemap.CreatureType; | ||||||
|  | import electrosphere.entity.types.creature.creaturemap.HitboxData; | ||||||
|  | import electrosphere.entity.types.hitbox.HitboxUtils; | ||||||
|  | import electrosphere.main.Globals; | ||||||
|  | import electrosphere.renderer.Actor; | ||||||
|  | import electrosphere.renderer.Model; | ||||||
|  | import org.joml.Quaternionf; | ||||||
|  | import org.joml.Vector3f; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * | ||||||
|  |  * @author amaterasu | ||||||
|  |  */ | ||||||
|  | public class ItemUtils { | ||||||
|  |     public static Entity spawnBasicItem(int itemId){ | ||||||
|  |         CreatureType rawType = Globals.entityTypeMap.get(itemId); | ||||||
|  |         Entity rVal = EntityUtils.spawnDrawableEntity(rawType.getModelPath()); | ||||||
|  |         for(HitboxData hitboxdata : rawType.getHitboxes()){ | ||||||
|  |             Globals.hitboxManager.registerHitbox(HitboxUtils.spawnRegularHitbox(rVal, hitboxdata.getBone(), hitboxdata.getSize())); | ||||||
|  |         } | ||||||
|  |         rVal.putData(EntityDataStrings.ITEM_IS_ITEM, true); | ||||||
|  |         rVal.putData(EntityDataStrings.ITEM_TYPE, itemId); | ||||||
|  |         rVal.putData(EntityDataStrings.DATA_STRING_SCALE, new Vector3f(0.005f,0.005f,0.005f)); | ||||||
|  |         rVal.putData(EntityDataStrings.DATA_STRING_ROTATION, new Quaternionf().identity().rotateY((float)(-Math.PI/2)).rotateZ(-(float)(Math.PI/2))); | ||||||
|  |         Globals.entityManager.registerItemEntity(rVal); | ||||||
|  |         return rVal; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public static void updateItemActorAnimation(Entity item){ | ||||||
|  |         Actor actor = EntityUtils.getEntityActor(item); | ||||||
|  |         if(actor.getCurrentAnimation() == null){ | ||||||
|  | //            Model model; | ||||||
|  | //            if((model = Globals.assetManager.fetchModel(actor.getModelPath()))!=null){ | ||||||
|  | //                model.describeAllAnimations(); | ||||||
|  | //            } | ||||||
|  |             actor.playAnimation("Sword|Idle"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										33
									
								
								src/main/java/electrosphere/game/state/AliveManager.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/main/java/electrosphere/game/state/AliveManager.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | |||||||
|  | package electrosphere.game.state; | ||||||
|  | 
 | ||||||
|  | import electrosphere.entity.Entity; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * | ||||||
|  |  * @author amaterasu | ||||||
|  |  */ | ||||||
|  | public class AliveManager { | ||||||
|  |     List<Entity> aliveList = new ArrayList(); | ||||||
|  |     List<Entity> deadList = new ArrayList(); | ||||||
|  |     List<Entity> invulnerableList = new ArrayList(); | ||||||
|  |      | ||||||
|  |     public List<Entity> getAliveEntities(){ | ||||||
|  |         return aliveList; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public List<Entity> getDeadEntities(){ | ||||||
|  |         return deadList; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public List<Entity> getInvulnerableEntities(){ | ||||||
|  |         return invulnerableList; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     public void registerAliveEntity(Entity e){ | ||||||
|  |         aliveList.add(e); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  | } | ||||||
							
								
								
									
										42
									
								
								src/main/java/electrosphere/game/state/AttachUtils.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/main/java/electrosphere/game/state/AttachUtils.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | package electrosphere.game.state; | ||||||
|  | 
 | ||||||
|  | import electrosphere.entity.Entity; | ||||||
|  | import electrosphere.entity.EntityDataStrings; | ||||||
|  | import electrosphere.entity.EntityUtils; | ||||||
|  | import electrosphere.main.Globals; | ||||||
|  | import electrosphere.renderer.Actor; | ||||||
|  | import org.joml.Quaternionf; | ||||||
|  | import org.joml.Vector3f; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * | ||||||
|  |  * @author amaterasu | ||||||
|  |  */ | ||||||
|  | public class AttachUtils { | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     public static void attachEntityToEntityAtBone(Entity parent, Entity toAttach, String boneName){ | ||||||
|  |         Globals.entityManager.registerAttachedEntity(toAttach); | ||||||
|  |         toAttach.putData(EntityDataStrings.ATTACH_ENTITY_IS_ATTACHED, true); | ||||||
|  |         toAttach.putData(EntityDataStrings.ATTACH_PARENT, parent); | ||||||
|  |         toAttach.putData(EntityDataStrings.ATTACH_TARGET_BONE, boneName); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public static void updateAttachedEntityPositions(){ | ||||||
|  |         for(Entity currentEntity : Globals.entityManager.getAttachedEntities()){ | ||||||
|  |             Entity parent; | ||||||
|  |             if((parent = (Entity)currentEntity.getData(EntityDataStrings.ATTACH_PARENT))!=null){ | ||||||
|  |                 String targetBone; | ||||||
|  |                 if((targetBone = (String)currentEntity.getData(EntityDataStrings.ATTACH_TARGET_BONE))!=null){ | ||||||
|  |                     Actor parentActor = EntityUtils.getEntityActor(parent); | ||||||
|  |                     Vector3f position = new Vector3f(parentActor.getBonePosition(targetBone)); | ||||||
|  |                     position = position.mul(((Vector3f)EntityUtils.getEntityScale(parent))); | ||||||
|  |                     position = position.rotate(((Quaternionf)EntityUtils.getEntityRotation(parent))); | ||||||
|  |                     position.add(new Vector3f(EntityUtils.getEntityPosition(parent))); | ||||||
|  |                     EntityUtils.getEntityPosition(currentEntity).set(position); | ||||||
|  |                     EntityUtils.getEntityRotation(currentEntity).add(EntityUtils.getEntityRotation(parent)).normalize(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -6,6 +6,7 @@ import electrosphere.entity.Entity; | |||||||
| import electrosphere.entity.EntityUtils; | import electrosphere.entity.EntityUtils; | ||||||
| import electrosphere.entity.collision.CollisionEngine; | import electrosphere.entity.collision.CollisionEngine; | ||||||
| import electrosphere.entity.types.creature.CreatureUtils; | import electrosphere.entity.types.creature.CreatureUtils; | ||||||
|  | import electrosphere.entity.types.item.ItemUtils; | ||||||
| import electrosphere.game.cell.DrawCellManager; | import electrosphere.game.cell.DrawCellManager; | ||||||
| import electrosphere.game.state.SimulationState.SimulationStateMachine; | import electrosphere.game.state.SimulationState.SimulationStateMachine; | ||||||
| import electrosphere.game.terrain.TerrainManager; | import electrosphere.game.terrain.TerrainManager; | ||||||
| @ -379,6 +380,12 @@ public class LoadingThread extends Thread { | |||||||
| //            EntityUtils.getEntityPosition(creature).set(rand.nextFloat() * 10, rand.nextFloat() * 10, rand.nextFloat() * 10); | //            EntityUtils.getEntityPosition(creature).set(rand.nextFloat() * 10, rand.nextFloat() * 10, rand.nextFloat() * 10); | ||||||
| //            EntityUtils.getEntityScale(creature).set(0.01f); | //            EntityUtils.getEntityScale(creature).set(0.01f); | ||||||
| //        } | //        } | ||||||
|  | 
 | ||||||
|  |         Entity sword = ItemUtils.spawnBasicItem(2); | ||||||
|  |         Entity testHomie = CreatureUtils.spawnBasicCreature(0, 0.1f, 0.5f); | ||||||
|  |         EntityUtils.getEntityScale(testHomie).set(0.005f); | ||||||
|  |         EntityUtils.getEntityPosition(testHomie).set(2,0,2); | ||||||
|  |         AttachUtils.attachEntityToEntityAtBone(testHomie, sword, "Bone.020"); | ||||||
|     } |     } | ||||||
|      |      | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -57,7 +57,7 @@ public class World { | |||||||
|         rVal.type = WorldType.GAME_WORLD; |         rVal.type = WorldType.GAME_WORLD; | ||||||
|         rVal.terrainManager = terrainManager; |         rVal.terrainManager = terrainManager; | ||||||
|         rVal.worldMinPoint = new Vector3f(0,0,0); |         rVal.worldMinPoint = new Vector3f(0,0,0); | ||||||
|         int worldDim = rVal.terrainManager.getWorldDiscreteSize(); |         int worldDim = rVal.terrainManager.getWorldDiscreteSize() * rVal.terrainManager.getChunkWidth(); | ||||||
|         rVal.worldMaxPoint = new Vector3f(worldDim,0,worldDim); |         rVal.worldMaxPoint = new Vector3f(worldDim,0,worldDim); | ||||||
|         return rVal; |         return rVal; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -18,6 +18,7 @@ import electrosphere.entity.types.creature.creaturemap.CreatureType; | |||||||
| import electrosphere.entity.types.creature.creaturemap.CreatureTypeList; | import electrosphere.entity.types.creature.creaturemap.CreatureTypeList; | ||||||
| import electrosphere.entity.types.hitbox.HitboxManager; | import electrosphere.entity.types.hitbox.HitboxManager; | ||||||
| import electrosphere.game.cell.DrawCellManager; | import electrosphere.game.cell.DrawCellManager; | ||||||
|  | import electrosphere.game.state.AliveManager; | ||||||
| import electrosphere.game.state.LoadingThread; | import electrosphere.game.state.LoadingThread; | ||||||
| import electrosphere.game.terrain.TerrainManager; | import electrosphere.game.terrain.TerrainManager; | ||||||
| import electrosphere.game.world.World; | import electrosphere.game.world.World; | ||||||
| @ -185,6 +186,9 @@ public class Globals { | |||||||
|     //ui text box for loading text |     //ui text box for loading text | ||||||
|     public static TextBox loadingBox; |     public static TextBox loadingBox; | ||||||
|      |      | ||||||
|  |     //life status entity manager | ||||||
|  |     public static AliveManager aliveManager; | ||||||
|  |      | ||||||
|      |      | ||||||
|     //the player camera entity |     //the player camera entity | ||||||
|     public static Entity playerCamera; |     public static Entity playerCamera; | ||||||
| @ -225,6 +229,8 @@ public class Globals { | |||||||
|         widgetManager = new WidgetManager(); |         widgetManager = new WidgetManager(); | ||||||
|         //hitbox manager |         //hitbox manager | ||||||
|         hitboxManager = new HitboxManager(); |         hitboxManager = new HitboxManager(); | ||||||
|  |         //alive manager | ||||||
|  |         aliveManager = new AliveManager(); | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     public static void initDefaultGraphicalResources(){ |     public static void initDefaultGraphicalResources(){ | ||||||
|  | |||||||
| @ -16,7 +16,9 @@ import electrosphere.entity.EntityDataStrings; | |||||||
| import electrosphere.entity.EntityUtils; | import electrosphere.entity.EntityUtils; | ||||||
| import electrosphere.entity.state.MovementTree; | import electrosphere.entity.state.MovementTree; | ||||||
| import electrosphere.entity.types.hitbox.HitboxUtils; | import electrosphere.entity.types.hitbox.HitboxUtils; | ||||||
|  | import electrosphere.entity.types.item.ItemUtils; | ||||||
| import electrosphere.game.cell.DrawCellManager; | import electrosphere.game.cell.DrawCellManager; | ||||||
|  | import electrosphere.game.state.AttachUtils; | ||||||
| import electrosphere.game.state.LoadingThread; | import electrosphere.game.state.LoadingThread; | ||||||
| import electrosphere.game.state.SimulationState; | import electrosphere.game.state.SimulationState; | ||||||
| import electrosphere.game.state.SimulationState.SimulationStateMachine; | import electrosphere.game.state.SimulationState.SimulationStateMachine; | ||||||
| @ -210,6 +212,12 @@ public class Main { | |||||||
|             ///    C L I E N T    S I M U L A T I O N    S T U F F |             ///    C L I E N T    S I M U L A T I O N    S T U F F | ||||||
|             /// |             /// | ||||||
|             if(SimulationState.simulationState == SimulationStateMachine.MAIN_SIMULATION || SimulationState.simulationState == SimulationStateMachine.ARENA_SIMULATION){ |             if(SimulationState.simulationState == SimulationStateMachine.MAIN_SIMULATION || SimulationState.simulationState == SimulationStateMachine.ARENA_SIMULATION){ | ||||||
|  |                 //make items play idle animation | ||||||
|  |                 for(Entity item : Globals.entityManager.getItemEntities()){ | ||||||
|  |                     ItemUtils.updateItemActorAnimation(item); | ||||||
|  |                 } | ||||||
|  |                 //update attached entity positions | ||||||
|  |                 AttachUtils.updateAttachedEntityPositions(); | ||||||
|                 //simulate creature behavior trees |                 //simulate creature behavior trees | ||||||
|                 for(Entity currentMoveable : Globals.entityManager.getMoveable()){ |                 for(Entity currentMoveable : Globals.entityManager.getMoveable()){ | ||||||
|                     MovementTree behaviorTree = CreatureUtils.getEntityMovementTree(currentMoveable); |                     MovementTree behaviorTree = CreatureUtils.getEntityMovementTree(currentMoveable); | ||||||
|  | |||||||
| @ -3,6 +3,8 @@ package electrosphere.net.server; | |||||||
| import electrosphere.entity.types.creature.CreatureUtils; | import electrosphere.entity.types.creature.CreatureUtils; | ||||||
| import electrosphere.entity.Entity; | import electrosphere.entity.Entity; | ||||||
| import electrosphere.entity.EntityUtils; | import electrosphere.entity.EntityUtils; | ||||||
|  | import electrosphere.entity.types.item.ItemUtils; | ||||||
|  | import electrosphere.game.state.AttachUtils; | ||||||
| import electrosphere.main.Globals; | import electrosphere.main.Globals; | ||||||
| import electrosphere.main.Main; | import electrosphere.main.Main; | ||||||
| import electrosphere.net.NetUtils; | import electrosphere.net.NetUtils; | ||||||
| @ -88,6 +90,10 @@ public class ServerConnectionHandler implements Runnable { | |||||||
|         Entity newPlayerCharacter = CreatureUtils.spawnBasicCreature(0, 0.001f, 0.05f); |         Entity newPlayerCharacter = CreatureUtils.spawnBasicCreature(0, 0.001f, 0.05f); | ||||||
|         EntityUtils.getEntityScale(newPlayerCharacter).set(0.005f); |         EntityUtils.getEntityScale(newPlayerCharacter).set(0.005f); | ||||||
|         EntityUtils.getEntityPosition(newPlayerCharacter).set(Globals.spawnPoint.x,Globals.drawCellManager.getElevationAtRealPoint(Globals.spawnPoint.x, Globals.spawnPoint.z),Globals.spawnPoint.z); |         EntityUtils.getEntityPosition(newPlayerCharacter).set(Globals.spawnPoint.x,Globals.drawCellManager.getElevationAtRealPoint(Globals.spawnPoint.x, Globals.spawnPoint.z),Globals.spawnPoint.z); | ||||||
|  |         //spawn player sword | ||||||
|  |         Entity sword = ItemUtils.spawnBasicItem(2); | ||||||
|  |         AttachUtils.attachEntityToEntityAtBone(newPlayerCharacter, sword, "Bone.020"); | ||||||
|  |         //set controller id | ||||||
|         CreatureUtils.setControllerPlayerId(newPlayerCharacter, playerID); |         CreatureUtils.setControllerPlayerId(newPlayerCharacter, playerID); | ||||||
|         if(Globals.mainConfig.runServer && Main.playerId == -1){ |         if(Globals.mainConfig.runServer && Main.playerId == -1){ | ||||||
|             Globals.playerCharacter = newPlayerCharacter; |             Globals.playerCharacter = newPlayerCharacter; | ||||||
|  | |||||||
| @ -111,9 +111,7 @@ public class Actor { | |||||||
|                 model.playAnimation(animation); |                 model.playAnimation(animation); | ||||||
|                 model.incrementTime(0.001); |                 model.incrementTime(0.001); | ||||||
|                 model.incrementTime(animationTime); |                 model.incrementTime(animationTime); | ||||||
|                 if(model.currentAnimation == null){ |                 model.update_node_transform(model.root_anim_node); | ||||||
|                     playingAnimation = false; |  | ||||||
|                 } |  | ||||||
|                 Bone currentBone = model.boneMap.get(boneName); |                 Bone currentBone = model.boneMap.get(boneName); | ||||||
|                 if(currentBone != null){ |                 if(currentBone != null){ | ||||||
|                     Vector4f result = currentBone.final_transform.transform(new Matrix4f(currentBone.inverseBindPoseMatrix).invert().transform(new Vector4f(rVal.x,rVal.y,rVal.z,1))); |                     Vector4f result = currentBone.final_transform.transform(new Matrix4f(currentBone.inverseBindPoseMatrix).invert().transform(new Vector4f(rVal.x,rVal.y,rVal.z,1))); | ||||||
|  | |||||||
| @ -1,8 +1,3 @@ | |||||||
| /* |  | ||||||
|  * To change this license header, choose License Headers in Project Properties. |  | ||||||
|  * To change this template file, choose Tools | Templates |  | ||||||
|  * and open the template in the editor. |  | ||||||
|  */ |  | ||||||
| package electrosphere.renderer; | package electrosphere.renderer; | ||||||
| 
 | 
 | ||||||
| import electrosphere.entity.CameraEntityUtils; | import electrosphere.entity.CameraEntityUtils; | ||||||
| @ -685,7 +680,7 @@ public class RenderUtils { | |||||||
|                 modelTransformMatrix.identity(); |                 modelTransformMatrix.identity(); | ||||||
|                 modelTransformMatrix.translate(new Vector3f(position).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)).sub(new Vector3f(0,1,0))); |                 modelTransformMatrix.translate(new Vector3f(position).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera)).sub(new Vector3f(0,1,0))); | ||||||
| //                modelTransformMatrix.translate(-0.25f, 0.0f, 0.5f); //center sphere | //                modelTransformMatrix.translate(-0.25f, 0.0f, 0.5f); //center sphere | ||||||
|                 modelTransformMatrix.scale(0.1f); |                 modelTransformMatrix.scale((Float)currentHitbox.getData(EntityDataStrings.COLLISION_ENTITY_DATA_SIZE)); | ||||||
|                 hitboxModel.modelMatrix = modelTransformMatrix; |                 hitboxModel.modelMatrix = modelTransformMatrix; | ||||||
|                 hitboxModel.draw(); |                 hitboxModel.draw(); | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -5,7 +5,36 @@ | |||||||
|             "modelPath" : "Models/person1walkanim.fbx", |             "modelPath" : "Models/person1walkanim.fbx", | ||||||
|             "hitboxes" : [ |             "hitboxes" : [ | ||||||
|                 { |                 { | ||||||
|                     "bone": "Bone.031" |                     "bone": "Bone.031", | ||||||
|  |                     "size": 0.08 | ||||||
|  |                 }, | ||||||
|  |                 { | ||||||
|  |                     "bone": "Bone.017", | ||||||
|  |                     "size": 0.08 | ||||||
|  |                 }, | ||||||
|  |                 { | ||||||
|  |                     "bone": "Bone.012", | ||||||
|  |                     "size": 0.08 | ||||||
|  |                 }, | ||||||
|  |                 { | ||||||
|  |                     "bone": "Bone.003", | ||||||
|  |                     "size": 0.08 | ||||||
|  |                 }, | ||||||
|  |                 { | ||||||
|  |                     "bone": "Bone.010", | ||||||
|  |                     "size": 0.11 | ||||||
|  |                 }, | ||||||
|  |                 { | ||||||
|  |                     "bone": "Bone.001", | ||||||
|  |                     "size": 0.11 | ||||||
|  |                 }, | ||||||
|  |                 { | ||||||
|  |                     "bone": "Bone", | ||||||
|  |                     "size": 0.15 | ||||||
|  |                 }, | ||||||
|  |                 { | ||||||
|  |                     "bone": "Bone.014", | ||||||
|  |                     "size": 0.12 | ||||||
|                 } |                 } | ||||||
|             ] |             ] | ||||||
|         }, |         }, | ||||||
| @ -13,6 +42,24 @@ | |||||||
|             "id" : 1, |             "id" : 1, | ||||||
|             "modelPath" : "", |             "modelPath" : "", | ||||||
|             "hitboxes" : [] |             "hitboxes" : [] | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "id" : 2, | ||||||
|  |             "modelPath" : "Models/katana1alt.fbx", | ||||||
|  |             "hitboxes" : [ | ||||||
|  |                 { | ||||||
|  |                     "bone": "Blade1", | ||||||
|  |                     "size": 0.08 | ||||||
|  |                 }, | ||||||
|  |                 { | ||||||
|  |                     "bone": "Blade2", | ||||||
|  |                     "size": 0.08 | ||||||
|  |                 }, | ||||||
|  |                 { | ||||||
|  |                     "bone": "Blade3", | ||||||
|  |                     "size": 0.08 | ||||||
|  |                 } | ||||||
|  |             ] | ||||||
|         } |         } | ||||||
|     ] |     ] | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/Models/katana1.fbx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/main/resources/Models/katana1.fbx
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/Models/katana1alt.fbx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/main/resources/Models/katana1alt.fbx
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -23,6 +23,12 @@ | |||||||
|                 "Textures/transparent_blue.png", |                 "Textures/transparent_blue.png", | ||||||
|                 "Textures/transparent_blue.png" |                 "Textures/transparent_blue.png" | ||||||
|             ] |             ] | ||||||
|  |         }, | ||||||
|  |         "Models/katana1.fbx": { | ||||||
|  |             "SwordMesh":  [ | ||||||
|  |                 "Textures/katana1.png", | ||||||
|  |                 "Textures/katana1.png" | ||||||
|  |             ] | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/main/resources/Textures/katana1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/main/resources/Textures/katana1.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.6 KiB | 
		Loading…
	
		Reference in New Issue
	
	Block a user