This commit is contained in:
Anuken
2025-05-06 10:28:34 -04:00
parent f3438124b3
commit 685a52eb48
6 changed files with 21 additions and 7 deletions

View File

@@ -54,6 +54,7 @@ public class ControlPathfinder implements Runnable{
costLegs = (team, tile) ->
PathTile.legSolid(tile) ? impassable : 1 +
(PathTile.nearDeep(tile) ? 8 : 0) +
(PathTile.deep(tile) ? 6000 : 0) +
(PathTile.nearLegSolid(tile) ? 3 : 0),
@@ -1425,9 +1426,7 @@ public class ControlPathfinder implements Runnable{
private static boolean nearPassable(int team, PathCost cost, int pos){
int amount = cost.getCost(team, pathfinder.tiles[pos]);
//for standard units: never consider deep water (cost = 6000) passable
//for leg units: consider it passable
return amount != impassable && amount < (cost == costLegs ? solidCap : 50);
return amount != impassable && amount < 50;
}
private static boolean solid(int team, PathCost type, int x, int y){

View File

@@ -209,7 +209,7 @@ public class Pathfinder implements Runnable{
/** Packs a tile into its internal representation. */
public int packTile(Tile tile){
boolean nearLiquid = false, nearSolid = false, nearLegSolid = false, nearGround = false, solid = tile.solid(), allDeep = tile.floor().isDeep();
boolean nearLiquid = false, nearSolid = false, nearLegSolid = false, nearGround = false, solid = tile.solid(), allDeep = tile.floor().isDeep(), nearDeep = allDeep;
for(int i = 0; i < 4; i++){
Tile other = tile.nearby(i);
@@ -220,7 +220,11 @@ public class Pathfinder implements Runnable{
//TODO potentially strange behavior when teamPassable is false for other teams?
if(osolid && !other.block().teamPassable) nearSolid = true;
if(!floor.isLiquid) nearGround = true;
if(!floor.isDeep()) allDeep = false;
if(!floor.isDeep()){
allDeep = false;
}else{
nearDeep = true;
}
if(other.legSolid()) nearLegSolid = true;
//other tile is now near solid
@@ -245,6 +249,7 @@ public class Pathfinder implements Runnable{
tile.floor().isDeep(),
tile.floor().damageTaken > 0.00001f,
allDeep,
nearDeep,
tile.block().teamPassable
);
}
@@ -699,6 +704,8 @@ public class Pathfinder implements Runnable{
boolean damages;
//whether all tiles nearby are deep
boolean allDeep;
//whether it is near deep water
boolean nearDeep;
//block teamPassable is true
boolean teamPassable;
}

View File

@@ -164,8 +164,6 @@ public class WaveSpawner{
cons.accept(core.x + Tmp.v1.x, core.y + Tmp.v1.y, false);
}
}
}
}
}

View File

@@ -13,6 +13,7 @@ import mindustry.ctype.*;
import mindustry.entities.units.*;
import mindustry.game.EventType.*;
import mindustry.gen.*;
import mindustry.io.*;
import mindustry.type.*;
import mindustry.world.*;
import mindustry.world.blocks.*;
@@ -163,11 +164,17 @@ public class PayloadSource extends PayloadBlock{
Draw.reset();
}
@Override
public byte version(){
return 1;
}
@Override
public void write(Writes write){
super.write(write);
write.s(unit == null ? -1 : unit.id);
write.s(configBlock == null ? -1 : configBlock.id);
TypeIO.writeVecNullable(write, commandPos);
}
@Override
@@ -175,6 +182,9 @@ public class PayloadSource extends PayloadBlock{
super.read(read, revision);
unit = Vars.content.unit(read.s());
configBlock = Vars.content.block(read.s());
if(revision >= 1){
commandPos = TypeIO.readVecNullable(read);
}
}
}
}