Advertisement
ipwxy

Untitled

Feb 1st, 2017
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.96 KB | None | 0 0
  1. package game.world;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Random;
  6.  
  7. import org.jsfml.graphics.Drawable;
  8. import org.jsfml.graphics.RenderStates;
  9. import org.jsfml.graphics.RenderTarget;
  10. import org.jsfml.graphics.Texture;
  11. import org.jsfml.system.Clock;
  12. import org.jsfml.system.Vector2f;
  13.  
  14. import game.Resources;
  15. import game.ui.GameWindow;
  16. import game.ui.InputHandler;
  17. import game.world.object.Enemy;
  18. import game.world.object.GameObject;
  19. import game.world.object.PlayerBeta;
  20. import game.world.object.Projectile;
  21.  
  22. /**
  23.  * The World class holds all game objects and establishes communication among them. Handles creation and destruction of entities.
  24.  */
  25. public class World implements Drawable {
  26.     private List<Enemy> enemies = new ArrayList<>();
  27.     private List<Projectile> projectiles = new ArrayList<>();  
  28.     private PlayerBeta player;
  29.    
  30.     private Clock timer = new Clock();
  31.     private Clock timerShoot = new Clock();
  32.    
  33.     private Texture projectileTexture, playerTexture, enemyTexture;
  34.  
  35.     public World(Resources resources, InputHandler inputHandler) {
  36.         projectileTexture = resources.textures.get(3);
  37.         enemyTexture = resources.textures.get(1);
  38.         playerTexture = resources.textures.get(0);
  39.        
  40.         player = new PlayerBeta(enemyTexture, inputHandler);
  41.     }
  42.  
  43.     /**
  44.      * Handles creation and destruction of entities and also resolves collision.
  45.      */
  46.     public void update() {
  47.         handlePlayerProjectile();
  48.         spawnEnemy();
  49.         updateEntities();
  50.         resolveBulletCollisions();
  51.         checkForDeallocations();
  52.     }
  53.    
  54.     private void updateEntities() {
  55.         player.update();
  56.         enemies.forEach(enemy -> enemy.chaseTarget(player));
  57.         projectiles.forEach(Projectile::update);
  58.     }
  59.    
  60.     private void spawnEnemy() {
  61.         if (timer.getElapsedTime().asSeconds() > 0.2f) {
  62.             Enemy enemy = Enemy.newEnemy(enemyTexture, generateRandomPosition(), player.sprite);
  63.             enemies.add(enemy);
  64.             timer.restart();
  65.         }
  66.     }
  67.    
  68.     private void handlePlayerProjectile() {
  69.         if (GameWindow.inputHandler.isMouseClicked && timerShoot.getElapsedTime().asSeconds() > 0.1f) {
  70.             timerShoot.restart();
  71.             projectiles.add(Projectile.newProjectile(projectileTexture, player.getPosition(), player.direction));
  72.         }
  73.     }
  74.    
  75.     private void resolveBulletCollisions() {
  76.         projectiles.forEach(bullet -> enemies.forEach(enemy -> {
  77.             if(bullet.isCollidingWith(enemy)) {
  78.                 enemy.status = GameObject.Status.DEAD;
  79.             }
  80.         }));
  81.     }
  82.  
  83.     private void checkForDeallocations() {
  84.         projectiles.removeIf(Projectile::isOutOfBounds);
  85.         enemies.removeIf(Enemy::isDead);
  86.     }
  87.  
  88.     private Vector2f generateRandomPosition() {
  89.         int angle = new Random().nextInt(360);
  90.         return new Vector2f(((float) Math.sin(Math.toRadians(angle))) * 500.0f + GameWindow.SCREEN_WIDTH / 2, ((float) Math.cos(Math.toRadians(angle))) * 500.0f + GameWindow.SCREEN_HEIGHT / 2);
  91.     }
  92.  
  93.     @Override
  94.     public void draw(RenderTarget target, RenderStates states) {
  95.         target.draw(player);
  96.         enemies.forEach(target::draw);
  97.         projectiles.forEach(target::draw);
  98.     }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement