Block Drawer cleanup

This commit is contained in:
Anuke
2022-03-06 13:03:14 -05:00
parent bc0b0b254d
commit fb2b266661
29 changed files with 132 additions and 337 deletions

View File

@@ -39,11 +39,10 @@ public class ItemTurret extends Turret{
/** Makes copies of all bullets and limits their range. */
public void limitRange(float margin){
for(var entry : ammoTypes.copy().entries()){
var copy = entry.value.copy();
float realRange = copy.rangeChange + range;
var bullet = entry.value;
float realRange = bullet.rangeChange + range;
//doesn't handle drag
copy.lifetime = (realRange + margin) / copy.speed;
ammoTypes.put(entry.key, copy);
bullet.lifetime = (realRange + margin) / bullet.speed;
}
}

View File

@@ -42,9 +42,7 @@ public class PayloadTurret extends Turret{
/** Makes copies of all bullets and limits their range. */
public void limitRange(float margin){
for(var entry : ammoTypes.copy().entries()){
var copy = entry.value.copy();
copy.lifetime = (range + margin) / copy.speed;
ammoTypes.put(entry.key, copy);
entry.value.lifetime = (range + margin) / entry.value.speed;
}
}

View File

@@ -1,49 +0,0 @@
package mindustry.world.draw;
import arc.*;
import arc.graphics.g2d.*;
import arc.math.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.world.*;
public class DrawAnimation extends DrawBlock{
public int frameCount = 3;
public float frameSpeed = 5f;
public boolean sine = true;
public TextureRegion[] frames;
public TextureRegion liquid, top;
@Override
public void draw(Building build){
Draw.rect(build.block.region, build.x, build.y);
Draw.rect(
sine ?
frames[(int)Mathf.absin(build.totalProgress(), frameSpeed, frameCount - 0.001f)] :
frames[(int)((build.totalProgress() / frameSpeed) % frameCount)],
build.x, build.y);
if(build.liquids != null){
Drawf.liquid(liquid, build.x, build.y, build.liquids.currentAmount() / build.block.liquidCapacity, build.liquids.current().color);
}
if(top.found()){
Draw.rect(top, build.x, build.y);
}
}
@Override
public void load(Block block){
frames = new TextureRegion[frameCount];
for(int i = 0; i < frameCount; i++){
frames[i] = Core.atlas.find(block.name + "-frame" + i);
}
liquid = Core.atlas.find(block.name + "-liquid");
top = Core.atlas.find(block.name + "-top");
}
@Override
public TextureRegion[] icons(Block block){
return top.found() ? new TextureRegion[]{block.region, top} : new TextureRegion[]{block.region};
}
}

View File

@@ -1,16 +1,12 @@
package mindustry.world.draw;
import arc.*;
import arc.graphics.*;
import arc.graphics.g2d.*;
import arc.math.*;
import arc.util.*;
import mindustry.gen.*;
import mindustry.world.*;
//TODO make non-standalone?
public class DrawArcSmelter extends DrawBlock{
public TextureRegion bottom;
public class DrawArcSmelt extends DrawPartial{
public Color flameColor = Color.valueOf("f58349"), midColor = Color.valueOf("f2d585");
public float flameRad = 1f, circleSpace = 2f, flameRadiusScl = 3f, flameRadiusMag = 0.3f, circleStroke = 1.5f;
@@ -18,13 +14,10 @@ public class DrawArcSmelter extends DrawBlock{
public int particles = 25;
public float particleLife = 40f, particleRad = 7f, particleStroke = 1.1f, particleLen = 3f;
public boolean drawCenter = true;
public boolean drawBottom = true, drawRegion = true;
public Blending blending = Blending.additive;
@Override
public void draw(Building build){
if(drawBottom) Draw.rect(bottom, build.x, build.y);
if(build.warmup() > 0f && flameColor.a > 0.001f){
Lines.stroke(circleStroke * build.warmup());
@@ -52,17 +45,5 @@ public class DrawArcSmelter extends DrawBlock{
Draw.blend();
Draw.reset();
}
if(drawRegion) Draw.rect(build.block.region, build.x, build.y);
}
@Override
public void load(Block block){
bottom = Core.atlas.find(block.name + "-bottom");
}
@Override
public TextureRegion[] icons(Block block){
return new TextureRegion[]{bottom, block.region};
}
}

View File

@@ -10,16 +10,13 @@ import mindustry.graphics.*;
import mindustry.world.*;
public class DrawCells extends DrawBlock{
public TextureRegion bottom, middle;
public TextureRegion middle;
public Color color = Color.white.cpy(), particleColorFrom = Color.black.cpy(), particleColorTo = Color.black.cpy();
public int particles = 12;
public float range = 4f, recurrence = 6f, radius = 3f, lifetime = 60f;
@Override
public void draw(Building build){
Draw.rect(bottom, build.x, build.y);
Drawf.liquid(middle, build.x, build.y, build.warmup(), color);
if(build.warmup() > 0.001f){
@@ -46,12 +43,6 @@ public class DrawCells extends DrawBlock{
@Override
public void load(Block block){
bottom = Core.atlas.find(block.name + "-bottom");
middle = Core.atlas.find(block.name + "-middle");
}
@Override
public TextureRegion[] icons(Block block){
return new TextureRegion[]{bottom, block.region};
}
}

View File

@@ -8,7 +8,7 @@ import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.world.*;
public class DrawCultivator extends DrawBlock{
public class DrawCultivator extends DrawPartial{
public Color plantColor = Color.valueOf("5541b1");
public Color plantColorLight = Color.valueOf("7457ce");
public Color bottomColor = Color.valueOf("474747");
@@ -18,12 +18,9 @@ public class DrawCultivator extends DrawBlock{
public float recurrence = 6f, radius = 3f;
public TextureRegion middle;
public TextureRegion top;
@Override
public void draw(Building build){
Draw.rect(build.block.region, build.x, build.y);
Drawf.liquid(middle, build.x, build.y, build.warmup(), plantColor);
Draw.color(bottomColor, plantColorLight, build.warmup());
@@ -40,17 +37,10 @@ public class DrawCultivator extends DrawBlock{
}
Draw.color();
Draw.rect(top, build.x, build.y);
}
@Override
public void load(Block block){
middle = Core.atlas.find(block.name + "-middle");
top = Core.atlas.find(block.name + "-top");
}
@Override
public TextureRegion[] icons(Block block){
return new TextureRegion[]{block.region, top};
}
}

View File

@@ -0,0 +1,25 @@
package mindustry.world.draw;
import arc.*;
import arc.graphics.g2d.*;
import arc.math.*;
import mindustry.gen.*;
import mindustry.world.*;
public class DrawFade extends DrawBlock{
public String suffix = "-top";
public float alpha = 0.6f, scale = 3f;
public TextureRegion region;
@Override
public void draw(Building build){
Draw.alpha(Mathf.absin(build.totalProgress(), scale, alpha) * build.warmup());
Draw.rect(region, build.x, build.y);
Draw.reset();
}
@Override
public void load(Block block){
region = Core.atlas.find(block.name + suffix);
}
}

View File

@@ -9,16 +9,17 @@ import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.world.*;
public class DrawSmelter extends DrawBlock{
//TODO remake/remove
public class DrawFlame extends DrawPartial{
public Color flameColor = Color.valueOf("ffc999");
public TextureRegion top;
public float lightRadius = 60f, lightAlpha = 0.65f, lightSinScl = 10f, lightSinMag = 5;
public float flameRadius = 3f, flameRadiusIn = 1.9f, flameRadiusScl = 5f, flameRadiusMag = 2f, flameRadiusInMag = 1f;
public DrawSmelter(){
public DrawFlame(){
}
public DrawSmelter(Color flameColor){
public DrawFlame(Color flameColor){
this.flameColor = flameColor;
}
@@ -30,8 +31,6 @@ public class DrawSmelter extends DrawBlock{
@Override
public void draw(Building build){
Draw.rect(build.block.region, build.x, build.y, build.block.rotate ? build.rotdeg() : 0);
if(build.warmup() > 0f && flameColor.a > 0.001f){
float g = 0.3f;
float r = 0.06f;

View File

@@ -0,0 +1,34 @@
package mindustry.world.draw;
import arc.*;
import arc.graphics.g2d.*;
import arc.math.*;
import mindustry.gen.*;
import mindustry.world.*;
public class DrawFrames extends DrawPartial{
/** Number of frames to draw. */
public int frames = 3;
/** Ticks between frames. */
public float interval = 5f;
/** If true, frames wil alternate back and forth in a sine wave. */
public boolean sine = true;
public TextureRegion[] regions;
@Override
public void draw(Building build){
Draw.rect(
sine ?
regions[(int)Mathf.absin(build.totalProgress(), interval, frames - 0.001f)] :
regions[(int)((build.totalProgress() / interval) % frames)],
build.x, build.y);
}
@Override
public void load(Block block){
regions = new TextureRegion[frames];
for(int i = 0; i < frames; i++){
regions[i] = Core.atlas.find(block.name + "-frame" + i);
}
}
}

View File

@@ -1,26 +0,0 @@
package mindustry.world.draw;
import arc.*;
import arc.graphics.g2d.*;
import arc.math.*;
import mindustry.gen.*;
import mindustry.world.*;
public class DrawGlow extends DrawBlock{
public String suffix = "-top";
public float glowAmount = 0.9f, glowScale = 3f;
public TextureRegion top;
@Override
public void draw(Building build){
Draw.rect(build.block.region, build.x, build.y);
Draw.alpha(Mathf.absin(build.totalProgress(), glowScale, glowAmount) * build.warmup());
Draw.rect(top, build.x, build.y);
Draw.reset();
}
@Override
public void load(Block block){
top = Core.atlas.find(block.name + suffix);
}
}

View File

@@ -1,59 +0,0 @@
package mindustry.world.draw;
import arc.*;
import arc.graphics.g2d.*;
import arc.util.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.type.*;
import mindustry.world.*;
import mindustry.world.blocks.production.*;
public class DrawLiquid extends DrawBlock{
public @Nullable Liquid liquidDrawn;
public TextureRegion inLiquid, liquid, top;
public boolean useOutputSprite = false;
public DrawLiquid(){
}
public DrawLiquid(boolean useOutputSprite){
this.useOutputSprite = useOutputSprite;
}
@Override
public void draw(Building build){
Draw.rect(build.block.region, build.x, build.y);
GenericCrafter type = (GenericCrafter)build.block;
if((inLiquid.found() || useOutputSprite) && liquidDrawn != null){
Drawf.liquid(useOutputSprite ? liquid : inLiquid, build.x, build.y,
build.liquids.get(liquidDrawn) / type.liquidCapacity,
liquidDrawn.color
);
}
if(type.outputLiquid != null && build.liquids.get(type.outputLiquid.liquid) > 0){
Drawf.liquid(liquid, build.x, build.y,
build.liquids.get(type.outputLiquid.liquid) / type.liquidCapacity,
type.outputLiquid.liquid.color
);
}
if(top.found()) Draw.rect(top, build.x, build.y);
}
@Override
public void load(Block block){
expectCrafter(block);
top = Core.atlas.find(block.name + "-top");
liquid = Core.atlas.find(block.name + "-liquid");
inLiquid = Core.atlas.find(block.name + "-input-liquid");
}
@Override
public TextureRegion[] icons(Block block){
return top.found() ? new TextureRegion[]{block.region, top} : new TextureRegion[]{block.region};
}
}

View File

@@ -24,17 +24,18 @@ public class DrawLiquidRegion extends DrawPartial{
@Override
public void draw(Building build){
if(!build.block.hasLiquids) return;
Liquid drawn = drawLiquid != null ? drawLiquid : build.liquids.current();
Drawf.liquid(liquid, build.x, build.y,
build.liquids.get(drawn) / build.block.liquidCapacity,
Tmp.c1.set(drawn.color).a(drawn.color.a * alpha)
build.liquids.get(drawn) / build.block.liquidCapacity * alpha,
drawn.color
);
}
@Override
public void load(Block block){
if(!block.hasLiquids){
throw new RuntimeException("Block '" + block + "' has a DrawLiquidRegion, but hasLiquids is false! Make sure it is true.");
}
liquid = Core.atlas.find(block.name + suffix);
}
}

View File

@@ -1,60 +0,0 @@
package mindustry.world.draw;
import arc.*;
import arc.graphics.g2d.*;
import arc.util.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.type.*;
import mindustry.world.*;
import mindustry.world.blocks.production.*;
public class DrawMixer extends DrawBlock{
public @Nullable Liquid liquidDrawn;
public TextureRegion inLiquid, liquid, top, bottom;
public boolean useOutputSprite;
public DrawMixer(){
}
public DrawMixer(boolean useOutputSprite){
this.useOutputSprite = useOutputSprite;
}
@Override
public void draw(Building build){
GenericCrafter crafter = (GenericCrafter)build.block;
float rotation = build.block.rotate ? build.rotdeg() : 0;
Draw.rect(bottom, build.x, build.y, rotation);
if((inLiquid.found() || useOutputSprite) && liquidDrawn != null){
Drawf.liquid(useOutputSprite ? liquid : inLiquid, build.x, build.y,
build.liquids.get(liquidDrawn) / build.block.liquidCapacity,
liquidDrawn.color
);
}
if(crafter.outputLiquid != null && build.liquids.get(crafter.outputLiquid.liquid) > 0.001f){
var liq = crafter.outputLiquid.liquid;
Drawf.liquid(liquid, build.x, build.y, build.liquids.get(liq) / crafter.liquidCapacity, liq.color);
}
Draw.rect(top, build.x, build.y, rotation);
}
@Override
public void load(Block block){
expectCrafter(block);
inLiquid = Core.atlas.find(block.name + "-input-liquid");
liquid = Core.atlas.find(block.name + "-liquid");
top = Core.atlas.find(block.name + "-top");
bottom = Core.atlas.find(block.name + "-bottom");
}
@Override
public TextureRegion[] icons(Block block){
return new TextureRegion[]{bottom, top};
}
}

View File

@@ -1,43 +0,0 @@
package mindustry.world.draw;
import arc.*;
import arc.graphics.g2d.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.world.*;
public class DrawRotator extends DrawBlock{
public TextureRegion rotator, top;
public boolean drawSpinSprite = false;
public float spinSpeed = 2f;
public DrawRotator(boolean drawSpinSprite, float spinSpeed){
this.drawSpinSprite = drawSpinSprite;
this.spinSpeed = spinSpeed;
}
public DrawRotator(){
}
@Override
public void draw(Building build){
Draw.rect(build.block.region, build.x, build.y);
if(drawSpinSprite){
Drawf.spinSprite(rotator, build.x, build.y, build.totalProgress() * spinSpeed);
}else{
Draw.rect(rotator, build.x, build.y, build.totalProgress() * spinSpeed);
}
if(top.found()) Draw.rect(top, build.x, build.y);
}
@Override
public void load(Block block){
rotator = Core.atlas.find(block.name + "-rotator");
top = Core.atlas.find(block.name + "-top");
}
@Override
public TextureRegion[] icons(Block block){
return top.found() ? new TextureRegion[]{block.region, rotator, top} : new TextureRegion[]{block.region, rotator};
}
}

View File

@@ -7,16 +7,11 @@ import mindustry.entities.units.*;
import mindustry.gen.*;
import mindustry.world.*;
public class DrawTurbines extends DrawBlock{
public class DrawTurbines extends DrawPartial{
public TextureRegion[] turbines = new TextureRegion[2];
public TextureRegion cap;
public float turbineSpeed = 2f;
@Override
public void drawPlan(Block block, BuildPlan plan, Eachable<BuildPlan> list){
}
@Override
public void draw(Building build){
float totalTime = build.totalProgress();

View File

@@ -8,12 +8,11 @@ import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.world.*;
public class DrawWeave extends DrawBlock{
public TextureRegion weave, bottom;
public class DrawWeave extends DrawPartial{
public TextureRegion weave;
@Override
public void draw(Building build){
Draw.rect(bottom, build.x, build.y);
Draw.rect(weave, build.x, build.y, build.totalProgress());
Draw.color(Pal.accent);
@@ -26,18 +25,10 @@ public class DrawWeave extends DrawBlock{
build.block.size * Vars.tilesize / 2f);
Draw.reset();
Draw.rect(build.block.region, build.x, build.y);
}
@Override
public void load(Block block){
weave = Core.atlas.find(block.name + "-weave");
bottom = Core.atlas.find(block.name + "-bottom");
}
@Override
public TextureRegion[] icons(Block block){
return new TextureRegion[]{bottom, weave, block.region};
}
}