PlayerRenderer.java 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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.gameplay.PlayerAbilities;
  6. import pathgame.tilemap.TileMap;
  7. import pathgame.tilemap.TileRenderType;
  8. public class PlayerRenderer {
  9. private static final Texture CHARACTER = new Texture("resources/character.png");
  10. private static final Texture CHARACTER_HIKER = new Texture("resources/hiker.png");
  11. private static final Texture CHARACTER_HUNTER = new Texture("resources/hunter.png");
  12. private static final Texture CHARACTER_SAILOR = new Texture("resources/sailor.png");
  13. private static final Texture CHARACTER_SWIMMER = new Texture("resources/swimmer.png");
  14. public void renderTick(TileMap map, TileMapRenderer mapR, Renderer r, Player p, float lag, float offX, float offY) {
  15. boolean inWater = p.getCurrTile().getRenderType() == TileRenderType.WATER;
  16. float playerSize = mapR.getScale() * TileRenderer.TILE_SIZE;
  17. r.setMixColorEnabled(false);
  18. r.setColorEnabled(false);
  19. r.setTextureEnabled(true);
  20. r.translateTo(0.0f, 0.0f);
  21. r.updateMatrix();
  22. float yIndex;
  23. float baseX = (p.getLastX() + (p.getX() - p.getLastX()) * lag);
  24. float ix = baseX * mapR.getScale() * TileRenderer.TILE_SIZE + offX;
  25. float baseY = (p.getLastY() + (p.getY() - p.getLastY()) * lag);
  26. float iy = baseY * mapR.getScale() * TileRenderer.TILE_SIZE + offY;
  27. baseX = baseX - (int) baseX;
  28. baseY = baseY - (int) baseY;
  29. int tIndex = 0;
  30. float xTexOff = 0;
  31. float yTexOff = 0;
  32. bindTexture(p, inWater);
  33. if(p.getVelX() > 0) {
  34. yIndex = 2;
  35. tIndex = checkForAnimationIndex(baseX);
  36. } else if(p.getVelX() < 0) {
  37. yIndex = 1;
  38. tIndex = checkForAnimationIndex(baseX);
  39. } else if(p.getVelY() > 0) {
  40. yIndex = 0;
  41. tIndex = checkForAnimationIndex(baseY);
  42. } else if(p.getVelY() < 0) {
  43. yIndex = 3;
  44. tIndex = checkForAnimationIndex(baseY);
  45. } else {
  46. yIndex = p.getFacing().getIndex();
  47. if(inWater && (p.getTicksLived() % 20) < 10) {
  48. tIndex = 1;
  49. }
  50. }
  51. if(p.isSailing()) {
  52. yTexOff = 0.5f;
  53. } else if(inWater) {
  54. xTexOff = 0.5f;
  55. }
  56. float viewScale = r.getViewScale();
  57. ix = (int) (ix * viewScale) / viewScale;
  58. iy = (int) (iy * viewScale) / viewScale;
  59. r.getTextureRenderer().drawRectangle(ix, iy, ix + playerSize, iy + playerSize,
  60. tIndex * 0.125f + xTexOff, yIndex * 0.125f + yTexOff,
  61. (tIndex + 1) * 0.125f + xTexOff, yIndex * 0.125f + 0.125f + yTexOff);
  62. }
  63. private int checkForAnimationIndex(float base) {
  64. return ((int) (base * 4 * 2)) % 4;
  65. }
  66. private void bindTexture(Player p, boolean inWater) {
  67. if(p.isSailing() || inWater || p.getAbilities() == PlayerAbilities.NORMAL) {
  68. CHARACTER.bind();
  69. } else if(p.getAbilities() == PlayerAbilities.HIKER) {
  70. CHARACTER_HIKER.bind();
  71. } else if(p.getAbilities() == PlayerAbilities.HUNTER) {
  72. CHARACTER_HUNTER.bind();
  73. } else if(p.getAbilities() == PlayerAbilities.SAILOR) {
  74. CHARACTER_SAILOR.bind();
  75. } else if(p.getAbilities() == PlayerAbilities.SWIMMER) {
  76. CHARACTER_SWIMMER.bind();
  77. } else {
  78. CHARACTER.bind();
  79. }
  80. }
  81. }