Loading...
Searching...
No Matches
MeshComponent.h
Go to the documentation of this file.
1//
2// Created by denzel on 29/09/2025.
3//
4
5#pragma once
6#include "hellfire/ecs/Component.h"
7#include "hellfire/graphics/Mesh.h"
8#include "hellfire/assets/AssetRegistry.h"
9
10namespace hellfire {
11 enum class MeshSource {
14 };
15
17 NONE = 0,
18 CUBE = 1,
19 SPHERE = 2,
20 QUAD = 3
21 };
22
23 class MeshComponent final : public Component {
24 public:
25 MeshComponent() = default;
26 explicit MeshComponent(std::shared_ptr<Mesh> mesh) : mesh_(std::move(mesh)) {}
27
28 void set_mesh(std::shared_ptr<Mesh> mesh) { mesh_ = std::move(mesh); }
29 [[nodiscard]] std::shared_ptr<Mesh> get_mesh() const { return mesh_; }
30 [[nodiscard]] bool has_mesh() const { return mesh_ != nullptr; }
31
32 void set_mesh_asset(AssetID id) { mesh_asset_id_ = id; }
33
34 AssetID get_mesh_asset() const { return mesh_asset_id_; }
35
37 source_ = source;
38 internal_type = type;
39 }
40 MeshSource get_source() const { return source_;}
41
42 bool is_wireframe = false;
43 private:
44 std::shared_ptr<Mesh> mesh_;
48 };
49}
#define MODEL_LOADER_DEBUG
Definition Entity.h:20
bool is_looking
Definition Entity.h:21
static std::shared_ptr< Texture > load_cached_texture(const std::string &path, TextureType type)
static void process_mesh_vertices(aiMesh *mesh, std::vector< Vertex > &vertices, std::vector< unsigned int > &indices)
static bool is_identity_transform(const aiMatrix4x4 &matrix)
static std::shared_ptr< Mesh > process_mesh(aiMesh *mesh, const aiScene *scene, const std::string &filepath)
static EntityID process_node(Scene *scene, aiNode *node, const aiScene *ai_scene, const std::string &filepath, EntityID parent_id=0)
static std::string create_material_key(const aiMaterial *ai_material, const std::string &filepath, unsigned int material_index)
static void load_material_textures(const aiMaterial *ai_material, Material &material, const aiScene *scene, const std::string &filepath)
static std::vector< std::string > get_texture_search_paths(const std::string &filepath)
static std::string create_mesh_key(aiMesh *mesh, const std::string &filepath)
static std::unordered_map< std::string, std::shared_ptr< Texture > > texture_cache
static bool try_load_external_texture_unified(const std::string &path_str, const std::string &filepath, TextureType type, Material &material)
static bool try_load_embedded_texture_unified(const std::string &path_str, const aiScene *scene, TextureType type, Material &material)
static bool try_load_embedded_texture(const std::string &path_str, const aiScene *scene, TextureType dcr_type, Material &material, const std::string &property_name)
static std::shared_ptr< Material > create_material(const aiMaterial *ai_material, const aiScene *scene, const std::string &filepath)
static std::unordered_map< std::string, std::shared_ptr< Mesh > > mesh_cache
static std::string capitalize_first(const std::string &str)
static std::unordered_map< std::string, std::shared_ptr< Material > > material_cache
static bool try_load_external_texture(const std::string &path_str, const std::string &filepath, TextureType dcr_type, Material &material, const std::string &property_name)
static void debug_scene_info(const aiScene *scene, const std::string &filepath)
static EntityID load_model(Scene *scene, const std::filesystem::path &filepath, unsigned int import_flags=0)
static void load_essential_material_properties(const aiMaterial *ai_material, Material &material)
static void preprocess_materials(const aiScene *scene, const std::string &filepath)
virtual ~Component()=default
virtual void on_added(Entity *owner)
Definition Component.h:16
virtual void on_removed()
Definition Component.h:17
Entity & get_owner() const
Definition Component.h:13
const std::string & get_name() const
Definition Entity.h:46
const TransformComponent * transform() const
Definition Entity.cpp:52
TransformComponent * transform()
Definition Entity.cpp:42
T * add_component(Args &&... args)
const std::vector< ScriptComponent * > & get_script_components() const
Definition Entity.cpp:11
void initialize_scripts() const
Definition Entity.cpp:16
void cleanup_scripts() const
Definition Entity.cpp:30
bool has_component() const
Definition Entity.h:57
bool remove_component()
std::string name_
Definition Entity.h:86
virtual ~Entity()=default
std::vector< ScriptComponent * > script_components_
Definition Entity.h:88
std::unordered_map< std::type_index, std::unique_ptr< Component > > components_
Definition Entity.h:87
void send_event_to_script(const std::string &event_name, void *data=nullptr)
void set_name(const std::string &name)
Definition Entity.h:47
T * get_component() const
Entity(const EntityID id, const std::string &name)
Definition Entity.h:37
void update_scripts(float delta_time) const
Definition Entity.cpp:22
Entity(const std::string &name)
Definition Entity.h:41
void broadcast_event(const std::string &event_name, void *data=nullptr) const
Definition Entity.cpp:36
EntityID id_
Definition Entity.h:85
uint32_t get_id() const
Definition Entity.h:45
static void bind_property(const Material::Property &property, uint32_t shader_program, int &texture_unit)
static void bind_property_to_shader(const Material::Property &property, uint32_t shader_program, int &texture_unit)
static void bind_material(const Material &material)
void set_roughness(float roughness)
Definition Material.h:177
void set_metallic(float metallic)
Definition Material.h:173
void set_opacity(float opacity)
Definition Material.h:181
void set_shininess(float shininess)
Definition Material.h:169
void set_mesh_asset(AssetID id)
void set_mesh(std::shared_ptr< Mesh > mesh)
AssetID get_mesh_asset() const
MeshComponent(std::shared_ptr< Mesh > mesh)
MeshInternalType internal_type
std::shared_ptr< Mesh > get_mesh() const
MeshSource get_source() const
std::shared_ptr< Mesh > mesh_
void set_source(const MeshSource source, MeshInternalType type=MeshInternalType::NONE)
std::shared_ptr< Material > get_material() const
std::shared_ptr< Material > material_
void set_material(const std::shared_ptr< Material > &material)
Manages a collection of entities and their hierarchical relationships.
Definition Scene.h:24
void set_parent(EntityID child_id, EntityID parent_id)
Sets the parent of an entity.
Definition Scene.cpp:105
void update_world_matrices()
Updates world transformation matrices for all entities Propagates transformations through the entity ...
Definition Scene.cpp:168
Entity * get_entity(EntityID id)
Retrieves an entity by its ID.
Definition Scene.cpp:81
EntityID create_entity(const std::string &name="GameObject")
Creates a new entity in the scene.
Definition Scene.cpp:29
const glm::vec3 & get_rotation() const
glm::mat4 get_rotation_matrix() const
Definition Transform3D.h:69
const glm::mat4 & get_world_matrix() const
Definition Transform3D.h:94
glm::vec3 rotation_in_degrees_
glm::mat4 get_translation_matrix() const
Definition Transform3D.h:79
void match_orientation(const Transform3D &other)
void set_position(const float x, const float y, const float z)
Definition Transform3D.h:36
const glm::vec3 & get_position() const
Definition Transform3D.h:29
void set_position(const glm::vec3 &new_position)
Definition Transform3D.h:31
void extract_euler_angles_(const glm::mat4 &rotation_matrix, float &x, float &y, float &z)
float get_rotation_angle() const
Definition Transform3D.h:59
void set_scale_matrix(const glm::mat4 &scale_matrix)
Definition Transform3D.h:87
void set_translation_matrix(const glm::mat4 &translation_matrix)
Definition Transform3D.h:73
glm::mat4 translation_matrix_
glm::mat4 get_scale_matrix() const
Definition Transform3D.h:83
void look_at(const glm::vec3 &target, const glm::vec3 &up=glm::vec3(0.0f, 1.0f, 0.0f))
const glm::vec3 & get_rotation_axis() const
Definition Transform3D.h:60
glm::vec3 get_scale() const
Definition Transform3D.h:52
void update_world_matrix(const glm::mat4 &parent_world_matrix)
const glm::mat4 & get_local_matrix() const
Definition Transform3D.h:93
void set_rotation(const glm::vec3 &angles)
void set_rotation_quaternion(const glm::quat &q)
void set_rotation_matrix(const glm::mat4 &rotation_matrix)
Definition Transform3D.h:63
glm::vec3 & get_scale()
Definition Transform3D.h:53
void set_scale(const glm::vec3 &new_scale)
Definition Transform3D.h:42
glm::vec3 & get_position()
Definition Transform3D.h:28
void look_at(const glm::vec3 &target, const glm::vec3 &up=glm::vec3(0, 1, 0))
const glm::vec3 & get_position() const
void set_rotation(const glm::vec3 &eulers)
void update_world_matrix(const glm::mat4 &parent_world_matrix)
void set_position(float x, float y, float z)
const glm::vec3 & get_world_position() const
glm::mat4 get_rotation_matrix() const
void set_scale(float x, float y, float z)
const glm::vec3 & get_rotation() const
void set_rotation(float x, float y, float z)
glm::mat4 get_translation_matrix() const
void set_scale(const glm::vec3 &scale)
void set_scale(glm::vec3 &scale)
const glm::mat4 & get_world_matrix() const
const glm::mat4 & get_local_matrix() const
void set_position(const glm::vec3 &position)
glm::mat4 aiMatrix4x4ToGlm(const aiMatrix4x4 &from)
TextureType
Definition Texture.h:13
constexpr AssetID INVALID_ASSET_ID
Definition Vertex.h:5
static constexpr unsigned int PREVIEW
Definition ModelLoader.h:34
static constexpr unsigned int OPTIMIZED
Definition ModelLoader.h:64
static constexpr unsigned int HIGH_QUALITY
Definition ModelLoader.h:55
static constexpr unsigned int RUNTIME
Definition ModelLoader.h:42