From 6034b5ec79cb4d00e69c1ffaafd315b5a5ff01df Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 3 Jan 2018 13:53:50 -0500 Subject: [PATCH] Implemented new enemy system (largely untested) --- .../{enemy-t1.png => standardenemy-t1.png} | Bin .../{enemy-t2.png => standardenemy-t2.png} | Bin .../{enemy-t3.png => standardenemy-t3.png} | Bin core/assets/sprites/sprites.atlas | 152 ++++----- core/assets/sprites/sprites.png | Bin 81736 -> 81702 bytes core/src/Mindustry.gwt.xml | 2 - core/src/io/anuke/mindustry/ai/Pathfind.java | 44 +-- core/src/io/anuke/mindustry/core/Control.java | 30 +- .../anuke/mindustry/entities/EnemySpawn.java | 10 +- .../anuke/mindustry/entities/WaveCreator.java | 106 ++---- .../entities/enemies/BlastEnemy.java | 52 --- .../mindustry/entities/enemies/EmpEnemy.java | 19 -- .../mindustry/entities/enemies/Enemy.java | 302 ++++-------------- .../mindustry/entities/enemies/EnemyType.java | 230 +++++++++++++ .../entities/enemies/EnemyTypes.java | 32 ++ .../mindustry/entities/enemies/FastEnemy.java | 15 - .../entities/enemies/FortressEnemy.java | 62 ---- .../entities/enemies/HealerEnemy.java | 91 ------ .../entities/enemies/RapidEnemy.java | 21 -- .../mindustry/entities/enemies/TankEnemy.java | 32 -- .../entities/enemies/TargetEnemy.java | 55 ---- .../mindustry/entities/enemies/TestEnemy.java | 20 -- .../entities/enemies/TitanEnemy.java | 50 --- .../entities/enemies/flying/FlyingEnemy.java | 11 - .../entities/enemies/types/BlastEnemy.java | 56 ++++ .../entities/enemies/types/EmpEnemy.java | 19 ++ .../entities/enemies/types/FastEnemy.java | 17 + .../enemies/{ => types}/FlamerEnemy.java | 12 +- .../entities/enemies/types/FortressEnemy.java | 61 ++++ .../entities/enemies/types/HealerEnemy.java | 91 ++++++ .../enemies/{ => types}/MortarEnemy.java | 10 +- .../entities/enemies/types/RapidEnemy.java | 21 ++ .../entities/enemies/types/StandardEnemy.java | 10 + .../entities/enemies/types/TankEnemy.java | 33 ++ .../entities/enemies/types/TargetEnemy.java | 58 ++++ .../entities/enemies/types/TitanEnemy.java | 47 +++ core/src/io/anuke/mindustry/io/NetworkIO.java | 59 ++-- .../anuke/mindustry/io/SaveFileVersion.java | 24 -- .../anuke/mindustry/io/versions/Save12.java | 29 +- .../anuke/mindustry/io/versions/Save13.java | 30 +- .../anuke/mindustry/io/versions/Save14.java | 29 +- .../io/anuke/mindustry/net/Registrator.java | 14 +- .../io/anuke/mindustry/world/BlockLoader.java | 4 - .../io/anuke/mindustry/world/Generator.java | 6 +- .../world/blocks/types/defense/Turret.java | 12 +- 45 files changed, 936 insertions(+), 1042 deletions(-) rename core/assets-raw/sprites/enemies/{enemy-t1.png => standardenemy-t1.png} (100%) rename core/assets-raw/sprites/enemies/{enemy-t2.png => standardenemy-t2.png} (100%) rename core/assets-raw/sprites/enemies/{enemy-t3.png => standardenemy-t3.png} (100%) delete mode 100644 core/src/io/anuke/mindustry/entities/enemies/BlastEnemy.java delete mode 100644 core/src/io/anuke/mindustry/entities/enemies/EmpEnemy.java create mode 100644 core/src/io/anuke/mindustry/entities/enemies/EnemyType.java create mode 100644 core/src/io/anuke/mindustry/entities/enemies/EnemyTypes.java delete mode 100644 core/src/io/anuke/mindustry/entities/enemies/FastEnemy.java delete mode 100644 core/src/io/anuke/mindustry/entities/enemies/FortressEnemy.java delete mode 100644 core/src/io/anuke/mindustry/entities/enemies/HealerEnemy.java delete mode 100644 core/src/io/anuke/mindustry/entities/enemies/RapidEnemy.java delete mode 100644 core/src/io/anuke/mindustry/entities/enemies/TankEnemy.java delete mode 100644 core/src/io/anuke/mindustry/entities/enemies/TargetEnemy.java delete mode 100644 core/src/io/anuke/mindustry/entities/enemies/TestEnemy.java delete mode 100644 core/src/io/anuke/mindustry/entities/enemies/TitanEnemy.java delete mode 100644 core/src/io/anuke/mindustry/entities/enemies/flying/FlyingEnemy.java create mode 100644 core/src/io/anuke/mindustry/entities/enemies/types/BlastEnemy.java create mode 100644 core/src/io/anuke/mindustry/entities/enemies/types/EmpEnemy.java create mode 100644 core/src/io/anuke/mindustry/entities/enemies/types/FastEnemy.java rename core/src/io/anuke/mindustry/entities/enemies/{ => types}/FlamerEnemy.java (51%) create mode 100644 core/src/io/anuke/mindustry/entities/enemies/types/FortressEnemy.java create mode 100644 core/src/io/anuke/mindustry/entities/enemies/types/HealerEnemy.java rename core/src/io/anuke/mindustry/entities/enemies/{ => types}/MortarEnemy.java (54%) create mode 100644 core/src/io/anuke/mindustry/entities/enemies/types/RapidEnemy.java create mode 100644 core/src/io/anuke/mindustry/entities/enemies/types/StandardEnemy.java create mode 100644 core/src/io/anuke/mindustry/entities/enemies/types/TankEnemy.java create mode 100644 core/src/io/anuke/mindustry/entities/enemies/types/TargetEnemy.java create mode 100644 core/src/io/anuke/mindustry/entities/enemies/types/TitanEnemy.java diff --git a/core/assets-raw/sprites/enemies/enemy-t1.png b/core/assets-raw/sprites/enemies/standardenemy-t1.png similarity index 100% rename from core/assets-raw/sprites/enemies/enemy-t1.png rename to core/assets-raw/sprites/enemies/standardenemy-t1.png diff --git a/core/assets-raw/sprites/enemies/enemy-t2.png b/core/assets-raw/sprites/enemies/standardenemy-t2.png similarity index 100% rename from core/assets-raw/sprites/enemies/enemy-t2.png rename to core/assets-raw/sprites/enemies/standardenemy-t2.png diff --git a/core/assets-raw/sprites/enemies/enemy-t3.png b/core/assets-raw/sprites/enemies/standardenemy-t3.png similarity index 100% rename from core/assets-raw/sprites/enemies/enemy-t3.png rename to core/assets-raw/sprites/enemies/standardenemy-t3.png diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index cdf5dcbd48..facae62515 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -405,7 +405,7 @@ blocks/grassblock2 index: -1 blocks/grassedge rotate: false - xy: 152, 91 + xy: 124, 91 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -433,7 +433,7 @@ blocks/ice3 index: -1 blocks/iceedge rotate: false - xy: 166, 91 + xy: 138, 91 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -538,7 +538,7 @@ blocks/lava index: -1 blocks/lavaedge rotate: false - xy: 95, 75 + xy: 152, 91 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -650,7 +650,7 @@ blocks/oil index: -1 blocks/oiledge rotate: false - xy: 109, 75 + xy: 95, 75 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -839,7 +839,7 @@ blocks/sandblock3 index: -1 blocks/sandedge rotate: false - xy: 95, 47 + xy: 95, 61 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -937,7 +937,7 @@ blocks/snowblock3 index: -1 blocks/snowedge rotate: false - xy: 95, 33 + xy: 95, 47 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -1278,72 +1278,44 @@ enemies/empenemy-t3 orig: 14, 14 offset: 0, 0 index: -1 -enemies/enemy-t1 - rotate: false - xy: 646, 243 - size: 14, 14 - orig: 14, 14 - offset: 0, 0 - index: -1 -enemies/targetenemy-t1 - rotate: false - xy: 646, 243 - size: 14, 14 - orig: 14, 14 - offset: 0, 0 - index: -1 -enemies/enemy-t2 - rotate: false - xy: 124, 91 - size: 12, 12 - orig: 12, 12 - offset: 0, 0 - index: -1 -enemies/enemy-t3 - rotate: false - xy: 138, 91 - size: 12, 12 - orig: 12, 12 - offset: 0, 0 - index: -1 enemies/fastenemy-t1 rotate: false - xy: 718, 297 + xy: 646, 243 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/fastenemy-t2 rotate: false - xy: 495, 120 + xy: 718, 297 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/fastenemy-t3 rotate: false - xy: 492, 104 + xy: 495, 120 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/flamerenemy-t1 rotate: false - xy: 511, 120 + xy: 492, 104 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/flamerenemy-t2 rotate: false - xy: 508, 104 + xy: 511, 120 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/flamerenemy-t3 rotate: false - xy: 519, 208 + xy: 508, 104 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -1371,67 +1343,95 @@ enemies/fortressenemy-t3 index: -1 enemies/healerenemy-t1 rotate: false - xy: 519, 192 + xy: 519, 208 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/healerenemy-t2 rotate: false - xy: 521, 162 + xy: 519, 192 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/healerenemy-t3 rotate: false - xy: 521, 146 + xy: 521, 162 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/mortarenemy-t1 rotate: false - xy: 738, 396 + xy: 738, 412 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/mortarenemy-t2 rotate: false - xy: 754, 414 + xy: 738, 396 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/mortarenemy-t3 rotate: false - xy: 754, 398 + xy: 754, 414 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/rapidenemy-t1 rotate: false - xy: 770, 414 + xy: 754, 398 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/rapidenemy-t2 rotate: false - xy: 770, 398 + xy: 770, 414 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/rapidenemy-t3 + rotate: false + xy: 770, 398 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 +enemies/standardenemy-t1 rotate: false xy: 786, 419 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 +enemies/targetenemy-t1 + rotate: false + xy: 786, 419 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 +enemies/standardenemy-t2 + rotate: false + xy: 109, 61 + size: 12, 12 + orig: 12, 12 + offset: 0, 0 + index: -1 +enemies/standardenemy-t3 + rotate: false + xy: 95, 33 + size: 12, 12 + orig: 12, 12 + offset: 0, 0 + index: -1 enemies/tankenemy-t1 rotate: false xy: 786, 403 @@ -1560,14 +1560,14 @@ laserfull index: -1 mechs/mech-standard rotate: false - xy: 95, 61 + xy: 166, 91 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mechs/ship-standard rotate: false - xy: 109, 61 + xy: 109, 75 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -1715,7 +1715,7 @@ ui/icons/controller-cursor index: -1 ui/icons/icon-add rotate: false - xy: 535, 209 + xy: 521, 146 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -1729,7 +1729,7 @@ ui/icons/icon-areaDelete index: -1 ui/icons/icon-arrow rotate: false - xy: 535, 193 + xy: 535, 209 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -1771,14 +1771,14 @@ ui/icons/icon-back index: -1 ui/icons/icon-cancel rotate: false - xy: 551, 211 + xy: 535, 193 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-check rotate: false - xy: 551, 195 + xy: 551, 211 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -1827,7 +1827,7 @@ ui/icons/icon-defense index: -1 ui/icons/icon-discord rotate: false - xy: 567, 211 + xy: 551, 195 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -1841,28 +1841,28 @@ ui/icons/icon-distribution index: -1 ui/icons/icon-donate rotate: false - xy: 567, 195 + xy: 567, 211 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-dots rotate: false - xy: 583, 213 + xy: 567, 195 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-editor rotate: false - xy: 583, 197 + xy: 583, 213 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-file-text rotate: false - xy: 599, 216 + xy: 583, 197 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -1876,21 +1876,21 @@ ui/icons/icon-fill index: -1 ui/icons/icon-floppy rotate: false - xy: 599, 200 + xy: 599, 216 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-folder rotate: false - xy: 615, 216 + xy: 599, 200 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-folder-parent rotate: false - xy: 615, 200 + xy: 615, 216 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -1918,14 +1918,14 @@ ui/icons/icon-holdDelete index: -1 ui/icons/icon-home rotate: false - xy: 631, 220 + xy: 615, 200 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-host rotate: false - xy: 631, 204 + xy: 631, 220 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -1946,7 +1946,7 @@ ui/icons/icon-line index: -1 ui/icons/icon-load rotate: false - xy: 647, 227 + xy: 631, 204 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -2016,7 +2016,7 @@ ui/icons/icon-play index: -1 ui/icons/icon-play-2 rotate: false - xy: 647, 211 + xy: 647, 227 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -2037,7 +2037,7 @@ ui/icons/icon-production index: -1 ui/icons/icon-quit rotate: false - xy: 647, 195 + xy: 647, 211 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -2051,7 +2051,7 @@ ui/icons/icon-redo index: -1 ui/icons/icon-rename rotate: false - xy: 631, 188 + xy: 647, 195 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -2065,35 +2065,35 @@ ui/icons/icon-resize index: -1 ui/icons/icon-rotate rotate: false - xy: 647, 179 + xy: 631, 188 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-rotate-arrow rotate: false - xy: 722, 411 + xy: 647, 179 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-rotate-left rotate: false - xy: 722, 395 + xy: 722, 411 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-rotate-right rotate: false - xy: 724, 365 + xy: 722, 395 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-save rotate: false - xy: 724, 349 + xy: 724, 365 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -2128,7 +2128,7 @@ ui/icons/icon-terrain index: -1 ui/icons/icon-tools rotate: false - xy: 724, 333 + xy: 724, 349 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -2149,14 +2149,14 @@ ui/icons/icon-touchDelete index: -1 ui/icons/icon-trash rotate: false - xy: 724, 317 + xy: 724, 333 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icons/icon-tutorial rotate: false - xy: 738, 412 + xy: 724, 317 size: 14, 14 orig: 14, 14 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 8c5a9b4ae9a06ea99d6788210c41207bf8f85e5c..ee141ff3ed2ecfbe4fae2016363773a37220ccb5 100644 GIT binary patch delta 77847 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 z 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 JOLU#@{U0x(US9wJ diff --git a/core/src/Mindustry.gwt.xml b/core/src/Mindustry.gwt.xml index ca65df4293..ae09f6ff54 100644 --- a/core/src/Mindustry.gwt.xml +++ b/core/src/Mindustry.gwt.xml @@ -2,9 +2,7 @@ - - \ No newline at end of file diff --git a/core/src/io/anuke/mindustry/ai/Pathfind.java b/core/src/io/anuke/mindustry/ai/Pathfind.java index e89ef2ea99..044770952c 100644 --- a/core/src/io/anuke/mindustry/ai/Pathfind.java +++ b/core/src/io/anuke/mindustry/ai/Pathfind.java @@ -5,9 +5,9 @@ import com.badlogic.gdx.ai.pfa.PathSmoother; import com.badlogic.gdx.ai.pfa.indexed.IndexedAStarPathFinder; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; - import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.world.SpawnPoint; import io.anuke.mindustry.world.Tile; @@ -28,25 +28,27 @@ public class Pathfind{ findNode(enemy); } - if(enemy.path == null){ - return vector.set(enemy.x, enemy.y); - }else if(enemy.node == -2){ + if(enemy.node == -2){ enemy.node = -1; } + + if(enemy.node < 0 || Vars.control.getSpawnPoints().get(enemy.lane).pathTiles == null){ + return vector.set(enemy.x, enemy.y); + } + + Tile[] path = Vars.control.getSpawnPoints().get(enemy.lane).pathTiles; - Tile[] path = enemy.path; - - - if(enemy.idletime > Enemy.maxIdle){ + if(enemy.idletime > EnemyType.maxIdle){ //TODO reverse Tile target = path[enemy.node]; - if(Vars.world.raycastWorld(enemy.x, enemy.y, target.worldx(), target.worldy()) != null){ - if(enemy.node > 1) + if(Vars.world.raycastWorld(enemy.x, enemy.y, target.worldx(), target.worldy()) != null) { + if (enemy.node > 1) enemy.node = enemy.node - 1; enemy.idletime = 0; - }else{ - //must be blocked by a playermade block, do nothing } + + //else, must be blocked by a playermade block, do nothing + } //-1 is only possible here if both pathfindings failed, which should NOT happen @@ -157,22 +159,24 @@ public class Pathfind{ return; } - enemy.path = Vars.control.getSpawnPoints().get(enemy.lane).pathTiles; + Tile[] path = Vars.control.getSpawnPoints().get(enemy.lane).pathTiles; - int closest = findClosest(enemy.path, enemy.x, enemy.y); + int closest = findClosest(path, enemy.x, enemy.y); - closest = Mathf.clamp(closest, 1, enemy.path.length-1); + closest = Mathf.clamp(closest, 1, path.length-1); if(closest == -1){ return; } - - Tile end = enemy.path[closest]; + enemy.node = closest; - + + //TODO + + //Tile end = path[closest]; //if the enemy can't get to this node, teleport to it - if(enemy.node < enemy.path.length - 2 && Vars.world.raycastWorld(enemy.x, enemy.y, end.worldx(), end.worldy()) != null){ + //if(enemy.node < path.length - 2 && Vars.world.raycastWorld(enemy.x, enemy.y, end.worldx(), end.worldy()) != null){ // Timers.run(Mathf.random(20f), () -> enemy.set(end.worldx(), end.worldy())); - } + //} } private static int findClosest(Tile[] tiles, float x, float y){ diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 2c6fa4610c..9e34ed638a 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -5,15 +5,13 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Buttons; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.Mindustry; import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.effect.Shield; import io.anuke.mindustry.entities.enemies.Enemy; -import io.anuke.mindustry.entities.enemies.FortressEnemy; -import io.anuke.mindustry.entities.enemies.HealerEnemy; +import io.anuke.mindustry.entities.enemies.EnemyTypes; import io.anuke.mindustry.graphics.Fx; import io.anuke.mindustry.input.AndroidInput; import io.anuke.mindustry.input.DesktopInput; @@ -356,21 +354,17 @@ public class Control extends Module{ float range = 12f; Timers.run(index*5f, ()->{ - try{ - Enemy enemy = ClassReflection.newInstance(spawn.type); - enemy.set(tile.worldx() + Mathf.range(range), tile.worldy() + Mathf.range(range)); - enemy.lane = fl; - enemy.tier = spawn.tier(wave, fl); - enemy.add(); - Effects.effect(Fx.spawn, enemy); + Enemy enemy = new Enemy(spawn.type); + enemy.set(tile.worldx() + Mathf.range(range), tile.worldy() + Mathf.range(range)); + enemy.lane = fl; + enemy.tier = spawn.tier(wave, fl); + enemy.add(); - Vars.netServer.handleEnemySpawn(enemy); - - enemies ++; - }catch (Exception e){ - throw new RuntimeException(e); - } + Effects.effect(Fx.spawn, enemy); + Vars.netServer.handleEnemySpawn(enemy); + + enemies ++; }); } } @@ -601,10 +595,10 @@ public class Control extends Module{ if(Inputs.keyTap(Keys.Y)){ if(Inputs.keyDown(Keys.SHIFT_LEFT)){ - new HealerEnemy().set(player.x, player.y).add(); + new Enemy(EnemyTypes.healer).set(player.x, player.y).add(); }else{ float px = player.x, py = player.y; - Timers.run(30f, ()-> new FortressEnemy().set(px, py).add()); + Timers.run(30f, ()-> new Enemy(EnemyTypes.fortress).set(px, py).add()); } } } diff --git a/core/src/io/anuke/mindustry/entities/EnemySpawn.java b/core/src/io/anuke/mindustry/entities/EnemySpawn.java index be96fb5bc1..0057953727 100644 --- a/core/src/io/anuke/mindustry/entities/EnemySpawn.java +++ b/core/src/io/anuke/mindustry/entities/EnemySpawn.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.entities; -import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; import io.anuke.ucore.core.Settings; import io.anuke.ucore.util.Mathf; @@ -9,7 +9,7 @@ public class EnemySpawn{ private static float[] scalings = {4f, 2.5f, 1.5f}; /**The enemy type spawned*/ - public final Class type; + public final EnemyType type; /**When this spawns should end*/ protected int before = Integer.MAX_VALUE; /**When this spawns should start*/ @@ -29,7 +29,7 @@ public class EnemySpawn{ /**Amount of enemies spawned initially, with no scaling*/ protected int amount = 1; - public EnemySpawn(Class type){ + public EnemySpawn(EnemyType type){ this.type = type; } @@ -39,10 +39,10 @@ public class EnemySpawn{ } float scaling = this.scaling * scalings[(Settings.getInt("difficulty"))]; - return Math.min(amount-1 + 1 * Math.max((int)((wave / spacing) / scaling), 1) - (tier(wave, lane)-1) * tierscaleback, max); + return Math.min(amount-1 + Math.max((int)((wave / spacing) / scaling), 1) - (tier(wave, lane)-1) * tierscaleback, max); } public int tier(int wave, int lane){ - return Mathf.clamp(tier + (wave-after)/tierscale, 1, Enemy.maxtier); + return Mathf.clamp(tier + (wave-after)/tierscale, 1, EnemyType.maxtier); } } diff --git a/core/src/io/anuke/mindustry/entities/WaveCreator.java b/core/src/io/anuke/mindustry/entities/WaveCreator.java index a725011bcc..d5827a6d5f 100644 --- a/core/src/io/anuke/mindustry/entities/WaveCreator.java +++ b/core/src/io/anuke/mindustry/entities/WaveCreator.java @@ -1,22 +1,18 @@ package io.anuke.mindustry.entities; import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.reflect.ClassReflection; - -import io.anuke.mindustry.entities.enemies.*; +import io.anuke.mindustry.entities.enemies.EnemyTypes; public class WaveCreator{ public static Array getSpawns(){ - //TODO - //Gdx.app.exit(); return Array.with( - new EnemySpawn(Enemy.class){{ + new EnemySpawn(EnemyTypes.standard){{ scaling = 1; before = 3; }}, - new EnemySpawn(FastEnemy.class){{ + new EnemySpawn(EnemyTypes.fast){{ scaling = 1; after = 3; spacing = 5; @@ -24,7 +20,7 @@ public class WaveCreator{ tierscaleback = 0; }}, - new EnemySpawn(BlastEnemy.class){{ + new EnemySpawn(EnemyTypes.blast){{ after = 4; amount = 3; spacing = 5; @@ -32,56 +28,56 @@ public class WaveCreator{ tierscaleback = 0; }}, - new EnemySpawn(TankEnemy.class){{ + new EnemySpawn(EnemyTypes.tank){{ after = 5; spacing = 5; scaling = 2; amount = 2; }}, - new EnemySpawn(RapidEnemy.class){{ + new EnemySpawn(EnemyTypes.rapid){{ after = 7; spacing = 5; scaling = 2; amount = 3; }}, - new EnemySpawn(HealerEnemy.class){{ + new EnemySpawn(EnemyTypes.healer){{ after = 5; spacing = 5; scaling = 1; amount = 1; }}, - new EnemySpawn(Enemy.class){{ + new EnemySpawn(EnemyTypes.standard){{ scaling = 3; after = 8; spacing = 4; tier = 2; }}, - new EnemySpawn(TitanEnemy.class){{ + new EnemySpawn(EnemyTypes.titan){{ after = 6; amount = 2; spacing = 5; scaling = 3; }}, - new EnemySpawn(FlamerEnemy.class){{ + new EnemySpawn(EnemyTypes.flamer){{ after = 12; amount = 3; spacing = 5; scaling = 3; }}, - new EnemySpawn(EmpEnemy.class){{ + new EnemySpawn(EnemyTypes.emp){{ after = 15; amount = 1; spacing = 5; scaling = 2; }}, - new EnemySpawn(BlastEnemy.class){{ + new EnemySpawn(EnemyTypes.blast){{ after = 4 + 5 + 5; amount = 3; spacing = 5; @@ -89,14 +85,14 @@ public class WaveCreator{ tierscaleback = 0; }}, //boss wave - new EnemySpawn(FortressEnemy.class){{ + new EnemySpawn(EnemyTypes.fortress){{ after = 16; amount = 1; spacing = 5; scaling = 1; }}, - new EnemySpawn(TitanEnemy.class){{ + new EnemySpawn(EnemyTypes.titan){{ after = 16; amount = 1; spacing = 5; @@ -104,7 +100,7 @@ public class WaveCreator{ tierscaleback = 0; }}, - new EnemySpawn(HealerEnemy.class){{ + new EnemySpawn(EnemyTypes.healer){{ after = 16; spacing = 5; scaling = 2; @@ -113,14 +109,14 @@ public class WaveCreator{ //end boss wave //enchanced boss wave - new EnemySpawn(MortarEnemy.class){{ + new EnemySpawn(EnemyTypes.mortar){{ after = 16 + 5; amount = 1; spacing = 5; scaling = 3; }}, - new EnemySpawn(EmpEnemy.class){{ + new EnemySpawn(EnemyTypes.emp){{ after = 16 + 5; amount = 1; spacing = 5; @@ -129,71 +125,7 @@ public class WaveCreator{ //end enchanced boss wave ); } - - public static Array getSpawnsOld(){ - return Array.with( - new EnemySpawn(Enemy.class){{ - scaling = 2; - before = 4; - }}, - new EnemySpawn(Enemy.class){{ - scaling = 3; - tierscaleback = 3; - spacing = 2; - after = 4; - }}, - new EnemySpawn(TitanEnemy.class){{ - after = 5; - spacing = 2; - scaling = 5; - }}, - new EnemySpawn(FortressEnemy.class){{ - after = 12; - spacing = 5; - scaling = 7; - }}, - new EnemySpawn(HealerEnemy.class){{ - scaling = 3; - spacing = 2; - after = 8; - }}, - new EnemySpawn(FastEnemy.class){{ - after = 2; - scaling = 3; - }}, - new EnemySpawn(FlamerEnemy.class){{ - after = 14; - spacing = 6; - scaling = 3; - }}, - new EnemySpawn(BlastEnemy.class){{ - after = 12; - spacing = 2; - scaling = 3; - }}, - new EnemySpawn(RapidEnemy.class){{ - after = 7; - spacing = 3; - scaling = 3; - }}, - new EnemySpawn(EmpEnemy.class){{ - after = 19; - spacing = 3; - scaling = 5; - }}, - new EnemySpawn(TankEnemy.class){{ - after = 4; - spacing = 2; - scaling = 3; - }}, - new EnemySpawn(MortarEnemy.class){{ - after = 20; - spacing = 3; - scaling = 5; - }} - ); - } - + public static void testWaves(int from, int to){ Array spawns = getSpawns(); for(int i = from; i <= to; i ++){ @@ -205,7 +137,7 @@ public class WaveCreator{ total += a; if(a > 0){ - System.out.print(a+"x" + ClassReflection.getSimpleName(spawn.type) + "-" + t + " "); + System.out.print(a+"x" + spawn.type.name + "-" + t + " "); } } System.out.print(" (" + total + ")"); diff --git a/core/src/io/anuke/mindustry/entities/enemies/BlastEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/BlastEnemy.java deleted file mode 100644 index e5756febff..0000000000 --- a/core/src/io/anuke/mindustry/entities/enemies/BlastEnemy.java +++ /dev/null @@ -1,52 +0,0 @@ -package io.anuke.mindustry.entities.enemies; - -import com.badlogic.gdx.math.Vector2; - -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.entities.Bullet; -import io.anuke.mindustry.entities.BulletType; -import io.anuke.mindustry.entities.TileEntity; -import io.anuke.ucore.util.Tmp; - -public class BlastEnemy extends Enemy{ - - public BlastEnemy() { - maxhealth = 30; - speed = 0.7f; - bullet = null; - turretrotatespeed = 0f; - mass = 0.8f; - stopNearCore = false; - - heal(); - } - - void move(){ - super.move(); - float range = 10f; - Vector2 offset = Tmp.v3.setZero(); - if(target instanceof TileEntity){ - TileEntity e = (TileEntity)target; - range = (e.tile.block().width * Vars.tilesize) /2f + 8f; - offset.set(e.tile.block().getPlaceOffset()); - } - - if(target != null && target.distanceTo(this.x - offset.x, this.y - offset.y) < range){ - explode(); - } - } - - @Override - public void onDeath(){ - super.onDeath(); - explode(); - } - - void explode(){ - Bullet b = new Bullet(BulletType.blast, this, x, y, 0).add(); - b.damage = BulletType.blast.damage + (tier-1) * 40; - damage(999); - remove(); - } - -} diff --git a/core/src/io/anuke/mindustry/entities/enemies/EmpEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/EmpEnemy.java deleted file mode 100644 index 0b1ab729e9..0000000000 --- a/core/src/io/anuke/mindustry/entities/enemies/EmpEnemy.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.anuke.mindustry.entities.enemies; - -import io.anuke.mindustry.entities.BulletType; - -public class EmpEnemy extends Enemy{ - - public EmpEnemy() { - - speed = 0.3f; - reload = 70; - maxhealth = 210; - range = 80f; - bullet = BulletType.emp; - turretrotatespeed = 0.1f; - - heal(); - } - -} diff --git a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java index 95a0f13451..3955007fe3 100644 --- a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java +++ b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java @@ -1,209 +1,57 @@ package io.anuke.mindustry.entities.enemies; -import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.Bullet; import io.anuke.mindustry.entities.BulletType; -import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.graphics.Fx; -import io.anuke.mindustry.graphics.Shaders; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Syncable; -import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.Blocks; -import io.anuke.ucore.core.Draw; -import io.anuke.ucore.core.Effects; -import io.anuke.ucore.core.Graphics; -import io.anuke.ucore.core.Timers; import io.anuke.ucore.entities.DestructibleEntity; -import io.anuke.ucore.entities.Entities; import io.anuke.ucore.entities.Entity; import io.anuke.ucore.entities.SolidEntity; import io.anuke.ucore.util.Angles; -import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Timer; -import io.anuke.ucore.util.Tmp; - -import static io.anuke.mindustry.Vars.world; public class Enemy extends DestructibleEntity implements Syncable{ - public final static Color[] tierColors = { Color.valueOf("ffe451"), Color.valueOf("f48e20"), Color.valueOf("ff6757"), Color.valueOf("ff2d86") }; - public final static int maxtier = 4; - public final static float maxIdle = 60*1.5f; - public final static float maxIdleLife = 60f*13f; //13 seconds idle = death - - protected int timeid; - protected Timer timer = new Timer(5); - protected float speed = 0.4f; - protected float reload = 32; - protected float range = 60; - protected float length = 4; - protected float rotatespeed = 0.1f; - protected float turretrotatespeed = 0.2f; - protected boolean alwaysRotate = false; - protected BulletType bullet = BulletType.small; - protected String shootsound = "enemyshoot"; - protected int damage; - protected Enemy spawner; - protected int spawned = 0; - protected boolean targetCore = false; - protected boolean stopNearCore = true; - protected float mass = 1f; - protected String className; + protected Interpolator inter = new Interpolator<>(SyncType.enemy); - protected Interpolator inter = new Interpolator(SyncType.enemy); + public final EnemyType type; + public Timer timer = new Timer(5); public float idletime = 0f; public int lane; public int node = -1; - public Tile[] path; + + public Enemy spawner; + public int spawned; public float angle; - public float xvelocity, yvelocity; + public Vector2 velocity = new Vector2(); public Entity target; public int tier = 1; - - protected final int timerTarget = timeid ++; - protected final int timerReload = timeid ++; - - public Enemy() { - hitbox.setSize(5f); - hitboxTile.setSize(4f); - - maxhealth = 60; - heal(); - - className = ClassReflection.getSimpleName(getClass()).toLowerCase(); - } - - public Interpolator getInterpolator() { - return inter; - } - - public float drawSize(){ - return 12; - } - - void move(){ - if(Net.client() && Net.active()){ - inter.update(this); - return; - } - - Tile core = Vars.control.getCore(); - - if(idletime > maxIdleLife){ - onDeath(); - return; - } - - boolean nearCore = distanceTo(core.worldx(), core.worldy()) <= range - 18f && stopNearCore; - Vector2 vec; - - if(nearCore){ - vec = Tmp.v1.setZero(); - if(targetCore) target = core.entity; - }else{ - vec = Vars.world.pathfinder().find(this); - vec.sub(x, y).limit(speed); - } - - Vector2 shift = Tmp.v3.setZero(); - float shiftRange = hitbox.width + 2f; - float avoidRange = shiftRange + 4f; - float attractRange = avoidRange + 7f; - float avoidSpeed = this.speed/2.7f; - - Entities.getNearby(Vars.control.enemyGroup, x, y, range, other -> { - Enemy enemy = (Enemy)other; - if(other == this) return; - float dst = other.distanceTo(this); - - if(dst < shiftRange){ - float scl = Mathf.clamp(1.4f - dst / shiftRange) * enemy.mass * 1f/mass; - shift.add((x - other.x) * scl, (y - other.y) * scl); - }else if(dst < avoidRange){ - Tmp.v2.set((x - other.x), (y - other.y)).setLength(avoidSpeed); - shift.add(Tmp.v2.scl(1.1f)); - }else if(dst < attractRange && !nearCore){ - Tmp.v2.set((x - other.x), (y - other.y)).setLength(avoidSpeed); - shift.add(Tmp.v2.scl(-1)); - } - }); - - shift.limit(1f); - vec.add(shift.scl(0.5f)); - - move(vec.x * Timers.delta(), vec.y * Timers.delta()); - - updateTargeting(nearCore); - } - - void updateTargeting(boolean nearCore){ - if(target != null && target instanceof TileEntity && ((TileEntity)target).dead){ - target = null; - } - - if(timer.get(timerTarget, 15) && !nearCore){ - target = Vars.world.findTileTarget(x, y, null, range, false); - - //no tile found - if(target == null){ - target = Entities.getClosest(Vars.control.playerGroup, x, y, range, e -> true); - } - }else if(nearCore){ - target = Vars.control.getCore().entity; - } - - if(target != null && bullet != null){ - updateShooting(); - } - } - - void updateShooting(){ - if(timer.get(timerReload, reload * Vars.multiplier)){ - shoot(bullet); - if(shootsound != null) Effects.sound(shootsound, this); - } - } - - void shoot(BulletType bullet){ - shoot(bullet, 0); - } - - void shoot(BulletType bullet, float rotation){ - - if(!(Net.active() && Net.client())) { - Angles.translation(angle + rotation, length); - Bullet out = new Bullet(bullet, this, x + Angles.x(), y + Angles.y(), this.angle + rotation).add(); - out.damage = (int) (damage * Vars.multiplier); - onShoot(bullet, rotation); - - if(Net.active() && Net.server()){ - Vars.netServer.handleBullet(bullet, this, x + Angles.x(), y + Angles.y(), this.angle + rotation, (short) (damage * Vars.multiplier)); - } - } - } - - void onShoot(BulletType type, float rotation){ + public Enemy(EnemyType type){ + this.type = type; } @Override - public void added(){ - if(bullet != null){ - damage = (int) (bullet.damage * (1 + (tier - 1) * 1f)); - } + public void update(){ + type.update(this); + } - maxhealth *= tier; - speed += 0.04f * tier /*+ Mathf.range(0.1f)*/; - reload /= Math.max(tier / 1.5f, 1f); - range += tier * 5; - speed = Math.max(speed, 0.07f); + @Override + public void draw(){ + type.draw(this); + } - heal(); + @Override + public void drawOver(){ + type.drawOver(this); + } + + @Override + public float drawSize(){ + return 14; } @Override @@ -213,90 +61,48 @@ public class Enemy extends DestructibleEntity implements Syncable{ @Override public void onDeath(){ - Effects.effect(Fx.explosion, this); - Effects.shake(3f, 4f, this); - Effects.sound("bang2", this); - remove(); - dead = true; - - if(Net.active() && Net.server()){ - Vars.netServer.handleEnemyDeath(this); - } + type.onDeath(this); } @Override public void removed(){ - if(!dead){ - - if(spawner != null){ - spawner.spawned --; - }else{ - Vars.control.enemyDeath(); - } - } + type.removed(this); } @Override - public void update(){ - float lastx = x, lasty = y; + public void added(){ + hitbox.setSize(type.hitsize); + hitboxTile.setSize(type.hitsizeTile); + maxhealth = type.health * tier; - move(); - - xvelocity = (x - lastx) / Timers.delta(); - yvelocity = (y - lasty) / Timers.delta(); - - float minv = 0.07f; - - if(Vector2.dst(xvelocity, yvelocity, 0, 0) < minv && node > 0 && target == null){ - idletime += Timers.delta(); - }else{ - idletime = 0; - } - - Tile tile = world.tileWorld(x, y); - if(tile != null && tile.floor().liquid && tile.block() == Blocks.air){ - damage(health+1); //drown - } - - if(Float.isNaN(angle)){ - angle = 0; - } - - if(target == null || alwaysRotate){ - angle = Mathf.slerp(angle, 180f+Mathf.atan2(xvelocity, yvelocity), rotatespeed * Timers.delta()); - }else{ - angle = Mathf.slerp(angle, angleTo(target), turretrotatespeed * Timers.delta()); - } - } - - @Override - public void draw(){ - String region = className + "-t" + Mathf.clamp(tier, 1, 3); - - Shaders.outline.color.set(tierColors[tier - 1]); - Shaders.outline.region = Draw.region(region); - - Shaders.outline.apply(); - - Draw.rect(region, x, y, this.angle - 90); - - if(Vars.showPaths){ - Draw.color(Color.PURPLE); - Draw.line(x, y, x + xvelocity*10f, y + yvelocity*10f); - - Draw.color(Color.BLACK, Color.WHITE, idletime / maxIdleLife); - Draw.square(x, y, 7f); - - Draw.color(); - } - - Draw.color(); - - Graphics.flush(); + heal(); } @Override public Enemy add(){ return add(Vars.control.enemyGroup); } + + @Override + public Interpolator getInterpolator() { + return inter; + } + + public void shoot(BulletType bullet){ + shoot(bullet, 0); + } + + public void shoot(BulletType bullet, float rotation){ + + if(!(Net.active() && Net.client())) { + Angles.translation(angle + rotation, type.length); + Bullet out = new Bullet(bullet, this, x + Angles.x(), y + Angles.y(), this.angle + rotation).add(); + out.damage = (int) ((bullet.damage * (1 + (tier - 1) * 1f)) * Vars.multiplier); + type.onShoot(this, bullet, rotation); + + if(Net.active() && Net.server()){ + Vars.netServer.handleBullet(bullet, this, x + Angles.x(), y + Angles.y(), this.angle + rotation, (short)out.damage); + } + } + } } diff --git a/core/src/io/anuke/mindustry/entities/enemies/EnemyType.java b/core/src/io/anuke/mindustry/entities/enemies/EnemyType.java new file mode 100644 index 0000000000..46aa61f5a7 --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/EnemyType.java @@ -0,0 +1,230 @@ +package io.anuke.mindustry.entities.enemies; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.TileEntity; +import io.anuke.mindustry.graphics.Fx; +import io.anuke.mindustry.graphics.Shaders; +import io.anuke.mindustry.net.Net; +import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.ucore.core.Draw; +import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Graphics; +import io.anuke.ucore.core.Timers; +import io.anuke.ucore.entities.Entities; +import io.anuke.ucore.util.Mathf; +import io.anuke.ucore.util.Tmp; + +import static io.anuke.mindustry.Vars.world; + +public class EnemyType { + + //TODO documentation, comments + private static byte lastid = 0; + private static Array types = new Array<>(); + + public final static Color[] tierColors = { Color.valueOf("ffe451"), Color.valueOf("f48e20"), Color.valueOf("ff6757"), Color.valueOf("ff2d86") }; + public final static int maxtier = 4; + public final static float maxIdle = 60*1.5f; + public final static float maxIdleLife = 60f*13f; //13 seconds idle = death + + public final String name; + public final byte id; + + protected int timeid; + protected int health = 60; + protected float hitsize = 5f; + protected float hitsizeTile = 4f; + protected float speed = 0.4f; + protected float reload = 32; + protected float range = 60; + protected float length = 4; + protected float rotatespeed = 0.1f; + protected float turretrotatespeed = 0.2f; + protected boolean alwaysRotate = false; + protected BulletType bullet = BulletType.small; + protected String shootsound = "enemyshoot"; + protected boolean targetCore = false; + protected boolean stopNearCore = true; + protected float mass = 1f; + + protected final int timerTarget = timeid ++; + protected final int timerReload = timeid ++; + + public EnemyType(String name){ + this.id = lastid++; + this.name = name; + types.add(this); + } + + public void draw(Enemy enemy){ + String region = name + "-t" + Mathf.clamp(enemy.tier, 1, 3); + + Shaders.outline.color.set(tierColors[enemy.tier - 1]); + Shaders.outline.region = Draw.region(region); + + Shaders.outline.apply(); + + Draw.rect(region, enemy.x, enemy.y, enemy.angle - 90); + Draw.color(); + + Graphics.flush(); + } + + public void drawOver(Enemy enemy){ } + + public void update(Enemy enemy){ + float lastx = enemy.x, lasty = enemy.y; + + move(enemy); + + enemy.velocity.set(enemy.x - lastx, enemy.y - lasty).scl(1f / Timers.delta()); + + float minv = 0.07f; + + if(enemy.velocity.len() < minv && enemy.node > 0 && enemy.target == null){ + enemy.idletime += Timers.delta(); + }else{ + enemy.idletime = 0; + } + + Tile tile = world.tileWorld(enemy.x, enemy.y); + if(tile != null && tile.floor().liquid && tile.block() == Blocks.air){ + enemy.damage(enemy.health+1); //drown + } + + if(Float.isNaN(enemy.angle)){ + enemy.angle = 0; + } + + if(enemy.target == null || alwaysRotate){ + enemy.angle = Mathf.slerp(enemy.angle, 180f + enemy.velocity.angle(), rotatespeed * Timers.delta()); + }else{ + enemy.angle = Mathf.slerp(enemy.angle, enemy.angleTo(enemy.target), turretrotatespeed * Timers.delta()); + } + } + + public void move(Enemy enemy){ + float speed = this.speed + 0.04f * enemy.tier; + float range = this.range + enemy.tier * 5; + + if(Net.client() && Net.active()){ + enemy.inter.update(enemy); //TODO? better structure for interpolation + return; + } + + Tile core = Vars.control.getCore(); + + if(enemy.idletime > maxIdleLife){ + enemy.onDeath(); + return; + } + + boolean nearCore = enemy.distanceTo(core.worldx(), core.worldy()) <= range - 18f && stopNearCore; + Vector2 vec; + + if(nearCore){ + vec = Tmp.v1.setZero(); + if(targetCore) enemy.target = core.entity; + }else{ + vec = Vars.world.pathfinder().find(enemy); + vec.sub(enemy.x, enemy.y).limit(speed); + } + + Vector2 shift = Tmp.v3.setZero(); + float shiftRange = enemy.hitbox.width + 2f; + float avoidRange = shiftRange + 4f; + float attractRange = avoidRange + 7f; + float avoidSpeed = this.speed/2.7f; + + Entities.getNearby(Vars.control.enemyGroup, enemy.x, enemy.y, range, en -> { + Enemy other = (Enemy)en; + if(other == enemy) return; + float dst = other.distanceTo(enemy); + + if(dst < shiftRange){ + float scl = Mathf.clamp(1.4f - dst / shiftRange) * mass * 1f/mass; + shift.add((enemy.x - other.x) * scl, (enemy.y - other.y) * scl); + }else if(dst < avoidRange){ + Tmp.v2.set((enemy.x - other.x), (enemy.y - other.y)).setLength(avoidSpeed); + shift.add(Tmp.v2.scl(1.1f)); + }else if(dst < attractRange && !nearCore){ + Tmp.v2.set((enemy.x - other.x), (enemy.y - other.y)).setLength(avoidSpeed); + shift.add(Tmp.v2.scl(-1)); + } + }); + + shift.limit(1f); + vec.add(shift.scl(0.5f)); + + enemy.move(vec.x * Timers.delta(), vec.y * Timers.delta()); + + updateTargeting(enemy, nearCore); + } + + public void updateTargeting(Enemy enemy, boolean nearCore){ + if(enemy.target != null && enemy.target instanceof TileEntity && ((TileEntity)enemy.target).dead){ + enemy.target = null; + } + + if(enemy.timer.get(timerTarget, 15) && !nearCore){ + enemy.target = Vars.world.findTileTarget(enemy.x, enemy.y, null, range, false); + + //no tile found + if(enemy.target == null){ + enemy.target = Entities.getClosest(Vars.control.playerGroup, enemy.x, enemy.y, range, e -> true); + } + }else if(nearCore){ + enemy.target = Vars.control.getCore().entity; + } + + if(enemy.target != null && bullet != null){ + updateShooting(enemy); + } + } + + public void updateShooting(Enemy enemy){ + float reload = this.reload / Math.max(enemy.tier / 1.5f, 1f); + + if(enemy.timer.get(timerReload, reload * Vars.multiplier)){ + shoot(enemy); + } + } + + public void shoot(Enemy enemy){ + enemy.shoot(bullet); + if(shootsound != null) Effects.sound(shootsound, enemy); + } + + public void onShoot(Enemy enemy, BulletType type, float rotation){} + + public void onDeath(Enemy enemy){ + Effects.effect(Fx.explosion, enemy); + Effects.shake(3f, 4f, enemy); + Effects.sound("bang2", enemy); + enemy.remove(); + enemy.dead = true; + + if(Net.active() && Net.server()){ + Vars.netServer.handleEnemyDeath(enemy); + } + } + + public void removed(Enemy enemy){ + if(!enemy.dead){ + if(enemy.spawner != null){ + enemy.spawner.spawned --; + }else{ + Vars.control.enemyDeath(); + } + } + } + + public static EnemyType getByID(byte id){ + return types.get(id); + } +} diff --git a/core/src/io/anuke/mindustry/entities/enemies/EnemyTypes.java b/core/src/io/anuke/mindustry/entities/enemies/EnemyTypes.java new file mode 100644 index 0000000000..a2116848ab --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/EnemyTypes.java @@ -0,0 +1,32 @@ +package io.anuke.mindustry.entities.enemies; + +import io.anuke.mindustry.entities.enemies.types.BlastEnemy; +import io.anuke.mindustry.entities.enemies.types.EmpEnemy; +import io.anuke.mindustry.entities.enemies.types.FastEnemy; +import io.anuke.mindustry.entities.enemies.types.FlamerEnemy; +import io.anuke.mindustry.entities.enemies.types.FortressEnemy; +import io.anuke.mindustry.entities.enemies.types.HealerEnemy; +import io.anuke.mindustry.entities.enemies.types.MortarEnemy; +import io.anuke.mindustry.entities.enemies.types.RapidEnemy; +import io.anuke.mindustry.entities.enemies.types.*; +import io.anuke.mindustry.entities.enemies.types.TankEnemy; +import io.anuke.mindustry.entities.enemies.types.TargetEnemy; +import io.anuke.mindustry.entities.enemies.types.TitanEnemy; + +public class EnemyTypes { + public static final EnemyType + + standard = new StandardEnemy(), + fast = new FastEnemy(), + rapid = new RapidEnemy(), + flamer = new FlamerEnemy(), + tank = new TankEnemy(), + blast = new BlastEnemy(), + mortar = new MortarEnemy(), + healer = new HealerEnemy(), + titan = new TitanEnemy(), + emp = new EmpEnemy(), + fortress = new FortressEnemy(), + target = new TargetEnemy(); + +} diff --git a/core/src/io/anuke/mindustry/entities/enemies/FastEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/FastEnemy.java deleted file mode 100644 index 01d80d0524..0000000000 --- a/core/src/io/anuke/mindustry/entities/enemies/FastEnemy.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.anuke.mindustry.entities.enemies; - -public class FastEnemy extends Enemy{ - - public FastEnemy() { - - speed = 0.73f; - reload = 25; - mass = 0.2f; - - maxhealth = 40; - heal(); - } - -} diff --git a/core/src/io/anuke/mindustry/entities/enemies/FortressEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/FortressEnemy.java deleted file mode 100644 index 2407149fa5..0000000000 --- a/core/src/io/anuke/mindustry/entities/enemies/FortressEnemy.java +++ /dev/null @@ -1,62 +0,0 @@ -package io.anuke.mindustry.entities.enemies; - -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.entities.BulletType; -import io.anuke.mindustry.graphics.Fx; -import io.anuke.ucore.core.Effects; -import io.anuke.ucore.core.Timers; -import io.anuke.ucore.util.Angles; - -public class FortressEnemy extends Enemy{ - static int maxSpawn = 6; - - float spawnTime = 190; - boolean deployed; - - public FortressEnemy() { - - speed = 0.25f; - reload = 90; - maxhealth = 700; - range = 70f; - bullet = BulletType.yellowshell; - hitbox.setSize(10f); - turretrotatespeed = rotatespeed = 0.08f; - length = 7f; - mass = 7f; - - heal(); - } - - @Override - public void move(){ - super.move(); - - if(deployed){ - - if(Timers.get(this, "spawn", spawnTime) && spawned < maxSpawn){ - Angles.translation(angle, 20f); - - FastEnemy enemy = new FastEnemy(); - enemy.lane = lane; - enemy.tier = this.tier; - enemy.spawner = this; - enemy.set(x + Angles.x(), y + Angles.y()); - Effects.effect(Fx.spawn, enemy); - enemy.add(); - spawned ++; - } - }else if(distanceTo(Vars.control.getCore().worldx(), - Vars.control.getCore().worldy()) <= 90f){ - deployed = true; - speed = 0.001f; - } - } - - - void onShoot(BulletType type, float rotation){ - Effects.effect(Fx.largeCannonShot, x + Angles.x(), y + Angles.y(), angle); - Effects.shake(3f, 3f, this); - } - -} diff --git a/core/src/io/anuke/mindustry/entities/enemies/HealerEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/HealerEnemy.java deleted file mode 100644 index b43add15c7..0000000000 --- a/core/src/io/anuke/mindustry/entities/enemies/HealerEnemy.java +++ /dev/null @@ -1,91 +0,0 @@ -package io.anuke.mindustry.entities.enemies; - -import com.badlogic.gdx.math.MathUtils; - -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.entities.Bullet; -import io.anuke.mindustry.entities.BulletType; -import io.anuke.mindustry.graphics.Fx; -import io.anuke.mindustry.graphics.Shaders; -import io.anuke.ucore.core.*; -import io.anuke.ucore.entities.Entities; -import io.anuke.ucore.graphics.Hue; -import io.anuke.ucore.util.Angles; - -public class HealerEnemy extends Enemy{ - - public HealerEnemy() { - - speed = 0.25f; - reload = 10; - maxhealth = 200; - bullet = BulletType.shot; - range = 40f; - alwaysRotate = false; - targetCore = false; - stopNearCore = true; - mass = 1.1f; - - heal(); - } - - @Override - void move(){ - super.move(); - - if(idletime > 60f*3){ //explode after 3 seconds of stillness - explode(); - Effects.effect(Fx.shellexplosion, this); - Effects.effect(Fx.shellsmoke, this); - } - } - - @Override - void updateTargeting(boolean nearCore){ - if(timer.get(timerTarget, 15)){ - target = Entities.getClosest(Vars.control.enemyGroup, - x, y, range, e -> e instanceof Enemy && e != this && ((Enemy)e).healthfrac() < 1f); - } - - if(target != null){ - updateShooting(); - } - } - - @Override - void updateShooting(){ - Enemy enemy = (Enemy)target; - - if(enemy.health < enemy.maxhealth && Timers.get(this, "heal", reload)){ - enemy.health ++; - idletime = 0; - } - } - - @Override - public void drawOver(){ - super.drawOver(); - Enemy enemy = (Enemy)target; - - if(enemy == null) return; - - Angles.translation(this.angleTo(enemy), 5f); - - Graphics.shader(); - if(enemy != null && enemy.health < enemy.maxhealth){ - Draw.color(Hue.rgb(138, 244, 138, (MathUtils.sin(Timers.time()) + 1f) / 13f)); - Draw.alpha(0.9f); - Draw.laser("laser", "laserend", x + Angles.x(), y + Angles.y(), enemy.x - Angles.x()/1.5f, enemy.y - Angles.y()/1.5f); - Draw.color(); - } - Graphics.shader(Shaders.outline); - } - - void explode(){ - Bullet b = new Bullet(BulletType.blast, this, x, y, 0).add(); - b.damage = BulletType.blast.damage + (tier-1) * 30; - damage(999); - remove(); - } - -} diff --git a/core/src/io/anuke/mindustry/entities/enemies/RapidEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/RapidEnemy.java deleted file mode 100644 index 44948908eb..0000000000 --- a/core/src/io/anuke/mindustry/entities/enemies/RapidEnemy.java +++ /dev/null @@ -1,21 +0,0 @@ -package io.anuke.mindustry.entities.enemies; - -import io.anuke.mindustry.entities.BulletType; - -public class RapidEnemy extends Enemy{ - - public RapidEnemy() { - - reload = 8; - bullet = BulletType.purple; - rotatespeed = 0.08f; - maxhealth = 260; - speed = 0.33f; - heal(); - hitbox.setSize(8f); - mass = 3f; - - range = 70; - } - -} diff --git a/core/src/io/anuke/mindustry/entities/enemies/TankEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/TankEnemy.java deleted file mode 100644 index 4ca5a514ed..0000000000 --- a/core/src/io/anuke/mindustry/entities/enemies/TankEnemy.java +++ /dev/null @@ -1,32 +0,0 @@ -package io.anuke.mindustry.entities.enemies; - -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.entities.Bullet; -import io.anuke.mindustry.entities.BulletType; -import io.anuke.ucore.util.Angles; - -public class TankEnemy extends Enemy{ - - public TankEnemy() { - - maxhealth = 350; - speed = 0.24f; - reload = 90f; - rotatespeed = 0.06f; - bullet = BulletType.small; - length = 3f; - mass = 1.4f; - } - - void shoot(){ - Angles.translation(angle, 8f); - - Angles.shotgun(3, 8f, angle, f->{ - Bullet out = new Bullet(bullet, this, x+vector.x, y+vector.y, f).add(); - out.damage = (int)(damage*Vars.multiplier); - }); - - - } - -} diff --git a/core/src/io/anuke/mindustry/entities/enemies/TargetEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/TargetEnemy.java deleted file mode 100644 index 609d6e0f83..0000000000 --- a/core/src/io/anuke/mindustry/entities/enemies/TargetEnemy.java +++ /dev/null @@ -1,55 +0,0 @@ -package io.anuke.mindustry.entities.enemies; - -import com.badlogic.gdx.graphics.Color; - -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.entities.BulletType; -import io.anuke.ucore.core.Draw; -import io.anuke.ucore.core.Timers; -import io.anuke.ucore.util.Mathf; - -public class TargetEnemy extends Enemy{ - - public TargetEnemy(){ - speed = 0f; - maxhealth = 25; - shootsound = null; - } - - @Override - void move(){ - speed = 0f; - super.move(); - } - - @Override - void shoot(BulletType bullet){ - //do nothing - } - - @Override - public void removed(){ - //don't call enemy death since this is only a target - } - - @Override - public void draw(){ - super.draw(); - - Draw.color(Color.YELLOW); - - if(Vars.control.getTutorial().showTarget()){ - Draw.spikes(x, y, 11f + Mathf.sin(Timers.time(), 7f, 1f), 4f, 8, Timers.time()); - } - - Draw.color(); - } - - @Override - public void onDeath(){ - super.onDeath(); - Timers.run(100f, ()->{ - new TargetEnemy().set(x, y).add(); - }); - } -} diff --git a/core/src/io/anuke/mindustry/entities/enemies/TestEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/TestEnemy.java deleted file mode 100644 index 56da2fdcfa..0000000000 --- a/core/src/io/anuke/mindustry/entities/enemies/TestEnemy.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.anuke.mindustry.entities.enemies; - -import io.anuke.ucore.core.Timers; - -public class TestEnemy extends Enemy{ - boolean dir = false; - - public TestEnemy() { - maxhealth = 99999; - heal(); - } - - void move(){ - if(Timers.get(this, "switch", 300)){ - dir = !dir; - } - - move(dir ? -0.3f * Timers.delta() : 0.3f * Timers.delta(), 0); - } -} diff --git a/core/src/io/anuke/mindustry/entities/enemies/TitanEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/TitanEnemy.java deleted file mode 100644 index 8b6d6cbfab..0000000000 --- a/core/src/io/anuke/mindustry/entities/enemies/TitanEnemy.java +++ /dev/null @@ -1,50 +0,0 @@ -package io.anuke.mindustry.entities.enemies; - -import io.anuke.mindustry.entities.BulletType; -import io.anuke.ucore.core.Timers; -import io.anuke.ucore.util.Angles; -import io.anuke.ucore.util.Mathf; - -public class TitanEnemy extends Enemy{ - - public TitanEnemy() { - - speed = 0.26f; - reload = 30; - maxhealth = 430; - range = 60f; - bullet = BulletType.small; - hitbox.setSize(7f); - mass = 4f; - - heal(); - - Timers.reset(this, "salvo", 0); - Timers.reset(this, "shotgun", 0); - Timers.reset(this, "circle", 0); - } - - @Override - void updateShooting(){ - Timers.get(this, "salvo", 240); - - if(Timers.getTime(this, "salvo") < 60){ - if(Timers.get(this, "salvoShoot", 6)){ - shoot(BulletType.flame, Mathf.range(20f)); - } - } - - if(Timers.get(this, "shotgun", 80)){ - Angles.shotgun(5, 10f, 0f, f->{ - shoot(BulletType.smallSlow, f); - }); - } - - if(Timers.get(this, "circle", 200)){ - Angles.circle(8, f->{ - shoot(BulletType.smallSlow, f); - }); - } - } - -} diff --git a/core/src/io/anuke/mindustry/entities/enemies/flying/FlyingEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/flying/FlyingEnemy.java deleted file mode 100644 index 2fbb27ff14..0000000000 --- a/core/src/io/anuke/mindustry/entities/enemies/flying/FlyingEnemy.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.anuke.mindustry.entities.enemies.flying; - -import io.anuke.mindustry.entities.enemies.Enemy; - -public class FlyingEnemy extends Enemy{ - - public FlyingEnemy() { - - } - -} diff --git a/core/src/io/anuke/mindustry/entities/enemies/types/BlastEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/BlastEnemy.java new file mode 100644 index 0000000000..567ac9a800 --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/types/BlastEnemy.java @@ -0,0 +1,56 @@ +package io.anuke.mindustry.entities.enemies.types; + +import com.badlogic.gdx.math.Vector2; + +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.entities.Bullet; +import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.TileEntity; +import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; +import io.anuke.ucore.util.Tmp; + +public class BlastEnemy extends EnemyType { + + public BlastEnemy() { + super("blastenemy"); + health = 30; + speed = 0.7f; + bullet = null; + turretrotatespeed = 0f; + mass = 0.8f; + stopNearCore = false; + } + + @Override + public void move(Enemy enemy){ + super.move(enemy); + + float range = 10f; + Vector2 offset = Tmp.v3.setZero(); + + if(enemy.target instanceof TileEntity){ + TileEntity e = (TileEntity)enemy.target; + range = (e.tile.block().width * Vars.tilesize) /2f + 8f; + offset.set(e.tile.block().getPlaceOffset()); + } + + if(enemy.target != null && enemy.target.distanceTo(enemy.x - offset.x, enemy.y - offset.y) < range){ + explode(enemy); + } + } + + @Override + public void onDeath(Enemy enemy){ + super.onDeath(enemy); + explode(enemy); + } + + void explode(Enemy enemy){ + Bullet b = new Bullet(BulletType.blast, enemy, enemy.x, enemy.y, 0).add(); + b.damage = BulletType.blast.damage + (enemy.tier-1) * 40; + enemy.damage(999); + enemy.remove(); + } + +} diff --git a/core/src/io/anuke/mindustry/entities/enemies/types/EmpEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/EmpEnemy.java new file mode 100644 index 0000000000..a5a9772f45 --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/types/EmpEnemy.java @@ -0,0 +1,19 @@ +package io.anuke.mindustry.entities.enemies.types; + +import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.enemies.EnemyType; + +public class EmpEnemy extends EnemyType { + + public EmpEnemy() { + super("empenemy"); + + speed = 0.3f; + reload = 70; + health = 210; + range = 80f; + bullet = BulletType.emp; + turretrotatespeed = 0.1f; + } + +} diff --git a/core/src/io/anuke/mindustry/entities/enemies/types/FastEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/FastEnemy.java new file mode 100644 index 0000000000..7ab613c8b3 --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/types/FastEnemy.java @@ -0,0 +1,17 @@ +package io.anuke.mindustry.entities.enemies.types; + +import io.anuke.mindustry.entities.enemies.EnemyType; + +public class FastEnemy extends EnemyType { + + public FastEnemy() { + super("fastenemy"); + + speed = 0.73f; + reload = 25; + mass = 0.2f; + + health = 40; + } + +} diff --git a/core/src/io/anuke/mindustry/entities/enemies/FlamerEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/FlamerEnemy.java similarity index 51% rename from core/src/io/anuke/mindustry/entities/enemies/FlamerEnemy.java rename to core/src/io/anuke/mindustry/entities/enemies/types/FlamerEnemy.java index 3c85c450a3..69d95ca70f 100644 --- a/core/src/io/anuke/mindustry/entities/enemies/FlamerEnemy.java +++ b/core/src/io/anuke/mindustry/entities/enemies/types/FlamerEnemy.java @@ -1,22 +1,20 @@ -package io.anuke.mindustry.entities.enemies; +package io.anuke.mindustry.entities.enemies.types; import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.enemies.EnemyType; -public class FlamerEnemy extends Enemy{ +public class FlamerEnemy extends EnemyType { public FlamerEnemy() { + super("flamerenemy"); speed = 0.35f; - - maxhealth = 150; + health = 150; reload = 6; bullet = BulletType.flameshot; shootsound = "flame"; mass = 1.5f; - range = 40; - - heal(); } } diff --git a/core/src/io/anuke/mindustry/entities/enemies/types/FortressEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/FortressEnemy.java new file mode 100644 index 0000000000..98b149448d --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/types/FortressEnemy.java @@ -0,0 +1,61 @@ +package io.anuke.mindustry.entities.enemies.types; + +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; +import io.anuke.mindustry.entities.enemies.EnemyTypes; +import io.anuke.mindustry.graphics.Fx; +import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Timers; +import io.anuke.ucore.util.Angles; + +public class FortressEnemy extends EnemyType { + final int maxSpawn = 6; + final float spawnTime = 190; + + public FortressEnemy() { + super("fortressenemy"); + + speed = 0.25f; + reload = 90; + health = 700; + range = 70f; + bullet = BulletType.yellowshell; + hitsize = 10f; + turretrotatespeed = rotatespeed = 0.08f; + length = 7f; + mass = 7f; + } + + @Override + public void move(Enemy enemy){ + if(enemy.distanceTo(Vars.control.getCore().worldx(), + Vars.control.getCore().worldy()) <= 90f){ + + if(Timers.get(this, "spawn", spawnTime) && enemy.spawned < maxSpawn){ + Angles.translation(enemy.angle, 20f); + + Enemy s = new Enemy(EnemyTypes.fast); //TODO assign type! + s.lane = enemy.lane; + s.tier = enemy.tier; + s.spawner = enemy; + s.set(enemy.x + Angles.x(), enemy.y + Angles.y()); + s.add(); + + Effects.effect(Fx.spawn, enemy); + enemy.spawned ++; + } + + }else { + super.move(enemy); + } + } + + + public void onShoot(Enemy enemy, BulletType type, float rotation){ + Effects.effect(Fx.largeCannonShot, enemy.x + Angles.x(), enemy.y + Angles.y(), enemy.angle); + Effects.shake(3f, 3f, enemy); + } + +} diff --git a/core/src/io/anuke/mindustry/entities/enemies/types/HealerEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/HealerEnemy.java new file mode 100644 index 0000000000..479ba5c58e --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/types/HealerEnemy.java @@ -0,0 +1,91 @@ +package io.anuke.mindustry.entities.enemies.types; + +import com.badlogic.gdx.math.MathUtils; + +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.entities.Bullet; +import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; +import io.anuke.mindustry.graphics.Fx; +import io.anuke.mindustry.graphics.Shaders; +import io.anuke.ucore.core.*; +import io.anuke.ucore.entities.Entities; +import io.anuke.ucore.graphics.Hue; +import io.anuke.ucore.util.Angles; + +public class HealerEnemy extends EnemyType { + + public HealerEnemy() { + super("healerenemy"); + + speed = 0.25f; + reload = 10; + health = 200; + bullet = BulletType.shot; + range = 40f; + alwaysRotate = false; + targetCore = false; + stopNearCore = true; + mass = 1.1f; + } + + @Override + public void move(Enemy enemy){ + super.move(enemy); + + if(enemy.idletime > 60f*3){ //explode after 3 seconds of stillness + explode(enemy); + Effects.effect(Fx.shellexplosion, enemy); + Effects.effect(Fx.shellsmoke, enemy); + } + } + + @Override + public void updateTargeting(Enemy enemy, boolean nearCore){ + if(enemy.timer.get(timerTarget, 15)){ + enemy.target = Entities.getClosest(Vars.control.enemyGroup, + enemy.x, enemy.y, range, e -> e instanceof Enemy && e != enemy && ((Enemy)e).healthfrac() < 1f); + } + + if(enemy.target != null){ + updateShooting(enemy); + } + } + + @Override + public void updateShooting(Enemy enemy){ + Enemy target = (Enemy)enemy.target; + + if(target.health < target.maxhealth && enemy.timer.get(timerReload, reload)){ + target.health ++; + enemy.idletime = 0; + } + } + + @Override + public void drawOver(Enemy enemy){ + Enemy target = (Enemy)enemy.target; + + if(target == null) return; + + Angles.translation(enemy.angleTo(target), 5f); + + Graphics.shader(); + if(target.health < target.maxhealth){ + Draw.color(Hue.rgb(138, 244, 138, (MathUtils.sin(Timers.time()) + 1f) / 13f)); + Draw.alpha(0.9f); + Draw.laser("laser", "laserend", enemy.x + Angles.x(), enemy.y + Angles.y(), target.x - Angles.x()/1.5f, target.y - Angles.y()/1.5f); + Draw.color(); + } + Graphics.shader(Shaders.outline); + } + + void explode(Enemy enemy){ + Bullet b = new Bullet(BulletType.blast, enemy, enemy.x, enemy.y, 0).add(); + b.damage = BulletType.blast.damage + (enemy.tier-1) * 30; + enemy.damage(999); + enemy.remove(); + } + +} diff --git a/core/src/io/anuke/mindustry/entities/enemies/MortarEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/MortarEnemy.java similarity index 54% rename from core/src/io/anuke/mindustry/entities/enemies/MortarEnemy.java rename to core/src/io/anuke/mindustry/entities/enemies/types/MortarEnemy.java index 9df78bf784..e990d77d12 100644 --- a/core/src/io/anuke/mindustry/entities/enemies/MortarEnemy.java +++ b/core/src/io/anuke/mindustry/entities/enemies/types/MortarEnemy.java @@ -1,12 +1,14 @@ -package io.anuke.mindustry.entities.enemies; +package io.anuke.mindustry.entities.enemies.types; import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.enemies.EnemyType; -public class MortarEnemy extends Enemy{ +public class MortarEnemy extends EnemyType { public MortarEnemy() { + super("mortarenemy"); - maxhealth = 200; + health = 200; speed = 0.25f; reload = 100f; bullet = BulletType.shell; @@ -14,8 +16,6 @@ public class MortarEnemy extends Enemy{ rotatespeed = 0.05f; range = 120f; mass = 1.2f; - - heal(); } } diff --git a/core/src/io/anuke/mindustry/entities/enemies/types/RapidEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/RapidEnemy.java new file mode 100644 index 0000000000..388f16894a --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/types/RapidEnemy.java @@ -0,0 +1,21 @@ +package io.anuke.mindustry.entities.enemies.types; + +import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.enemies.EnemyType; + +public class RapidEnemy extends EnemyType { + + public RapidEnemy() { + super("rapidenemy"); + + reload = 8; + bullet = BulletType.purple; + rotatespeed = 0.08f; + health = 260; + speed = 0.33f; + hitsize = 8f; + mass = 3f; + range = 70; + } + +} diff --git a/core/src/io/anuke/mindustry/entities/enemies/types/StandardEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/StandardEnemy.java new file mode 100644 index 0000000000..abff564c44 --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/types/StandardEnemy.java @@ -0,0 +1,10 @@ +package io.anuke.mindustry.entities.enemies.types; + +import io.anuke.mindustry.entities.enemies.EnemyType; + +public class StandardEnemy extends EnemyType { + + public StandardEnemy(){ + super("standardenemy"); + } +} diff --git a/core/src/io/anuke/mindustry/entities/enemies/types/TankEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/TankEnemy.java new file mode 100644 index 0000000000..297bea37ea --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/types/TankEnemy.java @@ -0,0 +1,33 @@ +package io.anuke.mindustry.entities.enemies.types; + +import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; +import io.anuke.ucore.util.Angles; + +public class TankEnemy extends EnemyType { + + public TankEnemy() { + super("tankenemy"); + + health = 350; + speed = 0.24f; + reload = 90f; + rotatespeed = 0.06f; + bullet = BulletType.small; + length = 3f; + mass = 1.4f; + } + + @Override + public void shoot(Enemy enemy){ + super.shoot(enemy); + + Angles.translation(enemy.angle, 8f); + + Angles.shotgun(3, 8f, enemy.angle, f -> { + enemy.shoot(bullet, f); + }); + } + +} diff --git a/core/src/io/anuke/mindustry/entities/enemies/types/TargetEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/TargetEnemy.java new file mode 100644 index 0000000000..7880f71ecb --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/types/TargetEnemy.java @@ -0,0 +1,58 @@ +package io.anuke.mindustry.entities.enemies.types; + +import com.badlogic.gdx.graphics.Color; + +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; +import io.anuke.mindustry.entities.enemies.EnemyTypes; +import io.anuke.ucore.core.Draw; +import io.anuke.ucore.core.Timers; +import io.anuke.ucore.util.Mathf; + +public class TargetEnemy extends EnemyType { + + public TargetEnemy(){ + super("targetenemy"); + + speed = 0f; + health = 25; + shootsound = null; + } + + @Override + public void move(Enemy enemy){ + super.move(enemy); + } + + @Override + public void shoot(Enemy enemy){ + //do nothing + } + + @Override + public void removed(Enemy enemy){ + //don't call enemy death since this is only a target + } + + @Override + public void draw(Enemy enemy){ + super.draw(enemy); + + Draw.color(Color.YELLOW); + + if(Vars.control.getTutorial().showTarget()){ + Draw.spikes(enemy.x, enemy.y, 11f + Mathf.sin(Timers.time(), 7f, 1f), 4f, 8, Timers.time()); + } + + Draw.color(); + } + + @Override + public void onDeath(Enemy enemy){ + super.onDeath(enemy); + Timers.run(100f, ()->{ + new Enemy(EnemyTypes.target).set(enemy.x, enemy.y).add(); + }); + } +} diff --git a/core/src/io/anuke/mindustry/entities/enemies/types/TitanEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/types/TitanEnemy.java new file mode 100644 index 0000000000..2aca97437e --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/enemies/types/TitanEnemy.java @@ -0,0 +1,47 @@ +package io.anuke.mindustry.entities.enemies.types; + +import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; +import io.anuke.ucore.core.Timers; +import io.anuke.ucore.util.Angles; +import io.anuke.ucore.util.Mathf; + +public class TitanEnemy extends EnemyType { + + public TitanEnemy() { + super("titanenemy"); + + speed = 0.26f; + reload = 30; + health = 430; + range = 60f; + bullet = BulletType.small; + hitsize = 7f; + mass = 4f; + } + + @Override + public void updateShooting(Enemy enemy){ + Timers.get(enemy, "salvo", 240); + + if(Timers.getTime(enemy, "salvo") < 60){ + if(Timers.get(enemy, "salvoShoot", 6)){ + enemy.shoot(BulletType.flame, Mathf.range(20f)); + } + } + + if(Timers.get(enemy, "shotgun", 80)){ + Angles.shotgun(5, 10f, 0f, f->{ + enemy.shoot(BulletType.smallSlow, f); + }); + } + + if(Timers.get(enemy, "circle", 200)){ + Angles.circle(8, f->{ + enemy.shoot(BulletType.smallSlow, f); + }); + } + } + +} diff --git a/core/src/io/anuke/mindustry/io/NetworkIO.java b/core/src/io/anuke/mindustry/io/NetworkIO.java index 210139242b..385e318084 100644 --- a/core/src/io/anuke/mindustry/io/NetworkIO.java +++ b/core/src/io/anuke/mindustry/io/NetworkIO.java @@ -1,10 +1,12 @@ package io.anuke.mindustry.io; import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.TimeUtils; import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.GameMode; import io.anuke.mindustry.world.Tile; @@ -16,9 +18,6 @@ import io.anuke.ucore.entities.Entities; import java.io.*; -import static io.anuke.mindustry.io.SaveFileVersion.enemyIDs; -import static io.anuke.mindustry.io.SaveFileVersion.idEnemies; - public class NetworkIO { private static final int fileVersionID = 13; @@ -45,28 +44,20 @@ public class NetworkIO { } //--ENEMIES-- + Array enemies = Vars.control.enemyGroup.all(); - int totalEnemies = 0; + stream.writeInt(enemies.size); //enemy amount - for(Enemy entity : Vars.control.enemyGroup.all()){ - if(idEnemies.containsKey(entity.getClass())){ - totalEnemies ++; - } - } - - stream.writeInt(totalEnemies); //enemy amount - - for(Enemy enemy : Vars.control.enemyGroup.all()){ - if(idEnemies.containsKey(enemy.getClass())){ - stream.writeInt(enemy.id); - stream.writeByte(idEnemies.get(enemy.getClass())); //type - stream.writeByte(enemy.lane); //lane - stream.writeFloat(enemy.x); //x - stream.writeFloat(enemy.y); //y - stream.writeByte(enemy.tier); //tier - stream.writeShort(enemy.health); //health - stream.writeShort(enemy.node); //current node - } + for(int i = 0; i < enemies.size; i ++){ + Enemy enemy = enemies.get(i); + stream.writeInt(enemy.id); + stream.writeByte(enemy.type.id); //type + stream.writeByte(enemy.lane); //lane + stream.writeFloat(enemy.x); //x + stream.writeFloat(enemy.y); //y + stream.writeByte(enemy.tier); //tier + stream.writeShort(enemy.health); //health + stream.writeShort(enemy.node); //current node } //--MAP DATA-- @@ -210,19 +201,15 @@ public class NetworkIO { short health = stream.readShort(); short node = stream.readShort(); - try{ - Enemy enemy = ClassReflection.newInstance(enemyIDs.get(type)); - enemy.id = id; - enemy.lane = lane; - enemy.health = health; - enemy.x = x; - enemy.y = y; - enemy.tier = tier; - enemy.node = node; - enemy.add(Vars.control.enemyGroup); - }catch (Exception e){ - throw new RuntimeException(e); - } + Enemy enemy = new Enemy(EnemyType.getByID(type)); + enemy.id = id; + enemy.lane = lane; + enemy.health = health; + enemy.x = x; + enemy.y = y; + enemy.tier = tier; + enemy.node = node; + enemy.add(Vars.control.enemyGroup); } Vars.control.setWaveData(enemies, wave, wavetime); diff --git a/core/src/io/anuke/mindustry/io/SaveFileVersion.java b/core/src/io/anuke/mindustry/io/SaveFileVersion.java index 49a63d59b9..f95e72ff44 100644 --- a/core/src/io/anuke/mindustry/io/SaveFileVersion.java +++ b/core/src/io/anuke/mindustry/io/SaveFileVersion.java @@ -1,34 +1,10 @@ package io.anuke.mindustry.io; -import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.ObjectMap; -import io.anuke.mindustry.entities.enemies.*; - import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; public abstract class SaveFileVersion { - public static final Array> enemyIDs = Array.with( - Enemy.class, - FastEnemy.class, - RapidEnemy.class, - FlamerEnemy.class, - TankEnemy.class, - BlastEnemy.class, - MortarEnemy.class, - TestEnemy.class, - HealerEnemy.class, - TitanEnemy.class, - EmpEnemy.class - ); - - public static final ObjectMap, Byte> idEnemies = new ObjectMap, Byte>(){{ - for(int i = 0; i < enemyIDs.size; i ++){ - put(enemyIDs.get(i), (byte)i); - } - }}; - public final int version; public SaveFileVersion(int version){ diff --git a/core/src/io/anuke/mindustry/io/versions/Save12.java b/core/src/io/anuke/mindustry/io/versions/Save12.java index 9aab74821f..a4a893b9b4 100644 --- a/core/src/io/anuke/mindustry/io/versions/Save12.java +++ b/core/src/io/anuke/mindustry/io/versions/Save12.java @@ -2,9 +2,9 @@ package io.anuke.mindustry.io.versions; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.TimeUtils; -import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; import io.anuke.mindustry.io.SaveFileVersion; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Weapon; @@ -101,7 +101,7 @@ public class Save12 extends SaveFileVersion { int health = stream.readInt(); try{ - Enemy enemy = ClassReflection.newInstance(enemyIDs.get(type)); + Enemy enemy = new Enemy(EnemyType.getByID(type)); enemy.lane = lane; enemy.health = health; enemy.x = x; @@ -219,29 +219,18 @@ public class Save12 extends SaveFileVersion { //--ENEMIES-- - int totalEnemies = 0; - Array enemies = Vars.control.enemyGroup.all(); - for(int i = 0; i < enemies.size; i ++){ - Enemy enemy = enemies.get(i); - if(idEnemies.containsKey(enemy.getClass())){ - totalEnemies ++; - } - } - - stream.writeInt(totalEnemies); //enemy amount + stream.writeInt(enemies.size); //enemy amount for(int i = 0; i < enemies.size; i ++){ Enemy enemy = enemies.get(i); - if(idEnemies.containsKey(enemy.getClass())){ - stream.writeByte(idEnemies.get(enemy.getClass())); //type - stream.writeByte(enemy.lane); //lane - stream.writeFloat(enemy.x); //x - stream.writeFloat(enemy.y); //y - stream.writeByte(enemy.tier); //tier - stream.writeInt(enemy.health); //health - } + stream.writeByte(enemy.type.id); //type + stream.writeByte(enemy.lane); //lane + stream.writeFloat(enemy.x); //x + stream.writeFloat(enemy.y); //y + stream.writeByte(enemy.tier); //tier + stream.writeInt(enemy.health); //health } //--MAP DATA-- diff --git a/core/src/io/anuke/mindustry/io/versions/Save13.java b/core/src/io/anuke/mindustry/io/versions/Save13.java index 220daf1bc6..39ce78b9fa 100644 --- a/core/src/io/anuke/mindustry/io/versions/Save13.java +++ b/core/src/io/anuke/mindustry/io/versions/Save13.java @@ -2,9 +2,9 @@ package io.anuke.mindustry.io.versions; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.TimeUtils; -import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; import io.anuke.mindustry.io.SaveFileVersion; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Weapon; @@ -101,7 +101,7 @@ public class Save13 extends SaveFileVersion { int health = stream.readShort(); try{ - Enemy enemy = ClassReflection.newInstance(enemyIDs.get(type)); + Enemy enemy = new Enemy(EnemyType.getByID(type)); enemy.lane = lane; enemy.health = health; enemy.x = x; @@ -228,30 +228,18 @@ public class Save13 extends SaveFileVersion { } //--ENEMIES-- - - int totalEnemies = 0; - Array enemies = Vars.control.enemyGroup.all(); - for(int i = 0; i < enemies.size; i ++){ - Enemy enemy = enemies.get(i); - if(idEnemies.containsKey(enemy.getClass())){ - totalEnemies ++; - } - } - - stream.writeInt(totalEnemies); //enemy amount + stream.writeInt(enemies.size); //enemy amount for(int i = 0; i < enemies.size; i ++){ Enemy enemy = enemies.get(i); - if(idEnemies.containsKey(enemy.getClass())){ - stream.writeByte(idEnemies.get(enemy.getClass())); //type - stream.writeByte(enemy.lane); //lane - stream.writeFloat(enemy.x); //x - stream.writeFloat(enemy.y); //y - stream.writeByte(enemy.tier); //tier - stream.writeShort(enemy.health); //health - } + stream.writeByte(enemy.type.id); //type + stream.writeByte(enemy.lane); //lane + stream.writeFloat(enemy.x); //x + stream.writeFloat(enemy.y); //y + stream.writeByte(enemy.tier); //tier + stream.writeShort(enemy.health); //health } //--MAP DATA-- diff --git a/core/src/io/anuke/mindustry/io/versions/Save14.java b/core/src/io/anuke/mindustry/io/versions/Save14.java index 84f0aa150b..ce61a074e4 100644 --- a/core/src/io/anuke/mindustry/io/versions/Save14.java +++ b/core/src/io/anuke/mindustry/io/versions/Save14.java @@ -3,9 +3,9 @@ package io.anuke.mindustry.io.versions; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.TimeUtils; -import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyType; import io.anuke.mindustry.io.SaveFileVersion; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Weapon; @@ -119,7 +119,7 @@ public class Save14 extends SaveFileVersion{ int health = stream.readShort(); try{ - Enemy enemy = ClassReflection.newInstance(enemyIDs.get(type)); + Enemy enemy = new Enemy(EnemyType.getByID(type)); enemy.lane = lane; enemy.health = health; enemy.x = x; @@ -257,29 +257,18 @@ public class Save14 extends SaveFileVersion{ //--ENEMIES-- - int totalEnemies = 0; - Array enemies = Vars.control.enemyGroup.all(); - for(int i = 0; i < enemies.size; i ++){ - Enemy enemy = enemies.get(i); - if(idEnemies.containsKey(enemy.getClass())){ - totalEnemies ++; - } - } - - stream.writeInt(totalEnemies); //enemy amount + stream.writeInt(enemies.size); //enemy amount for(int i = 0; i < enemies.size; i ++){ Enemy enemy = enemies.get(i); - if(idEnemies.containsKey(enemy.getClass())){ - stream.writeByte(idEnemies.get(enemy.getClass())); //type - stream.writeByte(enemy.lane); //lane - stream.writeFloat(enemy.x); //x - stream.writeFloat(enemy.y); //y - stream.writeByte(enemy.tier); //tier - stream.writeShort(enemy.health); //health - } + stream.writeByte(enemy.type.id); //type + stream.writeByte(enemy.lane); //lane + stream.writeFloat(enemy.x); //x + stream.writeFloat(enemy.y); //y + stream.writeByte(enemy.tier); //tier + stream.writeShort(enemy.health); //health } //--MAP DATA-- diff --git a/core/src/io/anuke/mindustry/net/Registrator.java b/core/src/io/anuke/mindustry/net/Registrator.java index f8d037eaee..ef2969f7b8 100644 --- a/core/src/io/anuke/mindustry/net/Registrator.java +++ b/core/src/io/anuke/mindustry/net/Registrator.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.net; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.entities.Player; -import io.anuke.mindustry.entities.enemies.*; +import io.anuke.mindustry.entities.enemies.Enemy; import io.anuke.mindustry.net.Packets.*; import io.anuke.mindustry.net.Streamable.StreamBegin; import io.anuke.mindustry.net.Streamable.StreamChunk; @@ -50,17 +50,7 @@ public class Registrator { Player.class, Mech.class, - Enemy.class, - FastEnemy.class, - RapidEnemy.class, - FlamerEnemy.class, - TankEnemy.class, - BlastEnemy.class, - MortarEnemy.class, - TestEnemy.class, - HealerEnemy.class, - TitanEnemy.class, - EmpEnemy.class + Enemy.class }; } } diff --git a/core/src/io/anuke/mindustry/world/BlockLoader.java b/core/src/io/anuke/mindustry/world/BlockLoader.java index 0b3c96bb1d..2fef106002 100644 --- a/core/src/io/anuke/mindustry/world/BlockLoader.java +++ b/core/src/io/anuke/mindustry/world/BlockLoader.java @@ -117,10 +117,6 @@ public class BlockLoader { //add any new block sections here }; - for(Block block : Block.getAllBlocks()){ - UCore.log("\""+block.name+"\"", block.id, ""); - } - for(String string : defaultMap.keys()){ Block block = Block.getByName(string); blockmap.put(defaultMap.get(string, -1), block); diff --git a/core/src/io/anuke/mindustry/world/Generator.java b/core/src/io/anuke/mindustry/world/Generator.java index 693e4008d1..aa1336303f 100644 --- a/core/src/io/anuke/mindustry/world/Generator.java +++ b/core/src/io/anuke/mindustry/world/Generator.java @@ -4,11 +4,11 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.ObjectMap; - import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState; import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.entities.enemies.TargetEnemy; +import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.entities.enemies.EnemyTypes; import io.anuke.mindustry.world.ColorMapper.BlockPair; import io.anuke.mindustry.world.blocks.Blocks; import io.anuke.mindustry.world.blocks.SpecialBlocks; @@ -77,7 +77,7 @@ public class Generator{ } if(color == Hue.rgb(Color.PURPLE)){ - if(!Vars.android) new TargetEnemy().set(x * Vars.tilesize, y * Vars.tilesize).add(); + if(!Vars.android) new Enemy(EnemyTypes.target).set(x * Vars.tilesize, y * Vars.tilesize).add(); floor = Blocks.stone; } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java index 4a8da2fd5b..38391da0f0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java @@ -149,7 +149,7 @@ public class Turret extends Block{ if(entity.target != null){ float targetRot = Angles.predictAngle(tile.worldx(), tile.worldy(), - entity.target.x, entity.target.y, entity.target.xvelocity, entity.target.yvelocity, bullet.speed); + entity.target.x, entity.target.y, entity.target.velocity.x, entity.target.velocity.y, bullet.speed); if(Float.isNaN(entity.rotation)){ entity.rotation = 0; @@ -192,17 +192,17 @@ public class Turret extends Block{ float hittime = dst / bullet.speed; float angle = Angles.predictAngle(tile.worldx(), tile.worldy(), - entity.target.x, entity.target.y, entity.target.xvelocity, entity.target.yvelocity, bullet.speed); + entity.target.x, entity.target.y, entity.target.velocity.x, entity.target.velocity.y, bullet.speed); - float predictX = entity.target.x + entity.target.xvelocity * hittime, - predictY = entity.target.y + entity.target.yvelocity * hittime; + float predictX = entity.target.x + entity.target.velocity.x * hittime, + predictY = entity.target.y + entity.target.velocity.y * hittime; Draw.color(Color.GREEN); Draw.line(tile.worldx(), tile.worldy(), entity.target.x, entity.target.y); Draw.color(Color.RED); - Draw.line(tile.worldx(), tile.worldy(), entity.target.x + entity.target.xvelocity * hittime, - entity.target.y + entity.target.yvelocity * hittime); + Draw.line(tile.worldx(), tile.worldy(), entity.target.x + entity.target.velocity.x * hittime, + entity.target.y + entity.target.velocity.y * hittime); Draw.color(Color.PURPLE); Draw.thick(2f);