From 80f801db36e1dfc4b1ec529afdc7c33cea7fdf53 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 19 Oct 2020 10:04:10 -0400 Subject: [PATCH] Fixed #3023 / Fixed #3020 --- core/assets/maps/frozenForest.msav | Bin 10057 -> 10215 bytes core/src/mindustry/ai/WaveSpawner.java | 2 +- core/src/mindustry/ai/types/FlyingAI.java | 4 +- core/src/mindustry/content/Blocks.java | 2 + core/src/mindustry/content/UnitTypes.java | 17 +++-- .../mindustry/entities/comp/PuddleComp.java | 2 +- .../src/mindustry/entities/comp/UnitComp.java | 2 +- core/src/mindustry/type/AmmoTypes.java | 2 +- core/src/mindustry/type/UnitType.java | 2 + .../mindustry/ui/dialogs/PlanetDialog.java | 23 +++--- .../blocks/defense/turrets/BaseTurret.java | 67 ++++++++++++++++++ .../{ => turrets}/PointDefenseTurret.java | 40 ++++------- .../blocks/defense/turrets/ReloadTurret.java | 49 +++++++++++++ .../{ => turrets}/TractorBeamTurret.java | 46 +++++++----- .../world/blocks/defense/turrets/Turret.java | 53 ++------------ .../world/blocks/distribution/ItemBridge.java | 20 +++--- .../mindustry/world/blocks/power/Battery.java | 2 +- .../world/blocks/power/NuclearReactor.java | 2 + .../world/blocks/power/PowerGenerator.java | 2 +- .../blocks/production/GenericCrafter.java | 5 +- .../world/blocks/storage/CoreBlock.java | 2 +- core/src/mindustry/world/meta/BlockFlag.java | 12 ++-- 22 files changed, 228 insertions(+), 128 deletions(-) create mode 100644 core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java rename core/src/mindustry/world/blocks/defense/{ => turrets}/PointDefenseTurret.java (78%) create mode 100644 core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java rename core/src/mindustry/world/blocks/defense/{ => turrets}/TractorBeamTurret.java (75%) diff --git a/core/assets/maps/frozenForest.msav b/core/assets/maps/frozenForest.msav index a2a1f52354d8403d6d5f7655cc87f8e300ae9544..0eb9f1fe564a276af7e7b793c87df4854ae7d815 100644 GIT binary patch literal 10215 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 literal 10057 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 diff --git a/core/src/mindustry/ai/WaveSpawner.java b/core/src/mindustry/ai/WaveSpawner.java index 429ba00587..c420972457 100644 --- a/core/src/mindustry/ai/WaveSpawner.java +++ b/core/src/mindustry/ai/WaveSpawner.java @@ -80,7 +80,7 @@ public class WaveSpawner{ Unit unit = group.createUnit(state.rules.waveTeam, state.wave - 1); unit.set(spawnX + Tmp.v1.x, spawnY + Tmp.v1.y); - Time.run(Math.min(i * 5, 60 * 2), () -> spawnEffect(unit)); + spawnEffect(unit); } }); } diff --git a/core/src/mindustry/ai/types/FlyingAI.java b/core/src/mindustry/ai/types/FlyingAI.java index 9d4c2d38f9..f88a125e93 100644 --- a/core/src/mindustry/ai/types/FlyingAI.java +++ b/core/src/mindustry/ai/types/FlyingAI.java @@ -34,10 +34,10 @@ public class FlyingAI extends AIController{ Teamc result = target(x, y, range, air, ground); if(result != null) return result; - if(ground) result = targetFlag(x, y, BlockFlag.producer, true); + if(ground) result = targetFlag(x, y, BlockFlag.generator, true); if(result != null) return result; - if(ground) result = targetFlag(x, y, BlockFlag.turret, true); + if(ground) result = targetFlag(x, y, BlockFlag.core, true); if(result != null) return result; return null; diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 64ebd5c21d..bd59e3d092 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -14,6 +14,8 @@ import mindustry.world.blocks.*; import mindustry.world.blocks.campaign.*; import mindustry.world.blocks.defense.*; import mindustry.world.blocks.defense.turrets.*; +import mindustry.world.blocks.defense.turrets.PointDefenseTurret; +import mindustry.world.blocks.defense.turrets.TractorBeamTurret; import mindustry.world.blocks.distribution.*; import mindustry.world.blocks.environment.*; import mindustry.world.blocks.experimental.*; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index b9189ec64e..1eddbcdabc 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -10,6 +10,7 @@ import mindustry.entities.bullet.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; +import mindustry.world.meta.*; import static mindustry.Vars.*; @@ -897,6 +898,7 @@ public class UnitTypes implements ContentList{ range = 140f; faceTarget = false; armor = 4f; + targetFlag = BlockFlag.factory; weapons.add(new Weapon(){{ minShootVelocity = 0.75f; @@ -977,6 +979,7 @@ public class UnitTypes implements ContentList{ engineOffset = 21; engineSize = 5.3f; hitSize = 56f; + targetFlag = BlockFlag.battery; BulletType missiles = new MissileBulletType(2.7f, 10){{ width = 8f; @@ -1051,6 +1054,7 @@ public class UnitTypes implements ContentList{ hitSize = 58f; destructibleWreck = false; armor = 13f; + targetFlag = BlockFlag.reactor; BulletType fragBullet = new FlakBulletType(4f, 5){{ shootEffect = Fx.shootBig; @@ -1246,6 +1250,7 @@ public class UnitTypes implements ContentList{ buildSpeed = 2.5f; range = 140f; targetAir = false; + targetFlag = BlockFlag.battery; ammoType = AmmoTypes.powerHigh; @@ -1654,7 +1659,7 @@ public class UnitTypes implements ContentList{ rotateSpeed = 15f; accel = 0.1f; itemCapacity = 30; - health = 120f; + health = 150f; engineOffset = 6f; hitSize = 8f; commandLimit = 3; @@ -1665,7 +1670,7 @@ public class UnitTypes implements ContentList{ y = 1f; top = false; - bullet = new BasicBulletType(2.5f, 9){{ + bullet = new BasicBulletType(2.5f, 10){{ width = 7f; height = 9f; lifetime = 60f; @@ -1689,7 +1694,7 @@ public class UnitTypes implements ContentList{ rotateSpeed = 17f; accel = 0.1f; itemCapacity = 50; - health = 150f; + health = 170f; engineOffset = 6f; hitSize = 9f; rotateShooting = false; @@ -1706,7 +1711,7 @@ public class UnitTypes implements ContentList{ shotDelay = 4f; spacing = 0f; - bullet = new BasicBulletType(3f, 9){{ + bullet = new BasicBulletType(3f, 10){{ width = 7f; height = 9f; lifetime = 60f; @@ -1730,7 +1735,7 @@ public class UnitTypes implements ContentList{ rotateSpeed = 19f; accel = 0.11f; itemCapacity = 70; - health = 190f; + health = 220f; engineOffset = 6f; hitSize = 10f; commandLimit = 7; @@ -1745,7 +1750,7 @@ public class UnitTypes implements ContentList{ inaccuracy = 3f; shotDelay = 3f; - bullet = new BasicBulletType(3.5f, 9){{ + bullet = new BasicBulletType(3.5f, 10{{ width = 6.5f; height = 11f; lifetime = 70f; diff --git a/core/src/mindustry/entities/comp/PuddleComp.java b/core/src/mindustry/entities/comp/PuddleComp.java index d83408c734..a447bd633a 100644 --- a/core/src/mindustry/entities/comp/PuddleComp.java +++ b/core/src/mindustry/entities/comp/PuddleComp.java @@ -98,7 +98,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ boolean onLiquid = tile.floor().isLiquid; float f = Mathf.clamp(amount / (maxLiquid / 1.5f)); float smag = onLiquid ? 0.8f : 0f; - float sscl = 20f; + float sscl = 25f; Draw.color(tmp.set(liquid.color).shiftValue(-0.05f)); Fill.circle(x + Mathf.sin(Time.time() + seeds * 532, sscl, smag), y + Mathf.sin(Time.time() + seeds * 53, sscl, smag), f * 8f); diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 0a703366e9..ca85eacd07 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -89,7 +89,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I case rotation -> rotation; case health -> health; case maxHealth -> maxHealth; - case ammo -> state.rules.unitAmmo ? type.ammoCapacity : ammo; + case ammo -> !state.rules.unitAmmo ? type.ammoCapacity : ammo; case ammoCapacity -> type.ammoCapacity; case x -> World.conv(x); case y -> World.conv(y); diff --git a/core/src/mindustry/type/AmmoTypes.java b/core/src/mindustry/type/AmmoTypes.java index 534bdbe703..761bcbc8d0 100644 --- a/core/src/mindustry/type/AmmoTypes.java +++ b/core/src/mindustry/type/AmmoTypes.java @@ -41,7 +41,7 @@ public class AmmoTypes implements ContentList{ @Override public void resupply(Unit unit){ float range = unit.hitSize + 60f; - Tile closest = Vars.indexer.findClosestFlag(unit.x, unit.y, unit.team, BlockFlag.powerRes); + Tile closest = Vars.indexer.findClosestFlag(unit.x, unit.y, unit.team, BlockFlag.battery); if(closest != null && closest.build != null && unit.within(closest.build, range) && closest.build.power != null){ var build = closest.build; diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 7d0c3fd98b..5c48f8165e 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -28,6 +28,7 @@ import mindustry.world.blocks.environment.*; import mindustry.world.blocks.payloads.*; import mindustry.world.blocks.units.*; import mindustry.world.consumers.*; +import mindustry.world.meta.*; import static mindustry.Vars.*; @@ -58,6 +59,7 @@ public class UnitType extends UnlockableContent{ public Effect fallEffect = Fx.fallSmoke; public Effect fallThrusterEffect = Fx.fallSmoke; public Seq abilities = new Seq<>(); + public BlockFlag targetFlag = BlockFlag.generator; public int legCount = 4, legGroupSize = 2; public float legLength = 10f, legSpeed = 0.1f, legTrns = 1f, legBaseOffset = 0f, legMoveSpace = 1f, legExtension = 0, legPairOffset = 0, legLengthScl = 1f, kinematicScl = 1f, maxStretch = 1.75f; diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 6763ba37e5..d14314977b 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -457,18 +457,23 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ if(mode == look && !sector.hasBase()){ shouldHide = false; Sector from = findLauncher(sector); - CoreBlock block = from.info.bestCoreType instanceof CoreBlock b ? b : (CoreBlock)Blocks.coreShard; + if(from == null){ + //free launch. + control.playSector(sector); + }else{ + CoreBlock block = from.info.bestCoreType instanceof CoreBlock b ? b : (CoreBlock)Blocks.coreShard; - loadouts.show(block, from, () -> { - from.removeItems(universe.getLastLoadout().requirements()); - from.removeItems(universe.getLaunchResources()); + loadouts.show(block, from, () -> { + from.removeItems(universe.getLastLoadout().requirements()); + from.removeItems(universe.getLaunchResources()); - launching = true; - zoom = 0.5f; + launching = true; + zoom = 0.5f; - ui.hudfrag.showLaunchDirect(); - Time.runTask(launchDuration, () -> control.playSector(from, sector)); - }); + ui.hudfrag.showLaunchDirect(); + Time.runTask(launchDuration, () -> control.playSector(from, sector)); + }); + } }else if(mode == select){ listener.get(sector); }else{ diff --git a/core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java b/core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java new file mode 100644 index 0000000000..824492cff5 --- /dev/null +++ b/core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java @@ -0,0 +1,67 @@ +package mindustry.world.blocks.defense.turrets; + +import mindustry.content.*; +import mindustry.entities.*; +import mindustry.gen.*; +import mindustry.graphics.*; +import mindustry.logic.*; +import mindustry.world.*; +import mindustry.world.consumers.*; +import mindustry.world.meta.*; + +import static mindustry.Vars.*; + +public abstract class BaseTurret extends Block{ + public float range = 80f; + public float rotateSpeed = 5; + + public boolean acceptCoolant = true; + /** Effect displayed when coolant is used. */ + public Effect coolEffect = Fx.fuelburn; + /** How much reload is lowered by for each unit of liquid of heat capacity. */ + public float coolantMultiplier = 5f; + + public BaseTurret(String name){ + super(name); + + update = true; + solid = true; + outlineIcon = true; + } + + @Override + public void init(){ + if(acceptCoolant && !consumes.has(ConsumeType.liquid)){ + hasLiquids = true; + consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 0.2f)).update(false).boost(); + } + + super.init(); + } + + @Override + public void drawPlace(int x, int y, int rotation, boolean valid){ + Drawf.dashCircle(x * tilesize + offset, y * tilesize + offset, range, Pal.placing); + } + + @Override + public void setStats(){ + super.setStats(); + + stats.add(BlockStat.shootRange, range / tilesize, StatUnit.blocks); + } + + public class BaseTurretBuild extends Building implements Ranged{ + public float rotation = 90; + + @Override + public float range(){ + return range; + } + + @Override + public void drawSelect(){ + Drawf.dashCircle(x, y, range, team.color); + } + } +} diff --git a/core/src/mindustry/world/blocks/defense/PointDefenseTurret.java b/core/src/mindustry/world/blocks/defense/turrets/PointDefenseTurret.java similarity index 78% rename from core/src/mindustry/world/blocks/defense/PointDefenseTurret.java rename to core/src/mindustry/world/blocks/defense/turrets/PointDefenseTurret.java index 06746bcfaa..e4b7b68628 100644 --- a/core/src/mindustry/world/blocks/defense/PointDefenseTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/PointDefenseTurret.java @@ -1,4 +1,4 @@ -package mindustry.world.blocks.defense; +package mindustry.world.blocks.defense.turrets; import arc.graphics.*; import arc.graphics.g2d.*; @@ -11,12 +11,9 @@ import mindustry.content.*; import mindustry.entities.*; import mindustry.gen.*; import mindustry.graphics.*; -import mindustry.world.*; import mindustry.world.meta.*; -import static mindustry.Vars.*; - -public class PointDefenseTurret extends Block{ +public class PointDefenseTurret extends ReloadTurret{ public final int timerTarget = timers++; public float retargetTime = 5f; @@ -27,9 +24,6 @@ public class PointDefenseTurret extends Block{ public Effect hitEffect = Fx.pointHit; public Effect shootEffect = Fx.sparkShoot; - public float range = 80f; - public float reloadTime = 30f; - public float rotateSpeed = 20; public float shootCone = 5f; public float bulletDamage = 10f; public float shootLength = 3f; @@ -37,13 +31,12 @@ public class PointDefenseTurret extends Block{ public PointDefenseTurret(String name){ super(name); - outlineIcon = true; - update = true; - } + rotateSpeed = 20f; + reloadTime = 30f; - @Override - public void drawPlace(int x, int y, int rotation, boolean valid){ - Drawf.dashCircle(x * tilesize + offset, y * tilesize + offset, range, Pal.accent); + coolantMultiplier = 2f; + //disabled due to version mismatch problems + acceptCoolant = false; } @Override @@ -55,12 +48,10 @@ public class PointDefenseTurret extends Block{ public void setStats(){ super.setStats(); - stats.add(BlockStat.shootRange, range / tilesize, StatUnit.blocks); stats.add(BlockStat.reload, 60f / reloadTime, StatUnit.none); } - public class PointDefenseBuild extends Building{ - public float rotation = 90, reload; + public class PointDefenseBuild extends ReloadTurretBuild{ public @Nullable Bullet target; @Override @@ -76,14 +67,18 @@ public class PointDefenseTurret extends Block{ target = null; } + if(acceptCoolant){ + updateCooling(); + } + //look at target if(target != null && target.within(this, range) && target.team != team && target.type() != null && target.type().hittable){ float dest = angleTo(target); rotation = Angles.moveToward(rotation, dest, rotateSpeed * edelta()); - reload -= edelta(); + reload += edelta(); //shoot when possible - if(Angles.within(rotation, dest, shootCone) && reload <= 0f){ + if(Angles.within(rotation, dest, shootCone) && reload >= reloadTime){ if(target.damage() > bulletDamage){ target.damage(target.damage() - bulletDamage); }else{ @@ -95,18 +90,13 @@ public class PointDefenseTurret extends Block{ beamEffect.at(x + Tmp.v1.x, y + Tmp.v1.y, rotation, color, new Vec2().set(target)); shootEffect.at(x + Tmp.v1.x, y + Tmp.v1.y, rotation, color); hitEffect.at(target.x, target.y, color); - reload = reloadTime; + reload = 0; } }else{ target = null; } } - @Override - public void drawSelect(){ - Drawf.dashCircle(x, y, range, Pal.accent); - } - @Override public void draw(){ Draw.rect(baseRegion, x, y); diff --git a/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java new file mode 100644 index 0000000000..b53c2feb03 --- /dev/null +++ b/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java @@ -0,0 +1,49 @@ +package mindustry.world.blocks.defense.turrets; + +import arc.math.*; +import arc.util.*; +import mindustry.type.*; +import mindustry.world.consumers.*; +import mindustry.world.meta.*; +import mindustry.world.meta.values.*; + +import static mindustry.Vars.*; + +public abstract class ReloadTurret extends BaseTurret{ + public float reloadTime = 10f; + + public ReloadTurret(String name){ + super(name); + } + + @Override + public void setStats(){ + super.setStats(); + + if(acceptCoolant){ + stats.add(BlockStat.booster, new BoosterListValue(reloadTime, consumes.get(ConsumeType.liquid).amount, coolantMultiplier, true, l -> consumes.liquidfilters.get(l.id))); + } + } + + public class ReloadTurretBuild extends BaseTurretBuild{ + public float reload; + + protected void updateCooling(){ + float maxUsed = consumes.get(ConsumeType.liquid).amount; + + Liquid liquid = liquids.current(); + + float used = Math.min(Math.min(liquids.get(liquid), maxUsed * Time.delta), Math.max(0, ((reloadTime - reload) / coolantMultiplier) / liquid.heatCapacity)) * baseReloadSpeed(); + reload += used * liquid.heatCapacity * coolantMultiplier; + liquids.remove(liquid, used); + + if(Mathf.chance(0.06 * used)){ + coolEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f)); + } + } + + protected float baseReloadSpeed(){ + return efficiency(); + } + } +} diff --git a/core/src/mindustry/world/blocks/defense/TractorBeamTurret.java b/core/src/mindustry/world/blocks/defense/turrets/TractorBeamTurret.java similarity index 75% rename from core/src/mindustry/world/blocks/defense/TractorBeamTurret.java rename to core/src/mindustry/world/blocks/defense/turrets/TractorBeamTurret.java index 3808f7c360..b40c738a35 100644 --- a/core/src/mindustry/world/blocks/defense/TractorBeamTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/TractorBeamTurret.java @@ -1,4 +1,4 @@ -package mindustry.world.blocks.defense; +package mindustry.world.blocks.defense.turrets; import arc.graphics.*; import arc.graphics.g2d.*; @@ -9,12 +9,13 @@ import mindustry.annotations.Annotations.*; import mindustry.entities.*; import mindustry.gen.*; import mindustry.graphics.*; -import mindustry.world.*; +import mindustry.type.*; +import mindustry.world.consumers.*; import mindustry.world.meta.*; import static mindustry.Vars.*; -public class TractorBeamTurret extends Block{ +public class TractorBeamTurret extends BaseTurret{ public final int timerTarget = timers++; public float retargetTime = 5f; @@ -22,8 +23,6 @@ public class TractorBeamTurret extends Block{ public @Load("@-laser") TextureRegion laser; public @Load("@-laser-end") TextureRegion laserEnd; - public float range = 80f; - public float rotateSpeed = 10; public float shootCone = 6f; public float laserWidth = 0.6f; public float force = 0.3f; @@ -35,14 +34,11 @@ public class TractorBeamTurret extends Block{ public TractorBeamTurret(String name){ super(name); - update = true; - solid = true; - outlineIcon = true; - } + rotateSpeed = 10f; + coolantMultiplier = 1f; - @Override - public void drawPlace(int x, int y, int rotation, boolean valid){ - Drawf.dashCircle(x * tilesize + offset, y * tilesize + offset, range, Pal.accent); + //disabled due to version mismatch problems + acceptCoolant = false; } @Override @@ -54,17 +50,16 @@ public class TractorBeamTurret extends Block{ public void setStats(){ super.setStats(); - stats.add(BlockStat.shootRange, range / tilesize, StatUnit.blocks); stats.add(BlockStat.targetsAir, targetAir); stats.add(BlockStat.targetsGround, targetGround); stats.add(BlockStat.damage, damage * 60f, StatUnit.perSecond); } - public class TractorBeamBuild extends Building{ - public float rotation = 90; + public class TractorBeamBuild extends BaseTurretBuild{ public @Nullable Unit target; public float lastX, lastY, strength; public boolean any; + public float coolant = 1f; @Override public void updateTile(){ @@ -74,6 +69,23 @@ public class TractorBeamTurret extends Block{ target = Units.closestEnemy(team, x, y, range, u -> u.checkTarget(targetAir, targetGround)); } + //consume coolant + if(target != null && acceptCoolant){ + float maxUsed = consumes.get(ConsumeType.liquid).amount; + + Liquid liquid = liquids.current(); + + float used = Math.min(Math.min(liquids.get(liquid), maxUsed * Time.delta), Math.max(0, (1f / coolantMultiplier) / liquid.heatCapacity)); + + liquids.remove(liquid, used); + + if(Mathf.chance(0.06 * used)){ + coolEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f)); + } + + coolant = 1f + (used * liquid.heatCapacity * coolantMultiplier); + } + //look at target if(target != null && target.within(this, range) && target.team() != team && target.type.flying && efficiency() > 0.01f){ any = true; @@ -98,8 +110,8 @@ public class TractorBeamTurret extends Block{ } @Override - public void drawSelect(){ - Drawf.dashCircle(x, y, range, Pal.accent); + public float efficiency() { + return super.efficiency() * coolant; } @Override diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 5e1212ace1..7040f83759 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -21,7 +21,6 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.logic.*; import mindustry.type.*; -import mindustry.world.*; import mindustry.world.blocks.*; import mindustry.world.consumers.*; import mindustry.world.meta.*; @@ -29,7 +28,7 @@ import mindustry.world.meta.values.*; import static mindustry.Vars.*; -public abstract class Turret extends Block{ +public abstract class Turret extends ReloadTurret{ //after being logic-controlled and this amount of time passes, the turret will resume normal AI public final static float logicControlCooldown = 60 * 2; @@ -45,8 +44,6 @@ public abstract class Turret extends Block{ public int maxAmmo = 30; public int ammoPerShot = 1; public float ammoEjectBack = 1f; - public float range = 50f; - public float reloadTime = 10f; public float inaccuracy = 0f; public float velocityInaccuracy = 0f; public int shots = 1; @@ -54,7 +51,6 @@ public abstract class Turret extends Block{ public float recoilAmount = 1f; public float restitution = 0.02f; public float cooldown = 0.02f; - public float rotateSpeed = 5f; //in degrees per tick public float shootCone = 8f; public float shootShake = 0f; public float xRand = 0f; @@ -65,10 +61,7 @@ public abstract class Turret extends Block{ public boolean targetAir = true; public boolean targetGround = true; public boolean acceptCoolant = true; - /** How much reload is lowered by for each unit of liquid of heat capacity. */ - public float coolantMultiplier = 5f; - /** Effect displayed when coolant is used. */ - public Effect coolEffect = Fx.fuelburn; + public Sortf unitSort = Unit::dst2; protected Vec2 tr = new Vec2(); @@ -108,7 +101,6 @@ public abstract class Turret extends Block{ public void setStats(){ super.setStats(); - stats.add(BlockStat.shootRange, range / tilesize, StatUnit.blocks); stats.add(BlockStat.inaccuracy, (int)inaccuracy, StatUnit.degrees); stats.add(BlockStat.reload, 60f / reloadTime * shots, StatUnit.none); stats.add(BlockStat.targetsAir, targetAir); @@ -134,32 +126,22 @@ public abstract class Turret extends Block{ return new TextureRegion[]{baseRegion, region}; } - @Override - public void drawPlace(int x, int y, int rotation, boolean valid){ - Drawf.dashCircle(x * tilesize + offset, y * tilesize + offset, range, Pal.placing); - } - public static abstract class AmmoEntry{ public int amount; public abstract BulletType type(); } - public class TurretBuild extends Building implements ControlBlock, Ranged{ + public class TurretBuild extends ReloadTurretBuild implements ControlBlock{ public Seq ammo = new Seq<>(); public int totalAmmo; - public float reload, rotation = 90, recoil, heat, logicControlTime = -1; + public float recoil, heat, logicControlTime = -1; public int shotCounter; public boolean logicShooting = false; public @Nullable Posc target; public Vec2 targetPos = new Vec2(); public BlockUnitc unit = Nulls.blockUnit; - @Override - public float range(){ - return range; - } - @Override public void created(){ unit = (BlockUnitc)UnitTypes.block.create(team); @@ -197,8 +179,8 @@ public abstract class Turret extends Block{ case ammo -> totalAmmo; case ammoCapacity -> maxAmmo; case rotation -> rotation; - case shootX -> targetPos.x; - case shootY -> targetPos.y; + case shootX -> World.conv(targetPos.x); + case shootY -> World.conv(targetPos.y); case shooting -> (isControlled() ? unit.isShooting() : logicControlled() ? logicShooting : validateTarget()) ? 1 : 0; default -> super.sense(sensor); }; @@ -301,11 +283,6 @@ public abstract class Turret extends Block{ } } - @Override - public void drawSelect(){ - Drawf.dashCircle(x, y, range, team.color); - } - @Override public void handleLiquid(Building source, Liquid liquid, float amount){ if(acceptCoolant && liquids.currentAmount() <= 0.001f){ @@ -315,20 +292,6 @@ public abstract class Turret extends Block{ super.handleLiquid(source, liquid, amount); } - protected void updateCooling(){ - float maxUsed = consumes.get(ConsumeType.liquid).amount; - - Liquid liquid = liquids.current(); - - float used = Math.min(Math.min(liquids.get(liquid), maxUsed * Time.delta), Math.max(0, ((reloadTime - reload) / coolantMultiplier) / liquid.heatCapacity)) * baseReloadSpeed(); - reload += used * liquid.heatCapacity * coolantMultiplier; - liquids.remove(liquid, used); - - if(Mathf.chance(0.06 * used)){ - coolEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f)); - } - } - protected boolean validateTarget(){ return !Units.invalidateTarget(target, team, x, y) || isControlled() || logicControlled(); } @@ -453,10 +416,6 @@ public abstract class Turret extends Block{ ammoUseEffect.at(x - Angles.trnsx(rotation, ammoEjectBack), y - Angles.trnsy(rotation, ammoEjectBack), rotation); } - protected float baseReloadSpeed(){ - return efficiency(); - } - @Override public void write(Writes write){ super.write(write); diff --git a/core/src/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/mindustry/world/blocks/distribution/ItemBridge.java index 87fcb11a7e..6e310d0e55 100644 --- a/core/src/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/mindustry/world/blocks/distribution/ItemBridge.java @@ -336,16 +336,18 @@ public class ItemBridge extends Block{ Tile other = world.tile(link); + if(items.total() >= itemCapacity) return false; + + if(linked(source)) return true; + if(linkValid(tile, other)){ int rel = relativeTo(other); int rel2 = relativeTo(Edges.getFacingEdge(source, this)); - if(rel == rel2) return false; - }else{ - return linked(source) && items.total() < itemCapacity; + return rel != rel2; } - return items.total() < itemCapacity; + return false; } @Override @@ -359,16 +361,18 @@ public class ItemBridge extends Block{ Tile other = world.tile(link); + if(!(liquids.current() == liquid || liquids.get(liquids.current()) < 0.2f)) return false; + + if(linked(source)) return true; + if(linkValid(tile, other)){ int rel = relativeTo(other.x, other.y); int rel2 = relativeTo(Edges.getFacingEdge(source, this)); - if(rel == rel2) return false; - }else if(!(linked(source))){ - return false; + return rel != rel2; } - return (liquids.current() == liquid || liquids.get(liquids.current()) < 0.2f); + return false; } protected boolean linked(Building source){ diff --git a/core/src/mindustry/world/blocks/power/Battery.java b/core/src/mindustry/world/blocks/power/Battery.java index 7c1f364b37..e78cb31b3a 100644 --- a/core/src/mindustry/world/blocks/power/Battery.java +++ b/core/src/mindustry/world/blocks/power/Battery.java @@ -20,7 +20,7 @@ public class Battery extends PowerDistributor{ super(name); outputsPower = true; consumesPower = true; - flags = EnumSet.of(BlockFlag.powerRes); + flags = EnumSet.of(BlockFlag.battery); } public class BatteryBuild extends Building{ diff --git a/core/src/mindustry/world/blocks/power/NuclearReactor.java b/core/src/mindustry/world/blocks/power/NuclearReactor.java index ac449d90db..2553426092 100644 --- a/core/src/mindustry/world/blocks/power/NuclearReactor.java +++ b/core/src/mindustry/world/blocks/power/NuclearReactor.java @@ -5,6 +5,7 @@ import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; +import arc.struct.*; import arc.util.*; import arc.util.io.*; import mindustry.annotations.Annotations.*; @@ -47,6 +48,7 @@ public class NuclearReactor extends PowerGenerator{ hasItems = true; hasLiquids = true; rebuildable = false; + flags = EnumSet.of(BlockFlag.reactor); } @Override diff --git a/core/src/mindustry/world/blocks/power/PowerGenerator.java b/core/src/mindustry/world/blocks/power/PowerGenerator.java index 2307093f27..24053e70a7 100644 --- a/core/src/mindustry/world/blocks/power/PowerGenerator.java +++ b/core/src/mindustry/world/blocks/power/PowerGenerator.java @@ -18,7 +18,7 @@ public class PowerGenerator extends PowerDistributor{ super(name); sync = true; baseExplosiveness = 5f; - flags = EnumSet.of(BlockFlag.producer); + flags = EnumSet.of(BlockFlag.generator); } @Override diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index 434c9f4b65..4fcb3b1f1a 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -2,6 +2,7 @@ package mindustry.world.blocks.production; import arc.graphics.g2d.*; import arc.math.*; +import arc.struct.*; import arc.util.io.*; import mindustry.content.*; import mindustry.entities.*; @@ -23,9 +24,6 @@ public class GenericCrafter extends Block{ public DrawBlock drawer = new DrawBlock(); - //public Cons drawer = null; - //public Prov drawIcons = null; - public GenericCrafter(String name){ super(name); update = true; @@ -34,6 +32,7 @@ public class GenericCrafter extends Block{ idleSound = Sounds.machine; sync = true; idleSoundVolume = 0.03f; + flags = EnumSet.of(BlockFlag.factory); } @Override diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index 1acf5d61c3..f93d907d47 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -47,7 +47,7 @@ public class CoreBlock extends StorageBlock{ update = true; hasItems = true; priority = TargetPriority.core; - flags = EnumSet.of(BlockFlag.core, BlockFlag.producer, BlockFlag.unitModifier); + flags = EnumSet.of(BlockFlag.core, BlockFlag.unitModifier); unitCapModifier = 10; activeSound = Sounds.respawning; activeSoundVolume = 1f; diff --git a/core/src/mindustry/world/meta/BlockFlag.java b/core/src/mindustry/world/meta/BlockFlag.java index 5c9bf2e920..a3fe674e37 100644 --- a/core/src/mindustry/world/meta/BlockFlag.java +++ b/core/src/mindustry/world/meta/BlockFlag.java @@ -4,18 +4,22 @@ package mindustry.world.meta; public enum BlockFlag{ /** Enemy core; primary target for all units. */ core, - /** Producer of important goods. */ - producer, - /** A turret. */ + /** Something that generates power. */ + generator, + /** Any turret. */ turret, + /** A block that transforms resources. */ + factory, /** Repair point. */ repair, /** Rally point. */ rally, /** Block that stored power for resupply. */ - powerRes, + battery, /** Block used for resupply. */ resupply, + /** Any reactor block. */ + reactor, /** Any block that boosts unit capacity. */ unitModifier;