This commit is contained in:
Sharlotte
2022-12-05 23:02:18 +09:00
parent c24d02d154
commit 508613cf68

View File

@@ -1,18 +1,13 @@
package informatis.ui; package informatis.ui;
import arc.graphics.g2d.Draw; import arc.graphics.g2d.*;
import arc.graphics.g2d.Lines; import arc.scene.event.*;
import arc.scene.ui.Image; import arc.scene.ui.*;
import arc.scene.ui.Label; import arc.scene.ui.layout.*;
import arc.scene.ui.layout.Scl; import arc.struct.*;
import arc.scene.ui.layout.Stack; import arc.util.*;
import arc.scene.ui.layout.Table; import mindustry.*;
import arc.struct.IntSeq; import mindustry.entities.units.*;
import arc.struct.IntSet;
import arc.struct.Seq;
import arc.util.Log;
import mindustry.Vars;
import mindustry.entities.units.BuildPlan;
import arc.struct.Queue; import arc.struct.Queue;
import mindustry.gen.Icon; import mindustry.gen.Icon;
@@ -21,7 +16,7 @@ import mindustry.world.Block;
public class BuildNoteManager { public class BuildNoteManager {
public static Table body; public static Table body;
private static Seq<Queue<BuildPlan>> plans = new Seq<>(10); private static final Seq<Queue<BuildPlan>> plans = new Seq<>(10);
public static void init() { public static void init() {
for(int i = 0; i < 10; i++) plans.add(new Queue<>()); for(int i = 0; i < 10; i++) plans.add(new Queue<>());
@@ -29,46 +24,64 @@ public class BuildNoteManager {
t.defaults().growX(); t.defaults().growX();
t.table(list -> { t.table(list -> {
for(int i = 0; i < 10; i++) { list.defaults().grow();
final int finalI = i;
Table listItem = new Table(); for(int i = 1; i <= 10; i++) {
listItem.left(); final int finalI = i % 10;
listItem.add(String.valueOf(i)).fontScale(0.75f).width(15).padRight(30); Table ltable = new Table(listItem -> {
listItem.clicked(() -> selectBuildPlan(finalI)); listItem.left().defaults().grow();
listItem.table(stack -> stack.add(buildListItem(finalI))).marginLeft(20).marginRight(20).name("listItem-"+i).grow(); listItem.add(String.valueOf(finalI))
listItem.table(icons -> { .fontScale(0.75f)
icons.image(Icon.cancelSmall).size(20).color(Pal.health).padLeft(10).grow().get().clicked(() -> { .width(15).padRight(30);
listItem.table(stack -> stack.add(buildListItem(finalI)))
.padLeft(10)
.name("listItem-"+finalI);
listItem.image(Icon.cancelSmall)
.color(Pal.health)
.size(20).padRight(10)
.get().clicked(() -> {
plans.get(finalI).clear(); plans.get(finalI).clear();
rerenderListItem(finalI); rerenderListItem();
}); });
icons.image(Icon.upSmall).size(20).color(Pal.heal).padLeft(10).grow().get().clicked(() -> { listItem.image(Icon.upSmall)
plans.set(finalI, Vars.player.unit().plans()); .color(Pal.heal)
rerenderListItem(finalI); .size(20).padRight(10)
.get().clicked(() -> {
plans.set(finalI, copyPlan(Vars.player.unit().plans()));
rerenderListItem();
}); });
}).padLeft(10).width(80).grow(); });
list.add(listItem).pad(10).grow().row(); ltable.touchable = Touchable.enabled;
list.image().height(2f).color(Pal.gray).grow().row(); ltable.clicked(() -> selectBuildPlan(finalI));
}
list.add(ltable).pad(10).minWidth(200).row();
list.image().height(2f).color(Pal.gray).row();
};
}); });
}); });
} }
private static Queue<BuildPlan> copyPlan(Queue<BuildPlan> target) {
Queue<BuildPlan> copied = new Queue<>(target.size);
for(BuildPlan plan : target) copied.add(plan.copy());
return copied;
}
public static void selectBuildPlan(int index) { public static void selectBuildPlan(int index) {
Vars.player.unit().plans(plans.get(index)); Vars.player.unit().plans(copyPlan(plans.get(index)));
} }
private static Stack buildListItem(int index) { private static Stack buildListItem(int index) {
return new Stack() {{ return new Stack() {{
IntSet cache = new IntSet(); IntSet cache = new IntSet();
for(int i = 0; i < plans.get(index).size && cache.size < 5; i++) { int i = 0;
final int fianlI = i; for(BuildPlan plan : plans.get(index)) {
Block block = plans.get(index).get(i).block; Block block = plan.block;
if(cache.contains(block.id)) continue; if(cache.contains(block.id)) continue;
cache.add(block.id); cache.add(block.id);
Log.info(cache);
add(new Table(icon -> { Table iconTable = new Table();
icon.right(); iconTable.right();
icon.add(new Image() { iconTable.add(new Image() {
{ {
setDrawable(block.uiIcon); setDrawable(block.uiIcon);
} }
@@ -82,14 +95,18 @@ public class BuildNoteManager {
Lines.rect(x - size / 2f, y - size / 2f, width + size, height + size); Lines.rect(x - size / 2f, y - size / 2f, width + size, height + size);
Draw.reset(); Draw.reset();
} }
}).size(16).padRight(fianlI * 4); }).size(16).padRight(i * 4);
})); add(iconTable);
i++;
if(cache.size > 5) break;
} }
}}; }};
} }
private static void rerenderListItem(int index) { private static void rerenderListItem() {
Table table = body.find("listItem-"+index); for(int i = 0; i < 10; i++) {
Table table = body.find("listItem-"+i);
table.clear(); table.clear();
table.add(buildListItem(index)); table.add(buildListItem(i));
}
} }
} }