mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-16 09:04:38 +00:00
adds an optional entry to registerDatablock that sets a flag in the datablock files to-be-executed DatablockFilesList ArrayObject that erases relative-path duplicates and surpresses overwrites. setting it again in a sucessively executed module will take ownership of the exclusivity. otherwise, all script files follwing the same general path will be executed.
adds an unRegisterDatablock to remove a given "relativePath / file" from the list sets up an automatically-cleaned ExecFilesList ArrayObject following a similar pattern, and executed for each callOnModules call, so that for instance all module::initServer(%this) entries are parsed, %this.queueExec feeds the vector, and opon completion of gathering the list, all are then executed in module-dependency order
This commit is contained in:
parent
466d03ffec
commit
9229c21788
1 changed files with 190 additions and 4 deletions
|
|
@ -1,5 +1,12 @@
|
||||||
|
$traceModuleCalls=false;
|
||||||
|
$reportModuleFileConflicts=true;
|
||||||
|
if (!isObject(ExecFilesList))
|
||||||
|
new ArrayObject(ExecFilesList);
|
||||||
|
|
||||||
function callOnModules(%functionName, %moduleGroup)
|
function callOnModules(%functionName, %moduleGroup)
|
||||||
{
|
{
|
||||||
|
//clear per module group file execution chain
|
||||||
|
ExecFilesList.empty();
|
||||||
//Get our modules so we can exec any specific client-side loading/handling
|
//Get our modules so we can exec any specific client-side loading/handling
|
||||||
%modulesList = ModuleDatabase.findModules(false);
|
%modulesList = ModuleDatabase.findModules(false);
|
||||||
for(%i=0; %i < getWordCount(%modulesList); %i++)
|
for(%i=0; %i < getWordCount(%modulesList); %i++)
|
||||||
|
|
@ -17,6 +24,13 @@ function callOnModules(%functionName, %moduleGroup)
|
||||||
eval(%module.scopeSet @ "." @ %functionName @ "();");
|
eval(%module.scopeSet @ "." @ %functionName @ "();");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%execFilecount = ExecFilesList.count();
|
||||||
|
for (%i=0;%i<=%execFilecount;%i++)
|
||||||
|
{
|
||||||
|
%filename = ExecFilesList.getKey(%i);
|
||||||
|
exec(%filename);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadModuleMaterials(%moduleGroup)
|
function loadModuleMaterials(%moduleGroup)
|
||||||
|
|
@ -69,10 +83,12 @@ function SimSet::getModulePath(%scopeSet)
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function SimSet::registerDatablock(%scopeSet, %datablockFilePath)
|
function SimSet::registerDatablock(%scopeSet, %datablockFilePath, %isExclusive)
|
||||||
{
|
{
|
||||||
|
if ($traceModuleCalls)
|
||||||
|
warn("SimSet::registerDatablock");
|
||||||
%name = %scopeSet.getName();
|
%name = %scopeSet.getName();
|
||||||
%moduleDef = ModuleDatabase.findModule(%name);
|
%moduleDef = ModuleDatabase.findModule(%name, 1);
|
||||||
|
|
||||||
if(!isObject(%moduleDef))
|
if(!isObject(%moduleDef))
|
||||||
{
|
{
|
||||||
|
|
@ -89,6 +105,176 @@ function SimSet::registerDatablock(%scopeSet, %datablockFilePath)
|
||||||
%relativePath = makeRelativePath(%datablockFilePath);
|
%relativePath = makeRelativePath(%datablockFilePath);
|
||||||
|
|
||||||
%fullPath = pathConcat(%moduleDef.ModulePath, %relativePath);
|
%fullPath = pathConcat(%moduleDef.ModulePath, %relativePath);
|
||||||
|
///go through all entries
|
||||||
|
%locked = false;
|
||||||
|
%dbFilecount = DatablockFilesList.count();
|
||||||
|
for (%i=0;%i<=%dbFilecount;%i++)
|
||||||
|
{
|
||||||
|
%check = DatablockFilesList.getKey(%i);
|
||||||
|
//look for a substring match
|
||||||
|
%isMatch = strIsMatchExpr("*"@ %datablockFilePath,%check );
|
||||||
|
if (%isMatch)
|
||||||
|
{
|
||||||
|
//check if we're already locked in
|
||||||
|
//and kill off any duplicates
|
||||||
|
//do note that doing it in this order means setting exclusive twice
|
||||||
|
//allows one to override exclusive with exclusive
|
||||||
|
%locked = DatablockFilesList.getValue(%i);
|
||||||
|
|
||||||
DatablockFilesList.add(%fullPath);
|
if ((!%locked && !%isExclusive)&&($reportModuleFileConflicts))
|
||||||
|
error("found" SPC %datablockFilePath SPC "duplicate file!");
|
||||||
|
if (!%locked || (%locked && %isExclusive))
|
||||||
|
{
|
||||||
|
DatablockFilesList.erase(%i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//if we're not locked, or we are exclusive, go ahead and add it to the pile
|
||||||
|
//(ensures exclusives get re-added after that erasure)
|
||||||
|
if (!%locked || %isExclusive)
|
||||||
|
DatablockFilesList.add(%fullPath,%isExclusive);
|
||||||
|
if ($traceModuleCalls)
|
||||||
|
DatablockFilesList.echo();
|
||||||
|
}
|
||||||
|
|
||||||
|
function SimSet::unRegisterDatablock(%scopeSet, %datablockFilePath)
|
||||||
|
{
|
||||||
|
if ($traceModuleCalls)
|
||||||
|
warn("SimSet::unRegisterDatablock");
|
||||||
|
%name = %scopeSet.getName();
|
||||||
|
%moduleDef = ModuleDatabase.findModule(%name, 1);
|
||||||
|
|
||||||
|
if(!isObject(%moduleDef))
|
||||||
|
{
|
||||||
|
error("Module::unRegisterDatablock() - unable to find a module with the moduleID of " @ %name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isObject(DatablockFilesList))
|
||||||
|
{
|
||||||
|
error("Module::unRegisterDatablock() - DatablockFilesList array object doesn't exist!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
%relativePath = makeRelativePath(%datablockFilePath);
|
||||||
|
|
||||||
|
%fullPath = pathConcat(%moduleDef.ModulePath, %relativePath);
|
||||||
|
///go through all entries
|
||||||
|
%locked = false;
|
||||||
|
%dbFilecount = DatablockFilesList.count();
|
||||||
|
for (%i=0;%i<=%dbFilecount;%i++)
|
||||||
|
{
|
||||||
|
%check = DatablockFilesList.getKey(%i);
|
||||||
|
//look for a substring match
|
||||||
|
%isMatch = strIsMatchExpr("*"@ %datablockFilePath,%check );
|
||||||
|
if (%isMatch)
|
||||||
|
{
|
||||||
|
//check if we're already locked in. if not, kill it.
|
||||||
|
%locked = DatablockFilesList.getValue(%i);
|
||||||
|
if (!%locked)
|
||||||
|
{
|
||||||
|
DatablockFilesList.erase(%i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($traceModuleCalls)
|
||||||
|
DatablockFilesList.echo();
|
||||||
|
}
|
||||||
|
|
||||||
|
function SimSet::queueExec(%scopeSet, %execFilePath, %isExclusive)
|
||||||
|
{
|
||||||
|
if ($traceModuleCalls)
|
||||||
|
warn("SimSet::queueExec");
|
||||||
|
%name = %scopeSet.getName();
|
||||||
|
%moduleDef = ModuleDatabase.findModule(%name, 1);
|
||||||
|
|
||||||
|
if(!isObject(%moduleDef))
|
||||||
|
{
|
||||||
|
error("Module::queueExec() - unable to find a module with the moduleID of " @ %name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isObject(ExecFilesList))
|
||||||
|
{
|
||||||
|
error("Module::queueExec() - ExecFilesList array object doesn't exist!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($traceModuleCalls)
|
||||||
|
warn("module root path="@ makeRelativePath(%moduleDef.ModulePath));
|
||||||
|
|
||||||
|
%fullPath = makeRelativePath(%moduleDef.ModulePath) @ %execFilePath;
|
||||||
|
///go through all entries
|
||||||
|
%locked = false;
|
||||||
|
%execFilecount = ExecFilesList.count();
|
||||||
|
for (%i=0;%i<=%execFilecount;%i++)
|
||||||
|
{
|
||||||
|
%check = ExecFilesList.getKey(%i);
|
||||||
|
//look for a substring match
|
||||||
|
%isMatch = strIsMatchExpr("*"@ %execFilePath,%check );
|
||||||
|
if (%isMatch)
|
||||||
|
{
|
||||||
|
//check if we're already locked in
|
||||||
|
//and kill off any duplicates
|
||||||
|
//do note that doing it in this order means setting exclusive twice
|
||||||
|
//allows one to override exclusive with exclusive
|
||||||
|
%locked = ExecFilesList.getValue(%i);
|
||||||
|
if ((!%locked && !%isExclusive)&&($reportModuleFileConflicts))
|
||||||
|
error("found" SPC %execFilePath SPC "duplicate file!");
|
||||||
|
if (!%locked || (%locked && %isExclusive))
|
||||||
|
{
|
||||||
|
ExecFilesList.erase(%i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//if we're not locked, or we are exclusive, go ahead and add it to the pile
|
||||||
|
//(ensures exclusives get re-added after that erasure)
|
||||||
|
if (!%locked || %isExclusive)
|
||||||
|
ExecFilesList.add(%fullPath,%isExclusive);
|
||||||
|
if ($traceModuleCalls)
|
||||||
|
ExecFilesList.echo();
|
||||||
|
}
|
||||||
|
|
||||||
|
function SimSet::unQueueExec(%scopeSet, %execFilePath)
|
||||||
|
{
|
||||||
|
if ($traceModuleCalls)
|
||||||
|
warn("SimSet::unRegisterDatablock");
|
||||||
|
%name = %scopeSet.getName();
|
||||||
|
%moduleDef = ModuleDatabase.findModule(%name, 1);
|
||||||
|
|
||||||
|
if(!isObject(%moduleDef))
|
||||||
|
{
|
||||||
|
error("Module::unRegisterDatablock() - unable to find a module with the moduleID of " @ %name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isObject(ExecFilesList))
|
||||||
|
{
|
||||||
|
error("Module::unRegisterDatablock() - ExecFilesList array object doesn't exist!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
%relativePath = makeRelativePath(%execFilePath);
|
||||||
|
|
||||||
|
%fullPath = pathConcat(%moduleDef.ModulePath, %relativePath);
|
||||||
|
///go through all entries
|
||||||
|
%locked = false;
|
||||||
|
%execFilecount = ExecFilesList.count();
|
||||||
|
for (%i=0;%i<=%execFilecount;%i++)
|
||||||
|
{
|
||||||
|
%check = ExecFilesList.getKey(%i);
|
||||||
|
//look for a substring match
|
||||||
|
%isMatch = strIsMatchExpr("*"@ %execFilePath,%check );
|
||||||
|
if (%isMatch)
|
||||||
|
{
|
||||||
|
//check if we're already locked in. if not, kill it.
|
||||||
|
%locked = ExecFilesList.getValue(%i);
|
||||||
|
if (!%locked)
|
||||||
|
{
|
||||||
|
ExecFilesList.erase(%i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($traceModuleCalls)
|
||||||
|
ExecFilesList.echo();
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue