diff --git a/core/assets-raw/sprites/blocks/production/cryofluid-mixer-bottom.png b/core/assets-raw/sprites/blocks/production/cryofluid-mixer-bottom.png index 8b07e080d3..e05f72e92c 100644 Binary files a/core/assets-raw/sprites/blocks/production/cryofluid-mixer-bottom.png and b/core/assets-raw/sprites/blocks/production/cryofluid-mixer-bottom.png differ diff --git a/core/assets-raw/sprites/blocks/production/cryofluid-mixer-liquid.png b/core/assets-raw/sprites/blocks/production/cryofluid-mixer-liquid.png deleted file mode 100644 index 26d446e761..0000000000 Binary files a/core/assets-raw/sprites/blocks/production/cryofluid-mixer-liquid.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/production/cryofluid-mixer-top.png b/core/assets-raw/sprites/blocks/production/cryofluid-mixer-top.png deleted file mode 100644 index 3bb5abe3cb..0000000000 Binary files a/core/assets-raw/sprites/blocks/production/cryofluid-mixer-top.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/production/cryofluid-mixer.png b/core/assets-raw/sprites/blocks/production/cryofluid-mixer.png new file mode 100644 index 0000000000..563dd8f2fd Binary files /dev/null and b/core/assets-raw/sprites/blocks/production/cryofluid-mixer.png differ diff --git a/core/assets-raw/sprites/blocks/production/plastanium-compressor-top.png b/core/assets-raw/sprites/blocks/production/plastanium-compressor-top.png index ceb6a9b646..52892006b4 100644 Binary files a/core/assets-raw/sprites/blocks/production/plastanium-compressor-top.png and b/core/assets-raw/sprites/blocks/production/plastanium-compressor-top.png differ diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 6b96a2fa11..fd1827c84d 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -552,3 +552,4 @@ 63151=mech-reconstructor|block-mech-reconstructor-ui 63150=ship-reconstructor|block-ship-reconstructor-ui 63149=radar|block-radar-ui +63148=turret-unit-build-tower|unit-turret-unit-build-tower-ui diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index ff2677545e..acd37bf596 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -890,7 +890,7 @@ public class Blocks{ size = 2; hasPower = true; hasLiquids = false; - drawer = new DrawSmelter(Color.valueOf("ffef99")); + drawer = new DrawMulti(new DrawBlock(), new DrawFlame(Color.valueOf("ffef99"))); ambientSound = Sounds.smelter; ambientSoundVolume = 0.07f; @@ -908,7 +908,7 @@ public class Blocks{ hasLiquids = false; itemCapacity = 30; boostScale = 0.15f; - drawer = new DrawSmelter(Color.valueOf("ffef99")); + drawer = new DrawMulti(new DrawBlock(), new DrawFlame(Color.valueOf("ffef99"))); ambientSound = Sounds.smelter; ambientSoundVolume = 0.07f; @@ -927,7 +927,8 @@ public class Blocks{ envEnabled |= Env.space | Env.underwater; envDisabled = Env.none; itemCapacity = 30; - drawer = new DrawArcSmelter(); + drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawArcSmelt(), new DrawBlock()); + drawer.iconOverride = new String[]{"-bottom", ""}; fogRadius = 3; researchCost = with(Items.beryllium, 150, Items.graphite, 50); @@ -942,7 +943,7 @@ public class Blocks{ craftTime = 30f; size = 2; hasPower = hasItems = true; - drawer = new DrawSmelter(Color.valueOf("ffc099")); + drawer = new DrawMulti(new DrawBlock(), new DrawFlame(Color.valueOf("ffc099"))); ambientSound = Sounds.smelter; ambientSoundVolume = 0.07f; @@ -961,7 +962,7 @@ public class Blocks{ hasPower = hasLiquids = true; craftEffect = Fx.formsmoke; updateEffect = Fx.plasticburn; - drawer = new DrawGlow(); + drawer = new DrawMulti(new DrawBlock(), new DrawFade()); consumeLiquid(Liquids.oil, 0.25f); consumePower(3f); @@ -975,7 +976,8 @@ public class Blocks{ craftTime = 120f; size = 2; hasPower = true; - drawer = new DrawWeave(); + drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawWeave(), new DrawBlock()); + drawer.iconOverride = new String[]{"-bottom", "-weave", ""}; envEnabled |= Env.space; ambientSound = Sounds.techloop; @@ -994,7 +996,7 @@ public class Blocks{ size = 3; hasPower = true; itemCapacity = 20; - drawer = new DrawSmelter(); + drawer = new DrawMulti(new DrawBlock(), new DrawFlame()); consumePower(4f); consumeItems(with(Items.copper, 3, Items.lead, 4, Items.titanium, 2, Items.silicon, 3)); @@ -1011,7 +1013,8 @@ public class Blocks{ solid = true; outputsLiquid = true; envEnabled = Env.any; - drawer = new DrawMixer(true); + drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawLiquidTile(Liquids.cryofluid), new DrawBlock()); + drawer.iconOverride = new String[]{"-bottom", ""}; liquidCapacity = 24f; consumePower(1f); @@ -1050,9 +1053,7 @@ public class Blocks{ outputLiquid = new LiquidStack(Liquids.slag, 12f / 60f); craftTime = 1f; hasLiquids = hasPower = true; - drawer = new DrawLiquid(){{ - liquidDrawn = Liquids.slag; - }}; + drawer = new DrawMulti(new DrawBlock(), new DrawLiquidRegion()); consumePower(1f); consumeItem(Items.scrap, 1); @@ -1101,7 +1102,14 @@ public class Blocks{ hasLiquids = true; hasPower = true; craftEffect = Fx.none; - drawer = new DrawAnimation(); + drawer = new DrawMulti( + new DrawBlock(), + new DrawFrames(), + new DrawLiquidRegion(), + new DrawRegion("-top") + ); + + drawer.iconOverride = new String[]{"", "-top"}; consumeItem(Items.sporePod, 1); consumePower(0.7f); @@ -1114,9 +1122,11 @@ public class Blocks{ craftTime = 40f; updateEffect = Fx.pulverizeSmall; hasItems = hasPower = true; - drawer = new DrawRotator(){{ - drawSpinSprite = true; - }}; + drawer = new DrawMulti(new DrawBlock(), new DrawRegion("-rotator"){{ + spinSprite = true; + rotateSpeed = 2f; + }}, new DrawRegion("-top")); + drawer.iconOverride = new String[]{"", "-rotator", "-top"}; ambientSound = Sounds.grinding; ambientSoundVolume = 0.025f; @@ -2476,7 +2486,12 @@ public class Blocks{ attribute = Attribute.spores; legacyReadWarmup = true; - drawer = new DrawCultivator(); + drawer = new DrawMulti( + new DrawBlock(), + new DrawCultivator(), + new DrawRegion("-top") + ); + drawer.iconOverride = new String[]{"", "-top"}; maxBoost = 2f; consumePower(80f / 60f); diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index 2f9b1deb31..98ec779ea1 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -5,6 +5,10 @@ import mindustry.entities.bullet.*; import mindustry.entities.effect.*; import mindustry.graphics.*; +/** + * Class for holding special internal bullets. + * Formerly used to define preset bullets for turrets; as of v7, these have been inlined at the source. + * */ public class Bullets{ public static BulletType @@ -12,6 +16,7 @@ public class Bullets{ public static void load(){ + //not allowed in weapons - used only to prevent NullPointerExceptions placeholder = new BasicBulletType(2.5f, 9, "ohno"){{ width = 7f; height = 9f; diff --git a/core/src/mindustry/mod/ClassMap.java b/core/src/mindustry/mod/ClassMap.java index 3a32c32a7c..a64dd84ba6 100644 --- a/core/src/mindustry/mod/ClassMap.java +++ b/core/src/mindustry/mod/ClassMap.java @@ -1,6 +1,8 @@ package mindustry.mod; import arc.struct.*; +import mindustry.world.draw.*; + /** Generated class. Maps simple class names to concrete classes. For use in JSON mods. */ @SuppressWarnings("deprecation") public class ClassMap{ @@ -394,8 +396,8 @@ public class ClassMap{ classes.put("UnitFactory", mindustry.world.blocks.units.UnitFactory.class); classes.put("UnitFactoryBuild", mindustry.world.blocks.units.UnitFactory.UnitFactoryBuild.class); classes.put("UnitPlan", mindustry.world.blocks.units.UnitFactory.UnitPlan.class); - classes.put("DrawAnimation", mindustry.world.draw.DrawAnimation.class); - classes.put("DrawArcSmelter", mindustry.world.draw.DrawArcSmelter.class); + classes.put("DrawAnimation", DrawFrames.class); + classes.put("DrawArcSmelter", DrawArcSmelt.class); classes.put("DrawBlock", mindustry.world.draw.DrawBlock.class); classes.put("DrawBlurSpin", mindustry.world.draw.DrawBlurSpin.class); classes.put("DrawBubbles", mindustry.world.draw.DrawBubbles.class); @@ -403,16 +405,14 @@ public class ClassMap{ classes.put("DrawCircles", mindustry.world.draw.DrawCircles.class); classes.put("DrawCrucibleFlame", mindustry.world.draw.DrawCrucibleFlame.class); classes.put("DrawCultivator", mindustry.world.draw.DrawCultivator.class); - classes.put("DrawGlow", mindustry.world.draw.DrawGlow.class); + classes.put("DrawGlow", DrawFade.class); classes.put("DrawGlowRegion", mindustry.world.draw.DrawGlowRegion.class); classes.put("DrawHeatInput", mindustry.world.draw.DrawHeatInput.class); classes.put("DrawHeatOutput", mindustry.world.draw.DrawHeatOutput.class); classes.put("DrawHeatRegion", mindustry.world.draw.DrawHeatRegion.class); - classes.put("DrawLiquid", mindustry.world.draw.DrawLiquid.class); classes.put("DrawLiquidOutputs", mindustry.world.draw.DrawLiquidOutputs.class); classes.put("DrawLiquidRegion", mindustry.world.draw.DrawLiquidRegion.class); classes.put("DrawLiquidTile", mindustry.world.draw.DrawLiquidTile.class); - classes.put("DrawMixer", mindustry.world.draw.DrawMixer.class); classes.put("DrawMulti", mindustry.world.draw.DrawMulti.class); classes.put("DrawMultiWeave", mindustry.world.draw.DrawMultiWeave.class); classes.put("DrawPartial", mindustry.world.draw.DrawPartial.class); @@ -421,10 +421,9 @@ public class ClassMap{ classes.put("DrawPulseShape", mindustry.world.draw.DrawPulseShape.class); classes.put("DrawPump", mindustry.world.draw.DrawPump.class); classes.put("DrawRegion", mindustry.world.draw.DrawRegion.class); - classes.put("DrawRotator", mindustry.world.draw.DrawRotator.class); classes.put("DrawShape", mindustry.world.draw.DrawShape.class); classes.put("DrawSideRegion", mindustry.world.draw.DrawSideRegion.class); - classes.put("DrawSmelter", mindustry.world.draw.DrawSmelter.class); + classes.put("DrawSmelter", DrawFlame.class); classes.put("DrawSpikes", mindustry.world.draw.DrawSpikes.class); classes.put("DrawTurbines", mindustry.world.draw.DrawTurbines.class); classes.put("DrawTurret", mindustry.world.draw.DrawTurret.class); diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 183b006643..46dd24517e 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -131,6 +131,10 @@ public class ContentParser{ //try to instantiate return make(resolve(data.asString())); } + //array is shorthand for DrawMulti + if(data.isArray()){ + return new DrawMulti(parser.readValue(DrawBlock[].class, data)); + } var bc = resolve(data.getString("type", ""), DrawBlock.class); data.remove("type"); var result = make(bc); diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 0c2af1210e..05d499f919 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -423,13 +423,12 @@ public class UnitType extends UnlockableContent{ } } - /* for(int i = 0; i < weapons.size; i++){ var wep = weapons.get(i); if(wep.bullet == Bullets.placeholder || wep.bullet == null){ throw new RuntimeException("Unit: " + name + ": weapon #" + i + " ('" + wep.name + "') does not have a bullet defined. Make sure you have a bullet: (JSON) or `bullet = ` field in your unit definition."); } - }*/ + } if(pathCost == null){ pathCost = diff --git a/core/src/mindustry/type/weapons/BuildWeapon.java b/core/src/mindustry/type/weapons/BuildWeapon.java index 0a99677e76..db5f7d42f1 100644 --- a/core/src/mindustry/type/weapons/BuildWeapon.java +++ b/core/src/mindustry/type/weapons/BuildWeapon.java @@ -1,6 +1,7 @@ package mindustry.type.weapons; import arc.math.*; +import mindustry.entities.bullet.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.type.*; @@ -18,6 +19,7 @@ public class BuildWeapon extends Weapon{ { rotate = true; + bullet = new BulletType(); } @Override diff --git a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java index 17381e7814..20452e7485 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -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; } } diff --git a/core/src/mindustry/world/blocks/defense/turrets/PayloadTurret.java b/core/src/mindustry/world/blocks/defense/turrets/PayloadTurret.java index c858ccf515..9a085bde18 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/PayloadTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/PayloadTurret.java @@ -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; } } diff --git a/core/src/mindustry/world/draw/DrawAnimation.java b/core/src/mindustry/world/draw/DrawAnimation.java deleted file mode 100644 index d4fb67b0c7..0000000000 --- a/core/src/mindustry/world/draw/DrawAnimation.java +++ /dev/null @@ -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}; - } -} diff --git a/core/src/mindustry/world/draw/DrawArcSmelter.java b/core/src/mindustry/world/draw/DrawArcSmelt.java similarity index 75% rename from core/src/mindustry/world/draw/DrawArcSmelter.java rename to core/src/mindustry/world/draw/DrawArcSmelt.java index 4d5fddf1ed..b2ab7e93fd 100644 --- a/core/src/mindustry/world/draw/DrawArcSmelter.java +++ b/core/src/mindustry/world/draw/DrawArcSmelt.java @@ -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}; } } diff --git a/core/src/mindustry/world/draw/DrawCells.java b/core/src/mindustry/world/draw/DrawCells.java index e3f182711f..9b08604c72 100644 --- a/core/src/mindustry/world/draw/DrawCells.java +++ b/core/src/mindustry/world/draw/DrawCells.java @@ -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}; - } } diff --git a/core/src/mindustry/world/draw/DrawCultivator.java b/core/src/mindustry/world/draw/DrawCultivator.java index b357120929..e52c2b3d27 100644 --- a/core/src/mindustry/world/draw/DrawCultivator.java +++ b/core/src/mindustry/world/draw/DrawCultivator.java @@ -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}; } } diff --git a/core/src/mindustry/world/draw/DrawFade.java b/core/src/mindustry/world/draw/DrawFade.java new file mode 100644 index 0000000000..1b9798babf --- /dev/null +++ b/core/src/mindustry/world/draw/DrawFade.java @@ -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); + } +} diff --git a/core/src/mindustry/world/draw/DrawSmelter.java b/core/src/mindustry/world/draw/DrawFlame.java similarity index 89% rename from core/src/mindustry/world/draw/DrawSmelter.java rename to core/src/mindustry/world/draw/DrawFlame.java index e71d966c9f..05c408b30a 100644 --- a/core/src/mindustry/world/draw/DrawSmelter.java +++ b/core/src/mindustry/world/draw/DrawFlame.java @@ -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; diff --git a/core/src/mindustry/world/draw/DrawFrames.java b/core/src/mindustry/world/draw/DrawFrames.java new file mode 100644 index 0000000000..f760488beb --- /dev/null +++ b/core/src/mindustry/world/draw/DrawFrames.java @@ -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); + } + } +} diff --git a/core/src/mindustry/world/draw/DrawGlow.java b/core/src/mindustry/world/draw/DrawGlow.java deleted file mode 100644 index 1b91a4f6c7..0000000000 --- a/core/src/mindustry/world/draw/DrawGlow.java +++ /dev/null @@ -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); - } -} diff --git a/core/src/mindustry/world/draw/DrawLiquid.java b/core/src/mindustry/world/draw/DrawLiquid.java deleted file mode 100644 index b27dc93a26..0000000000 --- a/core/src/mindustry/world/draw/DrawLiquid.java +++ /dev/null @@ -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}; - } -} diff --git a/core/src/mindustry/world/draw/DrawLiquidRegion.java b/core/src/mindustry/world/draw/DrawLiquidRegion.java index 94c7e4a1ee..9a5ea09b5a 100644 --- a/core/src/mindustry/world/draw/DrawLiquidRegion.java +++ b/core/src/mindustry/world/draw/DrawLiquidRegion.java @@ -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); } } diff --git a/core/src/mindustry/world/draw/DrawMixer.java b/core/src/mindustry/world/draw/DrawMixer.java deleted file mode 100644 index e1d1b38c59..0000000000 --- a/core/src/mindustry/world/draw/DrawMixer.java +++ /dev/null @@ -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}; - } -} diff --git a/core/src/mindustry/world/draw/DrawRotator.java b/core/src/mindustry/world/draw/DrawRotator.java deleted file mode 100644 index 54aed56bd4..0000000000 --- a/core/src/mindustry/world/draw/DrawRotator.java +++ /dev/null @@ -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}; - } -} diff --git a/core/src/mindustry/world/draw/DrawTurbines.java b/core/src/mindustry/world/draw/DrawTurbines.java index 1224bc9a06..0214c044f3 100644 --- a/core/src/mindustry/world/draw/DrawTurbines.java +++ b/core/src/mindustry/world/draw/DrawTurbines.java @@ -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 list){ - - } - @Override public void draw(Building build){ float totalTime = build.totalProgress(); diff --git a/core/src/mindustry/world/draw/DrawWeave.java b/core/src/mindustry/world/draw/DrawWeave.java index a4a127c893..7b4ac96f27 100644 --- a/core/src/mindustry/world/draw/DrawWeave.java +++ b/core/src/mindustry/world/draw/DrawWeave.java @@ -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}; } } diff --git a/tools/src/mindustry/tools/ImagePacker.java b/tools/src/mindustry/tools/ImagePacker.java index 68a06a2f66..56139032a3 100644 --- a/tools/src/mindustry/tools/ImagePacker.java +++ b/tools/src/mindustry/tools/ImagePacker.java @@ -6,6 +6,7 @@ import arc.graphics.*; import arc.graphics.g2d.*; import arc.graphics.g2d.TextureAtlas.*; import arc.math.geom.*; +import arc.mock.*; import arc.struct.*; import arc.util.*; import arc.util.Log.*; @@ -27,9 +28,11 @@ public class ImagePacker{ //makes PNG loading slightly faster ArcNativesLoader.load(); + Core.settings = new MockSettings(); Log.logger = new NoopLogHandler(); Vars.content = new ContentLoader(); Vars.content.createBaseContent(); + Vars.content.init(); Log.logger = new DefaultLogHandler(); Fi.get("../../../assets-raw/sprites_out").walk(path -> {