mirror of
https://github.com/Anuken/Mindustry.git
synced 2026-10-02 11:10:50 +03:00
Added button to sort servers by player count
This commit is contained in:
@@ -287,6 +287,8 @@ servers.connect.confirm = Join the following server?\n\n[accent]{0}[]\n\nOnly co
|
||||
servers.showhidden = Show Hidden Servers
|
||||
server.shown = Shown
|
||||
server.hidden = Hidden
|
||||
servers.sortping = Sorting By: Ping
|
||||
servers.sortplayers = Sorting By: Player Count
|
||||
|
||||
viewplayer = Viewing Player: [accent]{0}
|
||||
trace = Trace Player
|
||||
|
||||
@@ -5,10 +5,12 @@ import arc.freetype.FreeTypeFontGenerator.*;
|
||||
import arc.graphics.*;
|
||||
import arc.input.*;
|
||||
import arc.math.*;
|
||||
import arc.scene.*;
|
||||
import arc.scene.ui.*;
|
||||
import arc.scene.ui.TextButton.*;
|
||||
import arc.scene.ui.layout.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.Timer;
|
||||
import arc.util.*;
|
||||
import arc.util.Timer.*;
|
||||
import arc.util.serialization.*;
|
||||
@@ -22,9 +24,14 @@ import mindustry.net.*;
|
||||
import mindustry.net.Packets.*;
|
||||
import mindustry.ui.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public class JoinDialog extends BaseDialog{
|
||||
static Seq<Element> tmpElements = new Seq<>();
|
||||
static final int favoriteCountOffset = 9_999_999;
|
||||
|
||||
Seq<ServerGroup> tmpServers = new Seq<>();
|
||||
Seq<Server> servers = new Seq<>();
|
||||
Dialog add;
|
||||
@@ -44,6 +51,7 @@ public class JoinDialog extends BaseDialog{
|
||||
Task ping;
|
||||
|
||||
String serverSearch = "";
|
||||
boolean sortPing = true;
|
||||
|
||||
public JoinDialog(){
|
||||
super("@joingame");
|
||||
@@ -357,6 +365,13 @@ public class JoinDialog extends BaseDialog{
|
||||
name.add(label).pad(10).growX().left().color(Pal.accent);
|
||||
|
||||
if(eye){
|
||||
name.button(Icon.chartBar, Styles.emptyi, () -> {
|
||||
sortPing = !sortPing;
|
||||
Core.settings.put("sort-servers-ping", sortPing);
|
||||
refreshCommunity();
|
||||
}).update(i -> i.getStyle().imageUp = (sortPing ? Icon.chartBar : Icon.players))
|
||||
.size(40f).right().padRight(3).tooltip(true, t -> t.background(Styles.black8).margin(4f).label(() -> sortPing ? "@servers.sortping" : "@servers.sortplayers"));
|
||||
|
||||
name.button(Icon.eyeSmall, Styles.emptyi, () -> {
|
||||
showHidden = !showHidden;
|
||||
refreshCommunity();
|
||||
@@ -450,8 +465,29 @@ public class JoinDialog extends BaseDialog{
|
||||
addHeader(groupTable, group, hidden, favorite, true);
|
||||
}
|
||||
|
||||
boolean needsSort = false;
|
||||
|
||||
if(!sortPing && !Strings.stripColors(res.name).toLowerCase(Locale.ROOT).contains("hub") && groupTable[0].userObject instanceof Integer count){
|
||||
//hack: apply large numerical offset to favorite servers
|
||||
int actualCount = (count >= favoriteCountOffset ? res.players + favoriteCountOffset : res.players);
|
||||
needsSort = actualCount > count;
|
||||
groupTable[0].userObject = Math.max(count, actualCount);
|
||||
}
|
||||
|
||||
addCommunityHost(res, groupTable[1]);
|
||||
|
||||
if(needsSort && !sortPing){
|
||||
//when the count changes, sort by player count, descending
|
||||
var oldChildren = tmpElements;
|
||||
tmpElements.set(global.getChildren());
|
||||
oldChildren.sort(c -> c instanceof Table t && t.userObject instanceof Integer playerCount ? -playerCount : 0);
|
||||
global.clearChildren();
|
||||
for(var child : oldChildren){
|
||||
global.add(child);
|
||||
global.row();
|
||||
}
|
||||
}
|
||||
|
||||
groupTable[0].margin(5f);
|
||||
groupTable[0].pack();
|
||||
}, e -> {});
|
||||
@@ -461,7 +497,7 @@ public class JoinDialog extends BaseDialog{
|
||||
|
||||
void addHeader(Table[] groupTable, ServerGroup group, boolean hidden, boolean favorite, boolean doInit){ // outlined separately
|
||||
if(groupTable[0] == null){
|
||||
global.table(t -> groupTable[0] = t).fillX().left().row();
|
||||
global.table(t -> groupTable[0] = t).with(t -> t.userObject = favorite ? favoriteCountOffset : 0).fillX().left().row();
|
||||
}
|
||||
groupTable[0].visible(() -> doInit);
|
||||
if(!doInit){
|
||||
@@ -649,6 +685,7 @@ public class JoinDialog extends BaseDialog{
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void loadServers(){
|
||||
sortPing = Core.settings.getBool("sort-servers-ping", true);
|
||||
servers = Core.settings.getJson("servers", Seq.class, Server.class, Seq::new);
|
||||
|
||||
//load imported legacy data
|
||||
|
||||
+1
-1
@@ -26,4 +26,4 @@ org.gradle.caching=true
|
||||
org.gradle.internal.http.socketTimeout=100000
|
||||
org.gradle.internal.http.connectionTimeout=100000
|
||||
android.enableR8.fullMode=false
|
||||
archash=fee7da3557
|
||||
archash=8fe6402778
|
||||
|
||||
Reference in New Issue
Block a user