diff --git a/src/com/annimon/influencexxii/EnemiesController.java b/src/com/annimon/influencexxii/EnemiesController.java index 7de7707..7c5046b 100644 --- a/src/com/annimon/influencexxii/EnemiesController.java +++ b/src/com/annimon/influencexxii/EnemiesController.java @@ -15,6 +15,7 @@ public class EnemiesController { public EnemiesController() { enemies = new Array(); + difficultMode = 0; } public void setScreenParameters(float width, float height) { @@ -35,10 +36,12 @@ public class EnemiesController { } public boolean isCollide(float x, float y) { + boolean collide = false; for (Enemy enemy : enemies) { - if (enemy.isCollide(x, y)) return true; + enemy.update(x, y, screenWidth, screenHeight, difficultMode); + if (enemy.isCollide(x, y)) collide = true; } - return false; + return collide; } public void killEnemy(float x, float y) { diff --git a/src/com/annimon/influencexxii/Enemy.java b/src/com/annimon/influencexxii/Enemy.java index 3daea95..069abb6 100644 --- a/src/com/annimon/influencexxii/Enemy.java +++ b/src/com/annimon/influencexxii/Enemy.java @@ -2,6 +2,7 @@ package com.annimon.influencexxii; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; @@ -33,4 +34,51 @@ public class Enemy { renderer.setColor(color); renderer.rect(rect.x, rect.y, rect.width, rect.height); } + + public void update(float px, float py, float scrWidth, float scrHeight, int difficultMode) { + if (difficultMode == 0) return; + + final int speed = 1 + difficultMode / 3; + changeCoords(speed); + boolean changeDir = validateToScreen(scrWidth, scrHeight); + + switch (difficultMode % 3) { + case 2: // Medium + if (rect.contains(px, py)) { + rect.x += dir.x * speed; + } + break; + case 0: // Difficult + if ( (rect.contains(px - 3, py - 3)) || (rect.contains(px + 3, py + 3)) ) { + if (Math.abs(dir.x) < 0.2f) dir.x = MathUtils.random(-1f, 1f); + if (Math.abs(dir.y) < 0.2f) dir.y = MathUtils.random(-1f, 1f); + changeCoords(speed); + } + break; + } + + if (changeDir) inverseDirection(); + else if (MathUtils.random(50) == 10) { + changeDirection(); + } + } + + private void changeCoords(int speed) { + rect.x += dir.x * speed; + rect.y += dir.y * speed; + } + + private void changeDirection() { + dir.x = MathUtils.random(-1f, 1f); + dir.y = MathUtils.random(-1f, 1f); + } + + private void inverseDirection() { + dir.scl(-1f, -1f); + } + + private boolean validateToScreen(float width, float height) { + Rectangle screen = new Rectangle(0, 0, width, height); + return (!screen.contains(rect)); + } } \ No newline at end of file