package com.cardshifter.gdx.ui; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Dialog; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.utils.Align; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.cardshifter.api.incoming.StartGameRequest; import com.cardshifter.api.outgoing.UserStatusMessage; import com.cardshifter.gdx.Callback; import com.cardshifter.gdx.CardshifterClient; import java.util.HashMap; import java.util.Map; public class UsersList { private final Table table; private final Skin skin; private final Map<Integer, UserTable> userMap = new HashMap<Integer, UserTable>(); private UserTable selected; private final Callback<String> callback; public UsersList(Skin skin, Callback<String> callback) { this.skin = skin; this.table = new Table(skin); this.callback = callback; } public void handleUserStatus(UserStatusMessage message) { switch (message.getStatus()) { case OFFLINE: UserTable table = userMap.get(message.getUserId()); if (table != null) { table.remove(); } break; case ONLINE: table = userMap.get(message.getUserId()); if (table == null) { final UserTable userTable = new UserTable(skin, message.getUserId(), message.getName()); userMap.put(message.getUserId(), userTable); userTable.getTable().addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { UsersList.this.selectUser(userTable); } }); this.table.add(userTable.getTable()).align(Align.left).row(); } break; } } private void selectUser(UserTable userTable) { for (UserTable user : this.userMap.values()) { user.deselect(); } selected = userTable; selected.markSelected(); Gdx.app.log("UsersList", "Selected " + userTable); } public void inviteSelected(String[] availableMods, Stage stage, final CardshifterClient client) { if (selected == null) { return; } Dialog dialog = new Dialog("Invite " + selected.getName(), skin) { @Override protected void result(Object object) { if (object != null) { client.send(new StartGameRequest(selected.getId(), (String) object)); callback.callback((String) object); } } }; dialog.text("Which mod do you want to play?"); for (String mod : availableMods) { dialog.button(mod, mod); } dialog.button("Cancel"); dialog.show(stage); } public Table getTable() { return table; } }