You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
1.4 KiB
94 lines
1.4 KiB
|
|
#include <cassert> |
|
|
|
#include <glm/gtc/matrix_transform.hpp> |
|
|
|
#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)); |
|
} |
|
|
|
|