diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index a77a141be8..a8ebbbfc53 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -817,6 +817,7 @@ rules.reactorexplosions = Reactor Explosions rules.wavetimer = Wave Timer rules.waves = Waves rules.attack = Attack Mode +rules.buildai = AI Building rules.enemyCheat = Infinite AI (Red Team) Resources rules.blockhealthmultiplier = Block Health Multiplier rules.blockdamagemultiplier = Block Damage Multiplier diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 550a4812df..93c0f45a8b 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -35,7 +35,7 @@ public class Blocks implements ContentList{ //environment air, spawn, cliff, deepwater, water, taintedWater, tar, slag, stone, craters, charr, sand, darksand, dirt, ice, snow, darksandTaintedWater, - dacite, stoneWall, dirtWall, sporeWall, iceWall, daciteWall, cliffs, sporePine, snowPine, pine, shrubs, whiteTree, whiteTreeDead, sporeCluster, + dacite, stoneWall, dirtWall, sporeWall, iceWall, daciteWall, sporePine, snowPine, pine, shrubs, whiteTree, whiteTreeDead, sporeCluster, iceSnow, sandWater, darksandWater, duneWall, sandWall, moss, sporeMoss, shale, shaleWall, shaleBoulder, sandBoulder, daciteBoulder, grass, salt, metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor5, basalt, magmarock, hotrock, snowWall, boulder, snowBoulder, saltWall, darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6, darkMetal, diff --git a/core/src/mindustry/content/Weathers.java b/core/src/mindustry/content/Weathers.java index 56f39995a8..40cdb30c7e 100644 --- a/core/src/mindustry/content/Weathers.java +++ b/core/src/mindustry/content/Weathers.java @@ -206,7 +206,7 @@ public class Weathers implements ContentList{ float scale = 1f / 2000f; float scroll = Time.time() * scale; - Tmp.tr1.setTexture(noise); + Tmp.tr1.texture = noise; Core.camera.bounds(Tmp.r1); Tmp.tr1.set(Tmp.r1.x*scale, Tmp.r1.y*scale, (Tmp.r1.x + Tmp.r1.width)*scale, (Tmp.r1.y + Tmp.r1.height)*scale); Tmp.tr1.scroll(-xspeed * scroll, -yspeed * scroll); @@ -287,7 +287,7 @@ public class Weathers implements ContentList{ float scale = 1f / 2000f; float scroll = Time.time() * scale; - Tmp.tr1.setTexture(noise); + Tmp.tr1.texture = noise; Core.camera.bounds(Tmp.r1); Tmp.tr1.set(Tmp.r1.x*scale, Tmp.r1.y*scale, (Tmp.r1.x + Tmp.r1.width)*scale, (Tmp.r1.y + Tmp.r1.height)*scale); Tmp.tr1.scroll(-xspeed * scroll, -yspeed * scroll); diff --git a/core/src/mindustry/editor/MapRenderer.java b/core/src/mindustry/editor/MapRenderer.java index e3677a1ced..0976ccbcb2 100644 --- a/core/src/mindustry/editor/MapRenderer.java +++ b/core/src/mindustry/editor/MapRenderer.java @@ -24,7 +24,7 @@ public class MapRenderer implements Disposable{ public MapRenderer(MapEditor editor){ this.editor = editor; - this.texture = Core.atlas.find("clear-editor").getTexture(); + this.texture = Core.atlas.find("clear-editor").texture; } public void resize(int width, int height){ diff --git a/core/src/mindustry/editor/WaveGraph.java b/core/src/mindustry/editor/WaveGraph.java index f71a5e6f7d..14b2416085 100644 --- a/core/src/mindustry/editor/WaveGraph.java +++ b/core/src/mindustry/editor/WaveGraph.java @@ -32,7 +32,6 @@ public class WaveGraph extends Table{ rect((x, y, width, height) -> { Lines.stroke(Scl.scl(3f)); - Lines.precise(true); GlyphLayout lay = Pools.obtain(GlyphLayout.class, GlyphLayout::new); Font font = Fonts.outline; @@ -122,7 +121,6 @@ public class WaveGraph extends Table{ Pools.free(lay); - Lines.precise(false); Draw.reset(); }).pad(4).padBottom(10).grow(); diff --git a/core/src/mindustry/entities/bullet/LaserBulletType.java b/core/src/mindustry/entities/bullet/LaserBulletType.java index 5fd96f6cc6..35745d6b34 100644 --- a/core/src/mindustry/entities/bullet/LaserBulletType.java +++ b/core/src/mindustry/entities/bullet/LaserBulletType.java @@ -61,7 +61,6 @@ public class LaserBulletType extends BulletType{ float compound = 1f; Lines.lineAngle(b.x, b.y, b.rotation(), baseLen); - Lines.precise(true); for(Color color : colors){ Draw.color(color); Lines.stroke((cwidth *= lengthFalloff) * b.fout()); @@ -76,7 +75,6 @@ public class LaserBulletType extends BulletType{ compound *= lengthFalloff; } - Lines.precise(false); Draw.reset(); Tmp.v1.trns(b.rotation(), baseLen * 1.1f); diff --git a/core/src/mindustry/graphics/Drawf.java b/core/src/mindustry/graphics/Drawf.java index 4334dbb852..13c8c87ecb 100644 --- a/core/src/mindustry/graphics/Drawf.java +++ b/core/src/mindustry/graphics/Drawf.java @@ -150,15 +150,14 @@ public class Drawf{ } public static void laser(Team team, TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2, float rotation, float scale){ - Tmp.v1.trns(rotation, 8f * scale * Draw.scl); + float scl = 8f * scale * Draw.scl; + float vx = Mathf.cosDeg(rotation) * scl, vy = Mathf.sinDeg(rotation) * scl; Draw.rect(edge, x, y, edge.width * scale * Draw.scl, edge.height * scale * Draw.scl, rotation + 180); Draw.rect(edge, x2, y2, edge.width * scale * Draw.scl, edge.height * scale * Draw.scl, rotation); Lines.stroke(12f * scale); - Lines.precise(true); - Lines.line(line, x + Tmp.v1.x, y + Tmp.v1.y, x2 - Tmp.v1.x, y2 - Tmp.v1.y, false, 0f); - Lines.precise(false); + Lines.line(line, x + vx, y + vy, x2 - vx, y2 - vy, false); Lines.stroke(1f); light(team, x, y, x2, y2); diff --git a/core/src/mindustry/graphics/LightRenderer.java b/core/src/mindustry/graphics/LightRenderer.java index 43be53bd9d..fbe154a6b9 100644 --- a/core/src/mindustry/graphics/LightRenderer.java +++ b/core/src/mindustry/graphics/LightRenderer.java @@ -98,7 +98,7 @@ public class LightRenderer{ vertices[22] = v; vertices[23] = 0; - Draw.vert(ledge.getTexture(), vertices, 0, vertices.length); + Draw.vert(ledge.texture, vertices, 0, vertices.length); Vec2 v3 = Tmp.v2.trnsExact(rot, stroke); @@ -136,7 +136,7 @@ public class LightRenderer{ vertices[22] = v; vertices[23] = 0; - Draw.vert(ledge.getTexture(), vertices, 0, vertices.length); + Draw.vert(ledge.texture, vertices, 0, vertices.length); vertices[0] = lx2; vertices[1] = ly2; @@ -166,7 +166,7 @@ public class LightRenderer{ vertices[22] = v; vertices[23] = 0; - Draw.vert(ledge.getTexture(), vertices, 0, vertices.length); + Draw.vert(ledge.texture, vertices, 0, vertices.length); }); } diff --git a/core/src/mindustry/graphics/LoadRenderer.java b/core/src/mindustry/graphics/LoadRenderer.java index 295205a13d..35674837d6 100644 --- a/core/src/mindustry/graphics/LoadRenderer.java +++ b/core/src/mindustry/graphics/LoadRenderer.java @@ -98,7 +98,6 @@ public class LoadRenderer implements Disposable{ float w = Core.graphics.getWidth(), h = Core.graphics.getHeight(), s = Scl.scl(); //s = 2f; - Lines.precise(true); Draw.proj().setOrtho(0, 0, Core.graphics.getWidth(), Core.graphics.getHeight()); @@ -467,7 +466,6 @@ public class LoadRenderer implements Disposable{ font.draw(red + "[[[[ " + key + " ]]\n"+orange+"<" + Version.modifier + " " + (Version.build == 0 ? " [init]" : Version.build == -1 ? " custom" : " " + Version.build) + ">", w/2f, h/2f + 110*s, Align.center); } - Lines.precise(false); Draw.flush(); fx.end(); diff --git a/core/src/mindustry/graphics/Shaders.java b/core/src/mindustry/graphics/Shaders.java index fead35aa19..a0486fe0e3 100644 --- a/core/src/mindustry/graphics/Shaders.java +++ b/core/src/mindustry/graphics/Shaders.java @@ -154,7 +154,7 @@ public class Shaders{ setUniformf("u_progress", progress); setUniformf("u_uv", region.u, region.v); setUniformf("u_uv2", region.u2, region.v2); - setUniformf("u_texsize", region.getTexture().getWidth(), region.getTexture().height); + setUniformf("u_texsize", region.texture.getWidth(), region.texture.height); } } @@ -174,7 +174,7 @@ public class Shaders{ setUniformf("u_uv", region.u, region.v); setUniformf("u_uv2", region.u2, region.v2); setUniformf("u_time", Time.time()); - setUniformf("u_texsize", region.getTexture().getWidth(), region.getTexture().height); + setUniformf("u_texsize", region.texture.getWidth(), region.texture.height); } } diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index 6fb8b32f4f..42035abf4f 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -192,10 +192,10 @@ public class Mods implements Loadable{ private PageType getPage(AtlasRegion region){ return - region.getTexture() == Core.atlas.find("white").getTexture() ? PageType.main : - region.getTexture() == Core.atlas.find("stone1").getTexture() ? PageType.environment : - region.getTexture() == Core.atlas.find("clear-editor").getTexture() ? PageType.editor : - region.getTexture() == Core.atlas.find("whiteui").getTexture() ? PageType.ui : + region.texture == Core.atlas.find("white").texture ? PageType.main : + region.texture == Core.atlas.find("stone1").texture ? PageType.environment : + region.texture == Core.atlas.find("clear-editor").texture ? PageType.editor : + region.texture == Core.atlas.find("whiteui").texture ? PageType.ui : PageType.main; } diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 3bc958b625..9b8b7f2312 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -587,10 +587,10 @@ public class UnitType extends UnlockableContent{ Draw.rect(footRegion, leg.base.x, leg.base.y, position.angleTo(leg.base)); Lines.stroke(legRegion.height * Draw.scl * flips); - Lines.line(legRegion, position.x, position.y, leg.joint.x, leg.joint.y, false, 0); + Lines.line(legRegion, position.x, position.y, leg.joint.x, leg.joint.y, false); Lines.stroke(legBaseRegion.height * Draw.scl * flips); - Lines.line(legBaseRegion, leg.joint.x + Tmp.v1.x, leg.joint.y + Tmp.v1.y, leg.base.x, leg.base.y, false, 0); + Lines.line(legBaseRegion, leg.joint.x + Tmp.v1.x, leg.joint.y + Tmp.v1.y, leg.base.x, leg.base.y, false); if(jointRegion.found()){ Draw.rect(jointRegion, leg.joint.x, leg.joint.y); diff --git a/core/src/mindustry/ui/Fonts.java b/core/src/mindustry/ui/Fonts.java index 9fe58cfe12..cdf35ab3c3 100644 --- a/core/src/mindustry/ui/Fonts.java +++ b/core/src/mindustry/ui/Fonts.java @@ -72,7 +72,7 @@ public class Fonts{ public static void loadContentIcons(){ Seq fonts = Seq.with(Fonts.chat, Fonts.def, Fonts.outline); - Texture uitex = Core.atlas.find("logo").getTexture(); + Texture uitex = Core.atlas.find("logo").texture; int size = (int)(Fonts.def.getData().lineHeight/Fonts.def.getData().scaleY); try(Scanner scan = new Scanner(Core.files.internal("icons/icons.properties").read(512))){ @@ -84,7 +84,7 @@ public class Fonts{ int ch = Integer.parseInt(character); TextureRegion region = Core.atlas.find(texture); - if(region.getTexture() != uitex){ + if(region.texture != uitex){ continue; //throw new IllegalArgumentException("Font icon '" + texture + "' is not in the UI texture."); } @@ -160,21 +160,21 @@ public class Fonts{ //grab all textures from the ui page, remove all the regions assigned to it, then copy them over to Fonts.packer and replace the texture in this atlas. //grab old UI texture and regions... - Texture texture = atlas.find("logo").getTexture(); + Texture texture = atlas.find("logo").texture; Page page = UI.packer.getPages().first(); - Seq regions = atlas.getRegions().select(t -> t.getTexture() == texture); + Seq regions = atlas.getRegions().select(t -> t.texture == texture); for(AtlasRegion region : regions){ //get new pack rect page.setDirty(false); Rect rect = UI.packer.pack(region.name + (region.splits != null ? ".9" : ""), atlas.getPixmap(region)); //set new texture - region.setTexture(UI.packer.getPages().first().getTexture()); + region.texture = UI.packer.getPages().first().getTexture(); //set its new position region.set((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height); //add old texture - atlas.getTextures().add(region.getTexture()); + atlas.getTextures().add(region.texture); } //remove old texture, it will no longer be used @@ -191,7 +191,7 @@ public class Fonts{ if(g == null) throw new IllegalArgumentException("No glyph: " + glyph + " (" + (int)glyph + ")"); float size = Math.max(g.width, g.height); - TextureRegionDrawable draw = new TextureRegionDrawable(new TextureRegion(font.getRegion().getTexture(), g.u, g.v2, g.u2, g.v)){ + TextureRegionDrawable draw = new TextureRegionDrawable(new TextureRegion(font.getRegion().texture, g.u, g.v2, g.u2, g.v)){ @Override public void draw(float x, float y, float width, float height){ Draw.color(Tmp.c1.set(tint).mul(Draw.getColor()).toFloatBits()); diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 54be2f89ec..8bf500205b 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -160,6 +160,7 @@ public class CustomRulesDialog extends BaseDialog{ title("@rules.title.enemy"); check("@rules.attack", b -> rules.attackMode = b, () -> rules.attackMode); + check("@rules.buildai", b -> rules.waveTeam.rules().ai = b, () -> rules.waveTeam.rules().ai); number("@rules.enemycorebuildradius", f -> rules.enemyCoreBuildRadius = f * tilesize, () -> Math.min(rules.enemyCoreBuildRadius / tilesize, 200)); title("@rules.title.environment"); diff --git a/core/src/mindustry/ui/dialogs/LoadDialog.java b/core/src/mindustry/ui/dialogs/LoadDialog.java index 2d3f653fab..6e2e56e2d8 100644 --- a/core/src/mindustry/ui/dialogs/LoadDialog.java +++ b/core/src/mindustry/ui/dialogs/LoadDialog.java @@ -104,7 +104,7 @@ public class LoadDialog extends BaseDialog{ button.left().add(new BorderImage(def, 4f)).update(im -> { TextureRegionDrawable draw = (TextureRegionDrawable)im.getDrawable(); - if(draw.getRegion().getTexture().isDisposed()){ + if(draw.getRegion().texture.isDisposed()){ draw.setRegion(def); } diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 67d3b7d67a..01b700ddc9 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -673,7 +673,7 @@ public class Block extends UnlockableContent{ public void load(){ region = Core.atlas.find(name); - if(cracks == null || (cracks[0][0].getTexture() != null && cracks[0][0].getTexture().isDisposed())){ + if(cracks == null || (cracks[0][0].texture != null && cracks[0][0].texture.isDisposed())){ cracks = new TextureRegion[maxCrackSize][crackRegions]; for(int size = 1; size <= maxCrackSize; size++){ for(int i = 0; i < crackRegions; i++){ diff --git a/core/src/mindustry/world/blocks/distribution/ExtendingItemBridge.java b/core/src/mindustry/world/blocks/distribution/ExtendingItemBridge.java index c4829e3f90..823e390e69 100644 --- a/core/src/mindustry/world/blocks/distribution/ExtendingItemBridge.java +++ b/core/src/mindustry/world/blocks/distribution/ExtendingItemBridge.java @@ -45,7 +45,7 @@ public class ExtendingItemBridge extends ItemBridge{ x + Geometry.d4[i].x * tilesize / 2f, y + Geometry.d4[i].y * tilesize / 2f, x + ex, - y + ey, false, 0f); + y + ey, false); Draw.rect(endRegion, x, y, i * 90 + 90); Draw.rect(endRegion, diff --git a/core/src/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/mindustry/world/blocks/distribution/ItemBridge.java index ba70c0fc2f..f188d0e902 100644 --- a/core/src/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/mindustry/world/blocks/distribution/ItemBridge.java @@ -61,11 +61,17 @@ public class ItemBridge extends Block{ if(otherReq == null) return; Lines.stroke(8f); - Lines.line(bridgeRegion, - req.drawx(), - req.drawy(), - otherReq.drawx(), - otherReq.drawy(), false, -tilesize / 2f); + + Tmp.v1.set(otherReq.drawx(), otherReq.drawx()).sub(req.drawx(), req.drawy()).setLength(-tilesize/2f); + + Lines.line( + bridgeRegion, + req.drawx() + Tmp.v1.x, + req.drawy() + Tmp.v1.y, + otherReq.drawx() - Tmp.v1.x, + otherReq.drawy() - Tmp.v1.y, false + ); + Draw.rect(arrowRegion, (req.drawx() + otherReq.drawx()) / 2f, (req.drawy() + otherReq.drawy()) / 2f, Angles.angle(req.drawx(), req.drawy(), otherReq.drawx(), otherReq.drawy())); } @@ -296,11 +302,14 @@ public class ItemBridge extends Block{ Draw.rect(endRegion, other.drawx(), other.drawy(), i * 90 + 270); Lines.stroke(8f); + + Tmp.v1.set(x, y).sub(other.worldx(), other.worldy()).setLength(-tilesize/2f); + Lines.line(bridgeRegion, - x, - y, - other.worldx(), - other.worldy(), false, -tilesize / 2f); + x + Tmp.v1.x, + y + Tmp.v1.y, + other.worldx() - Tmp.v1.x, + other.worldy() - Tmp.v1.y, false); int dist = Math.max(Math.abs(other.x - tile.x), Math.abs(other.y - tile.y)); diff --git a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java index 09a25ee3e0..6d1e765fa6 100644 --- a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java @@ -274,7 +274,7 @@ public class PayloadConveyor extends Block{ boolean overlaps = Intersector.intersectRectangles(bounds, sprite, over); TextureRegion out = Tmp.tr1; - out.set(region.getTexture()); + out.set(region.texture); if(overlaps){ float w = region.u2 - region.u; diff --git a/core/src/mindustry/world/blocks/logic/LogicDisplay.java b/core/src/mindustry/world/blocks/logic/LogicDisplay.java index 257f78fe0c..9a6592ea36 100644 --- a/core/src/mindustry/world/blocks/logic/LogicDisplay.java +++ b/core/src/mindustry/world/blocks/logic/LogicDisplay.java @@ -67,7 +67,6 @@ public class LogicDisplay extends Block{ buffer.begin(); Draw.color(color); Lines.stroke(stroke); - Lines.precise(true); while(!commands.isEmpty()){ long c = commands.removeFirst(); @@ -88,8 +87,6 @@ public class LogicDisplay extends Block{ } } - Lines.precise(false); - buffer.end(); Draw.proj(Tmp.m1); Draw.reset(); diff --git a/core/src/mindustry/world/blocks/power/PowerNode.java b/core/src/mindustry/world/blocks/power/PowerNode.java index cedbd6135b..f4d6799b88 100644 --- a/core/src/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/mindustry/world/blocks/power/PowerNode.java @@ -145,22 +145,19 @@ public class PowerNode extends PowerBlock{ Draw.reset(); } - protected void drawLaser(Team team, float x1, float y1, float x2, float y2, float satisfaction, int size1, int size2){ - float angle1 = Angles.angle(x1, y1, x2, y2); - t1.trns(angle1, size1 * tilesize / 2f - 1.5f); - t2.trns(angle1 + 180f, size2 * tilesize / 2f - 1.5f); - - x1 += t1.x; - y1 += t1.y; - x2 += t2.x; - y2 += t2.y; - + protected void setupColor(float satisfaction){ float fract = 1f - satisfaction; Draw.color(laserColor1, laserColor2, fract * 0.86f + Mathf.absin(3f, 0.1f)); Draw.alpha(renderer.laserOpacity); - Drawf.laser(team, laser, laserEnd, x1, y1, x2, y2, 0.25f); - Draw.color(); + } + + protected void drawLaser(Team team, float x1, float y1, float x2, float y2, int size1, int size2){ + float angle1 = Angles.angle(x1, y1, x2, y2); + float vx = Mathf.cosDeg(angle1), vy = Mathf.sinDeg(angle1); + float len1 = size1 * tilesize / 2f - 1.5f, len2 = size2 * tilesize / 2f - 1.5f; + + Drawf.laser(team, laser, laserEnd, x1 + vx*len1, y1 + vy*len1, x2 - vx*len2, y2 - vy*len2, 0.25f); } protected boolean overlaps(float srcx, float srcy, Tile other, float range){ @@ -214,6 +211,7 @@ public class PowerNode extends PowerBlock{ @Override public void drawRequestConfigTop(BuildPlan req, Eachable list){ if(req.config instanceof Point2[]){ + setupColor(1f); for(Point2 point : (Point2[])req.config){ otherReq = null; list.each(other -> { @@ -224,8 +222,9 @@ public class PowerNode extends PowerBlock{ if(otherReq == null || otherReq.block == null) return; - drawLaser(player.team(), req.drawx(), req.drawy(), otherReq.drawx(), otherReq.drawy(), 1f, size, otherReq.block.size); + drawLaser(player.team(), req.drawx(), req.drawy(), otherReq.drawx(), otherReq.drawy(), size, otherReq.block.size); } + Draw.color(); } } @@ -386,6 +385,7 @@ public class PowerNode extends PowerBlock{ if(Mathf.zero(renderer.laserOpacity)) return; Draw.z(Layer.power); + setupColor(power.graph.getSatisfaction()); for(int i = 0; i < power.links.size; i++){ Building link = world.build(power.links.get(i)); @@ -394,7 +394,7 @@ public class PowerNode extends PowerBlock{ if(link.block instanceof PowerNode && !(link.pos() < tile.pos())) continue; - drawLaserTo(link); + drawLaser(team, x, y, link.x, link.y, size, link.block.size); } Draw.reset(); @@ -404,10 +404,6 @@ public class PowerNode extends PowerBlock{ return power.links.contains(other.pos()); } - protected void drawLaserTo(Building target){ - drawLaser(team, x, y, target.x, target.y, power.graph.getSatisfaction(), size, target.block.size); - } - @Override public Point2[] config(){ Point2[] out = new Point2[power.links.size];