From 8e557e81b657f7d111bba24e9f55179a948aa3fb Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Fri, 10 Dec 2010 12:46:54 +0900 Subject: [PATCH] Break out the guts of Ed_LoadFromFile into ED_Parse. ED_Parse does not support progs privided parsing (at this stage, anyway), but this will allow clients to easily get at the entities in a map. --- include/QF/progs.h | 1 + libs/gamecode/engine/pr_parse.c | 37 +++++++++++++++++++++------------ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/include/QF/progs.h b/include/QF/progs.h index 1423b0c9e..ea3797964 100644 --- a/include/QF/progs.h +++ b/include/QF/progs.h @@ -246,6 +246,7 @@ struct plitem_s *ED_GlobalsDict (progs_t *pr); void ED_InitGlobals (progs_t *pr, struct plitem_s *globals); void ED_InitEntity (progs_t *pr, struct plitem_s *entity, edict_t *ent); struct plitem_s *ED_ConvertToPlist (progs_t *pr, struct script_s *script); +struct plitem_s *ED_Parse (progs_t *pr, const char *data); void ED_LoadFromFile (progs_t *pr, const char *data); void ED_EntityParseFunction (progs_t *pr); diff --git a/libs/gamecode/engine/pr_parse.c b/libs/gamecode/engine/pr_parse.c index 8681e1308..14e056267 100644 --- a/libs/gamecode/engine/pr_parse.c +++ b/libs/gamecode/engine/pr_parse.c @@ -447,20 +447,11 @@ ED_SpawnEntities (progs_t *pr, plitem_t *entity_list) } } -VISIBLE void -ED_LoadFromFile (progs_t *pr, const char *data) +VISIBLE plitem_t * +ED_Parse (progs_t *pr, const char *data) { script_t *script; - plitem_t *entity_list; - - if (pr->edict_parse) { - PR_PushFrame (pr); - PR_RESET_PARAMS (pr); - P_INT (pr, 0) = PR_SetTempString (pr, data); - PR_ExecuteProgram (pr, pr->edict_parse); - PR_PopFrame (pr); - return; - } + plitem_t *entity_list = 0; script = Script_New (); Script_Start (script, "ent data", data); @@ -474,9 +465,29 @@ ED_LoadFromFile (progs_t *pr, const char *data) Script_UngetToken (script); entity_list = ED_ConvertToPlist (pr, script); } - ED_SpawnEntities (pr, entity_list); } Script_Delete (script); + return entity_list; +} + +VISIBLE void +ED_LoadFromFile (progs_t *pr, const char *data) +{ + plitem_t *entity_list; + + if (pr->edict_parse) { + PR_PushFrame (pr); + PR_RESET_PARAMS (pr); + P_INT (pr, 0) = PR_SetTempString (pr, data); + PR_ExecuteProgram (pr, pr->edict_parse); + PR_PopFrame (pr); + return; + } + entity_list = ED_Parse (pr, data); + if (entity_list) { + ED_SpawnEntities (pr, entity_list); + PL_Free (entity_list); + } } VISIBLE void