#include #include #include "dumbLog.h" #include "entity.h" #include "util.h" // forward declarations void initDefaults(entity& e); // interface bool entInitModel(entity& e, const char* model_path) { initDefaults(e); if (meLoadFromFile(e.meshes, model_path)) { e.render_objs = roInitModel(e.meshes); if (e.render_objs != nullptr) return true; } entFree(e); return false; } bool entInitMesh(entity& e, simple_mesh* mesh, GLenum draw_mode) { initDefaults(e); e.mesh = mesh; e.render_objs = roInitSimpleMesh(*e.mesh, draw_mode); if (e.render_objs == nullptr) return false; return true; } void entFree(entity& e) { roFree(e.render_objs); e.render_objs = nullptr; meFreeMeshGroup(e.meshes); meFreeSimpleMesh(e.mesh); e.mesh = nullptr; } void entSetWorldPosition(entity& e, glm::vec3 v) { e.world_transform[3][0] = v.x; e.world_transform[3][1] = v.y; e.world_transform[3][2] = v.z; } void entTranslate(entity& e, glm::vec3 v) { e.world_transform = glm::translate(e.world_transform, v); } void entScale(entity& e, glm::vec3 v) { e.world_transform = glm::scale(e.world_transform, v); } void entRotate(entity& e, float angle, glm::vec3 axis) { e.world_transform = glm::rotate(e.world_transform, angle, axis); } // internal void initDefaults(entity& e) { e.world_transform = glm::mat4(1.0); entScale(e, glm::vec3(1.0)); entSetWorldPosition(e, glm::vec3(0, 0, 0)); }