From 57d5628750a9944de215310a229276027656f849 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 22 Jun 2018 15:48:38 -0400 Subject: [PATCH] Fixed unit stats bars not being interpolated --- core/src/io/anuke/mindustry/core/Renderer.java | 6 +++--- core/src/io/anuke/mindustry/entities/Unit.java | 4 ++++ .../anuke/mindustry/entities/units/types/Drone.java | 5 +++++ .../io/anuke/mindustry/graphics/OverlayRenderer.java | 11 +++-------- .../mindustry/world/blocks/storage/CoreBlock.java | 3 ++- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index bcd2e48137..a0eac7d56a 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -273,15 +273,15 @@ public class Renderer extends RendererModule{ } } - private void drawAndInterpolate(EntityGroup group){ + public void drawAndInterpolate(EntityGroup group){ drawAndInterpolate(group, t -> true, DrawTrait::draw); } - private void drawAndInterpolate(EntityGroup group, Predicate toDraw){ + public void drawAndInterpolate(EntityGroup group, Predicate toDraw){ drawAndInterpolate(group, toDraw, DrawTrait::draw); } - private void drawAndInterpolate(EntityGroup group, Predicate toDraw, Consumer drawer){ + public void drawAndInterpolate(EntityGroup group, Predicate toDraw, Consumer drawer){ EntityDraw.drawWith(group, toDraw, t -> { float lastx = t.getX(), lasty = t.getY(), lastrot = 0f; diff --git a/core/src/io/anuke/mindustry/entities/Unit.java b/core/src/io/anuke/mindustry/entities/Unit.java index 778a7fb572..8dae8000ee 100644 --- a/core/src/io/anuke/mindustry/entities/Unit.java +++ b/core/src/io/anuke/mindustry/entities/Unit.java @@ -281,6 +281,10 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ } } + public float getAmmoFraction(){ + return inventory.totalAmmo() / (float)inventory.ammoCapacity(); + } + public void drawUnder(){} public void drawOver(){} diff --git a/core/src/io/anuke/mindustry/entities/units/types/Drone.java b/core/src/io/anuke/mindustry/entities/units/types/Drone.java index 3b5dc1a283..6b2e897df4 100644 --- a/core/src/io/anuke/mindustry/entities/units/types/Drone.java +++ b/core/src/io/anuke/mindustry/entities/units/types/Drone.java @@ -168,6 +168,11 @@ public class Drone extends FlyingUnit implements BuilderTrait { return isBuilding() ? placeDistance*2f : 30f; } + @Override + public float getAmmoFraction() { + return inventory.getItem().amount / (float)type.itemCapacity; + } + protected void findItem(){ TileEntity entity = getClosestCore(); if(entity == null){ diff --git a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java index 169fc18461..d62ee50fba 100644 --- a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java @@ -156,16 +156,11 @@ public class OverlayRenderer { } if((!debug || showUI) && Settings.getBool("healthbars")){ - for(TeamData ally : (debug ? state.teams.getTeams() : state.teams.getTeams(true))){ - for(Unit e : unitGroups[ally.team.ordinal()].all()){ - drawStats(e); - } + renderer.drawAndInterpolate(unitGroups[ally.team.ordinal()], u -> !u.isDead(), this::drawStats); } - for(Unit e : playerGroup.all()){ - drawStats(e); - } + renderer.drawAndInterpolate(playerGroup, u -> !u.isDead(), this::drawStats); } } @@ -182,7 +177,7 @@ public class OverlayRenderer { drawEncloser(x, y - 8f, 2f); drawBar(Palette.healthstats, x, y - 8f, unit.healthf()); - drawBar(Palette.ammo, x, y - 9f, unit.inventory.totalAmmo() / (float) unit.inventory.ammoCapacity()); + drawBar(Palette.ammo, x, y - 9f, unit.getAmmoFraction()); } void drawBar(Color color, float x, float y, float finion){ diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java index 763305f372..dbc8f55b6c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java @@ -44,6 +44,7 @@ public class CoreBlock extends StorageBlock { protected float supplyRadius = 50f; protected float supplyInterval = 5f; + protected float droneRespawnDuration = 60*6; protected UnitType droneType = UnitTypes.drone; public CoreBlock(String name) { @@ -155,7 +156,7 @@ public class CoreBlock extends StorageBlock { if(entity.currentUnit != null){ entity.heat = Mathf.lerpDelta(entity.heat, 1f, 0.1f); entity.time += Timers.delta(); - entity.progress += 1f / Vars.respawnduration; + entity.progress += 1f / (entity.currentUnit instanceof Player ? respawnduration : droneRespawnDuration); //instant build for fast testing. if(debug){