diff --git a/core/assets-raw/sprites/blocks/drills/cliff-crusher-top.png b/core/assets-raw/sprites/blocks/drills/cliff-crusher-top.png index a5554ae6e1..3541f6e396 100644 Binary files a/core/assets-raw/sprites/blocks/drills/cliff-crusher-top.png and b/core/assets-raw/sprites/blocks/drills/cliff-crusher-top.png differ diff --git a/core/assets-raw/sprites/blocks/drills/cliff-crusher.png b/core/assets-raw/sprites/blocks/drills/cliff-crusher.png index 384a6b7e92..6429f1c9bc 100644 Binary files a/core/assets-raw/sprites/blocks/drills/cliff-crusher.png and b/core/assets-raw/sprites/blocks/drills/cliff-crusher.png differ diff --git a/core/assets-raw/sprites/blocks/payload/ballistic-silo.png b/core/assets-raw/sprites/blocks/payload/ballistic-silo.png deleted file mode 100644 index c70a9079ea..0000000000 Binary files a/core/assets-raw/sprites/blocks/payload/ballistic-silo.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/payload/constructor-out.png b/core/assets-raw/sprites/blocks/payload/constructor-out.png new file mode 100644 index 0000000000..afb61bf138 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/constructor-out.png differ diff --git a/core/assets-raw/sprites/blocks/payload/constructor-top.png b/core/assets-raw/sprites/blocks/payload/constructor-top.png index 39a3ca79f3..bf852e5635 100644 Binary files a/core/assets-raw/sprites/blocks/payload/constructor-top.png and b/core/assets-raw/sprites/blocks/payload/constructor-top.png differ diff --git a/core/assets-raw/sprites/blocks/payload/constructor.png b/core/assets-raw/sprites/blocks/payload/constructor.png index 8f68ec1708..3a72e1e649 100644 Binary files a/core/assets-raw/sprites/blocks/payload/constructor.png and b/core/assets-raw/sprites/blocks/payload/constructor.png differ diff --git a/core/assets-raw/sprites/blocks/payload/deconstructor-in.png b/core/assets-raw/sprites/blocks/payload/deconstructor-in.png new file mode 100644 index 0000000000..d411cbd4cd Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/deconstructor-in.png differ diff --git a/core/assets-raw/sprites/blocks/payload/deconstructor-top.png b/core/assets-raw/sprites/blocks/payload/deconstructor-top.png index e75a3e44cf..ced9f4de1e 100644 Binary files a/core/assets-raw/sprites/blocks/payload/deconstructor-top.png and b/core/assets-raw/sprites/blocks/payload/deconstructor-top.png differ diff --git a/core/assets-raw/sprites/blocks/payload/deconstructor.png b/core/assets-raw/sprites/blocks/payload/deconstructor.png index 8c85cf1abc..f0dfc652f0 100644 Binary files a/core/assets-raw/sprites/blocks/payload/deconstructor.png and b/core/assets-raw/sprites/blocks/payload/deconstructor.png differ diff --git a/core/assets-raw/sprites/blocks/payload/large-constructor-out.png b/core/assets-raw/sprites/blocks/payload/large-constructor-out.png new file mode 100644 index 0000000000..dc75d62b93 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/large-constructor-out.png differ diff --git a/core/assets-raw/sprites/blocks/payload/large-constructor-top.png b/core/assets-raw/sprites/blocks/payload/large-constructor-top.png index eabff724be..6f20681c20 100644 Binary files a/core/assets-raw/sprites/blocks/payload/large-constructor-top.png and b/core/assets-raw/sprites/blocks/payload/large-constructor-top.png differ diff --git a/core/assets-raw/sprites/blocks/payload/large-constructor.png b/core/assets-raw/sprites/blocks/payload/large-constructor.png index f82c56b17d..7436b040cc 100644 Binary files a/core/assets-raw/sprites/blocks/payload/large-constructor.png and b/core/assets-raw/sprites/blocks/payload/large-constructor.png differ diff --git a/core/assets-raw/sprites/blocks/payload/payload-router-edge.png b/core/assets-raw/sprites/blocks/payload/payload-router-edge.png deleted file mode 100644 index c8335d4008..0000000000 Binary files a/core/assets-raw/sprites/blocks/payload/payload-router-edge.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor-edge.png b/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor-edge.png new file mode 100644 index 0000000000..13b2c8ee49 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor-edge.png differ diff --git a/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor-icon.png b/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor-icon.png new file mode 100644 index 0000000000..6a9ce4ba85 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor-icon.png differ diff --git a/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor-top.png b/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor-top.png new file mode 100644 index 0000000000..0a4f8fd597 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor-top.png differ diff --git a/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor.png b/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor.png new file mode 100644 index 0000000000..fb0a728a0f Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/reinforced-payload-conveyor.png differ diff --git a/core/assets-raw/sprites/blocks/payload/reinforced-payload-router-icon.png b/core/assets-raw/sprites/blocks/payload/reinforced-payload-router-icon.png new file mode 100644 index 0000000000..5d9d601a3c Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/reinforced-payload-router-icon.png differ diff --git a/core/assets-raw/sprites/blocks/payload/reinforced-payload-router-over.png b/core/assets-raw/sprites/blocks/payload/reinforced-payload-router-over.png new file mode 100644 index 0000000000..e7b14a86bc Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/reinforced-payload-router-over.png differ diff --git a/core/assets-raw/sprites/blocks/payload/reinforced-payload-router-top.png b/core/assets-raw/sprites/blocks/payload/reinforced-payload-router-top.png new file mode 100644 index 0000000000..34a8fe8144 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/reinforced-payload-router-top.png differ diff --git a/core/assets-raw/sprites/blocks/payload/reinforced-payload-router.png b/core/assets-raw/sprites/blocks/payload/reinforced-payload-router.png new file mode 100644 index 0000000000..cc9cacb3f8 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/reinforced-payload-router.png differ diff --git a/core/assets-raw/sprites/blocks/payload/small-deconstructor-in.png b/core/assets-raw/sprites/blocks/payload/small-deconstructor-in.png new file mode 100644 index 0000000000..f8427f0ba9 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/small-deconstructor-in.png differ diff --git a/core/assets-raw/sprites/blocks/payload/small-deconstructor-top.png b/core/assets-raw/sprites/blocks/payload/small-deconstructor-top.png index b3e82d0529..4e5aa251ee 100644 Binary files a/core/assets-raw/sprites/blocks/payload/small-deconstructor-top.png and b/core/assets-raw/sprites/blocks/payload/small-deconstructor-top.png differ diff --git a/core/assets-raw/sprites/blocks/payload/small-deconstructor.png b/core/assets-raw/sprites/blocks/payload/small-deconstructor.png index f3d979408f..a35d68ca80 100644 Binary files a/core/assets-raw/sprites/blocks/payload/small-deconstructor.png and b/core/assets-raw/sprites/blocks/payload/small-deconstructor.png differ diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index d42e4a4b87..288ebd3764 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -531,3 +531,5 @@ 63172=drone-center|block-drone-center-ui 63171=effect-drone|unit-effect-drone-ui 63170=world-processor|block-world-processor-ui +63169=reinforced-payload-conveyor|block-reinforced-payload-conveyor-ui +63168=reinforced-payload-router|block-reinforced-payload-router-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index 7110c0986c..6ba4b4cfc5 100644 Binary files a/core/assets/logicids.dat and b/core/assets/logicids.dat differ diff --git a/core/src/mindustry/ai/ControlPathfinder.java b/core/src/mindustry/ai/ControlPathfinder.java index e56bfe86e3..280c97c065 100644 --- a/core/src/mindustry/ai/ControlPathfinder.java +++ b/core/src/mindustry/ai/ControlPathfinder.java @@ -1,10 +1,13 @@ package mindustry.ai; import arc.*; +import arc.math.geom.*; import arc.struct.*; import arc.util.*; import arc.util.async.*; import mindustry.game.EventType.*; +import mindustry.gen.*; +import mindustry.world.*; import static mindustry.Vars.*; @@ -22,13 +25,7 @@ public class ControlPathfinder implements Runnable{ TaskQueue queue = new TaskQueue(); //PATHFINDING THREAD DATA - IntMap requests = new IntMap<>(); - - - /** @return the next target ID to use as a unique path identifier. */ - public int nextTargetId(){ - return lastTargetId ++; - } + ObjectMap requests = new ObjectMap<>(); public ControlPathfinder(){ Events.on(WorldLoadEvent.class, event -> { @@ -41,6 +38,16 @@ public class ControlPathfinder implements Runnable{ Events.on(ResetEvent.class, event -> stop()); } + + /** @return the next target ID to use as a unique path identifier. */ + public int nextTargetId(){ + return lastTargetId ++; + } + + public void getPathPosition(Unit unit, int pathId, Vec2 destination){ + + } + /** Starts or restarts the pathfinding thread. */ private void start(){ stop(); @@ -56,6 +63,15 @@ public class ControlPathfinder implements Runnable{ requests.clear(); } + //distance heuristic: manhattan + private static float dstCost(float x, float y, float x2, float y2){ + return Math.abs(x - x2) + Math.abs(x2 - y2); + } + + private static float tileCost(Tile a, Tile b){ + return 1f; + } + @Override public void run(){ while(true){ @@ -88,10 +104,34 @@ public class ControlPathfinder implements Runnable{ } class PathRequest{ - public int lastRequestFrame; + GridBits closed; + PQueue queue; - public void update(long maxUpdateNs){ + //TODO how will costs be computed? where will they be stored...? + int lastId; + int curId; + int lastFrame; + + PathRequest(){ + clear(); + + lastId = curId; + } + + void update(long maxUpdateNs){ + if(curId != lastId){ + clear(); + } + + + } + + void clear(){ + //TODO + + closed = new GridBits(world.width(), world.height()); + queue = new PQueue<>(16, (a, b) -> 0); } } } diff --git a/core/src/mindustry/ai/types/CommandAI.java b/core/src/mindustry/ai/types/CommandAI.java index 39953aa7f3..7bafe3ad4e 100644 --- a/core/src/mindustry/ai/types/CommandAI.java +++ b/core/src/mindustry/ai/types/CommandAI.java @@ -14,15 +14,11 @@ public class CommandAI extends AIController{ updateVisuals(); updateTargeting(); - //TODO - if(attackTarget != null){ if(targetPos == null) targetPos = new Vec2(); targetPos.set(attackTarget); } - - if(targetPos != null){ moveTo(targetPos, attackTarget != null ? unit.type.range - 10f : 0f); diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index e817555b52..38b21406bd 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -145,7 +145,8 @@ public class Blocks{ droneCenter, //payloads - payloadConveyor, payloadRouter, payloadPropulsionTower, smallDeconstructor, deconstructor, constructor, largeConstructor, payloadLoader, payloadUnloader, + payloadConveyor, payloadRouter, reinforcedPayloadConveyor, reinforcedPayloadRouter, payloadPropulsionTower, smallDeconstructor, deconstructor, constructor, largeConstructor, payloadLoader, payloadUnloader, + //logic message, switchBlock, microProcessor, logicProcessor, hyperProcessor, largeLogicDisplay, logicDisplay, memoryCell, memoryBank, @@ -3550,12 +3551,26 @@ public class Blocks{ //region payloads payloadConveyor = new PayloadConveyor("payload-conveyor"){{ - requirements(Category.units, with(Items.graphite, 10)); + requirements(Category.units, with(Items.graphite, 10, Items.copper, 10)); canOverdrive = false; }}; payloadRouter = new PayloadRouter("payload-router"){{ - requirements(Category.units, with(Items.graphite, 15)); + requirements(Category.units, with(Items.graphite, 15, Items.copper, 10)); + canOverdrive = false; + }}; + + reinforcedPayloadConveyor = new PayloadConveyor("reinforced-payload-conveyor"){{ + requirements(Category.units, with(Items.tungsten, 10)); + moveTime = 35f; + canOverdrive = false; + health = 800; + }}; + + reinforcedPayloadRouter = new PayloadRouter("reinforced-payload-router"){{ + requirements(Category.units, with(Items.tungsten, 15)); + moveTime = 35f; + health = 800; canOverdrive = false; }}; @@ -3570,7 +3585,7 @@ public class Blocks{ }}; smallDeconstructor = new PayloadDeconstructor("small-deconstructor"){{ - requirements(Category.units, with(Items.thorium, 80, Items.silicon, 80, Items.graphite, 80)); + requirements(Category.units, with(Items.beryllium, 100, Items.silicon, 100, Items.oxide, 50, Items.graphite, 80)); itemCapacity = 100; consumes.power(1f); size = 3; @@ -3579,7 +3594,7 @@ public class Blocks{ //TODO consider usefulness and applicability to serpulo deconstructor = new PayloadDeconstructor("deconstructor"){{ - requirements(Category.units, with(Items.thorium, 250, Items.silicon, 200, Items.graphite, 250)); + requirements(Category.units, with(Items.beryllium, 250, Items.oxide, 100, Items.silicon, 250, Items.carbide, 250)); itemCapacity = 250; consumes.power(3f); size = 5; @@ -3588,7 +3603,7 @@ public class Blocks{ //TODO move completely to erekir tech tree? constructor = new Constructor("constructor"){{ - requirements(Category.units, with(Items.silicon, 80, Items.graphite, 120)); + requirements(Category.units, with(Items.silicon, 100, Items.beryllium, 150, Items.tungsten, 80)); hasPower = true; consumes.power(2f); size = 3; @@ -3596,7 +3611,7 @@ public class Blocks{ //yes this block is pretty much useless largeConstructor = new Constructor("large-constructor"){{ - requirements(Category.units, with(Items.silicon, 150, Items.graphite, 150, Items.phaseFabric, 40)); + requirements(Category.units, with(Items.silicon, 150, Items.oxide, 150, Items.tungsten, 200, Items.phaseFabric, 40)); hasPower = true; consumes.power(2f); maxBlockSize = 4; diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index f41330321c..41a399fd4b 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1164,6 +1164,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, if(value instanceof Item) type = Item.class; if(value instanceof Block) type = Block.class; if(value instanceof Liquid) type = Liquid.class; + if(value instanceof UnitType) type = UnitType.class; if(builder != null && builder.isPlayer()){ lastAccessed = builder.getPlayer().name; diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 03237f17f6..f667ba50c6 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -1249,10 +1249,6 @@ public class UnitType extends UnlockableContent{ } public void applyOutlineColor(Unit unit){ - if(unit.isBoss()){ - Draw.mixcol(unit.team.color, Mathf.absin(7f, 1f)); - } - if(unit.drownTime > 0 && unit.lastDrownFloor != null){ Draw.color(Color.white, Tmp.c1.set(unit.lastDrownFloor.mapColor).mul(0.8f), unit.drownTime * 0.9f); } diff --git a/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java b/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java index 6880b6662a..5169652282 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java @@ -15,7 +15,7 @@ import mindustry.world.meta.*; import static mindustry.Vars.*; public class PayloadConveyor extends Block{ - public float moveTime = 40f, moveForce = 201f; + public float moveTime = 45f, moveForce = 201f; public @Load("@-top") TextureRegion topRegion; public @Load("@-edge") TextureRegion edgeRegion; public Interp interp = Interp.pow5;