EntityRenderer.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "client/rendering/entity/EntityRenderer.h"
  2. #include "client/engine/Utils.h"
  3. EntityRenderer::EntityRenderer() : texture("resources/skin.png")
  4. {
  5. // head
  6. mesh.addCuboid(0.0f, 0.0f, 0.0f, 0.5f, 0.5f, 0.5f,
  7. 0.125f, 0.0f, 0.25f, 0.125f,
  8. 0.25f, 0.0f, 0.375f, 0.125f,
  9. 0.25f, 0.125f, 0.375f, 0.25f,
  10. 0.0f, 0.125f, 0.125f, 0.25f,
  11. 0.125f, 0.125f, 0.25f, 0.25f,
  12. 0.375f, 0.125f, 0.5f, 0.25f);
  13. // right arm
  14. mesh.addCuboid(0.0f, 0.0f, 0.0f, 0.25f, 0.75f, 0.25f,
  15. 0.6875f, 0.25f, 0.75f, 0.3125f,
  16. 0.75f, 0.25f, 0.8125f, 0.3125f,
  17. 0.75f, 0.3125f, 0.8125f, 0.5f,
  18. 0.625f, 0.3125f, 0.6875f, 0.5f,
  19. 0.6875f, 0.3125f, 0.75f, 0.5f,
  20. 0.8125f, 0.3125f, 0.875f, 0.5f);
  21. // left arm
  22. mesh.addCuboid(0.0f, 0.0f, 0.0f, 0.25f, 0.75f, 0.25f,
  23. 0.5625f, 0.75f, 0.625f, 0.8125f,
  24. 0.625f, 0.75f, 0.6875f, 0.8125f,
  25. 0.625f, 0.8125f, 0.6875f, 1.0f,
  26. 0.5f, 0.8125f, 0.5625f, 1.0f,
  27. 0.5625f, 0.8125f, 0.625f, 1.0f,
  28. 0.6875f, 0.8125f, 0.75f, 1.0f);
  29. // body
  30. mesh.addCuboid(0.0f, 0.0f, 0.0f, 0.5f, 0.75f, 0.25f,
  31. 0.3125f, 0.25f, 0.4375f, 0.3125f,
  32. 0.4375f, 0.25f, 0.5625f, 0.3125f,
  33. 0.4375f, 0.3125f, 0.5f, 0.5f,
  34. 0.25f, 0.3125f, 0.3125f, 0.5f,
  35. 0.3125f, 0.3125f, 0.4375f, 0.5f,
  36. 0.5f, 0.3125f, 0.625f, 0.5f);
  37. // right leg
  38. mesh.addCuboid(0.0f, 0.0f, 0.0f, 0.25f, 0.75f, 0.25f,
  39. 0.0625f, 0.25f, 0.125f, 0.3125f,
  40. 0.125f, 0.25f, 0.1875f, 0.3125f,
  41. 0.125f, 0.3125f, 0.1875f, 0.5f,
  42. 0.0f, 0.3125f, 0.0625f, 0.5f,
  43. 0.0625f, 0.3125f, 0.125f, 0.5f,
  44. 0.1875f, 0.3125f, 0.25f, 0.5f);
  45. // left leg
  46. mesh.addCuboid(0.0f, 0.0f, 0.0f, 0.25f, 0.75f, 0.25f,
  47. 0.3125f, 0.75f, 0.375f, 0.8125f,
  48. 0.375f, 0.75f, 0.4375f, 0.8125f,
  49. 0.375f, 0.8125f, 0.4375f, 1.0f,
  50. 0.25f, 0.8125f, 0.3125f, 1.0f,
  51. 0.3125f, 0.8125f, 0.375f, 1.0f,
  52. 0.4375f, 0.8125f, 0.5f, 1.0f);
  53. mesh.build();
  54. }
  55. EntityRenderer::~EntityRenderer()
  56. {
  57. }
  58. void EntityRenderer::tick()
  59. {
  60. lifetime += 15;
  61. }
  62. void EntityRenderer::renderTick(Shader& shader, Camera3D camera, DirectRenderer& dr, float lag)
  63. {
  64. const int d = 360;
  65. float f1 = lifetime % d;
  66. if(f1 >= d / 2)
  67. {
  68. f1 = d - f1;
  69. }
  70. float f2 = (lifetime + 15) % d;
  71. if(f2 >= d / 2)
  72. {
  73. f2 = d - f2;
  74. }
  75. float inter = interpolate(lag, f1, f2);
  76. texture.bind();
  77. shader.setToIdentity();
  78. shader.translateTo(5.0f + 0.5f, 42.0f, 15.0f + 0.25f);
  79. //shader.scale(3, 6, 3);
  80. shader.rotateY(90);
  81. shader.translate(-0.5f, 0.0f, -0.25f);
  82. shader.push();
  83. shader.translate(0.25f + 0.25f, 1.5f, 0.0f + 0.25f);
  84. shader.rotateY(inter * 0.25f - 22.5f);
  85. shader.translate(-0.25f, 0.0f, -0.25f);
  86. shader.updateModelMatrix();
  87. mesh.draw(0, 36);
  88. shader.pop();
  89. shader.push();
  90. shader.translate(0.0f, 1.375f, 0.25f);
  91. shader.rotateX(inter / 6 - 15);
  92. shader.translate(0.0f, -0.625f, -0.125f);
  93. shader.updateModelMatrix();
  94. mesh.draw(36, 36);
  95. shader.pop();
  96. shader.push();
  97. shader.translate(0.75f, 1.375f, 0.25f);
  98. shader.rotateX(- inter / 6 + 15);
  99. shader.translate(0.0f, -0.625f, -0.125f);
  100. shader.updateModelMatrix();
  101. mesh.draw(72, 36);
  102. shader.pop();
  103. shader.push();
  104. shader.translate(0.25f, 0.75f, 0.125f);
  105. shader.updateModelMatrix();
  106. mesh.draw(108, 36);
  107. shader.pop();
  108. shader.push();
  109. shader.translate(0.25f, 0.0f, 0.125f);
  110. shader.updateModelMatrix();
  111. mesh.draw(144, 36);
  112. shader.pop();
  113. shader.push();
  114. shader.translate(0.5f, 0.0f, 0.125f);
  115. shader.updateModelMatrix();
  116. mesh.draw(180, 36);
  117. shader.pop();
  118. }