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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 delta 78145 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

_OzyAeLDes>OFYmK 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 Ib4q9e09jDOF#rGn 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);