PlayerRenderer.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package pathgame.rendering;
  2. import me.hammerle.snuviengine.api.Renderer;
  3. import me.hammerle.snuviengine.api.Texture;
  4. import pathgame.gameplay.Player;
  5. import pathgame.tilemap.TileMap;
  6. import pathgame.tilemap.Tiles;
  7. public class PlayerRenderer
  8. {
  9. private static final Texture CHARACTER = new Texture("resources/character.png");
  10. public void renderTick(TileMap map, TileMapRenderer mapR, Renderer r, Player p, float lag, float offX, float offY)
  11. {
  12. float playerSize = mapR.getScale() * TileRenderer.TILE_SIZE;
  13. r.setMixColorEnabled(false);
  14. r.setColorEnabled(false);
  15. r.setTextureEnabled(true);
  16. r.translateTo(0.0f, 0.0f);
  17. r.updateMatrix();
  18. float yIndex;
  19. float baseX = (p.getLastX() + (p.getX() - p.getLastX()) * lag);
  20. float ix = baseX * mapR.getScale() * TileRenderer.TILE_SIZE + offX;
  21. float baseY = (p.getLastY() + (p.getY() - p.getLastY()) * lag);
  22. float iy = baseY * mapR.getScale() * TileRenderer.TILE_SIZE + offY;
  23. baseX = baseX - (int) baseX;
  24. baseY = baseY - (int) baseY;
  25. int tIndex = 0;
  26. float xTexOff = 0;
  27. float yTexOff = 0;
  28. CHARACTER.bind();
  29. if(p.getVelX() > 0)
  30. {
  31. //go right
  32. yIndex = 2;
  33. tIndex = checkForAnimationIndex(baseX);
  34. }
  35. else if(p.getVelX() < 0)
  36. {
  37. //go left
  38. yIndex = 1;
  39. tIndex = checkForAnimationIndex(baseX);
  40. }
  41. else if(p.getVelY() > 0)
  42. {
  43. //go down
  44. yIndex = 0;
  45. tIndex = checkForAnimationIndex(baseY);
  46. }
  47. else if(p.getVelY() < 0)
  48. {
  49. //go up
  50. yIndex = 3;
  51. tIndex = checkForAnimationIndex(baseY);
  52. }
  53. else
  54. {
  55. //stand still
  56. yIndex = 0;
  57. }
  58. if(p.isSailing())
  59. {
  60. yTexOff = 0.5f;
  61. }
  62. else if(p.getCurrTile()== Tiles.SHALLOW_WATER)
  63. {
  64. xTexOff = 0.5f;
  65. }
  66. float viewScale = r.getViewScale();
  67. ix = (int) (ix * viewScale) / viewScale;
  68. iy = (int) (iy * viewScale) / viewScale;
  69. r.getTextureRenderer().drawRectangle(ix, iy, ix + playerSize, iy + playerSize,
  70. tIndex * 0.125f + xTexOff, yIndex * 0.125f + yTexOff,
  71. (tIndex + 1) * 0.125f + xTexOff, yIndex * 0.125f + 0.125f + yTexOff);
  72. }
  73. private int checkForAnimationIndex(float base)
  74. {
  75. return ((int) (base * 4 * 2)) % 4;
  76. }
  77. }