Fix initializing ecs species components

This commit is contained in:
Nikita Lisitsa 2022-11-09 17:45:49 +03:00
parent 07804bdeda
commit b00a74f431

View file

@ -304,9 +304,10 @@ namespace psemek::util
struct species_impl_base
: species_base
{
species_impl_base(ecs * ecs, std::string name, species_handle id, Components && ... components)
template <typename ... Args>
species_impl_base(ecs * ecs, std::string name, species_handle id, Args && ... components)
: species_base(ecs, std::move(name), id)
, species_components_{std::move(components)...}
, species_components_{std::forward<Args>(components)...}
{}
using species_base::get_species_component;
@ -720,9 +721,9 @@ namespace psemek::util
{
species_handle result{species_.size()};
if (p == policy::sparse)
species_.push_back(std::make_unique<ecs_detail::sparse_species_impl<Components...>>(this, std::move(name), result.value, std::move(components)...));
species_.push_back(std::make_unique<ecs_detail::sparse_species_impl<std::remove_cvref_t<Components>...>>(this, std::move(name), result.value, std::forward<Components>(components)...));
else
species_.push_back(std::make_unique<ecs_detail::packed_species_impl<Components...>>(this, std::move(name), result.value, std::move(components)...));
species_.push_back(std::make_unique<ecs_detail::packed_species_impl<std::remove_cvref_t<Components>...>>(this, std::move(name), result.value, std::forward<Components>(components)...));
for (auto const & ctor : species_constructors_)
ctor(result);
return result;