💿🐜 Antkeeper source code https://antkeeper.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
3.5 KiB

  1. /*
  2. * Copyright (C) 2021 Christopher J. Howard
  3. *
  4. * This file is part of Antkeeper source code.
  5. *
  6. * Antkeeper source code is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * Antkeeper source code is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. #include "game/ant/morphogenesis.hpp"
  20. #include "render/material.hpp"
  21. namespace game {
  22. namespace ant {
  23. static render::model* generate_queen(const ant::breed& breed);
  24. static render::model* generate_worker(const ant::breed& breed);
  25. static render::model* generate_soldier(const ant::breed& breed);
  26. static render::model* generate_male(const ant::breed& breed);
  27. static render::material* build_material(const ant::breed& breed);
  28. static render::model* build_model
  29. (
  30. render::material* material,
  31. render::model* antennae,
  32. render::model* eyes,
  33. render::model* forewings,
  34. render::model* gaster,
  35. render::model* head,
  36. render::model* hindwings,
  37. render::model* legs,
  38. render::model* mandibles,
  39. render::model* mesosoma,
  40. render::model* ocelli,
  41. render::model* sting,
  42. render::model* waist
  43. );
  44. render::model* morphogenesis(const ant::breed& breed, ant::caste caste)
  45. {
  46. switch (caste)
  47. {
  48. case ant::caste::queen:
  49. return generate_queen(breed);
  50. case ant::caste::worker:
  51. return generate_worker(breed);
  52. case ant::caste::soldier:
  53. return generate_soldier(breed);
  54. case ant::caste::male:
  55. return generate_male(breed);
  56. }
  57. return nullptr;
  58. }
  59. render::model* generate_queen(const ant::breed& breed)
  60. {
  61. return nullptr;
  62. }
  63. render::model* generate_worker(const ant::breed& breed)
  64. {
  65. // Get material parameters
  66. // Build material
  67. render::material* material = build_material(breed);
  68. // Get worker body part models
  69. render::model* antennae_model = breed.antennae->model;
  70. render::model* eyes_model = breed.eyes->model;
  71. render::model* gaster_model = breed.gaster->model;
  72. render::model* head_model = breed.head->model;
  73. render::model* legs_model = breed.legs->model;
  74. render::model* mandibles_model = breed.mandibles->model;
  75. render::model* mesosoma_model = breed.mesosoma->model;
  76. render::model* sting_model = breed.sting->model;
  77. render::model* waist_model = breed.waist->model;
  78. // Build worker model
  79. render::model* model = build_model
  80. (
  81. material,
  82. antennae_model,
  83. eyes_model,
  84. nullptr,
  85. gaster_model,
  86. head_model,
  87. nullptr,
  88. legs_model,
  89. mandibles_model,
  90. mesosoma_model,
  91. nullptr,
  92. sting_model,
  93. waist_model
  94. );
  95. return model;
  96. }
  97. render::model* generate_soldier(const ant::breed& breed)
  98. {
  99. return nullptr;
  100. }
  101. render::model* generate_male(const ant::breed& breed)
  102. {
  103. return nullptr;
  104. }
  105. render::material* build_material(const ant::breed& breed)
  106. {
  107. return nullptr;
  108. }
  109. render::model* build_model
  110. (
  111. render::material* material,
  112. render::model* antennae,
  113. render::model* eyes,
  114. render::model* forewings,
  115. render::model* gaster,
  116. render::model* head,
  117. render::model* hindwings,
  118. render::model* legs,
  119. render::model* mandibles,
  120. render::model* mesosoma,
  121. render::model* ocelli,
  122. render::model* sting,
  123. render::model* waist
  124. )
  125. {
  126. return nullptr;
  127. }
  128. } // namespace ant
  129. } // namespace game