Better target priority + underBullets for pierce

This commit is contained in:
Anuken 2022-04-11 15:11:10 -04:00
parent ea9e5ae632
commit e2abc055a2
16 changed files with 37 additions and 7 deletions

View File

@ -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;
}};

View File

@ -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,

View File

@ -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){

View File

@ -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))){

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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;
}

View File

@ -11,6 +11,7 @@ public class DuctBridge extends DirectionBridge{
itemCapacity = 4;
hasItems = true;
underBullets = true;
}
public class DuctBridgeBuild extends DirectionBridgeBuild{

View File

@ -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);

View File

@ -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()));

View File

@ -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;
}

View File

@ -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;

View File

@ -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

View File

@ -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;
}

View File

@ -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