mirror of
https://github.com/yawaflua/Informatis.git
synced 2025-12-10 03:59:26 +02:00
can somebody help me AHHHHHHHHHHH
This commit is contained in:
@@ -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
|
||||||
@@ -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 = 닫음
|
||||||
@@ -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);
|
Element result = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true);
|
||||||
if(result == null || !result.isDescendantOf(wavePane)){
|
if(result == null || !result.isDescendantOf(historyPane)){
|
||||||
Core.scene.setScrollFocus(null);
|
Core.scene.setScrollFocus(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
waveScrollPos = wavePane.getScrollY();
|
historyScrollPos = historyPane.getScrollY();
|
||||||
wavePane.setWidget(new Table(tx -> tx.table(this::setWave).left()));
|
historyPane.setWidget(new Table(tx -> tx.table(this::setHistory).left()));
|
||||||
});
|
});
|
||||||
|
|
||||||
wavePane.setOverscroll(false, false);
|
historyPane.setOverscroll(false, false);
|
||||||
waveTable = new Table(table -> {
|
|
||||||
|
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);
|
||||||
|
if(result == null || !result.isDescendantOf(tilePane)){
|
||||||
|
Core.scene.setScrollFocus(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tileScrollPos = tilePane.getScrollY();
|
||||||
|
tilePane.setWidget(new Table(tx -> tx.table(this::setTile).left()));
|
||||||
|
});
|
||||||
|
|
||||||
|
tilePane.setOverscroll(false, false);
|
||||||
|
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;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user