diff --git a/lib/base/scriptutils.cpp b/lib/base/scriptutils.cpp index 441faab8e..d3f4478cf 100644 --- a/lib/base/scriptutils.cpp +++ b/lib/base/scriptutils.cpp @@ -46,6 +46,7 @@ REGISTER_SCRIPTFUNCTION(typeof, &ScriptUtils::TypeOf); REGISTER_SCRIPTFUNCTION(keys, &ScriptUtils::Keys); REGISTER_SCRIPTFUNCTION(random, &Utility::Random); REGISTER_SCRIPTFUNCTION(__get_object, &ScriptUtils::GetObject); +REGISTER_SCRIPTFUNCTION(__get_objects, &ScriptUtils::GetObjects); REGISTER_SCRIPTFUNCTION(assert, &ScriptUtils::Assert); REGISTER_SCRIPTFUNCTION(string, &ScriptUtils::CastString); REGISTER_SCRIPTFUNCTION(number, &ScriptUtils::CastNumber); @@ -253,6 +254,21 @@ DynamicObject::Ptr ScriptUtils::GetObject(const String& type, const String& name return dtype->GetObject(name); } +Array::Ptr ScriptUtils::GetObjects(const String& type) +{ + DynamicType::Ptr dtype = DynamicType::GetByName(type); + + if (!dtype) + BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid type name")); + + Array::Ptr result = new Array(); + + BOOST_FOREACH(const DynamicObject::Ptr& object, dtype->GetObjects()) + result->Add(object); + + return result; +} + void ScriptUtils::Assert(const Value& arg) { if (!arg.ToBool()) diff --git a/lib/base/scriptutils.hpp b/lib/base/scriptutils.hpp index debcdd607..452635bd5 100644 --- a/lib/base/scriptutils.hpp +++ b/lib/base/scriptutils.hpp @@ -48,6 +48,7 @@ public: static Type::Ptr TypeOf(const Value& value); static Array::Ptr Keys(const Dictionary::Ptr& dict); static DynamicObject::Ptr GetObject(const String& type, const String& name); + static Array::Ptr GetObjects(const String& type); static void Assert(const Value& arg); private: