Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.19 KB | None | 0 0
  1. package ru.mikroacse.rolespell.view;
  2.  
  3. import com.badlogic.gdx.Gdx;
  4. import com.badlogic.gdx.graphics.OrthographicCamera;
  5. import com.badlogic.gdx.graphics.Texture;
  6. import com.badlogic.gdx.graphics.g2d.Sprite;
  7. import com.badlogic.gdx.graphics.g2d.SpriteBatch;
  8. import com.badlogic.gdx.maps.tiled.TiledMapRenderer;
  9. import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
  10. import com.badlogic.gdx.math.Vector2;
  11. import ru.mikroacse.rolespell.model.GameModel;
  12. import ru.mikroacse.rolespell.model.entities.Npc;
  13. import ru.mikroacse.rolespell.model.entities.Player;
  14. import ru.mikroacse.rolespell.model.entities.core.Entity;
  15.  
  16. import java.awt.*;
  17. import java.util.LinkedList;
  18.  
  19. /**
  20.  * Created by MikroAcse on 22.03.2017.
  21.  */
  22. public class WorldRenderer {
  23.     private GameModel model;
  24.  
  25.     private TiledMapRenderer renderer;
  26.     private OrthographicCamera camera;
  27.  
  28.     private SpriteBatch batch;
  29.     private Sprite player;
  30.     private Sprite waypoint;
  31.  
  32.     public WorldRenderer(GameModel model) {
  33.         this.model = model;
  34.  
  35.         renderer = new OrthogonalTiledMapRenderer(model.getWorld().getMap());
  36.         camera = new OrthographicCamera();
  37.         camera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
  38.         camera.update();
  39.  
  40.         player = new Sprite(new Texture("data/player.png"));
  41.         waypoint = new Sprite(new Texture("data/waypoint.png"));
  42.  
  43.         batch = new SpriteBatch();
  44.  
  45.         // TODO: zooming
  46.     }
  47.  
  48.     public void render(float delta) {
  49.         if (model.getWorld() == null) {
  50.             return;
  51.         }
  52.  
  53.         Point observablePosition = cellToMap(model.getObservable().x, model.getObservable().y);
  54.  
  55.         Vector2 cameraPos = new Vector2(observablePosition.x, observablePosition.y);
  56.  
  57.         cameraPos.x = Math.min(cameraPos.x, model.getWorld().getMapRealWidth() - camera.viewportWidth / 2f);
  58.         cameraPos.y = Math.min(cameraPos.y, model.getWorld().getMapRealHeight() - camera.viewportHeight / 2f);
  59.  
  60.         cameraPos.x = Math.max(cameraPos.x, camera.viewportWidth / 2f);
  61.         cameraPos.y = Math.max(cameraPos.y, camera.viewportHeight / 2f);
  62.  
  63.         camera.position.x += (cameraPos.x - camera.position.x) / 4f;
  64.         camera.position.y += (cameraPos.y - camera.position.y) / 4f;
  65.  
  66.         camera.update();
  67.  
  68.         renderer.setView(camera);
  69.         renderer.render(new int[]{0, 1, 2, 3});
  70.  
  71.         batch.begin();
  72.         batch.setProjectionMatrix(camera.combined);
  73.  
  74.         for (Entity entity : model.getWorld().getEntities()) {
  75.             Point entityPosition = cellToMap(entity.x, entity.y);
  76.  
  77.             if (entity instanceof Player) {
  78.                 batch.draw(new Texture("data/player.png"), entityPosition.x, entityPosition.y);
  79.             }
  80.             if (entity instanceof Npc) {
  81.                 batch.draw(new Texture("data/Npc.png"), entityPosition.x, entityPosition.y);
  82.             }
  83.         }
  84.  
  85.         LinkedList<Point> playerPath = model.getPlayer().getPath();
  86.  
  87.         if (!playerPath.isEmpty()) {
  88.             Point waypointPosition = cellToMap(model.getWaypoint().x, model.getWaypoint().y);
  89.  
  90.             waypoint.setPosition(waypointPosition.x, waypointPosition.y);
  91.             waypoint.draw(batch);
  92.  
  93.             for (int i = 0; i < playerPath.size() - 1; i++) {
  94.                 Point pathPoint = playerPath.get(i);
  95.                 Point realPoint = cellToMap(pathPoint.x, pathPoint.y);
  96.  
  97.                 batch.draw(new Texture("data/path.png"), realPoint.x, realPoint.y);
  98.             }
  99.         }
  100.  
  101.         batch.end();
  102.  
  103.         renderer.render(new int[]{4, 5});
  104.     }
  105.  
  106.     public Point globalToLocal(int x, int y) {
  107.         y = (int) camera.viewportHeight - y;
  108.  
  109.         x += camera.position.x - camera.viewportWidth / 2f;
  110.         y += camera.position.y - camera.viewportHeight / 2f;
  111.  
  112.         return new Point(x, y);
  113.     }
  114.  
  115.     public Point cellToMap(int x, int y) {
  116.         return new Point(
  117.                 x * model.getWorld().getMapTileWidth(),
  118.                 y * model.getWorld().getMapTileHeight());
  119.     }
  120.  
  121.     public Point mapToCell(int x, int y) {
  122.         return new Point(
  123.                 x / model.getWorld().getMapTileWidth(),
  124.                 y / model.getWorld().getMapTileHeight());
  125.     }
  126.  
  127.     public void resize(int width, int height) {
  128.         camera.setToOrtho(false, width, height);
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement