server-synchronized jump
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				studiorailgun/Renderer/pipeline/head There was a failure building this commit
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	studiorailgun/Renderer/pipeline/head There was a failure building this commit
				
			This commit is contained in:
		
							parent
							
								
									335ead8341
								
							
						
					
					
						commit
						d409c3adef
					
				| @ -48,6 +48,7 @@ import electrosphere.net.server.player.Player; | |||||||
| import electrosphere.net.server.player.PlayerManager; | import electrosphere.net.server.player.PlayerManager; | ||||||
| import electrosphere.net.synchronization.ClientSynchronizationManager; | import electrosphere.net.synchronization.ClientSynchronizationManager; | ||||||
| import electrosphere.net.synchronization.EntityValueTrackingService; | import electrosphere.net.synchronization.EntityValueTrackingService; | ||||||
|  | import electrosphere.net.synchronization.ServerSynchronizationManager; | ||||||
| import electrosphere.renderer.RenderUtils; | import electrosphere.renderer.RenderUtils; | ||||||
| import electrosphere.renderer.RenderingEngine; | import electrosphere.renderer.RenderingEngine; | ||||||
| import electrosphere.renderer.actor.instance.InstanceManager; | import electrosphere.renderer.actor.instance.InstanceManager; | ||||||
| @ -142,6 +143,7 @@ public class Globals { | |||||||
|     // |     // | ||||||
|     public static Thread serverThread; |     public static Thread serverThread; | ||||||
|     public static Server server; |     public static Server server; | ||||||
|  |     public static ServerSynchronizationManager serverSynchronizationManager = new ServerSynchronizationManager(); | ||||||
|     public static boolean RUN_SERVER = true; |     public static boolean RUN_SERVER = true; | ||||||
| 
 | 
 | ||||||
|     // |     // | ||||||
|  | |||||||
| @ -3,6 +3,8 @@ package electrosphere.entity.state.movement.jump; | |||||||
| 
 | 
 | ||||||
| import electrosphere.net.parser.net.message.SynchronizationMessage; | import electrosphere.net.parser.net.message.SynchronizationMessage; | ||||||
| import electrosphere.net.synchronization.BehaviorTreeIdEnums; | import electrosphere.net.synchronization.BehaviorTreeIdEnums; | ||||||
|  | import electrosphere.net.synchronization.ServerSynchronizationManager; | ||||||
|  | 
 | ||||||
| import org.ode4j.math.DVector3C; | import org.ode4j.math.DVector3C; | ||||||
| import org.ode4j.ode.DBody; | import org.ode4j.ode.DBody; | ||||||
| 
 | 
 | ||||||
| @ -14,7 +16,6 @@ import electrosphere.entity.EntityUtils; | |||||||
| import electrosphere.entity.btree.BehaviorTree; | import electrosphere.entity.btree.BehaviorTree; | ||||||
| import electrosphere.entity.state.AnimationPriorities; | import electrosphere.entity.state.AnimationPriorities; | ||||||
| import electrosphere.entity.state.client.firstPerson.FirstPersonTree; | import electrosphere.entity.state.client.firstPerson.FirstPersonTree; | ||||||
| import electrosphere.entity.state.gravity.GravityUtils; |  | ||||||
| import electrosphere.game.data.creature.type.movement.JumpMovementSystem; | import electrosphere.game.data.creature.type.movement.JumpMovementSystem; | ||||||
| import electrosphere.net.synchronization.annotation.SyncedField; | import electrosphere.net.synchronization.annotation.SyncedField; | ||||||
| import electrosphere.net.synchronization.annotation.SynchronizableEnum; | import electrosphere.net.synchronization.annotation.SynchronizableEnum; | ||||||
| @ -79,8 +80,8 @@ public class ClientJumpTree implements BehaviorTree { | |||||||
|         Globals.clientConnection.queueOutgoingMessage( |         Globals.clientConnection.queueOutgoingMessage( | ||||||
|             SynchronizationMessage.constructClientRequestBTreeActionMessage( |             SynchronizationMessage.constructClientRequestBTreeActionMessage( | ||||||
|                 Globals.clientSceneWrapper.mapClientToServerId(parent.getId()), |                 Globals.clientSceneWrapper.mapClientToServerId(parent.getId()), | ||||||
|                 BehaviorTreeIdEnums.BTREE_CLIENTGROUNDMOVEMENTTREE_ID, |                 BehaviorTreeIdEnums.BTREE_CLIENTJUMPTREE_ID, | ||||||
|                 0 |                 ServerSynchronizationManager.SERVER_SYNC_START | ||||||
|             ) |             ) | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
| @ -97,19 +98,12 @@ public class ClientJumpTree implements BehaviorTree { | |||||||
|                 } |                 } | ||||||
|                 FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, jumpData.getAnimationJump()); |                 FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, jumpData.getAnimationJump()); | ||||||
|             } |             } | ||||||
|             currentFrame++; |  | ||||||
|             currentJumpForce = currentJumpForce * jumpFalloff; |  | ||||||
|             //stop body falling if it is |             //stop body falling if it is | ||||||
|             DBody body = PhysicsEntityUtils.getDBody(parent); |             DBody body = PhysicsEntityUtils.getDBody(parent); | ||||||
|             DVector3C linearVelocity = body.getLinearVel(); |             DVector3C linearVelocity = body.getLinearVel(); | ||||||
|             body.setLinearVel(linearVelocity.get0(), 0, linearVelocity.get2()); |             body.setLinearVel(linearVelocity.get0(), 0, linearVelocity.get2()); | ||||||
|             //push parent up |             //push parent up | ||||||
|             body.addForce(0, currentJumpForce, 0); |             body.addForce(0, currentJumpForce, 0); | ||||||
|             //potentially disable |  | ||||||
|             if(currentFrame >= jumpFrames){ |  | ||||||
|                 state = JumpState.AWAITING_LAND; |  | ||||||
|                 GravityUtils.clientAttemptActivateGravity(parent); |  | ||||||
|             } |  | ||||||
|             break; |             break; | ||||||
|             case INACTIVE: |             case INACTIVE: | ||||||
|             break; |             break; | ||||||
| @ -293,8 +287,8 @@ public class ClientJumpTree implements BehaviorTree { | |||||||
|         Globals.clientConnection.queueOutgoingMessage( |         Globals.clientConnection.queueOutgoingMessage( | ||||||
|             SynchronizationMessage.constructClientRequestBTreeActionMessage( |             SynchronizationMessage.constructClientRequestBTreeActionMessage( | ||||||
|                 Globals.clientSceneWrapper.mapClientToServerId(parent.getId()), |                 Globals.clientSceneWrapper.mapClientToServerId(parent.getId()), | ||||||
|                 BehaviorTreeIdEnums.BTREE_CLIENTGROUNDMOVEMENTTREE_ID, |                 BehaviorTreeIdEnums.BTREE_CLIENTJUMPTREE_ID, | ||||||
|                 1 |                 ServerSynchronizationManager.SERVER_SYNC_INTERRUPT | ||||||
|             ) |             ) | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -16,7 +16,6 @@ import electrosphere.entity.EntityDataStrings; | |||||||
| import electrosphere.entity.EntityUtils; | import electrosphere.entity.EntityUtils; | ||||||
| import electrosphere.entity.btree.BehaviorTree; | import electrosphere.entity.btree.BehaviorTree; | ||||||
| import electrosphere.entity.state.AnimationPriorities; | import electrosphere.entity.state.AnimationPriorities; | ||||||
| import electrosphere.entity.state.gravity.GravityUtils; |  | ||||||
| import electrosphere.entity.state.movement.jump.ClientJumpTree.JumpState; | import electrosphere.entity.state.movement.jump.ClientJumpTree.JumpState; | ||||||
| import electrosphere.game.data.creature.type.movement.JumpMovementSystem; | import electrosphere.game.data.creature.type.movement.JumpMovementSystem; | ||||||
| import electrosphere.net.synchronization.annotation.SyncedField; | import electrosphere.net.synchronization.annotation.SyncedField; | ||||||
| @ -58,9 +57,8 @@ public class ServerJumpTree implements BehaviorTree { | |||||||
|     public void start(){ |     public void start(){ | ||||||
|         if(state == JumpState.INACTIVE){ |         if(state == JumpState.INACTIVE){ | ||||||
|             this.setState(JumpState.ACTIVE); |             this.setState(JumpState.ACTIVE); | ||||||
|             currentFrame = 0; |             this.setCurrentFrame(0); | ||||||
|             currentJumpForce = jumpForce; |             this.setCurrentJumpForce(jumpForce); | ||||||
|             GravityUtils.serverAttemptActivateGravity(parent); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -76,8 +74,8 @@ public class ServerJumpTree implements BehaviorTree { | |||||||
|                         poseActor.incrementAnimationTime(0.0001); |                         poseActor.incrementAnimationTime(0.0001); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             currentFrame++; |                 this.setCurrentFrame(this.getCurrentFrame()+1); | ||||||
|             currentJumpForce = currentJumpForce * jumpFalloff; |                 this.setCurrentJumpForce(currentJumpForce * jumpFalloff); | ||||||
|                 //stop body falling if it is |                 //stop body falling if it is | ||||||
|                 DBody body = PhysicsEntityUtils.getDBody(parent); |                 DBody body = PhysicsEntityUtils.getDBody(parent); | ||||||
|                 DVector3C linearVelocity = body.getLinearVel(); |                 DVector3C linearVelocity = body.getLinearVel(); | ||||||
| @ -86,8 +84,7 @@ public class ServerJumpTree implements BehaviorTree { | |||||||
|                 body.addForce(0, currentJumpForce, 0); |                 body.addForce(0, currentJumpForce, 0); | ||||||
|                 //potentially disable |                 //potentially disable | ||||||
|                 if(currentFrame >= jumpFrames){ |                 if(currentFrame >= jumpFrames){ | ||||||
|                 state = JumpState.AWAITING_LAND; |                     this.setState(JumpState.AWAITING_LAND); | ||||||
|                 GravityUtils.serverAttemptActivateGravity(parent); |  | ||||||
|                 } |                 } | ||||||
|             break; |             break; | ||||||
|             case INACTIVE: |             case INACTIVE: | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| package electrosphere.net.server.protocol; | package electrosphere.net.server.protocol; | ||||||
| 
 | 
 | ||||||
|  | import electrosphere.engine.Globals; | ||||||
| import electrosphere.net.parser.net.message.SynchronizationMessage; | import electrosphere.net.parser.net.message.SynchronizationMessage; | ||||||
| import electrosphere.net.server.ServerConnectionHandler; | import electrosphere.net.server.ServerConnectionHandler; | ||||||
| import electrosphere.net.template.ServerProtocolTemplate; | import electrosphere.net.template.ServerProtocolTemplate; | ||||||
| @ -32,8 +33,9 @@ public class SynchronizationProtocol implements ServerProtocolTemplate<Synchroni | |||||||
|     @Override |     @Override | ||||||
|     public void handleSyncMessage(ServerConnectionHandler connectionHandler, SynchronizationMessage message) { |     public void handleSyncMessage(ServerConnectionHandler connectionHandler, SynchronizationMessage message) { | ||||||
|         switch(message.getMessageSubtype()){ |         switch(message.getMessageSubtype()){ | ||||||
|             case CLIENTREQUESTBTREEACTION: |             case CLIENTREQUESTBTREEACTION:{ | ||||||
|                 // throw new UnsupportedOperationException("Not implemented yet!"); |                 Globals.serverSynchronizationManager.pushMessage(message); | ||||||
|  |             } break; | ||||||
|             case UPDATECLIENTSTATE: |             case UPDATECLIENTSTATE: | ||||||
|             case UPDATECLIENTSTRINGSTATE: |             case UPDATECLIENTSTRINGSTATE: | ||||||
|             case UPDATECLIENTDOUBLESTATE: |             case UPDATECLIENTDOUBLESTATE: | ||||||
|  | |||||||
| @ -1,8 +1,88 @@ | |||||||
| package electrosphere.net.synchronization; | package electrosphere.net.synchronization; | ||||||
| 
 | 
 | ||||||
|  | import java.util.LinkedList; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.concurrent.CopyOnWriteArrayList; | ||||||
|  | 
 | ||||||
|  | import electrosphere.entity.Entity; | ||||||
|  | import electrosphere.entity.state.movement.jump.ServerJumpTree; | ||||||
|  | import electrosphere.net.parser.net.message.SynchronizationMessage; | ||||||
|  | import electrosphere.server.datacell.utils.EntityLookupUtils; | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Server service to handle synchronization packets from client (principally, requesting to start btrees) |  * Server service to handle synchronization packets from client (principally, requesting to start btrees) | ||||||
|  */ |  */ | ||||||
| public class ServerSynchronizationManager { | public class ServerSynchronizationManager { | ||||||
|      |      | ||||||
|  |     /** | ||||||
|  |      * Signal to start the specified tree | ||||||
|  |      */ | ||||||
|  |     public static final int SERVER_SYNC_START = 0; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Signal to interrupt the specified tree | ||||||
|  |      */ | ||||||
|  |     public static final int SERVER_SYNC_INTERRUPT = 1; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |      //The list of messages to loop through | ||||||
|  |     List<SynchronizationMessage> messages = new CopyOnWriteArrayList<SynchronizationMessage>(); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Pushes a message into the queue to be processed | ||||||
|  |      * @param message The message | ||||||
|  |      */ | ||||||
|  |     public void pushMessage(SynchronizationMessage message){ | ||||||
|  |         this.messages.add(message); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Processes all messages in the queue and then clears the queue | ||||||
|  |      */ | ||||||
|  |     public void processMessages(){ | ||||||
|  |         List<SynchronizationMessage> messagesToClear = new LinkedList<SynchronizationMessage>(); | ||||||
|  |         for(SynchronizationMessage message : messages){ | ||||||
|  |             //attempt to handle the message | ||||||
|  |             messagesToClear.add(message); | ||||||
|  |             switch(message.getMessageSubtype()){ | ||||||
|  |                 case CLIENTREQUESTBTREEACTION: { | ||||||
|  |                     Entity entity = EntityLookupUtils.getEntityById(message.getentityId()); | ||||||
|  |                     updateEntityState(entity,message.getbTreeId(),message); | ||||||
|  |                 } break; | ||||||
|  |                 case UPDATECLIENTSTATE: | ||||||
|  |                 case UPDATECLIENTDOUBLESTATE: | ||||||
|  |                 case UPDATECLIENTFLOATSTATE: | ||||||
|  |                 case UPDATECLIENTINTSTATE: | ||||||
|  |                 case UPDATECLIENTLONGSTATE: | ||||||
|  |                 case UPDATECLIENTSTRINGSTATE: | ||||||
|  |                 case ATTACHTREE: | ||||||
|  |                 case DETATCHTREE: | ||||||
|  |                 case LOADSCENE: | ||||||
|  |                     //silently ignore | ||||||
|  |                     break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         for(SynchronizationMessage message : messagesToClear){ | ||||||
|  |             messages.remove(message); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * <p> Automatically generated </p> | ||||||
|  |      * <p> | ||||||
|  |      * Updates the state of a given behavior tree on a given entity | ||||||
|  |      * </p> | ||||||
|  |      * @param entity The entity | ||||||
|  |      * @param bTreeId The id of the behavior tree | ||||||
|  |      * @param message The raw synchronization message holding the update data | ||||||
|  |      */ | ||||||
|  |     private void updateEntityState(Entity entity, int bTreeId, SynchronizationMessage message){ | ||||||
|  |         switch(bTreeId){ | ||||||
|  |             case BehaviorTreeIdEnums.BTREE_CLIENTJUMPTREE_ID: { | ||||||
|  |                 ServerJumpTree serverJumpTree = ServerJumpTree.getServerJumpTree(entity); | ||||||
|  |                 serverJumpTree.start(); | ||||||
|  |             } break; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -19,6 +19,9 @@ public class MainServerFunctions { | |||||||
|         if(Globals.server != null){ |         if(Globals.server != null){ | ||||||
|             Globals.server.synchronousPacketHandling(); |             Globals.server.synchronousPacketHandling(); | ||||||
|         } |         } | ||||||
|  |         if(Globals.serverSynchronizationManager != null){ | ||||||
|  |             Globals.serverSynchronizationManager.processMessages(); | ||||||
|  |         } | ||||||
|         Globals.profiler.endCpuSample(); |         Globals.profiler.endCpuSample(); | ||||||
| 
 | 
 | ||||||
|         // |         // | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user