From d850285e3fe04320fe84f772a60a07d454eb644c Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Thu, 5 May 2022 21:26:18 +0900 Subject: [PATCH] [ruamoko] Allow scenes to be fetched by C code Need to clean up that part of the API, though. --- include/rua_internal.h | 1 + libs/ruamoko/rua_scene.c | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/rua_internal.h b/include/rua_internal.h index 80f97003a..85880d715 100644 --- a/include/rua_internal.h +++ b/include/rua_internal.h @@ -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 diff --git a/libs/ruamoko/rua_scene.c b/libs/ruamoko/rua_scene.c index 1c577d6fd..57e4543ee 100644 --- a/libs/ruamoko/rua_scene.c +++ b/libs/ruamoko/rua_scene.c @@ -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); }