Better mod browser horizontal layout

This commit is contained in:
Anuken
2021-02-05 12:12:08 -05:00
parent fc3352bcb1
commit d1eb7743ad
3 changed files with 96 additions and 77 deletions

View File

@@ -19,6 +19,7 @@ public class MultiEffect extends Effect{
public void init(){ public void init(){
for(Effect f : effects){ for(Effect f : effects){
clip = Math.max(clip, f.clip); clip = Math.max(clip, f.clip);
lifetime = Math.max(lifetime, f.lifetime);
} }
} }

View File

@@ -882,7 +882,7 @@ public class Mods implements Loadable{
public boolean java; public boolean java;
public String displayName(){ public String displayName(){
return displayName == null ? Strings.stripColors(name) : displayName; return displayName == null ? name : displayName;
} }
//removes all colors //removes all colors

View File

@@ -10,6 +10,7 @@ import arc.input.*;
import arc.scene.style.*; import arc.scene.style.*;
import arc.scene.ui.TextButton.*; import arc.scene.ui.TextButton.*;
import arc.scene.ui.*; import arc.scene.ui.*;
import arc.scene.ui.layout.*;
import arc.struct.*; import arc.struct.*;
import arc.util.*; import arc.util.*;
import arc.util.io.*; import arc.util.io.*;
@@ -36,10 +37,39 @@ public class ModsDialog extends BaseDialog{
private boolean orderDate = true; private boolean orderDate = true;
private BaseDialog currentContent; private BaseDialog currentContent;
private BaseDialog browser;
private Table browserTable;
public ModsDialog(){ public ModsDialog(){
super("@mods"); super("@mods");
addCloseButton(); addCloseButton();
browser = new BaseDialog("@mods.browser");
browser.cont.table(table -> {
table.left();
table.image(Icon.zoom);
table.field(searchtxt, res -> {
searchtxt = res;
rebuildBrowser();
}).growX().get();
table.button(Icon.list, Styles.clearPartiali, 32f, () -> {
orderDate = !orderDate;
rebuildBrowser();
}).update(b -> b.getStyle().imageUp = (orderDate ? Icon.list : Icon.star)).size(40f).get()
.addListener(new Tooltip(tip -> tip.label(() -> orderDate ? "@mods.browser.sortdate" : "@mods.browser.sortstars").left()));
}).fillX().padBottom(4);
browser.cont.row();
browser.cont.pane(tablebrow -> {
tablebrow.margin(10f).top();
browserTable = tablebrow;
rebuildBrowser();
}).get().setScrollingDisabled(true, false);
browser.addCloseButton();
browser.onResize(this::rebuildBrowser);
buttons.button("@mods.guide", Icon.link, () -> Core.app.openURI(modGuideURL)).size(210, 64f); buttons.button("@mods.guide", Icon.link, () -> Core.app.openURI(modGuideURL)).size(210, 64f);
if(!mobile){ if(!mobile){
@@ -226,7 +256,7 @@ public class ModsDialog extends BaseDialog{
title.table(text -> { title.table(text -> {
boolean hideDisabled = !mod.isSupported() || mod.hasUnmetDependencies() || mod.hasContentErrors(); boolean hideDisabled = !mod.isSupported() || mod.hasUnmetDependencies() || mod.hasContentErrors();
text.add("" + mod.meta.displayName() + "\n[lightgray]v" + mod.meta.version + (mod.enabled() || hideDisabled ? "" : "\n" + Core.bundle.get("mod.disabled") + "")) text.add("" + Strings.stripColors(mod.meta.displayName()) + "\n[lightgray]v" + Strings.stripColors(trimText(mod.meta.version)) + (mod.enabled() || hideDisabled ? "" : "\n" + Core.bundle.get("mod.disabled") + ""))
.wrap().top().width(300f).growX().left(); .wrap().top().width(300f).growX().left();
text.row(); text.row();
@@ -357,32 +387,21 @@ public class ModsDialog extends BaseDialog{
} }
private void showModBrowser(){ private void showModBrowser(){
Runnable[] rebuildBrowser = {null}; rebuildBrowser();
BaseDialog browser = new BaseDialog("@mods.browser"); browser.show();
browser.cont.table(table -> { }
table.left();
table.image(Icon.zoom);
table.field(searchtxt, res -> {
searchtxt = res;
rebuildBrowser[0].run();
}).growX().get();
table.button(Icon.list, Styles.clearPartiali, 32f, () -> {
orderDate = !orderDate;
rebuildBrowser[0].run();
}).update(b -> b.getStyle().imageUp = (orderDate ? Icon.list : Icon.star)).size(40f).get()
.addListener(new Tooltip(tip -> tip.label(() -> orderDate ? "@mods.browser.sortdate" : "@mods.browser.sortstars").left()));
}).fillX().padBottom(4);
browser.cont.row(); private void rebuildBrowser(){
ObjectSet<String> installed = mods.list().map(m -> m.getRepo()).asSet();
browser.cont.pane(tablebrow -> { browserTable.clear();
tablebrow.margin(10f).top(); browserTable.add("@loading");
rebuildBrowser[0] = () -> {
tablebrow.clear(); int cols = Math.max(Core.graphics.getWidth() / 475, 1);
tablebrow.add("@loading");
getModList(rlistings -> { getModList(rlistings -> {
tablebrow.clear(); browserTable.clear();
int i = 0;
Seq<ModListing> listings = rlistings; Seq<ModListing> listings = rlistings;
if(!orderDate){ if(!orderDate){
@@ -393,12 +412,16 @@ public class ModsDialog extends BaseDialog{
for(ModListing mod : listings){ for(ModListing mod : listings){
if((mod.hasJava && Vars.ios) || !searchtxt.isEmpty() && !mod.repo.toLowerCase().contains(searchtxt.toLowerCase()) || (Vars.ios && mod.hasScripts)) continue; if((mod.hasJava && Vars.ios) || !searchtxt.isEmpty() && !mod.repo.toLowerCase().contains(searchtxt.toLowerCase()) || (Vars.ios && mod.hasScripts)) continue;
tablebrow.button(btn -> { browserTable.button(btn -> {
btn.top().left(); btn.top().left();
btn.margin(12f); btn.margin(12f);
btn.table(con -> { btn.table(con -> {
con.left(); con.left();
con.add("[accent]" + mod.name + "[white]\n[lightgray]Author:[] " + trimText(mod.author) + "\n[lightgray]\uE809 " + mod.stars + con.add(
"[accent]" + mod.name.replace("\n", "") +
(installed.contains(mod.repo) ? " [scarlet][[Installed]" : "") +
"[white]\n[lightgray]Author:[] " + trimText(mod.author) +
"\n[lightgray]\uE809 " + mod.stars +
(Version.isAtLeast(mod.minGameVersion) ? "" : "\n" + Core.bundle.format("mod.requiresversion", mod.minGameVersion))) (Version.isAtLeast(mod.minGameVersion) ? "" : "\n" + Core.bundle.format("mod.requiresversion", mod.minGameVersion)))
.width(388f).wrap().growX().pad(0f, 6f, 0f, 6f).left().labelAlign(Align.left); .width(388f).wrap().growX().pad(0f, 6f, 0f, 6f).left().labelAlign(Align.left);
con.add().growX().pad(0f, 6f, 0f, 6f); con.add().growX().pad(0f, 6f, 0f, 6f);
@@ -425,14 +448,9 @@ public class ModsDialog extends BaseDialog{
sel.keyDown(KeyCode.back, sel::hide); sel.keyDown(KeyCode.back, sel::hide);
sel.show(); sel.show();
}).width(460f).growX().left().fillY(); }).width(460f).growX().left().fillY();
tablebrow.row(); if(++i % cols == 0) browserTable.row();
} }
}); });
};
rebuildBrowser[0].run();
}).get().setScrollingDisabled(true, false);
browser.addCloseButton();
browser.show();
} }
private String trimText(String text){ private String trimText(String text){