horse_archer_renderer.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "horse_archer_renderer.h"
  2. #include "../../../equipment/horse/saddles/roman_saddle_renderer.h"
  3. #include "../../../equipment/horse/tack/reins_renderer.h"
  4. #include "../../../gl/backend.h"
  5. #include "../../../gl/shader.h"
  6. #include "../../../scene_renderer.h"
  7. #include "../../../submitter.h"
  8. #include "../../horse_archer_renderer_base.h"
  9. #include <memory>
  10. namespace Render::GL::Roman {
  11. namespace {
  12. auto make_horse_archer_config() -> HorseArcherRendererConfig {
  13. HorseArcherRendererConfig config;
  14. config.bow_equipment_id = "bow_roman";
  15. config.quiver_equipment_id = "quiver";
  16. config.helmet_equipment_id = "roman_light";
  17. config.armor_equipment_id = "roman_light_armor";
  18. config.cloak_equipment_id = "cloak_carthage";
  19. config.has_cloak = true;
  20. config.cloak_color = {0.70F, 0.15F, 0.18F};
  21. config.cloak_trim_color = {0.78F, 0.72F, 0.58F};
  22. config.cloak_back_material_id = 12;
  23. config.cloak_shoulder_material_id = 13;
  24. config.helmet_offset_moving = 0.04F;
  25. config.fletching_color = {0.85F, 0.40F, 0.40F};
  26. config.horse_attachments.emplace_back(
  27. std::make_shared<RomanSaddleRenderer>());
  28. config.horse_attachments.emplace_back(std::make_shared<ReinsRenderer>());
  29. return config;
  30. }
  31. } // namespace
  32. void register_horse_archer_renderer(EntityRendererRegistry &registry) {
  33. registry.register_renderer(
  34. "troops/roman/horse_archer", [](const DrawContext &ctx, ISubmitter &out) {
  35. static HorseArcherRendererBase const static_renderer(
  36. make_horse_archer_config());
  37. Shader *horse_archer_shader = nullptr;
  38. if (ctx.backend != nullptr) {
  39. QString shader_key = static_renderer.resolve_shader_key(ctx);
  40. horse_archer_shader = ctx.backend->shader(shader_key);
  41. if (horse_archer_shader == nullptr) {
  42. horse_archer_shader =
  43. ctx.backend->shader(QStringLiteral("horse_archer"));
  44. }
  45. }
  46. auto *scene_renderer = dynamic_cast<Renderer *>(&out);
  47. if ((scene_renderer != nullptr) && (horse_archer_shader != nullptr)) {
  48. scene_renderer->set_current_shader(horse_archer_shader);
  49. }
  50. static_renderer.render(ctx, out);
  51. if (scene_renderer != nullptr) {
  52. scene_renderer->set_current_shader(nullptr);
  53. }
  54. });
  55. }
  56. } // namespace Render::GL::Roman