diff --git a/core/src/io/anuke/mindustry/maps/generation/FortressGenerator.java b/core/src/io/anuke/mindustry/maps/generation/FortressGenerator.java index 8ed3fe3301..3f101ab203 100644 --- a/core/src/io/anuke/mindustry/maps/generation/FortressGenerator.java +++ b/core/src/io/anuke/mindustry/maps/generation/FortressGenerator.java @@ -1,15 +1,19 @@ package io.anuke.mindustry.maps.generation; +import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Predicate; +import io.anuke.mindustry.content.Items; import io.anuke.mindustry.content.blocks.StorageBlocks; import io.anuke.mindustry.game.Team; +import io.anuke.mindustry.type.AmmoType; +import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.production.Drill; -import io.anuke.mindustry.world.consumers.ConsumePower; +import io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret; +import io.anuke.mindustry.world.blocks.defense.turrets.PowerTurret; public class FortressGenerator{ - private final static int minCoreDst = 60; + private final static int coreDst = 60; private int enemyX, enemyY, coreX, coreY; private Team team; @@ -28,17 +32,31 @@ public class FortressGenerator{ void gen(){ gen.tiles[enemyX][enemyY].setBlock(StorageBlocks.core, team); + Item[] acceptedItems = {Items.copper, Items.densealloy, Items.silicon, Items.thorium}; - Array drills = find(b -> b instanceof Drill && !b.consumes.has(ConsumePower.class)); + Array turrets = find(b -> (b instanceof ItemTurret && accepts(((ItemTurret) b).getAmmoTypes(), acceptedItems) || b instanceof PowerTurret)); for(int x = 0; x < gen.width; x++){ for(int y = 0; y < gen.height; y++){ - //TODO place valid drills + if(Vector2.dst(x, y, enemyX, enemyY) > coreDst){ + continue; + } } } } + boolean accepts(AmmoType[] types, Item[] items){ + for(AmmoType type : types){ + for(Item item : items){ + if(type.item == item){ + return true; + } + } + } + return false; + } + Array find(Predicate pred){ Array out = new Array<>(); for(Block block : Block.all()){ diff --git a/core/src/io/anuke/mindustry/maps/generation/Generation.java b/core/src/io/anuke/mindustry/maps/generation/Generation.java index 7000613559..aa7535279d 100644 --- a/core/src/io/anuke/mindustry/maps/generation/Generation.java +++ b/core/src/io/anuke/mindustry/maps/generation/Generation.java @@ -35,7 +35,15 @@ public class Generation{ int worldx = dx + offsetx + x; int worldy = dy + offsety + y; if(!Mathf.inBounds(worldx, worldy, tiles)){ - continue; + return null; + } + + if(!block.isValid(tiles[worldx][worldy])) continue; + + Item drop = tiles[worldx][worldy].floor().drops.item; + + if(result == null || drop.id < result.id){ + result = drop; } } @@ -46,6 +54,8 @@ public class Generation{ } } + + public boolean canPlace(int x, int y, Block block){ if(block.isMultiblock()){ int offsetx = -(block.size - 1) / 2; diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java index c98d273eed..7d9a943e31 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java @@ -233,7 +233,7 @@ public class Drill extends Block{ return tile.floor().drops.item; } - protected boolean isValid(Tile tile){ + public boolean isValid(Tile tile){ if(tile == null) return false; ItemStack drops = tile.floor().drops; return drops != null && drops.item.hardness <= tier;