Create utility function for adding components to entity
This commit is contained in:
parent
3f39e27174
commit
ca6c2337d6
2
cmrc
2
cmrc
|
@ -1 +1 @@
|
|||
Subproject commit e386a629eb537d384811e598a3c96b9ca928f65e
|
||||
Subproject commit a64bea50c05594c8e7cf1f08e441bb9507742e2e
|
|
@ -170,14 +170,9 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
se::gfx::Material material(white_texture, 1.f, 0.f, 0.f, 0.f, 0.f);
|
||||
|
||||
// Create a model component
|
||||
se::gfx::Model model(cube_vertices, cube_indicies, std::optional<se::gfx::Material>(material));
|
||||
model.calculate_normals();
|
||||
se::ModelComponent model_component(model);
|
||||
|
||||
// Create the entity and add the model component to it.
|
||||
auto entity = std::make_shared<simpleengine::Entity>();
|
||||
entity->add_component(model_component);
|
||||
entity->add_component<se::ModelComponent>(cube_vertices, cube_indicies, material, true);
|
||||
entity->translate(3.5f, 0.f, 0.f);
|
||||
|
||||
// Create a renderer and submit the entity into it.
|
||||
|
|
|
@ -21,6 +21,23 @@ namespace simpleengine {
|
|||
|
||||
}
|
||||
|
||||
ModelComponent(std::vector<LitVertex> vertices, std::vector<GLuint> indicies, gfx::Material material,
|
||||
bool calculate_normals = false): model(vertices, indicies, material) {
|
||||
|
||||
if (calculate_normals) {
|
||||
model.calculate_normals();
|
||||
}
|
||||
}
|
||||
|
||||
ModelComponent(std::vector<LitVertex> vertices, std::vector<GLuint> indicies = std::vector<GLuint>(),
|
||||
std::optional<gfx::Material> material = std::nullopt, bool calculate_normals = false) :
|
||||
model(vertices, indicies, material) {
|
||||
|
||||
if (calculate_normals) {
|
||||
model.calculate_normals();
|
||||
}
|
||||
}
|
||||
|
||||
virtual void update(const float& delta_time) override {
|
||||
std::cout << "Model Component update" << std::endl;
|
||||
}
|
||||
|
|
|
@ -102,5 +102,17 @@ namespace simpleengine {
|
|||
assert(!has_component<T>()); // TODO: Don't assert, give an error
|
||||
components.push_back(std::make_shared<T>(component));
|
||||
}
|
||||
|
||||
template<typename T, typename ...Args>
|
||||
std::shared_ptr<T> add_component(Args&&... args) {
|
||||
static_assert(std::is_base_of_v<Component, T>, "Component class must derive from simpleengine::Component");
|
||||
|
||||
// Only allow one type of the same component
|
||||
assert(!has_component<T>()); // TODO: Don't assert, give an error
|
||||
auto comp = std::make_shared<T>(std::forward<Args>(args)...);
|
||||
components.push_back(comp);
|
||||
|
||||
return comp;
|
||||
}
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue