forked from Mirrors/openclonk
Move references to ::Objects and ::MaterialMap from C4AulLink to C4Game
This changes the order in which the various parts of the engine are updated after a definition reload, but they should not interfere with each other.objectmenu
parent
a5f797f96b
commit
e1a38ee010
|
@ -2021,9 +2021,9 @@ bool C4Game::ReloadFile(const char *szFile)
|
|||
if ((pDef = ::Definitions.GetByPath(szRelativePath)))
|
||||
return ReloadDef(pDef->id);
|
||||
// script?
|
||||
if (ScriptEngine.ReloadScript(szRelativePath, &::Definitions, Config.General.LanguageEx))
|
||||
if (ScriptEngine.ReloadScript(szRelativePath, Config.General.LanguageEx))
|
||||
{
|
||||
return true;
|
||||
ReLinkScriptEngine();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -2050,6 +2050,8 @@ bool C4Game::ReloadDef(C4ID id)
|
|||
// Reload def
|
||||
if (::Definitions.Reload(pDef,C4D_Load_RX,Config.General.LanguageEx,&Application.SoundSystem))
|
||||
{
|
||||
// update script engine - this will also do include callbacks and Freeze() pDef
|
||||
ReLinkScriptEngine();
|
||||
// Success, update all concerned object faces
|
||||
// may have been done by graphics-update already - but not for objects using graphics of another def
|
||||
// better update everything :)
|
||||
|
@ -2422,6 +2424,9 @@ bool C4Game::LinkScriptEngine()
|
|||
ScriptEngine.warnCnt, (ScriptEngine.warnCnt != 1 ? "s" : ""),
|
||||
ScriptEngine.errCnt, (ScriptEngine.errCnt != 1 ? "s" : ""));
|
||||
|
||||
// update material pointers
|
||||
::MaterialMap.UpdateScriptPointers();
|
||||
|
||||
// Set name list for globals
|
||||
ScriptEngine.GlobalNamed.SetNameList(&ScriptEngine.GlobalNamedNames);
|
||||
|
||||
|
@ -2432,6 +2437,18 @@ bool C4Game::LinkScriptEngine()
|
|||
return true;
|
||||
}
|
||||
|
||||
bool C4Game::ReLinkScriptEngine()
|
||||
{
|
||||
::ScriptEngine.ReLink(&::Definitions);
|
||||
|
||||
// update effect pointers
|
||||
::Objects.UpdateScriptPointers();
|
||||
|
||||
// update material pointers
|
||||
::MaterialMap.UpdateScriptPointers();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool C4Game::InitPlayers(C4ValueNumbers * numbers)
|
||||
{
|
||||
|
|
|
@ -247,6 +247,7 @@ protected:
|
|||
bool InitControl();
|
||||
bool InitScriptEngine();
|
||||
bool LinkScriptEngine();
|
||||
bool ReLinkScriptEngine();
|
||||
bool InitPlayers(C4ValueNumbers *);
|
||||
bool OpenScenario();
|
||||
bool InitDefs();
|
||||
|
|
|
@ -406,8 +406,6 @@ bool C4DefList::Reload(C4Def *pDef, DWORD dwLoadWhat, const char *szLanguage, C4
|
|||
BuildTable();
|
||||
// handle skeleton appends and includes
|
||||
AppendAndIncludeSkeletons();
|
||||
// update script engine - this will also do include callbacks and Freeze() this
|
||||
::ScriptEngine.ReLink(this);
|
||||
// restore graphics
|
||||
GfxBackup.AssignUpdate();
|
||||
// Success
|
||||
|
|
|
@ -371,10 +371,10 @@ public:
|
|||
~C4AulScriptEngine(); // destructor
|
||||
void Clear(); // clear data
|
||||
void Link(C4DefList *rDefs); // link and parse all scripts
|
||||
void ReLink(C4DefList *rDefs); // unlink + relink and parse all scripts
|
||||
void ReLink(C4DefList *rDefs); // unlink, link and parse all scripts
|
||||
virtual C4PropListStatic * GetPropList();
|
||||
using C4AulScript::ReloadScript;
|
||||
bool ReloadScript(const char *szScript, C4DefList *pDefs, const char *szLanguage); // search script and reload + relink, if found
|
||||
bool ReloadScript(const char *szScript, const char *szLanguage); // search script and reload, if found
|
||||
C4AulFunc * GetFirstFunc(C4String * Name)
|
||||
{ return FuncLookUp.GetFirstFunc(Name); }
|
||||
C4AulFunc * GetNextSNFunc(const C4AulFunc * After)
|
||||
|
|
|
@ -180,9 +180,6 @@ void C4AulScriptEngine::Link(C4DefList *rDefs)
|
|||
// engine is always parsed (for global funcs)
|
||||
State = ASS_PARSED;
|
||||
|
||||
// update material pointers
|
||||
::MaterialMap.UpdateScriptPointers();
|
||||
|
||||
rDefs->CallEveryDefinition();
|
||||
|
||||
// Done modifying the proplists now
|
||||
|
@ -214,25 +211,14 @@ void C4AulScriptEngine::ReLink(C4DefList *rDefs)
|
|||
// display state
|
||||
LogF("C4AulScriptEngine linked - %d line%s, %d warning%s, %d error%s",
|
||||
lineCnt, (lineCnt != 1 ? "s" : ""), warnCnt, (warnCnt != 1 ? "s" : ""), errCnt, (errCnt != 1 ? "s" : ""));
|
||||
|
||||
// update effect pointers
|
||||
::Objects.UpdateScriptPointers();
|
||||
|
||||
// update material pointers
|
||||
::MaterialMap.UpdateScriptPointers();
|
||||
}
|
||||
|
||||
bool C4AulScriptEngine::ReloadScript(const char *szScript, C4DefList *pDefs, const char *szLanguage)
|
||||
bool C4AulScriptEngine::ReloadScript(const char *szScript, const char *szLanguage)
|
||||
{
|
||||
C4AulScript * s;
|
||||
for (s = Child0; s; s = s->Next)
|
||||
if (s->ReloadScript(szScript, szLanguage))
|
||||
break;
|
||||
if (!s)
|
||||
return false;
|
||||
// relink
|
||||
ReLink(pDefs);
|
||||
// ok
|
||||
return true;
|
||||
return !!s;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue