Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
70 lines
2.6 KiB
Java
70 lines
2.6 KiB
Java
package testutils;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
import org.joml.Vector3d;
|
|
|
|
import electrosphere.engine.Globals;
|
|
import electrosphere.engine.loadingthreads.LoadingThread;
|
|
import electrosphere.entity.Entity;
|
|
import electrosphere.entity.types.creature.CreatureTemplate;
|
|
import electrosphere.entity.types.creature.CreatureUtils;
|
|
import electrosphere.net.NetUtils;
|
|
import electrosphere.net.server.ServerConnectionHandler;
|
|
import electrosphere.net.server.player.Player;
|
|
import electrosphere.server.character.PlayerCharacterCreation;
|
|
|
|
/**
|
|
* Utilities for testing in the viewport
|
|
*/
|
|
public class TestViewportUtils {
|
|
|
|
//The maximum number of frames to wait before failing the startup routine
|
|
public static final int MAX_FRAMES_TO_WAIT = 100;
|
|
|
|
/**
|
|
* Spawns a creature assigned to the player
|
|
* @param creatureType The type of creature to spawn
|
|
* @return Returns the player's entity
|
|
*/
|
|
public static Entity spawnPlayerCharacter(String creatureType){
|
|
//spawn creature
|
|
CreatureTemplate creatureTemplate = CreatureTemplate.createDefault(creatureType);
|
|
Entity creature = CreatureUtils.serverSpawnBasicCreature(Globals.realmManager.first(), new Vector3d(0,0,0), creatureType, creatureTemplate);
|
|
|
|
//get required data
|
|
ServerConnectionHandler connectionHandler = Globals.server.getFirstConnection();
|
|
Player playerObj = Globals.playerManager.getFirstPlayer();
|
|
|
|
//attach
|
|
PlayerCharacterCreation.attachEntityToPlayerObject(creature, playerObj, connectionHandler);
|
|
//must manually send packet because the player is added to the viewport before the entity is created
|
|
//in the real flow, the entity is created, then the player is sent
|
|
playerObj.addMessage(NetUtils.createSetCreatureControllerIdEntityMessage(creature));
|
|
|
|
//wait for player to spawn
|
|
int frames = 0;
|
|
while(Globals.playerEntity == null){
|
|
TestEngineUtils.simulateFrames(1);
|
|
try {
|
|
TimeUnit.MILLISECONDS.sleep(1);
|
|
} catch (InterruptedException e) {
|
|
e.printStackTrace();
|
|
}
|
|
frames++;
|
|
if(frames > MAX_FRAMES_TO_WAIT){
|
|
String errorMessage = "Failed to spawn player character!\n" +
|
|
"Still running threads are:\n"
|
|
;
|
|
for(LoadingThread thread : Globals.threadManager.getLoadingThreads()){
|
|
errorMessage = errorMessage + thread.getType() + "\n";
|
|
}
|
|
throw new IllegalStateException(errorMessage);
|
|
}
|
|
}
|
|
|
|
return creature;
|
|
}
|
|
|
|
}
|