Skip to content

Commit 3a14f27

Browse files
committed
Add model/camera name.
1 parent 6b7a36c commit 3a14f27

4 files changed

Lines changed: 60 additions & 0 deletions

File tree

src/engine_lib/include/game/camera.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ struct te_model;
1010
te_camera* camera_create();
1111
void camera_destroy(te_camera* camera);
1212

13+
// Optionally you can set a name of the camera. The string will be copied.
14+
// Returns NULL if was not set previously.
15+
void camera_set_name(te_camera* camera, const char* name);
16+
const char* camera_get_name(te_camera* camera);
17+
1318
// Sets position of the camera.
1419
void camera_set_position(te_camera* camera, vec3 position);
1520
void camera_get_position(te_camera* camera, vec3 out);

src/engine_lib/include/game/model.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ void model_destroy(te_model* model);
1616
void model_set_geometry(te_model* model, const char* relative_path);
1717
const char* model_get_geometry(te_model* model);
1818

19+
// Optionally you can set a name of the model. The string will be copied.
20+
// Returns NULL if was not set previously.
21+
void model_set_name(te_model* model, const char* name);
22+
const char* model_get_name(te_model* model);
23+
1924
void model_set_position(te_model* model, vec3 position);
2025
void model_set_rotation(te_model* model, vec3 rotation); // in degrees
2126
void model_set_scale(te_model* model, vec3 scale);

src/engine_lib/src/game/camera.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include "game/camera.h"
22

33
#include "cglm/cam.h"
4+
#include <stdlib.h>
5+
#include <string.h>
46
#include "game/model.h"
57
#include "math_funcs.h"
68
#include "misc/globals.h"
@@ -17,6 +19,9 @@ struct te_camera {
1719
// NULL if not attached.
1820
te_model* parent_model;
1921

22+
// NULL if not set.
23+
char* name;
24+
2025
// View matrix. May be outdated, see @ref is_view_mat_outdated.
2126
mat4 view_mat;
2227

@@ -68,6 +73,7 @@ camera_create() {
6873
te_camera* camera = malloc(sizeof(te_camera));
6974

7075
camera->world = NULL;
76+
camera->name = NULL;
7177
camera->parent_model = NULL;
7278
glm_vec3_zero(camera->position);
7379
glm_vec3_zero(camera->rotation);
@@ -92,6 +98,7 @@ camera_create() {
9298

9399
void
94100
camera_destroy(te_camera* camera) {
101+
free(camera->name);
95102
free(camera);
96103
}
97104

@@ -100,6 +107,24 @@ camera_get_type_id(void) {
100107
return "camera";
101108
}
102109

110+
void
111+
camera_set_name(te_camera* camera, const char* name) {
112+
free(camera->name);
113+
camera->name = NULL;
114+
115+
if (name != NULL) {
116+
const size_t len = strlen(name);
117+
camera->name = malloc(sizeof(char) * (len + 1));
118+
memcpy(camera->name, name, sizeof(char) * len);
119+
camera->name[len] = 0;
120+
}
121+
}
122+
123+
const char*
124+
camera_get_name(te_camera* camera) {
125+
return camera->name;
126+
}
127+
103128
void
104129
camera_register_type(void) {
105130
te_type_info* info = type_info_create(camera_get_type_id());
@@ -108,6 +133,7 @@ camera_register_type(void) {
108133
type_info_add_uint_variable(info, "vertical_fov", camera_set_vertical_fov, camera_get_vertical_fov);
109134
type_info_add_float_variable(info, "near_clip", camera_set_near_clip, camera_get_near_clip);
110135
type_info_add_float_variable(info, "far_clip", camera_set_far_clip, camera_get_far_clip);
136+
type_info_add_string_variable(info, "name", camera_set_name, camera_get_name);
111137

112138
type_database_register_type(info);
113139
}

src/engine_lib/src/game/model.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ struct te_model {
4444
// NULL if texture is not set, otherwise path (relative to the `res` directory) to the texture file.
4545
char* tex_relative_path;
4646

47+
// NULL if not set.
48+
char* name;
49+
4750
// NULL if not spawned. Do not free/destroy this pointer.
4851
te_world* world;
4952

@@ -91,6 +94,7 @@ model_register_type(void) {
9194
type_info_add_string_variable(info, "geometry", model_set_geometry, model_get_geometry);
9295
type_info_add_string_variable(info, "custom_vert_shader", model_set_custom_vert_shader, model_get_custom_vert_shader);
9396
type_info_add_string_variable(info, "custom_frag_shader", model_set_custom_frag_shader, model_get_custom_frag_shader);
97+
type_info_add_string_variable(info, "name", model_set_name, model_get_name);
9498

9599
type_database_register_type(info);
96100
}
@@ -100,6 +104,7 @@ model_create() {
100104
te_model* model = malloc(sizeof(te_model));
101105

102106
model->world = NULL;
107+
model->name = NULL;
103108
model->render_data_handle = 0xffffffff;
104109
model->shader_prog_id = 0xffffffff;
105110
model->child_model = NULL;
@@ -147,11 +152,30 @@ model_destroy(te_model* model) {
147152
}
148153
}
149154

155+
free(model->name);
150156
free(model->tex_relative_path);
151157
free(model->path_to_geo);
152158
free(model);
153159
}
154160

161+
void
162+
model_set_name(te_model* model, const char* name) {
163+
free(model->name);
164+
model->name = NULL;
165+
166+
if (name != NULL) {
167+
const size_t len = strlen(name);
168+
model->name = malloc(sizeof(char) * (len + 1));
169+
memcpy(model->name, name, sizeof(char) * len);
170+
model->name[len] = 0;
171+
}
172+
}
173+
174+
const char*
175+
model_get_name(te_model* model) {
176+
return model->name;
177+
}
178+
155179
te_model_renderer*
156180
prv_model_get_renderer(te_model* model) {
157181
#if defined(DEBUG)

0 commit comments

Comments
 (0)