This commit is contained in:
Anuken 2020-12-30 16:58:42 -05:00
parent b79a6f6b32
commit f5410c5712
10 changed files with 77 additions and 3 deletions

View File

@ -1,6 +1,7 @@
package mindustry.entities.abilities;
import arc.*;
import arc.scene.ui.layout.*;
import mindustry.gen.*;
public abstract class Ability implements Cloneable{
@ -16,6 +17,10 @@ public abstract class Ability implements Cloneable{
}
}
public void displayBars(Unit unit, Table bars){
}
/** @return localized ability name; mods should override this. */
public String localized(){
return Core.bundle.get("ability." + getClass().getSimpleName().replace("Ability", "").toLowerCase());

View File

@ -6,10 +6,12 @@ import arc.graphics.*;
import arc.graphics.g2d.*;
import arc.math.*;
import arc.math.geom.*;
import arc.scene.ui.layout.*;
import arc.util.*;
import mindustry.content.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.ui.*;
public class ForceFieldAbility extends Ability{
/** Shield radius. */
@ -94,6 +96,11 @@ public class ForceFieldAbility extends Ability{
}
}
@Override
public void displayBars(Unit unit, Table bars){
bars.add(new Bar("stat.shieldhealth", Pal.accent, () -> unit.shield / max)).row();
}
public void checkRadius(Unit unit){
//timer2 is used to store radius scale as an effect
realRad = radiusScale * radius;

View File

@ -2,6 +2,7 @@ package mindustry.entities.comp;
import arc.*;
import arc.math.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import arc.util.*;
import mindustry.*;
@ -12,6 +13,7 @@ import mindustry.entities.*;
import mindustry.game.EventType.*;
import mindustry.gen.*;
import mindustry.type.*;
import mindustry.ui.*;
import mindustry.world.*;
import mindustry.world.blocks.payloads.*;
@ -143,4 +145,19 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{
return false;
}
void contentInfo(Table table, float itemSize, float width){
table.clear();
table.top().left();
float pad = 0;
float items = payloads.size;
if(itemSize * items + pad * items > width){
pad = (width - (itemSize) * items) / items;
}
for (Payload p : payloads){
table.image(p.icon(Cicon.small)).size(itemSize).padRight(pad);
}
}
}

View File

@ -171,6 +171,23 @@ public class UnitType extends UnlockableContent{
bars.add(new Bar(ammoType.icon + " " + Core.bundle.get("stat.ammo"), ammoType.barColor, () -> unit.ammo / ammoCapacity));
bars.row();
}
for(Ability ability : unit.abilities){
ability.displayBars(unit, bars);
}
if(unit instanceof Payloadc payload){
bars.add(new Bar("stat.payloadcapacity", Pal.items, () -> payload.payloadUsed() / unit.type().payloadCapacity));
bars.row();
var count = new float[]{-1};
bars.table().update(t -> {
if(count[0] != payload.payloadUsed()) {
payload.contentInfo(t, 8 * 2, 270);
count[0] = payload.payloadUsed();
}
}).growX().left();
}
}).growX();
if(unit.controller() instanceof LogicAI){

View File

@ -44,7 +44,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
public final PlanetRenderer planets = renderer.planets;
public final LaunchLoadoutDialog loadouts = new LaunchLoadoutDialog();
public int launchRange;
public float zoom = 1f, selectAlpha = 1f;
public @Nullable Sector selected, hovered, launchSector;
public Mode mode = look;

View File

@ -755,6 +755,20 @@ public class HudFragment extends Fragment{
return builder;
}).growX().pad(8f);
table.row();
var count = new float[]{-1};
table.table().update(t -> {
if(player.unit() instanceof Payloadc payload){
if(count[0] != payload.payloadUsed()){
payload.contentInfo(t, 8 * 2, 275f);
count[0] = payload.payloadUsed();
}
}else{
t.clear();
}
}).growX().visible(() -> player.unit() instanceof Payloadc p && p.payloadUsed() > 0).colspan(2);
return table;
}

View File

@ -57,4 +57,9 @@ public class BuildPayload implements Payload{
Drawf.shadow(build.x, build.y, build.block.size * tilesize * 2f);
Draw.rect(build.block.icon(Cicon.full), build.x, build.y);
}
@Override
public TextureRegion icon(Cicon icon){
return block().icon(icon);
}
}

View File

@ -1,9 +1,11 @@
package mindustry.world.blocks.payloads;
import arc.graphics.g2d.*;
import arc.util.*;
import arc.util.io.*;
import mindustry.game.*;
import mindustry.gen.*;
import mindustry.ui.*;
import mindustry.world.*;
import static mindustry.Vars.*;
@ -33,6 +35,9 @@ public interface Payload{
/** writes the payload for saving. */
void write(Writes write);
/** @return icon describing the contents. */
TextureRegion icon(Cicon icon);
static void write(@Nullable Payload payload, Writes write){
if(payload == null){
write.bool(false);

View File

@ -89,4 +89,9 @@ public class UnitPayload implements Payload{
deactiveTime = Math.max(deactiveTime - Time.delta/deactiveDuration, 0f);
}
}
@Override
public TextureRegion icon(Cicon icon){
return unit.type.icon(icon);
}
}

View File

@ -45,8 +45,8 @@ public class Battery extends PowerDistributor{
@Override
public BlockStatus status(){
if(Mathf.equal(power.status, 0f, 0.01f)) return BlockStatus.noInput;
if(Mathf.equal(power.status, 1f, 0.01f)) return BlockStatus.active;
if(Mathf.equal(power.status, 0f, 0.001f)) return BlockStatus.noInput;
if(Mathf.equal(power.status, 1f, 0.001f)) return BlockStatus.active;
return BlockStatus.noOutput;
}
}