can somebody help me AHHHHHHHHHHH

This commit is contained in:
sharlottes
2021-05-30 20:45:48 +09:00
parent 39c2f17033
commit 14f83fd23e
4 changed files with 274 additions and 108 deletions

View File

@@ -10,6 +10,8 @@ shar-stat.charge = Charge: {0}%
shar-stat.itemAmmo = Ammo : {0} / {1} shar-stat.itemAmmo = Ammo : {0} / {1}
shar-stat.liquidAmmo = Liquid: {0} shar-stat.liquidAmmo = Liquid: {0}
shar-stat.power = Power: {0} / {1} shar-stat.power = Power: {0} / {1}
shar-stat.break = [red] broke [orange]{0}.[][]
shar-stat.build = [green] built [orange]{0}.[][]
# Settings # Settings
setting.select.name = Display select Arrow setting.select.name = Display select Arrow
@@ -38,4 +40,5 @@ warning = displayed wave amount is too high! it may cause lags.
hud.unit = Unit Info hud.unit = Unit Info
hud.wave = Wave Info hud.wave = Wave Info
hud.core = Core Info hud.core = Core Info
hud.tile = Tile Info
hud.cancel = Hidden hud.cancel = Hidden

View File

@@ -10,6 +10,8 @@ shar-stat.charge = 충전: {0}%
shar-stat.itemAmmo = 탄약 : {0} / {1} shar-stat.itemAmmo = 탄약 : {0} / {1}
shar-stat.liquidAmmo = 액체: {0} shar-stat.liquidAmmo = 액체: {0}
shar-stat.power = 전력: {0} / {1} shar-stat.power = 전력: {0} / {1}
shar-stat.break = [lightgray] 가 [orange]{0}[]를 [red]철거[]했습니다.[]
shar-stat.build = [lightgray] 가 [orange]{0}[]를 [green]건설[]했습니다.[]
# Settings # Settings
setting.select.name = 선택 화살표 표시 setting.select.name = 선택 화살표 표시
@@ -38,4 +40,5 @@ warning = 표시될 웨이브 수가 너무 많습니다! 많은 랙이 걸릴
hud.unit = 유닛 정보 hud.unit = 유닛 정보
hud.wave = 단계 정보 hud.wave = 단계 정보
hud.core = 코어 정보 hud.core = 코어 정보
hud.tile = 타일 정보
hud.cancel = 닫음 hud.cancel = 닫음

View File

@@ -15,7 +15,9 @@ import arc.scene.ui.layout.Scl;
import arc.scene.ui.layout.Stack; import arc.scene.ui.layout.Stack;
import arc.scene.ui.layout.Table; import arc.scene.ui.layout.Table;
import arc.scene.utils.Elem; import arc.scene.utils.Elem;
import arc.struct.IntMap;
import arc.struct.ObjectIntMap; import arc.struct.ObjectIntMap;
import arc.struct.ObjectMap;
import arc.struct.Seq; import arc.struct.Seq;
import arc.util.*; import arc.util.*;
import mindustry.Vars; import mindustry.Vars;
@@ -33,6 +35,9 @@ import mindustry.graphics.Pal;
import mindustry.input.DesktopInput; import mindustry.input.DesktopInput;
import mindustry.type.*; import mindustry.type.*;
import mindustry.ui.*; import mindustry.ui.*;
import mindustry.world.Block;
import mindustry.world.Tile;
import mindustry.world.blocks.ConstructBlock;
import mindustry.world.blocks.defense.turrets.ItemTurret; import mindustry.world.blocks.defense.turrets.ItemTurret;
import mindustry.world.blocks.defense.turrets.LiquidTurret; import mindustry.world.blocks.defense.turrets.LiquidTurret;
import mindustry.world.blocks.defense.turrets.PowerTurret; import mindustry.world.blocks.defense.turrets.PowerTurret;
@@ -42,6 +47,8 @@ import mindustry.world.blocks.storage.CoreBlock;
import mindustry.world.consumers.ConsumePower; import mindustry.world.consumers.ConsumePower;
import mindustry.world.consumers.ConsumeType; import mindustry.world.consumers.ConsumeType;
import java.time.LocalTime;
import static arc.Core.scene; import static arc.Core.scene;
import static arc.Core.settings; import static arc.Core.settings;
import static mindustry.Vars.*; import static mindustry.Vars.*;
@@ -54,22 +61,23 @@ public class HudUi {
Table unitTable = new Table(); Table unitTable = new Table();
Table waveTable = new Table(); Table waveTable = new Table();
Table coreTable = new Table(); Table coreTable = new Table();
Table tileTable = new Table();
float waveScrollPos;
float coreScrollPos;
float tileScrollPos, historyScrollPos;
IntMap<ObjectMap<EventType.BlockBuildBeginEvent, Block>> tileHistory = new IntMap<>();
@Nullable UnitType type; @Nullable UnitType type;
@Nullable Unit unit; @Nullable Unit unit;
Element image; Element image;
Color lastItemColor = Pal.items; Color lastItemColor = Pal.items;
int uiIndex = 0;
float heat; float heat;
float heat2; float heat2;
float coreScrollPos; float a;
float waveScrollPos;
int maxwave; int maxwave;
int coreamount; int coreamount;
float a; int uiIndex = 0;
boolean panFix = false; boolean panFix = false;
@@ -81,7 +89,11 @@ public class HudUi {
else return unit; else return unit;
} }
public void setDraw(){ public @Nullable Tile getTile(){
return Vars.world.tileWorld(Core.input.mouseWorldX(), Core.input.mouseWorldY());
};
public void setEvent(){
Events.run(EventType.Trigger.draw, () -> { Events.run(EventType.Trigger.draw, () -> {
if(!Core.settings.getBool("select")) return; if(!Core.settings.getBool("select")) return;
Unit unit = getUnit(); Unit unit = getUnit();
@@ -94,6 +106,28 @@ public class HudUi {
Draw.reset(); Draw.reset();
} }
}); });
Events.on(EventType.BlockBuildBeginEvent.class, e -> {
if(!tileHistory.containsKey(e.tile.pos())) {
if(e.tile.build instanceof ConstructBlock.ConstructBuild) tileHistory.put(e.tile.pos(), ObjectMap.of(e, ((ConstructBlock.ConstructBuild) e.tile.build).cblock));
else tileHistory.put(e.tile.pos(), ObjectMap.of(e, e.tile.block()));
return;
}
ObjectMap<EventType.BlockBuildBeginEvent, Block> map = tileHistory.get(e.tile.pos());
if(e.breaking) {
if(e.tile.build instanceof ConstructBlock.ConstructBuild) map.put(e, ((ConstructBlock.ConstructBuild) e.tile.build).cblock);
else map.put(e, e.tile.block());
tileHistory.put(e.tile.pos(), map);
}
else Time.run(10, () -> {
if (e.tile.build instanceof ConstructBlock.ConstructBuild)
map.put(e, ((ConstructBlock.ConstructBuild) e.tile.build).cblock);
else map.put(e, e.tile.block());
tileHistory.put(e.tile.pos(), map);
});
});
} }
public void addTable(){ public void addTable(){
@@ -116,22 +150,24 @@ public class HudUi {
Table labelTable = new Table(t -> t.add(label).scaling(Scaling.fit).left().padRight(40 * 8f)); Table labelTable = new Table(t -> t.add(label).scaling(Scaling.fit).left().padRight(40 * 8f));
table.table(t -> { table.table(t -> {
Seq<Button> buttons = Seq.with(null, null, null, null); Seq<Button> buttons = Seq.with(null, null, null, null, null);
buttons.items[0] = t.button(Icon.units, Styles.clearToggleTransi, () -> { buttons.items[0] = t.button(Icon.units, Styles.clearToggleTransi, () -> {
uiIndex = 0; uiIndex = 0;
buttons.items[0].setChecked(true); buttons.items[0].setChecked(true);
buttons.items[1].setChecked(false); buttons.items[1].setChecked(false);
buttons.items[2].setChecked(false); buttons.items[2].setChecked(false);
buttons.items[3].setChecked(false); buttons.items[3].setChecked(false);
buttons.items[4].setChecked(false);
label.setText(Core.bundle.get("hud.unit")); label.setText(Core.bundle.get("hud.unit"));
addCoreTable();
addWaveTable();
addBars(); addBars();
addWeapon(); addWeapon();
addUnitTable(); addUnitTable();
addWaveTable();
addCoreTable();
addTileTable();
table.removeChild(baseTable); table.removeChild(baseTable);
labelTable.setPosition(buttons.items[uiIndex].x, buttons.items[uiIndex].y); labelTable.setPosition(buttons.items[uiIndex].x, buttons.items[uiIndex].y);
baseTable = table.table(tt -> tt.stack(unitTable, coreTable, waveTable, labelTable).align(Align.left).left().visible(() -> settings.getBool("infoui"))).get(); baseTable = table.table(tt -> tt.stack(unitTable, coreTable, waveTable, tileTable, labelTable).align(Align.left).left().visible(() -> settings.getBool("infoui"))).get();
a = 1f; a = 1f;
}).size(5*8f).get(); }).size(5*8f).get();
t.row(); t.row();
@@ -141,15 +177,17 @@ public class HudUi {
buttons.items[1].setChecked(true); buttons.items[1].setChecked(true);
buttons.items[2].setChecked(false); buttons.items[2].setChecked(false);
buttons.items[3].setChecked(false); buttons.items[3].setChecked(false);
buttons.items[4].setChecked(false);
label.setText(Core.bundle.get("hud.wave")); label.setText(Core.bundle.get("hud.wave"));
addCoreTable();
addWaveTable();
addBars(); addBars();
addWeapon(); addWeapon();
addUnitTable(); addUnitTable();
addWaveTable();
addCoreTable();
addTileTable();
table.removeChild(baseTable); table.removeChild(baseTable);
labelTable.setPosition(buttons.items[uiIndex].x, buttons.items[uiIndex].y); labelTable.setPosition(buttons.items[uiIndex].x, buttons.items[uiIndex].y);
baseTable = table.table(tt -> tt.stack(unitTable, coreTable, waveTable, labelTable).align(Align.left).left().visible(() -> settings.getBool("infoui"))).get(); baseTable = table.table(tt -> tt.stack(unitTable, coreTable, waveTable, tileTable, labelTable).align(Align.left).left().visible(() -> settings.getBool("infoui"))).get();
a = 1f; a = 1f;
}).size(5*8f).get(); }).size(5*8f).get();
t.row(); t.row();
@@ -159,33 +197,57 @@ public class HudUi {
buttons.items[1].setChecked(false); buttons.items[1].setChecked(false);
buttons.items[2].setChecked(true); buttons.items[2].setChecked(true);
buttons.items[3].setChecked(false); buttons.items[3].setChecked(false);
buttons.items[4].setChecked(false);
label.setText(Core.bundle.get("hud.core")); label.setText(Core.bundle.get("hud.core"));
addCoreTable();
addWaveTable();
addBars(); addBars();
addWeapon(); addWeapon();
addUnitTable(); addUnitTable();
addWaveTable();
addCoreTable();
addTileTable();
table.removeChild(baseTable); table.removeChild(baseTable);
labelTable.setPosition(buttons.items[uiIndex].x, buttons.items[uiIndex].y); labelTable.setPosition(buttons.items[uiIndex].x, buttons.items[uiIndex].y);
baseTable = table.table(tt -> tt.stack(unitTable, coreTable, waveTable, labelTable).align(Align.left).left().visible(() -> settings.getBool("infoui"))).get(); baseTable = table.table(tt -> tt.stack(unitTable, coreTable, waveTable, tileTable, labelTable).align(Align.left).left().visible(() -> settings.getBool("infoui"))).get();
a = 1f; a = 1f;
}).size(5*8f).get(); }).size(5*8f).get();
t.row(); t.row();
buttons.items[3] = t.button(Icon.cancel, Styles.clearToggleTransi, () -> { buttons.items[3] = t.button(Icon.grid, Styles.clearToggleTransi, () -> {
uiIndex = 3; uiIndex = 3;
buttons.items[0].setChecked(false); buttons.items[0].setChecked(false);
buttons.items[1].setChecked(false); buttons.items[1].setChecked(false);
buttons.items[2].setChecked(false); buttons.items[2].setChecked(false);
buttons.items[3].setChecked(true); buttons.items[3].setChecked(true);
label.setText(Core.bundle.get("hud.cancel")); buttons.items[4].setChecked(false);
addCoreTable(); label.setText(Core.bundle.get("hud.tile"));
addWaveTable();
addBars(); addBars();
addWeapon(); addWeapon();
addUnitTable(); addUnitTable();
addWaveTable();
addCoreTable();
addTileTable();
table.removeChild(baseTable); table.removeChild(baseTable);
labelTable.setPosition(buttons.items[uiIndex].x, buttons.items[uiIndex].y); labelTable.setPosition(buttons.items[uiIndex].x, buttons.items[uiIndex].y);
baseTable = table.table(tt -> tt.stack(unitTable, coreTable, waveTable, labelTable).align(Align.left).left().visible(() -> settings.getBool("infoui"))).get(); baseTable = table.table(tt -> tt.stack(unitTable, coreTable, waveTable, tileTable, labelTable).align(Align.left).left().visible(() -> settings.getBool("infoui"))).get();
a = 1f;
}).size(5*8f).get();
t.row();
buttons.items[4] = t.button(Icon.cancel, Styles.clearToggleTransi, () -> {
uiIndex = 4;
buttons.items[0].setChecked(false);
buttons.items[1].setChecked(false);
buttons.items[2].setChecked(false);
buttons.items[3].setChecked(false);
buttons.items[4].setChecked(true);
label.setText(Core.bundle.get("hud.cancel"));
addBars();
addWeapon();
addUnitTable();
addWaveTable();
addCoreTable();
addTileTable();
table.removeChild(baseTable);
labelTable.setPosition(buttons.items[uiIndex].x, buttons.items[uiIndex].y);
baseTable = table.table(tt -> tt.stack(unitTable, coreTable, waveTable, tileTable, labelTable).align(Align.left).left().visible(() -> settings.getBool("infoui"))).get();
a = 1f; a = 1f;
}).size(5*8f).get(); }).size(5*8f).get();
}); });
@@ -758,6 +820,115 @@ public class HudUi {
}); });
} }
public void setWave(Table table){
int winWave = state.isCampaign() && state.rules.winWave > 0 ? state.rules.winWave : Integer.MAX_VALUE;
maxwave = settings.getInt("wavemax");
for(int i = state.wave - 1; i <= Math.min(state.wave + maxwave, winWave - 2); i++){
final int j = i;
if(state.rules.spawns.find(g -> g.getSpawned(j) > 0) != null) table.table(Tex.underline, t -> {
t.add(new Table(tt -> {
tt.left();
Label label = new Label(() -> "[#" + Pal.accent.toString() + "]" + j + "[]");
label.setFontScale(Scl.scl());
tt.add(label);
})).width(Scl.scl(32f));
t.table(tx -> {
int row = 0;
ObjectIntMap<SpawnGroup> groups = new ObjectIntMap<>();
for(SpawnGroup group : state.rules.spawns) {
if(group.getSpawned(j) <= 0) continue;
SpawnGroup sameTypeKey = groups.keys().toArray().find(g -> g.type == group.type && g.effect != StatusEffects.boss);
if(sameTypeKey != null) groups.increment(sameTypeKey, sameTypeKey.getSpawned(j));
else groups.put(group, group.getSpawned(j));
}
Seq<SpawnGroup> groupSorted = groups.keys().toArray().copy().sort((g1, g2) -> {
int boss = Boolean.compare(g1.effect != StatusEffects.boss, g2.effect != StatusEffects.boss);
if(boss != 0) return boss;
int hitSize = Float.compare(-g1.type.hitSize, -g2.type.hitSize);
if(hitSize != 0) return hitSize;
return Integer.compare(-g1.type.id, -g2.type.id);
});
ObjectIntMap<SpawnGroup> groupsTmp = new ObjectIntMap<>();
groupSorted.each(g -> groupsTmp.put(g, groups.get(g)));
for(SpawnGroup group : groupsTmp.keys()){
int amount = groupsTmp.get(group);
if(amount <= 0) continue; //is this even possible?
row ++;
tx.add(new Table(tt -> {
tt.right();
tt.add(new Stack(){{
add(new Table(ttt -> {
ttt.center();
ttt.add(new Image(group.type.icon(Cicon.large)).setScaling(Scaling.fit));
ttt.pack();
}));
add(new Table(ttt -> {
ttt.bottom().left();
Label label = new Label(() -> amount + "");
label.setFontScale(Scl.scl());
ttt.add(label);
ttt.pack();
}));
add(new Table(ttt -> {
ttt.top().right();
Image image = new Image(Icon.warning.getRegion()).setScaling(Scaling.fit);
image.update(() -> image.setColor(Tmp.c2.set(Color.orange).lerp(Color.scarlet, Mathf.absin(Time.time, 2f, 1f))));
ttt.add(image).size(Scl.scl(12f));
ttt.visible(() -> group.effect == StatusEffects.boss);
ttt.pack();
}));
}});
})).width(Scl.scl((Cicon.large.size + 8f)));
if(row % 4 == 0) tx.row();
}
});
});
table.row();
}
}
public void addWaveTable(){
if(uiIndex != 1) return;
ScrollPane wavePane = new ScrollPane(new Image(Core.atlas.find("clear")).setScaling(Scaling.fit), Styles.smallPane);
wavePane.setScrollingDisabled(true, false);
wavePane.setScrollYForce(waveScrollPos);
wavePane.update(() -> {
if(wavePane.hasScroll()){
Element result = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true);
if(result == null || !result.isDescendantOf(wavePane)){
Core.scene.setScrollFocus(null);
}
}
waveScrollPos = wavePane.getScrollY();
wavePane.setWidget(new Table(tx -> tx.table(this::setWave).left()));
});
wavePane.setOverscroll(false, false);
waveTable = new Table(table -> {
table.add(new Table(scene.getStyle(Button.ButtonStyle.class).up, t -> {
t.defaults().minWidth(Scl.scl(25 * 8f)).scaling(Scaling.fit).left();
t.add(wavePane).maxHeight(Scl.scl(32 * 8f));
}){
@Override
protected void drawBackground(float x, float y) {
if(getBackground() == null) return;
Draw.color(color.r, color.g, color.b, (settings.getInt("uiopacity") / 100f) * this.parentAlpha);
getBackground().draw(x, y, width, height);
Draw.reset();
}
}).padRight(Scl.scl(39 * 8f));
table.fillParent = true;
table.visibility = () -> uiIndex == 1;
});
}
public void setCore(Table table){ public void setCore(Table table){
table.add(new Table(t -> { table.add(new Table(t -> {
if(Vars.player.unit() == null) return; if(Vars.player.unit() == null) return;
@@ -869,100 +1040,88 @@ public class HudUi {
}); });
} }
public void setWave(Table table){ public void setHistory(Table table){
int winWave = state.isCampaign() && state.rules.winWave > 0 ? state.rules.winWave : Integer.MAX_VALUE; if(getTile() == null || tileHistory.get(getTile().pos()) == null) return;
maxwave = settings.getInt("wavemax"); for(int i = 0; i < tileHistory.get(getTile().pos()).size; i++){
for(int i = state.wave - 1; i <= Math.min(state.wave + maxwave, winWave - 2); i++){ EventType.BlockBuildBeginEvent e = tileHistory.get(getTile().pos()).keys().toSeq().get(i);
final int j = i; Block destoryed = tileHistory.get(getTile().pos()).values().toSeq().get(i);
if(state.rules.spawns.find(g -> g.getSpawned(j) > 0) != null) table.table(Tex.underline, t -> { Player destroyer = e.unit.getPlayer();
t.add(new Table(tt -> { boolean breaking = e.breaking;
tt.left();
Label label = new Label(() -> "[#" + Pal.accent.toString() + "]" + j + "[]");
label.setFontScale(Scl.scl());
tt.add(label);
})).width(Scl.scl(32f));
t.table(tx -> { table.table(Tex.underline, t -> {
int row = 0; if(destroyer != null) t.add(new Label(()-> "[stat]" + destroyer.name + "[]" + (breaking ? Core.bundle.format("shar-stat.break", destoryed) : Core.bundle.format("shar-stat.build", destoryed))));
ObjectIntMap<SpawnGroup> groups = new ObjectIntMap<>();
for(SpawnGroup group : state.rules.spawns) {
if(group.getSpawned(j) <= 0) continue;
SpawnGroup sameTypeKey = groups.keys().toArray().find(g -> g.type == group.type && g.effect != StatusEffects.boss);
if(sameTypeKey != null) groups.increment(sameTypeKey, sameTypeKey.getSpawned(j));
else groups.put(group, group.getSpawned(j));
}
Seq<SpawnGroup> groupSorted = groups.keys().toArray().copy().sort((g1, g2) -> {
int boss = Boolean.compare(g1.effect != StatusEffects.boss, g2.effect != StatusEffects.boss);
if(boss != 0) return boss;
int hitSize = Float.compare(-g1.type.hitSize, -g2.type.hitSize);
if(hitSize != 0) return hitSize;
return Integer.compare(-g1.type.id, -g2.type.id);
});
ObjectIntMap<SpawnGroup> groupsTmp = new ObjectIntMap<>();
groupSorted.each(g -> groupsTmp.put(g, groups.get(g)));
for(SpawnGroup group : groupsTmp.keys()){
int amount = groupsTmp.get(group);
if(amount <= 0) continue; //is this even possible?
row ++;
tx.add(new Table(tt -> {
tt.right();
tt.add(new Stack(){{
add(new Table(ttt -> {
ttt.center();
ttt.add(new Image(group.type.icon(Cicon.large)).setScaling(Scaling.fit));
ttt.pack();
}));
add(new Table(ttt -> {
ttt.bottom().left();
Label label = new Label(() -> amount + "");
label.setFontScale(Scl.scl());
ttt.add(label);
ttt.pack();
}));
add(new Table(ttt -> {
ttt.top().right();
Image image = new Image(Icon.warning.getRegion()).setScaling(Scaling.fit);
image.update(() -> image.setColor(Tmp.c2.set(Color.orange).lerp(Color.scarlet, Mathf.absin(Time.time, 2f, 1f))));
ttt.add(image).size(Scl.scl(12f));
ttt.visible(() -> group.effect == StatusEffects.boss);
ttt.pack();
}));
}});
})).width(Scl.scl((Cicon.large.size + 8f)));
if(row % 4 == 0) tx.row();
}
});
}); });
table.row(); table.row();
} }
} }
public void addWaveTable(){ public void setTile(Table table){
if(uiIndex != 1) return; table.table(t -> {
ScrollPane wavePane = new ScrollPane(new Image(Core.atlas.find("clear")).setScaling(Scaling.fit), Styles.smallPane); Tile tile = getTile();
wavePane.setScrollingDisabled(true, false); t.table(Tex.underline2, head -> {
wavePane.setScrollYForce(waveScrollPos); head.table(image -> {
wavePane.update(() -> { image.left();
if(wavePane.hasScroll()){ if(tile == null) return;
if(tile.floor().icon(Cicon.tiny) != Core.atlas.find("error")) image.image(tile.floor().icon(Cicon.tiny));
if(tile.overlay().icon(Cicon.tiny) != Core.atlas.find("error")) image.image(tile.overlay().icon(Cicon.tiny));
if(tile.block().icon(Cicon.tiny) != Core.atlas.find("error")) image.image(tile.block().icon(Cicon.tiny));
});
head.table(label -> {
label.center();
label.label(() -> tile == null ? "(null, null)" : "(" + tile.x + ", " + tile.y + ")");
});
});
t.row();
t.table(history -> {
ScrollPane historyPane = new ScrollPane(new Image(Core.atlas.find("clear")).setScaling(Scaling.fit), Styles.smallPane);
historyPane.setScrollingDisabled(true, false);
historyPane.setScrollYForce(historyScrollPos);
historyPane.update(() -> {
if(historyPane.hasScroll()){
Element result = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true);
if(result == null || !result.isDescendantOf(historyPane)){
Core.scene.setScrollFocus(null);
}
}
historyScrollPos = historyPane.getScrollY();
historyPane.setWidget(new Table(tx -> tx.table(this::setHistory).left()));
});
historyPane.setOverscroll(false, false);
history.add(new Table(scene.getStyle(Button.ButtonStyle.class).up, h -> {
h.defaults().minWidth(Scl.scl(25f * 8f)).scaling(Scaling.fit).left();
h.update(() -> {
h.clearChildren();
h.table(this::setHistory);
});
//h.add(historyPane).maxHeight(Scl.scl(24 * 8f));
}));
});
});
}
public void addTileTable(){
if(uiIndex != 3) return;
ScrollPane tilePane = new ScrollPane(new Image(Core.atlas.find("clear")).setScaling(Scaling.fit), Styles.smallPane);
tilePane.setScrollingDisabled(true, false);
tilePane.setScrollYForce(tileScrollPos);
tilePane.update(() -> {
if(tilePane.hasScroll()){
Element result = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true); Element result = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true);
if(result == null || !result.isDescendantOf(wavePane)){ if(result == null || !result.isDescendantOf(tilePane)){
Core.scene.setScrollFocus(null); Core.scene.setScrollFocus(null);
} }
} }
waveScrollPos = wavePane.getScrollY(); tileScrollPos = tilePane.getScrollY();
wavePane.setWidget(new Table(tx -> tx.table(this::setWave).left())); tilePane.setWidget(new Table(tx -> tx.table(this::setTile).left()));
}); });
wavePane.setOverscroll(false, false); tilePane.setOverscroll(false, false);
waveTable = new Table(table -> { tileTable = new Table(table -> {
table.add(new Table(scene.getStyle(Button.ButtonStyle.class).up, t -> { table.add(new Table(scene.getStyle(Button.ButtonStyle.class).up, t -> {
t.defaults().minWidth(Scl.scl(25 * 8f)).scaling(Scaling.fit).left(); t.defaults().minWidth(Scl.scl(25 * 8f)).scaling(Scaling.fit).left();
t.add(wavePane).maxHeight(Scl.scl(32 * 8f)); t.add(tilePane).maxHeight(Scl.scl(32 * 8f));
}){ }){
@Override @Override
protected void drawBackground(float x, float y) { protected void drawBackground(float x, float y) {
@@ -974,7 +1133,7 @@ public class HudUi {
}).padRight(Scl.scl(39 * 8f)); }).padRight(Scl.scl(39 * 8f));
table.fillParent = true; table.fillParent = true;
table.visibility = () -> uiIndex == 1; table.visibility = () -> uiIndex == 3;
}); });
} }
} }

View File

@@ -7,15 +7,12 @@ import arc.graphics.Color;
import arc.graphics.g2d.Draw; import arc.graphics.g2d.Draw;
import arc.graphics.g2d.Lines; import arc.graphics.g2d.Lines;
import arc.math.Mathf; import arc.math.Mathf;
import arc.struct.Seq;
import arc.util.Time; import arc.util.Time;
import arc.util.Tmp; import arc.util.Tmp;
import mindustry.Vars; import mindustry.Vars;
import mindustry.content.Fx; import mindustry.content.Fx;
import mindustry.content.UnitTypes;
import mindustry.game.EventType.*; import mindustry.game.EventType.*;
import mindustry.game.Team; import mindustry.game.Team;
import mindustry.gen.Building;
import mindustry.gen.Groups; import mindustry.gen.Groups;
import mindustry.graphics.Pal; import mindustry.graphics.Pal;
import mindustry.mod.Mod; import mindustry.mod.Mod;
@@ -36,13 +33,15 @@ public class Main extends Mod {
hud.addCoreTable(); hud.addCoreTable();
hud.addWaveTable(); hud.addWaveTable();
hud.addUnitTable(); hud.addUnitTable();
hud.addTileTable();
hud.addTable(); hud.addTable();
hud.setDraw(); hud.setEvent();
}); });
Events.on(WorldLoadEvent.class, e -> { Events.on(WorldLoadEvent.class, e -> {
hud = new HudUi(); hud = new HudUi();
hud.addWaveTable(); hud.addWaveTable();
hud.addTileTable();
}); });
Events.on(WaveEvent.class, e -> { Events.on(WaveEvent.class, e -> {
@@ -51,6 +50,8 @@ public class Main extends Mod {
hud.addWaveTable(); hud.addWaveTable();
}); });
Events.run(Trigger.draw, () -> { Events.run(Trigger.draw, () -> {
if(Core.settings.getBool("unithealthui")) if(Core.settings.getBool("unithealthui"))
Groups.unit.each(unit -> new FreeBar().draw(unit)); Groups.unit.each(unit -> new FreeBar().draw(unit));