From e2abc055a21c8d68a2fba3d44e414e9f8b0fee07 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 11 Apr 2022 15:11:10 -0400 Subject: [PATCH] Better target priority + underBullets for pierce --- core/src/mindustry/content/Blocks.java | 5 ----- core/src/mindustry/entities/TargetPriority.java | 3 ++- core/src/mindustry/entities/bullet/BulletType.java | 2 ++ core/src/mindustry/entities/comp/BulletComp.java | 8 +++++++- .../src/mindustry/world/blocks/distribution/Conveyor.java | 2 ++ .../world/blocks/distribution/DirectionBridge.java | 2 ++ .../world/blocks/distribution/DirectionalUnloader.java | 2 ++ core/src/mindustry/world/blocks/distribution/Duct.java | 3 +++ .../mindustry/world/blocks/distribution/DuctBridge.java | 1 + .../mindustry/world/blocks/distribution/DuctRouter.java | 3 +++ .../mindustry/world/blocks/distribution/ItemBridge.java | 2 ++ .../mindustry/world/blocks/distribution/OverflowDuct.java | 3 +++ .../world/blocks/distribution/StackConveyor.java | 1 + core/src/mindustry/world/blocks/liquid/Conduit.java | 2 ++ .../mindustry/world/blocks/payloads/PayloadConveyor.java | 2 ++ core/src/mindustry/world/blocks/power/BeamNode.java | 3 +++ 16 files changed, 37 insertions(+), 7 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 16787a9820..98ee1f266d 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1888,7 +1888,6 @@ public class Blocks{ requirements(Category.distribution, with(Items.beryllium, 1)); health = 90; speed = 4f; - underBullets = true; researchCost = with(Items.beryllium, 5); }}; @@ -1897,7 +1896,6 @@ public class Blocks{ health = 140; speed = 4f; armored = true; - underBullets = true; researchCost = with(Items.beryllium, 300, Items.tungsten, 100); }}; @@ -1907,7 +1905,6 @@ public class Blocks{ speed = 4f; regionRotated1 = 1; solid = false; - underBullets = true; researchCost = with(Items.beryllium, 30); }}; @@ -1916,7 +1913,6 @@ public class Blocks{ health = 90; speed = 4f; solid = false; - underBullets = true; researchCostMultiplier = 1.5f; }}; @@ -1925,7 +1921,6 @@ public class Blocks{ health = 90; speed = 4f; buildCostMultiplier = 2f; - underBullets = true; researchCostMultiplier = 0.3f; }}; diff --git a/core/src/mindustry/entities/TargetPriority.java b/core/src/mindustry/entities/TargetPriority.java index 800bdc87d3..6785ccc5f0 100644 --- a/core/src/mindustry/entities/TargetPriority.java +++ b/core/src/mindustry/entities/TargetPriority.java @@ -3,7 +3,8 @@ package mindustry.entities; /** Higher priority blocks will always get targeted over those of lower priority, regardless of distance. */ public class TargetPriority{ public static final float - wall = -1f, + wall = -2f, + transport = -1f, base = 0f, constructing = 1f, turret = 2f, diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index c1c3a7f93a..56ea9cf113 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -559,6 +559,8 @@ public class BulletType extends Content implements Cloneable{ bullet.owner = owner; bullet.team = team; bullet.time = 0f; + bullet.originX = x; + bullet.originY = y; bullet.aimTile = world.tileWorld(aimX, aimY); bullet.initVel(angle, speed * velocityScl); if(backMove){ diff --git a/core/src/mindustry/entities/comp/BulletComp.java b/core/src/mindustry/entities/comp/BulletComp.java index 3fd70d2ec0..b827944342 100644 --- a/core/src/mindustry/entities/comp/BulletComp.java +++ b/core/src/mindustry/entities/comp/BulletComp.java @@ -38,6 +38,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw private float rotation; transient @Nullable Tile aimTile; + transient float originX, originY; transient @Nullable Mover mover; transient boolean absorbed, hit; transient @Nullable Trail trail; @@ -177,7 +178,12 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw if(build != null && isAdded() && //should underBullet detection be disabled for piercing bullets? //|| type.pierceBuilding - (!build.block.underBullets || (aimTile != null && aimTile.build == build)) + (!build.block.underBullets || + //direct hit on correct tile + (aimTile != null && aimTile.build == build) || + //a piercing bullet overshot the aim tile, it's fine to hit things now + (type.pierce && aimTile != null && dst(originX, originY) > aimTile.dst(originX, originY) + 2f)) + && build.collide(self()) && type.testCollision(self(), build) && !build.dead() && (type.collidesTeam || build.team != team) && !(type.pierceBuilding && hasCollided(build.id))){ diff --git a/core/src/mindustry/world/blocks/distribution/Conveyor.java b/core/src/mindustry/world/blocks/distribution/Conveyor.java index c5aa563476..a415c0cc2f 100644 --- a/core/src/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/mindustry/world/blocks/distribution/Conveyor.java @@ -9,6 +9,7 @@ import arc.util.*; import arc.util.io.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; +import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -41,6 +42,7 @@ public class Conveyor extends Block implements Autotiler{ group = BlockGroup.transportation; hasItems = true; itemCapacity = capacity; + priority = TargetPriority.transport; conveyorPlacement = true; ambientSound = Sounds.conveyor; diff --git a/core/src/mindustry/world/blocks/distribution/DirectionBridge.java b/core/src/mindustry/world/blocks/distribution/DirectionBridge.java index 6ca04f7e8f..cd226c5dbc 100644 --- a/core/src/mindustry/world/blocks/distribution/DirectionBridge.java +++ b/core/src/mindustry/world/blocks/distribution/DirectionBridge.java @@ -8,6 +8,7 @@ import arc.struct.*; import arc.util.*; import mindustry.annotations.Annotations.*; import mindustry.core.*; +import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -36,6 +37,7 @@ public class DirectionBridge extends Block{ rotate = true; group = BlockGroup.transportation; noUpdateDisabled = true; + priority = TargetPriority.transport; envEnabled = Env.space | Env.terrestrial | Env.underwater; drawArrow = false; regionRotated1 = 1; diff --git a/core/src/mindustry/world/blocks/distribution/DirectionalUnloader.java b/core/src/mindustry/world/blocks/distribution/DirectionalUnloader.java index 229bcfc496..b803006c68 100644 --- a/core/src/mindustry/world/blocks/distribution/DirectionalUnloader.java +++ b/core/src/mindustry/world/blocks/distribution/DirectionalUnloader.java @@ -5,6 +5,7 @@ import arc.scene.ui.layout.*; import arc.util.*; import arc.util.io.*; import mindustry.annotations.Annotations.*; +import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.type.*; @@ -37,6 +38,7 @@ public class DirectionalUnloader extends Block{ unloadable = false; envDisabled = Env.none; clearOnDoubleTap = true; + priority = TargetPriority.transport; config(Item.class, (DirectionalUnloaderBuild tile, Item item) -> tile.unloadItem = item); configClear((DirectionalUnloaderBuild tile) -> tile.unloadItem = null); diff --git a/core/src/mindustry/world/blocks/distribution/Duct.java b/core/src/mindustry/world/blocks/distribution/Duct.java index d84340de68..e04482bc5d 100644 --- a/core/src/mindustry/world/blocks/distribution/Duct.java +++ b/core/src/mindustry/world/blocks/distribution/Duct.java @@ -9,6 +9,7 @@ import arc.util.*; import arc.util.io.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; +import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -38,8 +39,10 @@ public class Duct extends Block implements Autotiler{ unloadable = false; itemCapacity = 1; noUpdateDisabled = true; + underBullets = true; rotate = true; noSideBlend = true; + priority = TargetPriority.transport; envEnabled = Env.space | Env.terrestrial | Env.underwater; } diff --git a/core/src/mindustry/world/blocks/distribution/DuctBridge.java b/core/src/mindustry/world/blocks/distribution/DuctBridge.java index d381c56992..f47196d5f6 100644 --- a/core/src/mindustry/world/blocks/distribution/DuctBridge.java +++ b/core/src/mindustry/world/blocks/distribution/DuctBridge.java @@ -11,6 +11,7 @@ public class DuctBridge extends DirectionBridge{ itemCapacity = 4; hasItems = true; + underBullets = true; } public class DuctBridgeBuild extends DirectionBridgeBuild{ diff --git a/core/src/mindustry/world/blocks/distribution/DuctRouter.java b/core/src/mindustry/world/blocks/distribution/DuctRouter.java index 153ba1e004..ad4c0cf0bd 100644 --- a/core/src/mindustry/world/blocks/distribution/DuctRouter.java +++ b/core/src/mindustry/world/blocks/distribution/DuctRouter.java @@ -6,6 +6,7 @@ import arc.scene.ui.layout.*; import arc.util.*; import arc.util.io.*; import mindustry.annotations.Annotations.*; +import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.type.*; @@ -34,6 +35,8 @@ public class DuctRouter extends Block{ saveConfig = true; rotate = true; clearOnDoubleTap = true; + underBullets = true; + priority = TargetPriority.transport; envEnabled = Env.space | Env.terrestrial | Env.underwater; config(Item.class, (DuctRouterBuild tile, Item item) -> tile.sortItem = item); diff --git a/core/src/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/mindustry/world/blocks/distribution/ItemBridge.java index d78e2537b9..fce14a711f 100644 --- a/core/src/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/mindustry/world/blocks/distribution/ItemBridge.java @@ -9,6 +9,7 @@ import arc.util.*; import arc.util.io.*; import mindustry.annotations.Annotations.*; import mindustry.core.*; +import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -53,6 +54,7 @@ public class ItemBridge extends Block{ copyConfig = false; //disabled as to not be annoying allowConfigInventory = false; + priority = TargetPriority.transport; //point2 config is relative config(Point2.class, (ItemBridgeBuild tile, Point2 i) -> tile.link = Point2.pack(i.x + tile.tileX(), i.y + tile.tileY())); diff --git a/core/src/mindustry/world/blocks/distribution/OverflowDuct.java b/core/src/mindustry/world/blocks/distribution/OverflowDuct.java index b7cf1a914e..9fa8829e8d 100644 --- a/core/src/mindustry/world/blocks/distribution/OverflowDuct.java +++ b/core/src/mindustry/world/blocks/distribution/OverflowDuct.java @@ -4,6 +4,7 @@ import arc.graphics.g2d.*; import arc.math.*; import arc.util.*; import mindustry.annotations.Annotations.*; +import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.type.*; @@ -27,6 +28,8 @@ public class OverflowDuct extends Block{ itemCapacity = 1; noUpdateDisabled = true; rotate = true; + underBullets = true; + priority = TargetPriority.transport; envEnabled = Env.space | Env.terrestrial | Env.underwater; regionRotated1 = 1; } diff --git a/core/src/mindustry/world/blocks/distribution/StackConveyor.java b/core/src/mindustry/world/blocks/distribution/StackConveyor.java index ed6362ab9b..43775acc48 100644 --- a/core/src/mindustry/world/blocks/distribution/StackConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/StackConveyor.java @@ -52,6 +52,7 @@ public class StackConveyor extends Block implements Autotiler{ itemCapacity = 10; conveyorPlacement = true; highUnloadPriority = true; + priority = TargetPriority.transport; ambientSound = Sounds.conveyor; ambientSoundVolume = 0.004f; diff --git a/core/src/mindustry/world/blocks/liquid/Conduit.java b/core/src/mindustry/world/blocks/liquid/Conduit.java index 59c212ab8d..0c2debb4ad 100644 --- a/core/src/mindustry/world/blocks/liquid/Conduit.java +++ b/core/src/mindustry/world/blocks/liquid/Conduit.java @@ -10,6 +10,7 @@ import arc.struct.*; import arc.util.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; +import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -48,6 +49,7 @@ public class Conduit extends LiquidBlock implements Autotiler{ conveyorPlacement = true; noUpdateDisabled = true; canOverdrive = false; + priority = TargetPriority.transport; } @Override diff --git a/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java b/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java index 5169652282..9fc669d59d 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java @@ -7,6 +7,7 @@ import arc.math.geom.*; import arc.util.*; import arc.util.io.*; import mindustry.annotations.Annotations.*; +import mindustry.entities.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.world.*; @@ -29,6 +30,7 @@ public class PayloadConveyor extends Block{ update = true; outputsPayload = true; noUpdateDisabled = true; + priority = TargetPriority.transport; envEnabled |= Env.space | Env.underwater; sync = true; } diff --git a/core/src/mindustry/world/blocks/power/BeamNode.java b/core/src/mindustry/world/blocks/power/BeamNode.java index bd8dcadabf..852d40e0db 100644 --- a/core/src/mindustry/world/blocks/power/BeamNode.java +++ b/core/src/mindustry/world/blocks/power/BeamNode.java @@ -8,6 +8,7 @@ import arc.struct.*; import mindustry.*; import mindustry.annotations.Annotations.*; import mindustry.core.*; +import mindustry.entities.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.input.*; @@ -35,6 +36,8 @@ public class BeamNode extends PowerBlock{ drawDisabled = false; envEnabled |= Env.space; allowDiagonal = false; + underBullets = true; + priority = TargetPriority.transport; } @Override