private void closeGame(boolean isServerRestart) { try { if (!isServerRestart) { clientState.cleanup(); setupNetwork(); } playersContainer.clear(); syncState.cleanup(); teamsContainer.clear(); bulletAppState.setEnabled(false); physicsWrapper.cleanup(ingameState.getRootNode()); ingameState.cleanup(); initInput(); stateManager.detach(hudState); stateManager.detach(spawnMenuState); stateManager.detach(scoreBoardState); ingameState.setEnabled(false); loadingState.setEnabled(false); syncState.setEnabled(false); localPlayer = null; if (endState != null) { stateManager.detach(endState); endState = null; } menuState.setEnabled(!isServerRestart); } catch (IllegalAccessException e) { // TODO e.printStackTrace(); } }
public void init(boolean clientConfigExisted) throws Exception { stateManager.detach(stateManager.getState(FlyCamAppState.class)); stateManager.detach(stateManager.getState(StatsAppState.class)); guiNode.detachAllChildren(); guiNode.addControl(screen); consoleState = new ConsoleStateImpl(screen, rootNode, guiNode); stateManager.attach(consoleState); consoleState.setEnabled(false); menuState = new MenuStateImpl(screen, rootNode, guiNode); stateManager.attach(menuState); if (clientConfigExisted) { menuState.setEnabled(true); } else { usernameInputState = new UsernameInputStateImpl(screen, rootNode, guiNode); stateManager.attach(usernameInputState); usernameInputState.setEnabled(true); menuState.setEnabled(false); } playersContainer = new ClientPlayersContainer(); entityIdProvider = new ClientEntityIdProvider(); entityFactory = new ClientEntityFactory(assetManager, entityIdProvider); final ClientFactory clientFactory = new ClientFactory() { @Override public NetworkClient createClient() { return Network.createClient(); } }; clientState = new ClientStateImpl(clientFactory); syncState = new ClientSyncState(enqueueHelper, clientState, playersContainer); FPSState fpsState = new FPSStateImpl(screen, rootNode, guiNode); stateManager.attach(fpsState); fpsState.setEnabled(true); ingameState = new ClientIngameStateImpl(rootNode, guiNode); stateManager.attach(ingameState); ingameState.setEnabled(false); stateManager.attach(syncState); syncState.setEnabled(false); bulletAppState = new BulletAppState(); bulletAppState.setThreadingType(ThreadingType.SEQUENTIAL); stateManager.attach(bulletAppState); bulletAppState.setEnabled(false); PhysicsSpace physicsSpace = bulletAppState.getPhysicsSpace(); physicsSpace.setGravity(new Vector3f()); physicsWrapper = new PhysicsWrapperImpl(); physicsWrapper.setPhysicsSpace(physicsSpace); entityAttacher = new EntityAttacher(ingameState.getRootNode(), syncState, physicsWrapper); teamsContainer = new TeamsContainer(); dataContainer = new ClientDataContainer( entityFactory, teamsContainer, enqueueHelper, entityAttacher, clientState, playersContainer, syncState); clientMessageListener = new ClientMessageListener(dataContainer); setupNetwork(); stateManager.attach(clientState); respawnLocalPlayerHandler = new RespawnLocalPlayerHandler(cam); eventBus.addHandler(RespawnPlayerEvent.TYPE, respawnLocalPlayerHandler); initInput(); initEventBus(); }