Pathfinder progress
This commit is contained in:
@@ -35,7 +35,8 @@ public class SectorDamage{
|
||||
if(core != null && !frontier.isEmpty()){
|
||||
for(Tile spawner : frontier){
|
||||
//find path from spawn to core
|
||||
Seq<Tile> path = Astar.pathfind(spawner, core.tile, t -> t.cost, t -> !(t.block().isStatic() && t.solid()));
|
||||
//TODO this is broken
|
||||
Seq<Tile> path = Astar.pathfind(spawner, core.tile, SectorDamage::cost, t -> !(t.block().isStatic() && t.solid()));
|
||||
int amount = (int)(path.size * fraction);
|
||||
for(int i = 0; i < amount; i++){
|
||||
Tile t = path.get(i);
|
||||
@@ -104,8 +105,12 @@ public class SectorDamage{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static float cost(Tile tile){
|
||||
return 1f +
|
||||
(tile.block().isStatic() && tile.solid() ? 200f : 0f) +
|
||||
(tile.build != null ? tile.build.health / 40f : 0f) +
|
||||
(tile.floor().isLiquid ? 10f : 0f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,63 +39,6 @@ public abstract class BasicGenerator implements WorldGenerator{
|
||||
|
||||
}
|
||||
|
||||
//for visual testing only
|
||||
public void cliffs2(){
|
||||
for(Tile tile : tiles){
|
||||
tile.setBlock(Blocks.air);
|
||||
tile.cost = tile.floor().isLiquid ? 0 : (byte)(noise(tile.x, tile.y, 4, 0.5f, 90f, 1) * 5);
|
||||
}
|
||||
|
||||
for(Tile tile : tiles){
|
||||
if(tile.floor().isLiquid) continue;
|
||||
|
||||
int rotation = 0;
|
||||
for(int i = 0; i < 8; i++){
|
||||
Tile other = tiles.get(tile.x + Geometry.d8[i].x, tile.y + Geometry.d8[i].y);
|
||||
if(other != null && other.cost < tile.cost){ //down slope
|
||||
rotation |= (1 << i);
|
||||
}
|
||||
}
|
||||
|
||||
tile.data = (byte)rotation;
|
||||
}
|
||||
|
||||
for(Tile tile : tiles){
|
||||
if(tile.data != 0){
|
||||
int rotation = tile.data;
|
||||
tile.setBlock(Blocks.cliff);
|
||||
tile.setOverlay(Blocks.air);
|
||||
tile.data = (byte)rotation;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void cliffs(){
|
||||
for(Tile tile : tiles){
|
||||
if(!tile.block().isStatic()) continue;
|
||||
|
||||
int rotation = 0;
|
||||
for(int i = 0; i < 8; i++){
|
||||
Tile other = tiles.get(tile.x + Geometry.d8[i].x, tile.y + Geometry.d8[i].y);
|
||||
if(other != null && !other.block().isStatic()){
|
||||
rotation |= (1 << i);
|
||||
}
|
||||
}
|
||||
|
||||
if(rotation != 0){
|
||||
tile.setBlock(Blocks.cliff);
|
||||
}
|
||||
|
||||
tile.data = (byte)rotation;
|
||||
}
|
||||
|
||||
for(Tile tile : tiles){
|
||||
if(tile.block() != Blocks.cliff && tile.block().isStatic()){
|
||||
tile.setBlock(Blocks.air);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void median(int radius){
|
||||
median(radius, 0.5);
|
||||
}
|
||||
@@ -336,13 +279,13 @@ public abstract class BasicGenerator implements WorldGenerator{
|
||||
while(!arr.isEmpty()){
|
||||
int i = arr.pop();
|
||||
int x = Point2.x(i), y = Point2.y(i);
|
||||
tiles.getn(x, y).cost = 2;
|
||||
tiles.getn(x, y).data = 2;
|
||||
for(Point2 point : Geometry.d4){
|
||||
int newx = x + point.x, newy = y + point.y;
|
||||
if(tiles.in(newx, newy)){
|
||||
Tile child = tiles.getn(newx, newy);
|
||||
if(child.block() == Blocks.air && child.cost != 2){
|
||||
child.cost = 2;
|
||||
if(child.block() == Blocks.air && child.data != 2){
|
||||
child.data = 2;
|
||||
arr.add(child.pos());
|
||||
}
|
||||
}
|
||||
@@ -350,7 +293,7 @@ public abstract class BasicGenerator implements WorldGenerator{
|
||||
}
|
||||
|
||||
for(Tile tile : tiles){
|
||||
if(tile.cost != 2 && tile.block() == Blocks.air){
|
||||
if(tile.data != 2 && tile.block() == Blocks.air){
|
||||
tile.setBlock(tile.floor().wall);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user