/** * Calculates movements and collisions between objects in play * * @return */ public String calculate() { if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_PLAYING)) { /** *Movement** */ for (Projectile proj : projectiles) { proj.move(); } moveEnemies(); /** *Collisions** */ calculatePlayerVsWall(); calculateProjectileEscape(); calculateCollisionEnemyVsProjectile(); if (enemies.isEmpty()) { gameStatus = GameConstants.GAME_STATUS_GAME_OVER; } calculateEnemyReachingPlayer(); for (Explosion exp : explosions) { if (exp.isDead()) { exp.dispose(); explosions.remove(exp); break; } } } if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_RETURN)) return GameConstants.APPLICATION_MENU; if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_RETRY)) loadLevel(1); if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_INTRO)) { intro_enemy_offset -= intro_speed; intro_player_offset--; if (intro_enemy_offset <= 0 && intro_player_offset <= 0) { gameStatus = GameConstants.GAME_STATUS_INTRO_START; intro_start_time = System.currentTimeMillis(); } else if (intro_enemy_offset < 0) { intro_enemy_offset = 0; } else if (intro_player_offset < 0) { intro_player_offset = 0; } } if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_INTRO_START)) { long current = System.currentTimeMillis(); if (current - intro_start_time >= 1000) { startTime = System.currentTimeMillis(); gameStatus = GameConstants.GAME_STATUS_PLAYING; } } if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_OUTRO)) { if (enemy_hero == null) { selectEnemy(); outro_distance_x = enemy_hero.x - player1.x; outro_distance_y = enemy_hero.y - player1.y; } else { if (calculateOverlap(enemy_hero, player1) || enemy_hero.y <= player1.y) { gameStatus = GameConstants.GAME_STATUS_GAME_OVER; } enemy_hero.x -= outro_distance_x / outro_distance_y; enemy_hero.y -= outro_distance_y / outro_distance_y; } } return null; }