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