Skip to content

XML GUI Scene

Radomiej edited this page Oct 6, 2016 · 1 revision

XML GUI is extansion for Javity allow you to loading UI stage from external xml file.

This is example game object which load xml view and add custom controllers:

public class SceneLoginBulider implements SceneBulider {
	@Override
	public void buildScene(Scene scene) {

		JGameObject canvas = scene.instantiateGameObject(new Vector2(0, 0));
		JXmlUi jCanvas = new JXmlUi("resources/views/login.xml", "internal/ui/uiskin.json");
		canvas.addComponent(jCanvas);
		canvas.addComponent(new LoginComponent());
		canvas.addComponent(new BackComponent());

	}
}

LoginComponent

public class LoginComponent extends JComponent {
	private Button loginButton;
	private TextField login, email, password;
	private WWW loginWWW;
	public JXmlUi jCanvas;

	@Override
	public void start() {

		jCanvas = getGameObject().getComponent(JXmlUi.class);

		loginButton = jCanvas.getActor("loginButton");
		loginButton.addListener(new ClickListener(){
			@Override
			public void clicked(InputEvent event, float x, float y) {
				login();
			}
		});

		login = jCanvas.getActor("loginInput");
		email = jCanvas.getActor("emailInput");
		password = jCanvas.getActor("passwordInput");

		loginWWW = new WWW("http://localhost:8080/rest/v1/users/login", new WWWResponseListener() {
			
			@Override
			public void httpResponseListener(WWW wwwResponse) {
				LoginStatus loginStatus = wwwResponse.getJsonObjectResponse(LoginStatus.class);
				Gdx.app.log(LoginComponent.class.getSimpleName(), "Login complete: " + loginStatus);
				if(loginStatus.getLoginUser() != null) {
					JSceneManager.loadScene(new SceneMapBulider());
				}else{
					loginButton.setDisabled(false);
				}
			}
		});
	}
	
	@Override
	public void update() {
	}
	
	public void login(){
		loginButton.setDisabled(true);
		loginWWW.GET("login=" + login.getText() + "&password=" + password.getText());
	}
}

Like you can see, LoginController wait for click loginButton and send to server via HTTP GET, login request and procces response. Look javity-net for more info about HTTP connection.

BackComponent

public class BackComponent extends JComponent {
    public JXmlUi jCanvas;
    private Button backButton;

    @Override
    public void start() {

        if (jCanvas == null) jCanvas = getGameObject().getComponent(JXmlUi.class);
        backButton = jCanvas.getActor("backButton");
        backButton.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                back();
            }
        });

    }

    @Override
    public void update() {
    }

    public void back() {

        JSceneManager.loadScene(new SceneMainMenuBulider());
    }
}

BackComponent add listener for back button on loading view, and switch scene to MainMenu when button was pressed.

Clone this wiki locally