// Copyright (c) 2008-2022 the Urho3D project // License: MIT #include "../Precompiled.h" #include "../AngelScript/APITemplates.h" #include "../Graphics/DebugRenderer.h" #include "../IO/PackageFile.h" #include "../Scene/ObjectAnimation.h" #include "../Scene/Scene.h" #include "../Scene/SmoothedTransform.h" #include "../Scene/SplinePath.h" #include "../Scene/ValueAnimation.h" namespace Urho3D { static void RegisterNode(asIScriptEngine* engine) { engine->RegisterGlobalFunction("Node@+ get_node()", AS_FUNCTION(GetScriptContextNode), AS_CALL_CDECL); } static CScriptArray* GetObjectCategories() { Vector categories = GetScriptContext()->GetObjectCategories().Keys(); Sort(categories.Begin(), categories.End()); return VectorToArray(categories, "Array"); } static CScriptArray* GetObjectsByCategory(const String& category) { const HashMap>& categories = GetScriptContext()->GetObjectCategories(); Vector components; HashMap>::ConstIterator i = categories.Find(category); if (i != categories.End()) { const HashMap>& factories = GetScriptContext()->GetObjectFactories(); const Vector& factoryHashes = i->second_; components.Reserve(factoryHashes.Size()); for (unsigned j = 0; j < factoryHashes.Size(); ++j) { HashMap>::ConstIterator k = factories.Find(factoryHashes[j]); if (k != factories.End()) components.Push(k->second_->GetTypeName()); } } Sort(components.Begin(), components.End()); return VectorToArray(components, "Array"); } static CScriptArray* GetObjectAttributeInfos(const String& objectType) { const Vector* attributes = GetScriptContext()->GetAttributes(Urho3D::StringHash(objectType)); static Vector emptyAttributes; return VectorToArray(attributes ? *attributes : emptyAttributes, "Array"); } static void RegisterScene(asIScriptEngine* engine) { engine->RegisterGlobalFunction("Scene@+ get_scene()", AS_FUNCTION(GetScriptContextScene), AS_CALL_CDECL); engine->RegisterGlobalFunction("Array@ GetObjectCategories()", AS_FUNCTION(GetObjectCategories), AS_CALL_CDECL); engine->RegisterGlobalFunction("Array@ GetObjectsByCategory(const String&in)", AS_FUNCTION(GetObjectsByCategory), AS_CALL_CDECL); engine->RegisterGlobalFunction("Array@ GetObjectAttributeInfos(const String&in)", AS_FUNCTION(GetObjectAttributeInfos), AS_CALL_CDECL); } void RegisterSceneAPI(asIScriptEngine* engine) { RegisterNode(engine); RegisterScene(engine); } }