Fix seg faults when loading gameobjects

This commit is contained in:
2022-08-16 04:46:06 +00:00
parent 4f0a59f581
commit 7aef7afc90
5 changed files with 35 additions and 33 deletions

View File

@@ -72,15 +72,13 @@ void gameobject_delcomponent(struct mGameObject *go, int n)
vec_del_order(go->components, n);
}
void setup_model_transform(struct mTransform *t, struct mShader *s,
float scale)
void setup_model_transform(struct mTransform *t, struct mShader *s, float scale)
{
mfloat_t modelT[16] = { 0.f };
mfloat_t matbuff[16] = { 0.f };
memcpy(modelT, UNITMAT4, sizeof(modelT));
mat4_translate_vec3(modelT, t->position);
mat4_multiply(modelT, modelT,
mat4_rotation_quat(matbuff, t->rotation));
mat4_multiply(modelT, modelT, mat4_rotation_quat(matbuff, t->rotation));
mat4_scale_vec3f(modelT, scale);
shader_setmat4(s, "model", modelT);
@@ -98,30 +96,19 @@ void gameobject_save(struct mGameObject *go, FILE * file)
}
}
void gameobject_saveprefab(struct mGameObject *go)
{
char prefabfname[60] = { '\0' };
strncat(prefabfname, go->editor.prefabName, MAXNAME);
strncat(prefabfname, EXT_PREFAB, 10);
FILE *pfile = fopen(prefabfname, "w+");
gameobject_save(go, pfile);
fclose(pfile);
findPrefabs();
}
void gameobject_makefromprefab(char *path)
{
FILE *fprefab = fopen(path, "r");
FILE *fprefab = fopen(path, "rb");
if (fprefab == NULL) {
return;
}
struct mGameObject *new = MakeGameobject();
struct vec *hold = new->components;
fread(new, sizeof(*new), 1, fprefab);
new->components = hold;
new->editor.id = gameobjects->len - 1;
new->body = cpSpaceAddBody(space, cpBodyNew(new->mass, 1.f));
gameobject_init(new, fprefab);
@@ -135,10 +122,8 @@ void gameobject_init(struct mGameObject *go, FILE * fprefab)
vec_load(go->components, fprefab);
for (int i = 0; i < go->components->len; i++) {
struct component *newc =
vec_set(go->components, i,
&components[((struct component *)
vec_get(go->components, i))->id]);
struct component *newc = vec_set(go->components, i, &components[((struct component *) vec_get(go->components, i))->id]);
newc->go = go;
newc->data = malloc(newc->datasize);
fread(newc->data, newc->datasize, 1, fprefab);
@@ -146,6 +131,22 @@ void gameobject_init(struct mGameObject *go, FILE * fprefab)
}
}
void gameobject_saveprefab(struct mGameObject *go)
{
char prefabfname[60] = { '\0' };
strncat(prefabfname, go->editor.prefabName, MAXNAME);
strncat(prefabfname, EXT_PREFAB, 10);
FILE *pfile = fopen(prefabfname, "wb+");
gameobject_save(go, pfile);
fclose(pfile);
findPrefabs();
}
void gameobject_syncprefabs(char *revertPath)
{
/*