From ac9e77479588754a8793fa933577e462cdae8ce3 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 31 Aug 2018 00:02:38 -0400 Subject: [PATCH] Added basic turret blob structures --- .../sprites/blocks/turrets/turrets/fuse.png | Bin 714 -> 715 bytes .../content/blocks/DefenseBlocks.java | 11 +- .../io/anuke/mindustry/entities/Player.java | 2 +- .../maps/generation/FortressGenerator.java | 94 ++++++++++++++++-- .../mindustry/maps/generation/Generation.java | 7 ++ 5 files changed, 93 insertions(+), 21 deletions(-) diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/fuse.png b/core/assets-raw/sprites/blocks/turrets/turrets/fuse.png index 2c1946a064663dd06997fd2643f0e58dcfd9ca99..a204f941ad75920e9e80dc0398abfb9dcab9a483 100644 GIT binary patch delta 662 zcmX@bdYW~DW4%1Htorw&YJLU=rYuhv#}JR>Q^O21gcC*nz1!ernQ>IDK&1WH=_>II zF~R8q95)tj?Y_zD7At z1v%UdA3k0dWH4Y@bNekLL)2S7h6hiM)vByYRaup4+Q>0)<&%hIlaiG@SKmE&D{Ef- z@*wXy5$7g*mKbWhz5CSpbVz+s&hZyNo34j_wp&zx%4yl8&rds5tQyt1Bh4~;4Bqq` zzUi+l2>Cy`RcEn`VZVn{s@K7|%tx=wSKod3_GWCngU-x(c@;nYKHbg6(0ok8p=iT= zu7>=j=NTD3pWe)PVOjN>xp@@_xwi427jS!YLrmtj)9SkquXa3WKE}~}jN@teulkb3 zdw*Bnbq}if*R5W;lyiOB?+-ld?PES4y~NDMA#~N~zP?fC4WZD}ArI!~KV96uXNOVy z(W#dAZG$31<`kWqyUrdAU8YztNo#9&jE(N{mvY%vb87va=RTVrAlkZ?vuGJtjTEQn z%xkS~^}kkG3K-6u5XL&QKaMG+l5u9&)DFi*?kNSoVyC*hPmYhy_?0xFBEDvUMP)sM agjW6fH~hi=n;94w7(8A5T-G@yGywoQ%RFxY delta 661 zcmX@jdWv;|W4(;1iSj=8fQt+aOqrf8jv*e$r-s>P2q#L^?Mo1~%y131@M=Hyx=K7l zypX%m$$HDKh_@FUId@3pX?zh|t|urHB-_l#mlPu}M&7ZD04=#m=wnF}J|RD%sL^@&5&N9a_S7o2@I$W!&Jy z%<$o9wj_fE!@az628OS0!VDL7{bl%=#P>1jT)cyt|FdA5nf`^5OYUVP<(lfg6YjKB zTyt!tlA)-}_meeU`Ps7d;uX23Z-st6*YTgDBc%N4U&?^f~P$Hde~YoCtN zCsqE8X0g0E@kCnod!Bsz`vr+FS#6mv1 zeRbe+fc>2O$=kQ~-ROBTr>wCRL z4U?Od-M%fobV7dN)3BMWM=Nu*x=$!nx;;sCkK^xJeE7 turrets = find(b -> (b instanceof ItemTurret && accepts(((ItemTurret) b).getAmmoTypes(), acceptedItems) || b instanceof PowerTurret)); + float difficultyScl = Mathf.clamp(gen.sector.difficulty / 25f + Mathf.range(1f/2f), 0f, 0.9999f); + Array turrets = find(b -> (b instanceof ItemTurret && accepts(((ItemTurret) b).getAmmoTypes(), Items.copper) || b instanceof PowerTurret)); + Array drills = find(b -> b instanceof Drill && !b.consumes.has(ConsumePower.class)); + Array gens = find(b -> b instanceof SolarGenerator); + Array walls = find(b -> b instanceof Wall && !(b instanceof Door) && b.size == 1); + + Block wall = walls.get((int)(difficultyScl * walls.size)); + Drill drill = (Drill) drills.get((int)(difficultyScl * drills.size)); + + //place down drills for(int x = 0; x < gen.width; x++){ for(int y = 0; y < gen.height; y++){ if(Vector2.dst(x, y, enemyX, enemyY) > coreDst){ continue; } - Block turret = turrets.first(); + Item item = gen.drillItem(x, y, drill); - if(gen.random.chance(0.01) && gen.canPlace(x, y, turret)){ + if(item != null && item == Items.copper && gen.canPlace(x, y, drill)){ + gen.setBlock(x, y, drill, team); + } + } + } + + Turret turret = (Turret) turrets.first(); + + //place down turrets + for(int x = 0; x < gen.width; x++){ + for(int y = 0; y < gen.height; y++){ + if(Vector2.dst(x, y, enemyX, enemyY) > coreDst + 4 || !gen.canPlace(x, y, turret)){ + continue; + } + + boolean found = false; + + for(GridPoint2 point : Edges.getEdges(turret.size)){ + Tile tile = gen.tile(x + point.x, y + point.y); + + if(tile != null){ + tile = tile.target(); + + if(turret instanceof PowerTurret && tile.target().block() instanceof PowerGenerator){ + found = true; + break; + }else if(turret instanceof ItemTurret && tile.block() instanceof Drill && accepts(((ItemTurret) turret).getAmmoTypes(), gen.drillItem(tile.x, tile.y, (Drill) tile.block()))){ + found = true; + break; + } + } + } + + if(found){ gen.setBlock(x, y, turret, team); } } } + //place down drills + for(int x = 0; x < gen.width; x++){ + for(int y = 0; y < gen.height; y++){ + if(Vector2.dst(x, y, enemyX, enemyY) > coreDst || !gen.canPlace(x, y, wall)){ + continue; + } + + boolean found = false; + for(GridPoint2 point : Edges.getEdges(wall.size)){ + Tile tile = gen.tile(x + point.x, y + point.y); + if(tile != null){ + tile = tile.target(); + if(tile.getTeamID() == team.ordinal() && !(tile.block() instanceof Wall)){ + found = true; + break; + } + } + } + if(found){ + gen.setBlock(x, y, wall, team); + } + } + } + } - boolean accepts(AmmoType[] types, Item[] items){ + boolean accepts(AmmoType[] types, Item item){ for(AmmoType type : types){ - for(Item item : items){ - if(type.item == item){ - return true; - } + if(type.item == item){ + return true; } } return false; diff --git a/core/src/io/anuke/mindustry/maps/generation/Generation.java b/core/src/io/anuke/mindustry/maps/generation/Generation.java index aa7535279d..5677d57f86 100644 --- a/core/src/io/anuke/mindustry/maps/generation/Generation.java +++ b/core/src/io/anuke/mindustry/maps/generation/Generation.java @@ -23,6 +23,13 @@ public class Generation{ this.random = random; } + Tile tile(int x, int y){ + if(!Mathf.inBounds(x, y, tiles)){ + return null; + } + return tiles[x][y]; + } + //TODO implement Item drillItem(int x, int y, Drill block){ if(block.isMultiblock()){