Full implementation of #1494
This commit is contained in:
@@ -172,6 +172,11 @@ hosts.discovering.any = Discovering games
|
|||||||
server.refreshing = Refreshing server
|
server.refreshing = Refreshing server
|
||||||
hosts.none = [lightgray]No local games found!
|
hosts.none = [lightgray]No local games found!
|
||||||
host.invalid = [scarlet]Can't connect to host.
|
host.invalid = [scarlet]Can't connect to host.
|
||||||
|
|
||||||
|
servers.local = Local Servers
|
||||||
|
servers.remote = Remote Servers
|
||||||
|
servers.global = Global Servers
|
||||||
|
|
||||||
trace = Trace Player
|
trace = Trace Player
|
||||||
trace.playername = Player name: [accent]{0}
|
trace.playername = Player name: [accent]{0}
|
||||||
trace.ip = IP: [accent]{0}
|
trace.ip = IP: [accent]{0}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import arc.util.serialization.*;
|
|||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.core.*;
|
import mindustry.core.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
|
import mindustry.graphics.*;
|
||||||
import mindustry.net.*;
|
import mindustry.net.*;
|
||||||
import mindustry.net.Packets.*;
|
import mindustry.net.Packets.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
@@ -25,6 +26,7 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
Server renaming;
|
Server renaming;
|
||||||
Table local = new Table();
|
Table local = new Table();
|
||||||
Table remote = new Table();
|
Table remote = new Table();
|
||||||
|
Table global = new Table();
|
||||||
Table hosts = new Table();
|
Table hosts = new Table();
|
||||||
int totalHosts;
|
int totalHosts;
|
||||||
|
|
||||||
@@ -80,15 +82,11 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
keyDown(KeyCode.F5, () -> {
|
keyDown(KeyCode.F5, this::refreshAll);
|
||||||
refreshLocal();
|
|
||||||
refreshRemote();
|
|
||||||
});
|
|
||||||
|
|
||||||
shown(() -> {
|
shown(() -> {
|
||||||
setup();
|
setup();
|
||||||
refreshLocal();
|
refreshAll();
|
||||||
refreshRemote();
|
|
||||||
|
|
||||||
if(!steam){
|
if(!steam){
|
||||||
Core.app.post(() -> Core.settings.getBoolOnce("joininfo", () -> ui.showInfo("$join.info")));
|
Core.app.post(() -> Core.settings.getBoolOnce("joininfo", () -> ui.showInfo("$join.info")));
|
||||||
@@ -97,11 +95,16 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
|
|
||||||
onResize(() -> {
|
onResize(() -> {
|
||||||
setup();
|
setup();
|
||||||
refreshLocal();
|
refreshAll();
|
||||||
refreshRemote();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void refreshAll(){
|
||||||
|
refreshLocal();
|
||||||
|
refreshRemote();
|
||||||
|
refreshGlobal();
|
||||||
|
}
|
||||||
|
|
||||||
void setupRemote(){
|
void setupRemote(){
|
||||||
remote.clear();
|
remote.clear();
|
||||||
|
|
||||||
@@ -128,21 +131,12 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
inner.add(button.getLabel()).growX();
|
inner.add(button.getLabel()).growX();
|
||||||
|
|
||||||
inner.addImageButton(Icon.upOpen, Styles.emptyi, () -> {
|
inner.addImageButton(Icon.upOpen, Styles.emptyi, () -> {
|
||||||
int index = servers.indexOf(server);
|
moveRemote(server, -1);
|
||||||
if(index > 0){
|
|
||||||
servers.remove(index);
|
|
||||||
servers.insert(0, server);
|
|
||||||
|
|
||||||
saveServers();
|
}).margin(3f).padTop(6f).top().right();
|
||||||
setupRemote();
|
|
||||||
for(Server other : servers){
|
inner.addImageButton(Icon.downOpen, Styles.emptyi, () -> {
|
||||||
if(other.lastHost != null){
|
moveRemote(server, +1);
|
||||||
setupServer(other, other.lastHost);
|
|
||||||
}else{
|
|
||||||
refreshServer(other);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}).margin(3f).padTop(6f).top().right();
|
}).margin(3f).padTop(6f).top().right();
|
||||||
|
|
||||||
@@ -172,6 +166,26 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void moveRemote(Server server, int sign){
|
||||||
|
int index = servers.indexOf(server);
|
||||||
|
|
||||||
|
if(index + sign < 0) return;
|
||||||
|
if(index + sign > servers.size - 1) return;
|
||||||
|
|
||||||
|
servers.remove(index);
|
||||||
|
servers.insert(index + sign, server);
|
||||||
|
|
||||||
|
saveServers();
|
||||||
|
setupRemote();
|
||||||
|
for(Server other : servers){
|
||||||
|
if(other.lastHost != null){
|
||||||
|
setupServer(other, other.lastHost);
|
||||||
|
}else{
|
||||||
|
refreshServer(other);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void refreshRemote(){
|
void refreshRemote(){
|
||||||
for(Server server : servers){
|
for(Server server : servers){
|
||||||
refreshServer(server);
|
refreshServer(server);
|
||||||
@@ -232,9 +246,9 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
|
|
||||||
hosts.clear();
|
hosts.clear();
|
||||||
|
|
||||||
hosts.add(remote).growX();
|
section("$servers.local", local);
|
||||||
hosts.row();
|
section("$servers.remote", remote);
|
||||||
hosts.add(local).width(w);
|
section("$servers.global", global);
|
||||||
|
|
||||||
ScrollPane pane = new ScrollPane(hosts);
|
ScrollPane pane = new ScrollPane(hosts);
|
||||||
pane.setFadeScrollBars(false);
|
pane.setFadeScrollBars(false);
|
||||||
@@ -289,6 +303,24 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void section(String label, Table servers){
|
||||||
|
Collapser coll = new Collapser(servers, Core.settings.getBool("collapsed-" + label, false));
|
||||||
|
coll.setDuration(0.1f);
|
||||||
|
|
||||||
|
hosts.table(name -> {
|
||||||
|
name.add(label).pad(10).growX().left().color(Pal.accent);
|
||||||
|
name.addImageButton(Icon.downOpen, Styles.emptyi, () -> {
|
||||||
|
coll.toggle(false);
|
||||||
|
Core.settings.putSave("collapsed-" + label, coll.isCollapsed());
|
||||||
|
}).update(i -> i.getStyle().imageUp = (!coll.isCollapsed() ? Icon.upOpen : Icon.downOpen)).size(40f).right().padRight(10f);
|
||||||
|
}).growX();
|
||||||
|
hosts.row();
|
||||||
|
hosts.addImage().growX().pad(5).padLeft(10).padRight(10).height(3).color(Pal.accent);
|
||||||
|
hosts.row();
|
||||||
|
hosts.add(coll).width(targetWidth());
|
||||||
|
hosts.row();
|
||||||
|
}
|
||||||
|
|
||||||
void refreshLocal(){
|
void refreshLocal(){
|
||||||
totalHosts = 0;
|
totalHosts = 0;
|
||||||
|
|
||||||
@@ -296,12 +328,17 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
local.background(null);
|
local.background(null);
|
||||||
local.table(Tex.button, t -> t.label(() -> "[accent]" + Core.bundle.get("hosts.discovering.any") + Strings.animated(Time.time(), 4, 10f, ".")).pad(10f)).growX();
|
local.table(Tex.button, t -> t.label(() -> "[accent]" + Core.bundle.get("hosts.discovering.any") + Strings.animated(Time.time(), 4, 10f, ".")).pad(10f)).growX();
|
||||||
net.discoverServers(this::addLocalHost, this::finishLocalHosts);
|
net.discoverServers(this::addLocalHost, this::finishLocalHosts);
|
||||||
|
}
|
||||||
|
|
||||||
|
void refreshGlobal(){
|
||||||
|
global.clear();
|
||||||
|
global.background(null);
|
||||||
for(String host : defaultServers){
|
for(String host : defaultServers){
|
||||||
String resaddress = host.contains(":") ? host.split(":")[0] : host;
|
String resaddress = host.contains(":") ? host.split(":")[0] : host;
|
||||||
int resport = host.contains(":") ? Strings.parseInt(host.split(":")[1]) : port;
|
int resport = host.contains(":") ? Strings.parseInt(host.split(":")[1]) : port;
|
||||||
net.pingHost(resaddress, resport, res -> {
|
net.pingHost(resaddress, resport, res -> {
|
||||||
res.port = resport;
|
res.port = resport;
|
||||||
addLocalHost(res);
|
addGlobalHost(res);
|
||||||
}, e -> {});
|
}, e -> {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -334,6 +371,18 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
buildServer(host, button);
|
buildServer(host, button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addGlobalHost(Host host){
|
||||||
|
global.background(null);
|
||||||
|
float w = targetWidth();
|
||||||
|
|
||||||
|
global.row();
|
||||||
|
|
||||||
|
TextButton button = global.addButton("", Styles.cleart, () -> safeConnect(host.address, host.port, host.version))
|
||||||
|
.width(w).pad(5f).get();
|
||||||
|
button.clearChildren();
|
||||||
|
buildServer(host, button);
|
||||||
|
}
|
||||||
|
|
||||||
public void connect(String ip, int port){
|
public void connect(String ip, int port){
|
||||||
if(player.name.trim().isEmpty()){
|
if(player.name.trim().isEmpty()){
|
||||||
ui.showInfo("$noname");
|
ui.showInfo("$noname");
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
org.gradle.daemon=true
|
org.gradle.daemon=true
|
||||||
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
||||||
archash=1817bb22ac7680700fe780816940f4217a1f7e07
|
archash=6467748c6d78d6a2204b37913f00375116138924
|
||||||
|
|||||||
Reference in New Issue
Block a user