Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

70 Zeilen
1.8 KiB

  1. #pragma once
  2. #include <ecs/core/system/data_proxy/single.h>
  3. namespace ecs {
  4. namespace core {
  5. namespace system {
  6. namespace data_proxy {
  7. /* single */
  8. template<typename T_context, typename T_instance>
  9. template<typename T_func>
  10. inline void single<T_context, T_instance>
  11. ::for_entities(T_func&& func) const
  12. {
  13. for (auto& e : this->instance.subscribed())
  14. {
  15. std::forward<T_func>(func)(e);
  16. }
  17. }
  18. template<typename T_context, typename T_instance>
  19. template<typename T_func>
  20. inline void single<T_context, T_instance>
  21. ::for_other_entities(T_func&& func) const
  22. { }
  23. template<typename T_context, typename T_instance>
  24. template<typename T_func>
  25. inline void single<T_context, T_instance>
  26. ::for_all_entities(T_func&& func) const
  27. {
  28. for_entities(std::forward<T_func>(func));
  29. }
  30. template<typename T_context, typename T_instance>
  31. inline size_t single<T_context, T_instance>
  32. ::entity_count() const
  33. {
  34. return this->instance.subscribed_count();
  35. }
  36. template<typename T_context, typename T_instance>
  37. inline size_t single<T_context, T_instance>
  38. ::other_entity_count() const
  39. {
  40. return 0;
  41. }
  42. template<typename T_context, typename T_instance>
  43. inline size_t single<T_context, T_instance>
  44. ::all_entity_count() const
  45. {
  46. return entity_count();
  47. }
  48. /* make_single */
  49. template<typename T_context, typename T_instance>
  50. constexpr decltype(auto) make_single(T_context&& context, T_instance&& instance)
  51. {
  52. using context_type = mp::decay_t<T_context>;
  53. using instance_type = mp::decay_t<T_instance>;
  54. return single<context_type, instance_type>(
  55. std::forward<T_context>(context),
  56. std::forward<T_instance>(instance));
  57. }
  58. } } } }