EntityRenderer.cpp 4.0 KB

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