Core database tabs
This commit is contained in:
@@ -5,11 +5,13 @@ import arc.graphics.*;
|
||||
import arc.input.*;
|
||||
import arc.math.*;
|
||||
import arc.scene.event.*;
|
||||
import arc.scene.style.*;
|
||||
import arc.scene.ui.*;
|
||||
import arc.scene.ui.layout.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import mindustry.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.ctype.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.graphics.*;
|
||||
@@ -24,16 +26,30 @@ public class DatabaseDialog extends BaseDialog{
|
||||
private TextField search;
|
||||
private Table all = new Table();
|
||||
|
||||
private @Nullable Seq<UnlockableContent> allTabs;
|
||||
//sun means "all content"
|
||||
private UnlockableContent tab = Planets.sun;
|
||||
|
||||
public DatabaseDialog(){
|
||||
super("@database");
|
||||
|
||||
shouldPause = true;
|
||||
addCloseButton();
|
||||
shown(this::rebuild);
|
||||
shown(() -> {
|
||||
checkTabList();
|
||||
if(state.isCampaign() && allTabs.contains(state.getPlanet())){
|
||||
tab = state.getPlanet();
|
||||
}else if(state.isGame() && state.rules.planet != null && allTabs.contains(state.rules.planet)){
|
||||
tab = state.rules.planet;
|
||||
}
|
||||
|
||||
rebuild();
|
||||
});
|
||||
onResize(this::rebuild);
|
||||
|
||||
all.margin(20).marginTop(0f);
|
||||
|
||||
cont.top();
|
||||
cont.table(s -> {
|
||||
s.image(Icon.zoom).padRight(8);
|
||||
search = s.field(null, text -> rebuild()).growX().get();
|
||||
@@ -43,18 +59,51 @@ public class DatabaseDialog extends BaseDialog{
|
||||
cont.pane(all).scrollX(false);
|
||||
}
|
||||
|
||||
void checkTabList(){
|
||||
if(allTabs == null){
|
||||
Seq<Content>[] allContent = Vars.content.getContentMap();
|
||||
ObjectSet<UnlockableContent> all = new ObjectSet<>();
|
||||
for(var contents : allContent){
|
||||
for(var content : contents){
|
||||
if(content instanceof UnlockableContent u){
|
||||
all.addAll(u.databaseTabs);
|
||||
}
|
||||
}
|
||||
}
|
||||
allTabs = all.toSeq().sort();
|
||||
allTabs.insert(0, Planets.sun);
|
||||
}
|
||||
}
|
||||
|
||||
void rebuild(){
|
||||
checkTabList();
|
||||
|
||||
all.clear();
|
||||
var text = search.getText().toLowerCase();
|
||||
|
||||
Seq<Content>[] allContent = Vars.content.getContentMap();
|
||||
|
||||
all.table(t -> {
|
||||
int i = 0;
|
||||
for(var content : allTabs){
|
||||
t.button(content == Planets.sun ? Icon.eyeSmall : content instanceof Planet ? Icon.planet : new TextureRegionDrawable(content.uiIcon), Styles.clearNoneTogglei, iconMed, () -> {
|
||||
tab = content;
|
||||
rebuild();
|
||||
}).size(50f).checked(b -> tab == content).tooltip(content == Planets.sun ? "@all" : content.localizedName).with(but -> {
|
||||
but.getStyle().imageUpColor = content instanceof Planet p ? p.iconColor : Color.white.cpy();
|
||||
});
|
||||
|
||||
if(++i % 10 == 0) t.row();
|
||||
}
|
||||
}).row();;
|
||||
|
||||
for(int j = 0; j < allContent.length; j++){
|
||||
ContentType type = ContentType.all[j];
|
||||
|
||||
Seq<UnlockableContent> array = allContent[j]
|
||||
.select(c -> c instanceof UnlockableContent u && !u.isHidden() &&
|
||||
.select(c -> c instanceof UnlockableContent u && !u.isHidden() && (tab == Planets.sun || u.allDatabaseTabs || (u.databaseTabs.isEmpty() && tab == Planets.serpulo) || u.databaseTabs.contains(tab)) &&
|
||||
(text.isEmpty() || u.localizedName.toLowerCase().contains(text))).as();
|
||||
|
||||
if(array.size == 0) continue;
|
||||
|
||||
all.add("@content." + type.name() + ".name").growX().left().color(Pal.accent);
|
||||
|
||||
Reference in New Issue
Block a user