mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-14 01:19:59 +00:00
inherit variables
This commit is contained in:
parent
72b63ed140
commit
b39f35d805
@ -299,6 +299,15 @@ namespace MWScript
|
||||
return iter->second->mLocals;
|
||||
}
|
||||
|
||||
const Locals* GlobalScripts::getLocalsIfPresent (const std::string& name) const
|
||||
{
|
||||
std::string name2 = ::Misc::StringUtils::lowerCase (name);
|
||||
auto iter = mScripts.find (name2);
|
||||
if (iter==mScripts.end())
|
||||
return nullptr;
|
||||
return &iter->second->mLocals;
|
||||
}
|
||||
|
||||
void GlobalScripts::updatePtrs(const MWWorld::Ptr& base, const MWWorld::Ptr& updated)
|
||||
{
|
||||
MatchPtrVisitor visitor(base);
|
||||
|
@ -82,6 +82,8 @@ namespace MWScript
|
||||
///< If the script \a name has not been added as a global script yet, it is added
|
||||
/// automatically, but is not set to running state.
|
||||
|
||||
const Locals* getLocalsIfPresent (const std::string& name) const;
|
||||
|
||||
void updatePtrs(const MWWorld::Ptr& base, const MWWorld::Ptr& updated);
|
||||
///< Update the Ptrs stored in mTarget. Should be called after the reference has been moved to a new cell.
|
||||
};
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "locals.hpp"
|
||||
#include "globalscripts.hpp"
|
||||
|
||||
#include <components/esm/loadscpt.hpp>
|
||||
#include <components/esm/variant.hpp>
|
||||
@ -33,15 +34,25 @@ namespace MWScript
|
||||
if (mInitialised)
|
||||
return false;
|
||||
|
||||
const Compiler::Locals& locals =
|
||||
MWBase::Environment::get().getScriptManager()->getLocals (script.mId);
|
||||
const Locals* global = MWBase::Environment::get().getScriptManager()->getGlobalScripts().getLocalsIfPresent(script.mId);
|
||||
if(global)
|
||||
{
|
||||
mShorts = global->mShorts;
|
||||
mLongs = global->mLongs;
|
||||
mFloats = global->mFloats;
|
||||
}
|
||||
else
|
||||
{
|
||||
const Compiler::Locals& locals =
|
||||
MWBase::Environment::get().getScriptManager()->getLocals (script.mId);
|
||||
|
||||
mShorts.clear();
|
||||
mShorts.resize (locals.get ('s').size(), 0);
|
||||
mLongs.clear();
|
||||
mLongs.resize (locals.get ('l').size(), 0);
|
||||
mFloats.clear();
|
||||
mFloats.resize (locals.get ('f').size(), 0);
|
||||
mShorts.clear();
|
||||
mShorts.resize (locals.get ('s').size(), 0);
|
||||
mLongs.clear();
|
||||
mLongs.resize (locals.get ('l').size(), 0);
|
||||
mFloats.clear();
|
||||
mFloats.resize (locals.get ('f').size(), 0);
|
||||
}
|
||||
|
||||
mInitialised = true;
|
||||
return true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user