[ruamoko] Allow scenes to be fetched by C code

Need to clean up that part of the API, though.
This commit is contained in:
Bill Currie 2022-05-05 21:26:18 +09:00
parent 7b275ebab6
commit d850285e3f
2 changed files with 17 additions and 2 deletions

View file

@ -65,5 +65,6 @@ void RUA_Mersenne_Init (struct progs_s *pr, int secure);
void RUA_Model_Init (struct progs_s *pr, int secure);
struct model_s *Model_GetModel (progs_t *pr, int handle);
void RUA_Scene_Init (struct progs_s *pr, int secure);
struct scene_s *Scene_GetScene (struct progs_s *pr, pr_ulong_t handle);
#endif//__rua_internal_h

View file

@ -180,6 +180,17 @@ bi_Scene_DeleteScene (progs_t *pr, void *_res)
rua_delete_scene (res, scene);
}
scene_t *
Scene_GetScene (progs_t *pr, pr_ulong_t handle)
{
if (!handle) {
return 0;
}
rua_scene_resources_t *res = PR_Resources_Find (pr, "Scene");
rua_scene_t *scene = rua_scene_get (res, P_ULONG (pr, 0));
return scene->scene;
}
static void
bi_Scene_CreateEntity (progs_t *pr, void *_res)
{
@ -221,10 +232,13 @@ bi_Entity_SetModel (progs_t *pr, void *_res)
pr_int_t model_id = P_INT (pr, 1);
entity_t *ent = rua_entity_get (res, ent_id);
model_t *model = Model_GetModel (pr, model_id);
pr_ulong_t scene_id = ent_id & 0xffffffff;
// bad scene caught above
rua_scene_t *scene = rua_scene_get (res, scene_id);
R_RemoveEfrags (ent);
ent->renderer.model = model;
R_AddEfrags (&r_data->refdef->worldmodel->brush, ent);//FIXME r_data
R_AddEfrags (&scene->scene->worldmodel->brush, ent);
}
static void
@ -502,6 +516,6 @@ RUA_Scene_Init (progs_t *pr, int secure)
res->pr = pr;
PR_Resources_Register (pr, "scene", res, bi_scene_clear);
PR_Resources_Register (pr, "Scene", res, bi_scene_clear);
PR_RegisterBuiltins (pr, builtins, res);
}