#9706 done smarter (#9723)

* Convert from explicit check to interface

* Apply the interface to other turret-like blocks
This commit is contained in:
MEEPofFaith
2024-04-09 08:16:49 -07:00
committed by GitHub
parent 17913f8949
commit fd303524e9
7 changed files with 48 additions and 13 deletions

View File

@@ -4,7 +4,7 @@ import arc.math.*;
import arc.util.*;
import mindustry.annotations.Annotations.*;
import mindustry.gen.*;
import mindustry.world.blocks.defense.turrets.BaseTurret.*;
import mindustry.world.blocks.*;
@Component
abstract class ChildComp implements Posc, Rotc{
@@ -23,9 +23,9 @@ abstract class ChildComp implements Posc, Rotc{
if(parent instanceof Rotc r){
offsetPos = -r.rotation();
offsetRot = rotation - r.rotation();
}else if(parent instanceof BaseTurretBuild build){
offsetPos = -build.rotation;
offsetRot = rotation - build.rotation;
}else if(parent instanceof RotBlock rot){
offsetPos = -rot.buildRotation();
offsetRot = rotation - rot.buildRotation();
}
}
}
@@ -39,10 +39,10 @@ abstract class ChildComp implements Posc, Rotc{
x = parent.getX() + Angles.trnsx(r.rotation() + offsetPos, offsetX, offsetY);
y = parent.getY() + Angles.trnsy(r.rotation() + offsetPos, offsetX, offsetY);
rotation = r.rotation() + offsetRot;
}else if(parent instanceof BaseTurretBuild build){
x = parent.getX() + Angles.trnsx(build.rotation + offsetPos, offsetX, offsetY);
y = parent.getY() + Angles.trnsy(build.rotation + offsetPos, offsetX, offsetY);
rotation = build.rotation + offsetRot;
}else if(parent instanceof RotBlock rot){
x = parent.getX() + Angles.trnsx(rot.buildRotation() + offsetPos, offsetX, offsetY);
y = parent.getY() + Angles.trnsy(rot.buildRotation() + offsetPos, offsetX, offsetY);
rotation = rot.buildRotation() + offsetRot;
}
}else{
x = parent.getX() + offsetX;

View File

@@ -0,0 +1,6 @@
package mindustry.world.blocks;
/** Any block that has 360-degree rotation */
public interface RotBlock{
float buildRotation();
}

View File

@@ -77,7 +77,7 @@ public class BuildTurret extends BaseTurret{
return new TextureRegion[]{baseRegion, region};
}
public class BuildTurretBuild extends BaseTurretBuild implements ControlBlock{
public class BuildTurretBuild extends BaseTurretBuild implements ControlBlock, RotBlock{
public BlockUnitc unit = (BlockUnitc)unitType.create(team);
public @Nullable Unit following;
public @Nullable BlockPlan lastPlan;
@@ -92,6 +92,11 @@ public class BuildTurret extends BaseTurret{
return true;
}
@Override
public float buildRotation(){
return unit.rotation();
}
@Override
public Unit unit(){
//make sure stats are correct

View File

@@ -9,6 +9,7 @@ import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.logic.*;
import mindustry.world.*;
import mindustry.world.blocks.*;
import mindustry.world.consumers.*;
import mindustry.world.meta.*;
@@ -79,7 +80,7 @@ public class BaseTurret extends Block{
stats.add(Stat.shootRange, range / tilesize, StatUnit.blocks);
}
public class BaseTurretBuild extends Building implements Ranged{
public class BaseTurretBuild extends Building implements Ranged, RotBlock{
public float rotation = 90;
@Override
@@ -87,6 +88,11 @@ public class BaseTurret extends Block{
return range;
}
@Override
public float buildRotation(){
return rotation;
}
@Override
public void drawSelect(){
Drawf.dashCircle(x, y, range(), team.color);

View File

@@ -18,6 +18,7 @@ import mindustry.graphics.*;
import mindustry.logic.*;
import mindustry.type.*;
import mindustry.world.*;
import mindustry.world.blocks.*;
import mindustry.world.meta.*;
import static mindustry.Vars.*;
@@ -104,7 +105,7 @@ public class MassDriver extends Block{
}
}
public class MassDriverBuild extends Building{
public class MassDriverBuild extends Building implements RotBlock{
public int link = -1;
public float rotation = 90;
public float reloadCounter = 0f;
@@ -112,6 +113,11 @@ public class MassDriver extends Block{
//TODO use queue? this array usually holds about 3 shooters max anyway
public OrderedSet<Building> waitingShooters = new OrderedSet<>();
@Override
public float buildRotation(){
return rotation;
}
public Building currentShooter(){
return waitingShooters.isEmpty() ? null : waitingShooters.first();
}

View File

@@ -14,6 +14,7 @@ import mindustry.entities.units.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.logic.*;
import mindustry.world.blocks.*;
import mindustry.world.meta.*;
import static mindustry.Vars.*;
@@ -126,7 +127,7 @@ public class PayloadMassDriver extends PayloadBlock{
return new TextureRegion[]{leftRegion, rightRegion, capRegion};
}
public class PayloadDriverBuild extends PayloadBlockBuild<Payload>{
public class PayloadDriverBuild extends PayloadBlockBuild<Payload> implements RotBlock{
public int link = -1;
public float turretRotation = 90;
public float reloadCounter = 0f, charge = 0f;
@@ -143,6 +144,11 @@ public class PayloadMassDriver extends PayloadBlock{
return waitingShooters.isEmpty() ? null : waitingShooters.first();
}
@Override
public float buildRotation(){
return rotation;
}
@Override
public void updateTile(){
super.updateTile();

View File

@@ -16,6 +16,7 @@ import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.logic.*;
import mindustry.world.*;
import mindustry.world.blocks.*;
import mindustry.world.consumers.*;
import mindustry.world.meta.*;
@@ -147,11 +148,16 @@ public class RepairTurret extends Block{
}
}
public class RepairPointBuild extends Building implements Ranged{
public class RepairPointBuild extends Building implements Ranged, RotBlock{
public Unit target;
public Vec2 offset = new Vec2(), lastEnd = new Vec2();
public float strength, rotation = 90;
@Override
public float buildRotation(){
return rotation;
}
@Override
public void draw(){
Draw.rect(baseRegion, x, y);