Manual_Resource.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. // Copyright (c) 2008-2023 the Urho3D project
  2. // License: MIT
  3. #pragma once
  4. #include "../AngelScript/APITemplates.h"
  5. #include "../IO/PackageFile.h"
  6. #include "../Resource/Image.h"
  7. #include "../Resource/ResourceCache.h"
  8. namespace Urho3D
  9. {
  10. // bool Resource::Load(Deserializer& source) | File: ../Resource/Resource.h
  11. template <class T> bool Resource_Load_File(File* file, T* ptr)
  12. {
  13. return file && ptr->Load(*file);
  14. }
  15. // bool Resource::Load(Deserializer& source) | File: ../Resource/Resource.h
  16. template <class T> bool Resource_Load_VectorBuffer(VectorBuffer& buffer, T* ptr)
  17. {
  18. return ptr->Load(buffer);
  19. }
  20. // virtual bool Resource::Save(Serializer& dest) const | File: ../Resource/Resource.h
  21. template <class T> bool Resource_Save_File(File* file, T* ptr)
  22. {
  23. return file && ptr->Save(*file);
  24. }
  25. // virtual bool Resource::Save(Serializer& dest) const | File: ../Resource/Resource.h
  26. template <class T> bool Resource_Save_VectorBuffer(VectorBuffer& buffer, T* ptr)
  27. {
  28. return ptr->Save(buffer);
  29. }
  30. #define REGISTER_MEMBERS_MANUAL_PART_Resource() \
  31. /* bool Resource::Load(Deserializer& source) | File: ../Resource/Resource.h */ \
  32. engine->RegisterObjectMethod(className, "bool Load(File@+)", AS_FUNCTION_OBJLAST(Resource_Load_File<T>), AS_CALL_CDECL_OBJLAST); \
  33. engine->RegisterObjectMethod(className, "bool Load(VectorBuffer&)", AS_FUNCTION_OBJLAST(Resource_Load_VectorBuffer<T>), AS_CALL_CDECL_OBJLAST); \
  34. \
  35. /* virtual bool Resource::Save(Serializer& dest) const | File: ../Resource/Resource.h */ \
  36. engine->RegisterObjectMethod(className, "bool Save(File@+) const", AS_FUNCTION_OBJLAST(Resource_Save_File<T>), AS_CALL_CDECL_OBJLAST); \
  37. engine->RegisterObjectMethod(className, "bool Save(VectorBuffer&) const", AS_FUNCTION_OBJLAST(Resource_Save_VectorBuffer<T>), AS_CALL_CDECL_OBJLAST);
  38. // ========================================================================================
  39. // bool XPathQuery::SetQuery(const String& queryString, const String& variableString = String::EMPTY, bool bind = true) | File: ../Resource/XMLElement.h
  40. template <class T> bool XPathQuery_SetQuery(const String& queryString, T* ptr)
  41. {
  42. return ptr->SetQuery(queryString);
  43. }
  44. #define REGISTER_MEMBERS_MANUAL_PART_XPathQuery() \
  45. /* bool XPathQuery::SetQuery(const String& queryString, const String& variableString = String::EMPTY, bool bind = true) | File: ../Resource/XMLElement.h */ \
  46. engine->RegisterObjectMethod(className, "void set_query(const String&)", AS_FUNCTION_OBJLAST(XPathQuery_SetQuery<T>), AS_CALL_CDECL_OBJLAST);
  47. // ========================================================================================
  48. // XMLElement XMLFile::GetRoot(const String& name = String::EMPTY) | File: ../Resource/XMLFile.h
  49. template <class T> XMLElement XMLFile_GetRoot_Default(T* ptr)
  50. {
  51. return ptr->GetRoot();
  52. }
  53. #define REGISTER_MEMBERS_MANUAL_PART_XMLFile() \
  54. /* XMLElement XMLFile::GetRoot(const String& name = String::EMPTY) | File: ../Resource/XMLFile.h */ \
  55. engine->RegisterObjectMethod(className, "XMLElement get_root()", AS_FUNCTION_OBJLAST(XMLFile_GetRoot_Default<T>), AS_CALL_CDECL_OBJLAST);
  56. // ========================================================================================
  57. void ArrayToVariantVector(CScriptArray* arr, VariantVector& dest);
  58. // XMLElement XMLElement::SelectSingle(const String& query, pugi::xpath_variable_set* variables = nullptr) const | File: ../Resource/XMLElement.h
  59. template <class T> XMLElement XMLElement_SelectSingle(const String& query, T* ptr)
  60. {
  61. return ptr->SelectSingle(query);
  62. }
  63. // XPathResultSet XMLElement::Select(const String& query, pugi::xpath_variable_set* variables = nullptr) const | File: ../Resource/XMLElement.h
  64. template <class T> XPathResultSet XMLElement_Select(const String& query, T* ptr)
  65. {
  66. return ptr->Select(query);
  67. }
  68. // bool XMLElement::SetVariantVector(const VariantVector& value) | File: ../Resource/XMLElement.h
  69. template <class T> bool XMLElement_SetVariantVector(CScriptArray* value, T* ptr)
  70. {
  71. VariantVector src;
  72. ArrayToVariantVector(value, src);
  73. return ptr->SetVariantVector(src);
  74. }
  75. // VariantVector XMLElement::GetVariantVector() const | File: ../Resource/XMLElement.h
  76. template <class T> CScriptArray* XMLElement_GetVariantVector(T* ptr)
  77. {
  78. return VectorToArray<Variant>(ptr->GetVariantVector(), "Array<Variant>");
  79. }
  80. #define REGISTER_MEMBERS_MANUAL_PART_XMLElement() \
  81. /* XMLElement XMLElement::SelectSingle(const String& query, pugi::xpath_variable_set* variables = nullptr) const | File: ../Resource/XMLElement.h */ \
  82. engine->RegisterObjectMethod(className, "XMLElement SelectSingle(const String&in)", AS_FUNCTION_OBJLAST(XMLElement_SelectSingle<T>), AS_CALL_CDECL_OBJLAST); \
  83. \
  84. /* XPathResultSet XMLElement::Select(const String& query, pugi::xpath_variable_set* variables = nullptr) const | File: ../Resource/XMLElement.h */ \
  85. engine->RegisterObjectMethod(className, "XPathResultSet Select(const String&in)", AS_FUNCTION_OBJLAST(XMLElement_Select<T>), AS_CALL_CDECL_OBJLAST); \
  86. \
  87. /* bool XMLElement::SetVariantVector(const VariantVector& value) | File: ../Resource/XMLElement.h */ \
  88. engine->RegisterObjectMethod(className, "bool SetVariantVector(Array<Variant>@+)", AS_FUNCTION_OBJLAST(XMLElement_SetVariantVector<T>), AS_CALL_CDECL_OBJLAST); \
  89. \
  90. /* VariantVector XMLElement::GetVariantVector() const | File: ../Resource/XMLElement.h */ \
  91. engine->RegisterObjectMethod(className, "Array<Variant>@ GetVariantVector() const", AS_FUNCTION_OBJLAST(XMLElement_GetVariantVector<T>), AS_CALL_CDECL_OBJLAST);
  92. // ========================================================================================
  93. // void ResourceCache::GetResources(Vector<Resource*>& result, StringHash type) const | File: ../Resource/ResourceCache.h
  94. template <class T> CScriptArray* ResourceCache_GetResources(StringHash type, T* ptr)
  95. {
  96. Vector<Resource*> resources;
  97. ptr->GetResources(resources, type);
  98. return VectorToHandleArray(resources, "Array<Resource@>");
  99. }
  100. #define REGISTER_MEMBERS_MANUAL_PART_ResourceCache() \
  101. /* void ResourceCache::GetResources(Vector<Resource*>& result, StringHash type) const | File: ../Resource/ResourceCache.h */ \
  102. engine->RegisterObjectMethod(className, "Array<Resource@>@ GetResources(StringHash)", AS_FUNCTION_OBJLAST(ResourceCache_GetResources<T>), AS_CALL_CDECL_OBJLAST);
  103. // ========================================================================================
  104. template <class T> CScriptArray* JSONValue_GetKeys(const T& jsonValue)
  105. {
  106. Vector<String> keys;
  107. if (jsonValue.IsObject())
  108. {
  109. for (ConstJSONObjectIterator i = jsonValue.Begin(); i != jsonValue.End(); ++i)
  110. keys.Push(i->first_);
  111. }
  112. return VectorToArray<String>(keys, "Array<String>");
  113. }
  114. template <class T> CScriptArray* JSONValue_GetValues(const T& jsonValue)
  115. {
  116. if (jsonValue.IsArray())
  117. {
  118. return VectorToArray<JSONValue>(jsonValue.GetArray(), "Array<JSONValue>");
  119. }
  120. else
  121. {
  122. Vector<JSONValue> values;
  123. if (jsonValue.IsObject())
  124. {
  125. for (ConstJSONObjectIterator i = jsonValue.Begin(); i != jsonValue.End(); ++i)
  126. values.Push(i->second_);
  127. }
  128. return VectorToArray<JSONValue>(values, "Array<JSONValue>");
  129. }
  130. }
  131. #define REGISTER_MEMBERS_MANUAL_PART_JSONValue() \
  132. engine->RegisterObjectMethod(className, "Array<String>@ get_keys() const", AS_FUNCTION_OBJLAST(JSONValue_GetKeys<T>), AS_CALL_CDECL_OBJLAST); \
  133. engine->RegisterObjectMethod(className, "Array<JSONValue>@ get_values() const", AS_FUNCTION_OBJLAST(JSONValue_GetValues<T>), AS_CALL_CDECL_OBJLAST);
  134. }