Skip to content

Commit c07995b

Browse files
committed
Merge PR #1992 by @msteiger - join game screen fixes
2 parents badae13 + d17dbb7 commit c07995b

File tree

4 files changed

+31
-31
lines changed

4 files changed

+31
-31
lines changed

engine/src/main/java/org/terasology/config/NetworkConfig.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@
1717
package org.terasology.config;
1818

1919
import com.google.common.collect.Lists;
20+
2021
import org.terasology.engine.TerasologyConstants;
2122

23+
import java.util.Collections;
2224
import java.util.List;
23-
import java.util.Optional;
2425

2526
/**
2627
* @author Immortius
@@ -64,20 +65,16 @@ public void setServerPort(int serverPort) {
6465
this.serverPort = serverPort;
6566
}
6667

67-
public void add(ServerInfo serverInfo) {
68+
public void addServerInfo(ServerInfo serverInfo) {
6869
servers.add(serverInfo);
6970
}
7071

71-
public void remove(ServerInfo info) {
72+
public void removeServerInfo(ServerInfo info) {
7273
servers.remove(info);
7374
}
7475

75-
public List<ServerInfo> getServers() {
76-
return servers;
77-
}
78-
79-
public void setServers(List<ServerInfo> servers) {
80-
this.servers = servers;
76+
public List<ServerInfo> getServerInfos() {
77+
return Collections.unmodifiableList(servers);
8178
}
8279

8380
public String getMasterServer() {

engine/src/main/java/org/terasology/config/ServerInfo.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
import com.google.common.base.Preconditions;
2020

21-
import java.util.Optional;
22-
2321

2422
/**
2523
* @author Immortius
@@ -29,7 +27,7 @@ public class ServerInfo {
2927
private String address;
3028
private String owner;
3129
private int port;
32-
private boolean active;
30+
private boolean active = true;
3331

3432
ServerInfo() {
3533
// for serialization purposes

engine/src/main/java/org/terasology/rendering/nui/layers/mainMenu/AddServerPopup.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ public class AddServerPopup extends CoreScreenLayer {
3737

3838
public static final ResourceUrn ASSET_URI = new ResourceUrn("engine:addServerPopup!instance");
3939

40-
@In
41-
private Config config;
4240
private UIText nameText;
4341
private UIText ownerText;
4442
private UIText addressText;
@@ -72,8 +70,6 @@ public void onActivated(UIWidget button) {
7270
// create new
7371
serverInfo = new ServerInfo(name, address, port);
7472
serverInfo.setOwner(owner);
75-
76-
config.getNetwork().add(serverInfo);
7773
} else {
7874
// update existing
7975
serverInfo.setName(name);

engine/src/main/java/org/terasology/rendering/nui/layers/mainMenu/JoinGameScreen.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import org.terasology.rendering.nui.UIWidget;
4343
import org.terasology.rendering.nui.WidgetUtil;
4444
import org.terasology.rendering.nui.databinding.BindHelper;
45-
import org.terasology.rendering.nui.databinding.DefaultBinding;
4645
import org.terasology.rendering.nui.databinding.IntToStringBinding;
4746
import org.terasology.rendering.nui.databinding.ReadOnlyBinding;
4847
import org.terasology.rendering.nui.itemRendering.StringTextRenderer;
@@ -86,9 +85,10 @@ public class JoinGameScreen extends CoreScreenLayer {
8685
private UIList<ServerInfo> visibleList;
8786

8887
private List<ServerInfo> listedServers = new ArrayList<>();
89-
private List<ServerInfo> customServers = new ArrayList<>();
9088

91-
private boolean updateComplete = false;
89+
private Predicate<ServerInfo> activeServersOnly = server -> server.isActive();
90+
91+
private boolean updateComplete;
9292

9393
@Override
9494
public void initialise() {
@@ -99,12 +99,14 @@ public void initialise() {
9999

100100
UIList<ServerInfo> customServerList = find("customServerList", UIList.class);
101101
if (customServerList != null) {
102-
configureServerList(customServerList, customServers);
102+
customServerList.setList(config.getNetwork().getServerInfos());
103+
configureServerList(customServerList);
103104
}
104105

105106
UIList<ServerInfo> onlineServerList = find("onlineServerList", UIList.class);
106107
if (onlineServerList != null) {
107-
configureServerList(onlineServerList, listedServers);
108+
onlineServerList.setList(listedServers);
109+
configureServerList(onlineServerList);
108110
}
109111

110112
ActivateEventListener activateCustom = e -> {
@@ -154,13 +156,8 @@ public void update(float delta) {
154156
updateComplete = true;
155157
}
156158

157-
Predicate<ServerInfo> onlyActive = server -> server.isActive();
158-
159-
customServers.clear();
160-
customServers.addAll(Collections2.filter(config.getNetwork().getServers(), onlyActive));
161-
162159
listedServers.clear();
163-
listedServers.addAll(Collections2.filter(downloader.getServers(), onlyActive));
160+
listedServers.addAll(Collections2.filter(downloader.getServers(), activeServersOnly));
164161
}
165162
}
166163

@@ -200,9 +197,8 @@ public JoinStatus call() throws InterruptedException {
200197

201198
}
202199

203-
private void configureServerList(final UIList<ServerInfo> serverList, List<ServerInfo> servers) {
200+
private void configureServerList(final UIList<ServerInfo> serverList) {
204201

205-
serverList.bindList(new DefaultBinding<List<ServerInfo>>(servers));
206202
serverList.subscribe(new ItemActivateEventListener<ServerInfo>() {
207203
@Override
208204
public void onItemActivated(UIWidget widget, ServerInfo item) {
@@ -314,17 +310,29 @@ public void onActivated(UIWidget button) {
314310

315311
private void bindCustomButtons() {
316312

313+
UIList<?> customServerList = find("customServerList", UIList.class);
314+
ReadOnlyBinding<Boolean> localSelectedServerOnly = new ReadOnlyBinding<Boolean>() {
315+
@Override
316+
public Boolean get() {
317+
return customServerList.getSelection() != null;
318+
}
319+
};
320+
317321
UIButton add = find("add", UIButton.class);
318322
if (add != null) {
319323
add.subscribe(button -> {
320324
AddServerPopup popup = getManager().pushScreen(AddServerPopup.ASSET_URI, AddServerPopup.class);
321325
// select the entry if added successfully
322-
popup.onSuccess(item -> visibleList.setSelection(item));
326+
popup.onSuccess(item -> {
327+
config.getNetwork().addServerInfo(item);
328+
visibleList.setSelection(item);
329+
});
323330
});
324331
}
325332

326333
UIButton edit = find("edit", UIButton.class);
327334
if (edit != null) {
335+
edit.bindEnabled(localSelectedServerOnly);
328336
edit.subscribe(button -> {
329337
AddServerPopup popup = getManager().pushScreen(AddServerPopup.ASSET_URI, AddServerPopup.class);
330338
ServerInfo info = visibleList.getSelection();
@@ -337,10 +345,11 @@ private void bindCustomButtons() {
337345

338346
UIButton removeButton = find("remove", UIButton.class);
339347
if (removeButton != null) {
348+
removeButton.bindEnabled(localSelectedServerOnly);
340349
removeButton.subscribe(button -> {
341350
ServerInfo info = visibleList.getSelection();
342351
if (info != null) {
343-
config.getNetwork().remove(info);
352+
config.getNetwork().removeServerInfo(info);
344353
extInfo.remove(info);
345354
visibleList.setSelection(null);
346355
}

0 commit comments

Comments
 (0)