BsManagedSerializableField.cpp 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494
  1. #include "BsManagedSerializableField.h"
  2. #include "BsManagedSerializableObjectInfo.h"
  3. #include "BsManagedSerializableFieldRTTI.h"
  4. #include "BsMonoUtil.h"
  5. #include "BsMonoManager.h"
  6. #include "BsScriptResourceManager.h"
  7. #include "BsScriptGameObjectManager.h"
  8. #include "BsScriptTexture2D.h"
  9. #include "BsScriptTexture3D.h"
  10. #include "BsScriptTextureCube.h"
  11. #include "BsScriptSpriteTexture.h"
  12. #include "BsScriptManagedResource.h"
  13. #include "BsScriptPlainText.h"
  14. #include "BsScriptScriptCode.h"
  15. #include "BsScriptShader.h"
  16. #include "BsScriptMaterial.h"
  17. #include "BsScriptMesh.h"
  18. #include "BsScriptPrefab.h"
  19. #include "BsScriptStringTable.h"
  20. #include "BsScriptSceneObject.h"
  21. #include "BsScriptComponent.h"
  22. #include "BsManagedSerializableObject.h"
  23. #include "BsManagedSerializableArray.h"
  24. #include "BsManagedSerializableList.h"
  25. #include "BsManagedSerializableDictionary.h"
  26. namespace BansheeEngine
  27. {
  28. template<class T>
  29. bool compareFieldData(const T* a, const ManagedSerializableFieldDataPtr& b)
  30. {
  31. if (rtti_is_of_type<T>(b))
  32. {
  33. auto castObj = std::static_pointer_cast<T>(b);
  34. return a->value == castObj->value;
  35. }
  36. return false;
  37. }
  38. ManagedSerializableFieldKey::ManagedSerializableFieldKey()
  39. :mTypeId(0), mFieldId(0)
  40. { }
  41. ManagedSerializableFieldKey::ManagedSerializableFieldKey(UINT16 typeId, UINT16 fieldId)
  42. :mTypeId(typeId), mFieldId(fieldId)
  43. { }
  44. ManagedSerializableFieldKeyPtr ManagedSerializableFieldKey::create(UINT16 typeId, UINT16 fieldId)
  45. {
  46. ManagedSerializableFieldKeyPtr fieldKey = bs_shared_ptr<ManagedSerializableFieldKey>(typeId, fieldId);
  47. return fieldKey;
  48. }
  49. ManagedSerializableFieldDataEntryPtr ManagedSerializableFieldDataEntry::create(const ManagedSerializableFieldKeyPtr& key, const ManagedSerializableFieldDataPtr& value)
  50. {
  51. ManagedSerializableFieldDataEntryPtr fieldDataEntry = bs_shared_ptr<ManagedSerializableFieldDataEntry>();
  52. fieldDataEntry->mKey = key;
  53. fieldDataEntry->mValue = value;
  54. return fieldDataEntry;
  55. }
  56. ManagedSerializableFieldDataPtr ManagedSerializableFieldData::create(const ManagedSerializableTypeInfoPtr& typeInfo, MonoObject* value)
  57. {
  58. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  59. {
  60. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  61. switch (primitiveTypeInfo->mType)
  62. {
  63. case ScriptPrimitiveType::Bool:
  64. {
  65. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataBool>();
  66. if(value != nullptr)
  67. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  68. return fieldData;
  69. }
  70. case ScriptPrimitiveType::Char:
  71. {
  72. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataChar>();
  73. if(value != nullptr)
  74. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  75. return fieldData;
  76. }
  77. case ScriptPrimitiveType::I8:
  78. {
  79. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataI8>();
  80. if(value != nullptr)
  81. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  82. return fieldData;
  83. }
  84. case ScriptPrimitiveType::U8:
  85. {
  86. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataU8>();
  87. if(value != nullptr)
  88. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  89. return fieldData;
  90. }
  91. case ScriptPrimitiveType::I16:
  92. {
  93. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataI16>();
  94. if(value != nullptr)
  95. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  96. return fieldData;
  97. }
  98. case ScriptPrimitiveType::U16:
  99. {
  100. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataU16>();
  101. if(value != nullptr)
  102. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  103. return fieldData;
  104. }
  105. case ScriptPrimitiveType::I32:
  106. {
  107. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataI32>();
  108. if(value != nullptr)
  109. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  110. return fieldData;
  111. }
  112. case ScriptPrimitiveType::U32:
  113. {
  114. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataU32>();
  115. if(value != nullptr)
  116. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  117. return fieldData;
  118. }
  119. case ScriptPrimitiveType::I64:
  120. {
  121. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataI64>();
  122. if(value != nullptr)
  123. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  124. return fieldData;
  125. }
  126. case ScriptPrimitiveType::U64:
  127. {
  128. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataU64>();
  129. if(value != nullptr)
  130. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  131. return fieldData;
  132. }
  133. case ScriptPrimitiveType::Float:
  134. {
  135. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataFloat>();
  136. if(value != nullptr)
  137. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  138. return fieldData;
  139. }
  140. case ScriptPrimitiveType::Double:
  141. {
  142. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataDouble>();
  143. if(value != nullptr)
  144. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  145. return fieldData;
  146. }
  147. case ScriptPrimitiveType::String:
  148. {
  149. MonoString* strVal = (MonoString*)(value);
  150. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataString>();
  151. if(strVal != nullptr)
  152. fieldData->value = MonoUtil::monoToWString(strVal);
  153. return fieldData;
  154. }
  155. case ScriptPrimitiveType::Texture2DRef:
  156. {
  157. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  158. if(value != nullptr)
  159. {
  160. ScriptTexture2D* scriptTexture2D = ScriptTexture2D::toNative(value);
  161. fieldData->value = static_resource_cast<Texture>(scriptTexture2D->getNativeHandle());
  162. }
  163. return fieldData;
  164. }
  165. case ScriptPrimitiveType::Texture3DRef:
  166. {
  167. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  168. if (value != nullptr)
  169. {
  170. ScriptTexture3D* scriptTexture3D = ScriptTexture3D::toNative(value);
  171. fieldData->value = static_resource_cast<Texture>(scriptTexture3D->getNativeHandle());
  172. }
  173. return fieldData;
  174. }
  175. case ScriptPrimitiveType::TextureCubeRef:
  176. {
  177. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  178. if (value != nullptr)
  179. {
  180. ScriptTextureCube* scriptTextureCube = ScriptTextureCube::toNative(value);
  181. fieldData->value = static_resource_cast<Texture>(scriptTextureCube->getNativeHandle());
  182. }
  183. return fieldData;
  184. }
  185. case ScriptPrimitiveType::SpriteTextureRef:
  186. {
  187. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  188. if(value != nullptr)
  189. {
  190. ScriptSpriteTexture* scriptSpriteTexture = ScriptSpriteTexture::toNative(value);
  191. fieldData->value = static_resource_cast<SpriteTexture>(scriptSpriteTexture->getNativeHandle());
  192. }
  193. return fieldData;
  194. }
  195. case ScriptPrimitiveType::ShaderRef:
  196. {
  197. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  198. if (value != nullptr)
  199. {
  200. ScriptShader* scriptShader = ScriptShader::toNative(value);
  201. fieldData->value = static_resource_cast<Shader>(scriptShader->getNativeHandle());
  202. }
  203. return fieldData;
  204. }
  205. case ScriptPrimitiveType::MaterialRef:
  206. {
  207. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  208. if (value != nullptr)
  209. {
  210. ScriptMaterial* scriptMaterial = ScriptMaterial::toNative(value);
  211. fieldData->value = static_resource_cast<Material>(scriptMaterial->getNativeHandle());
  212. }
  213. return fieldData;
  214. }
  215. case ScriptPrimitiveType::MeshRef:
  216. {
  217. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  218. if (value != nullptr)
  219. {
  220. ScriptMesh* scriptMesh = ScriptMesh::toNative(value);
  221. fieldData->value = static_resource_cast<Mesh>(scriptMesh->getNativeHandle());
  222. }
  223. return fieldData;
  224. }
  225. case ScriptPrimitiveType::PrefabRef:
  226. {
  227. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  228. if (value != nullptr)
  229. {
  230. ScriptPrefab* scriptPrefab = ScriptPrefab::toNative(value);
  231. fieldData->value = static_resource_cast<Prefab>(scriptPrefab->getNativeHandle());
  232. }
  233. return fieldData;
  234. }
  235. case ScriptPrimitiveType::StringTableRef:
  236. {
  237. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  238. if (value != nullptr)
  239. {
  240. ScriptStringTable* scriptStringTable = ScriptStringTable::toNative(value);
  241. fieldData->value = static_resource_cast<StringTable>(scriptStringTable->getNativeHandle());
  242. }
  243. return fieldData;
  244. }
  245. case ScriptPrimitiveType::ManagedResourceRef:
  246. {
  247. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  248. if(value != nullptr)
  249. {
  250. ScriptManagedResource* scriptManagedResource = ScriptManagedResource::toNative(value);
  251. fieldData->value = static_resource_cast<ManagedResource>(scriptManagedResource->getNativeHandle());
  252. }
  253. return fieldData;
  254. }
  255. case ScriptPrimitiveType::PlainTextRef:
  256. {
  257. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  258. if (value != nullptr)
  259. {
  260. ScriptPlainText* scriptPlainResource = ScriptPlainText::toNative(value);
  261. fieldData->value = static_resource_cast<PlainText>(scriptPlainResource->getNativeHandle());
  262. }
  263. return fieldData;
  264. }
  265. case ScriptPrimitiveType::ScriptCodeRef:
  266. {
  267. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  268. if (value != nullptr)
  269. {
  270. ScriptScriptCode* scriptScriptCode = ScriptScriptCode::toNative(value);
  271. fieldData->value = static_resource_cast<ScriptCode>(scriptScriptCode->getNativeHandle());
  272. }
  273. return fieldData;
  274. }
  275. case ScriptPrimitiveType::SceneObjectRef:
  276. {
  277. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataGameObjectRef>();
  278. if(value != nullptr)
  279. {
  280. ScriptSceneObject* scriptSceneObject = ScriptSceneObject::toNative(value);
  281. fieldData->value = static_object_cast<SceneObject>(scriptSceneObject->getNativeHandle());
  282. }
  283. return fieldData;
  284. }
  285. case ScriptPrimitiveType::ComponentRef:
  286. {
  287. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataGameObjectRef>();
  288. if(value != nullptr)
  289. {
  290. ScriptComponent* scriptComponent = ScriptComponent::toNative(value);
  291. fieldData->value = static_object_cast<Component>(scriptComponent->getNativeHandle());
  292. }
  293. return fieldData;
  294. }
  295. }
  296. }
  297. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  298. {
  299. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataObject>();
  300. if(value != nullptr)
  301. {
  302. fieldData->value = ManagedSerializableObject::createFromExisting(value);
  303. }
  304. return fieldData;
  305. }
  306. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoArray)
  307. {
  308. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataArray>();
  309. if(value != nullptr)
  310. {
  311. fieldData->value = ManagedSerializableArray::createFromExisting(value, std::static_pointer_cast<ManagedSerializableTypeInfoArray>(typeInfo));
  312. }
  313. return fieldData;
  314. }
  315. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoList)
  316. {
  317. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataList>();
  318. if(value != nullptr)
  319. {
  320. fieldData->value = ManagedSerializableList::createFromExisting(value, std::static_pointer_cast<ManagedSerializableTypeInfoList>(typeInfo));
  321. }
  322. return fieldData;
  323. }
  324. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoDictionary)
  325. {
  326. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataDictionary>();
  327. if(value != nullptr)
  328. {
  329. fieldData->value = ManagedSerializableDictionary::createFromExisting(value, std::static_pointer_cast<ManagedSerializableTypeInfoDictionary>(typeInfo));
  330. }
  331. return fieldData;
  332. }
  333. return nullptr;
  334. }
  335. void* ManagedSerializableFieldDataBool::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  336. {
  337. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  338. {
  339. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  340. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Bool)
  341. return &value;
  342. }
  343. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  344. }
  345. void* ManagedSerializableFieldDataChar::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  346. {
  347. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  348. {
  349. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  350. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Char)
  351. return &value;
  352. }
  353. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  354. }
  355. void* ManagedSerializableFieldDataI8::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  356. {
  357. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  358. {
  359. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  360. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I8)
  361. return &value;
  362. }
  363. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  364. }
  365. void* ManagedSerializableFieldDataU8::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  366. {
  367. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  368. {
  369. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  370. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U8)
  371. return &value;
  372. }
  373. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  374. }
  375. void* ManagedSerializableFieldDataI16::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  376. {
  377. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  378. {
  379. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  380. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I16)
  381. return &value;
  382. }
  383. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  384. }
  385. void* ManagedSerializableFieldDataU16::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  386. {
  387. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  388. {
  389. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  390. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U16)
  391. return &value;
  392. }
  393. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  394. }
  395. void* ManagedSerializableFieldDataI32::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  396. {
  397. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  398. {
  399. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  400. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I32)
  401. return &value;
  402. }
  403. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  404. }
  405. void* ManagedSerializableFieldDataU32::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  406. {
  407. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  408. {
  409. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  410. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U32)
  411. return &value;
  412. }
  413. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  414. }
  415. void* ManagedSerializableFieldDataI64::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  416. {
  417. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  418. {
  419. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  420. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I64)
  421. return &value;
  422. }
  423. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  424. }
  425. void* ManagedSerializableFieldDataU64::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  426. {
  427. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  428. {
  429. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  430. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U64)
  431. return &value;
  432. }
  433. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  434. }
  435. void* ManagedSerializableFieldDataFloat::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  436. {
  437. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  438. {
  439. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  440. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Float)
  441. return &value;
  442. }
  443. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  444. }
  445. void* ManagedSerializableFieldDataDouble::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  446. {
  447. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  448. {
  449. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  450. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Double)
  451. return &value;
  452. }
  453. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  454. }
  455. void* ManagedSerializableFieldDataString::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  456. {
  457. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  458. {
  459. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  460. if(primitiveTypeInfo->mType == ScriptPrimitiveType::String)
  461. {
  462. return MonoUtil::wstringToMono(MonoManager::instance().getDomain(), value);
  463. }
  464. }
  465. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  466. }
  467. void* ManagedSerializableFieldDataResourceRef::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  468. {
  469. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  470. {
  471. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  472. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Texture2DRef)
  473. {
  474. if(value)
  475. {
  476. HTexture texture = static_resource_cast<Texture>(value);
  477. ScriptTexture2D* scriptResource = ScriptResourceManager::instance().getScriptTexture2D(texture);
  478. if(scriptResource == nullptr)
  479. scriptResource = ScriptResourceManager::instance().createScriptTexture2D(texture);
  480. return scriptResource->getManagedInstance();
  481. }
  482. else
  483. return nullptr;
  484. }
  485. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::Texture3DRef)
  486. {
  487. if (value)
  488. {
  489. HTexture texture = static_resource_cast<Texture>(value);
  490. ScriptTexture3D* scriptResource = ScriptResourceManager::instance().getScriptTexture3D(texture);
  491. if (scriptResource == nullptr)
  492. scriptResource = ScriptResourceManager::instance().createScriptTexture3D(texture);
  493. return scriptResource->getManagedInstance();
  494. }
  495. else
  496. return nullptr;
  497. }
  498. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::TextureCubeRef)
  499. {
  500. if (value)
  501. {
  502. HTexture texture = static_resource_cast<Texture>(value);
  503. ScriptTextureCube* scriptResource = ScriptResourceManager::instance().getScriptTextureCube(texture);
  504. if (scriptResource == nullptr)
  505. scriptResource = ScriptResourceManager::instance().createScriptTextureCube(texture);
  506. return scriptResource->getManagedInstance();
  507. }
  508. else
  509. return nullptr;
  510. }
  511. else if(primitiveTypeInfo->mType == ScriptPrimitiveType::SpriteTextureRef)
  512. {
  513. if(value)
  514. {
  515. HSpriteTexture spriteTexture = static_resource_cast<SpriteTexture>(value);
  516. ScriptSpriteTexture* scriptResource = ScriptResourceManager::instance().getScriptSpriteTexture(spriteTexture);
  517. if(scriptResource == nullptr)
  518. scriptResource = ScriptResourceManager::instance().createScriptSpriteTexture(spriteTexture);
  519. if(scriptResource != nullptr)
  520. return scriptResource->getManagedInstance();
  521. }
  522. else
  523. return nullptr;
  524. }
  525. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::ShaderRef)
  526. {
  527. if (value)
  528. {
  529. HShader shader = static_resource_cast<Shader>(value);
  530. ScriptShader* scriptResource = ScriptResourceManager::instance().getScriptShader(shader);
  531. if (scriptResource == nullptr)
  532. scriptResource = ScriptResourceManager::instance().createScriptShader(shader);
  533. if (scriptResource != nullptr)
  534. return scriptResource->getManagedInstance();
  535. }
  536. else
  537. return nullptr;
  538. }
  539. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::MaterialRef)
  540. {
  541. if (value)
  542. {
  543. HMaterial material = static_resource_cast<Material>(value);
  544. ScriptMaterial* scriptResource = ScriptResourceManager::instance().getScriptMaterial(material);
  545. if (scriptResource == nullptr)
  546. scriptResource = ScriptResourceManager::instance().createScriptMaterial(material);
  547. if (scriptResource != nullptr)
  548. return scriptResource->getManagedInstance();
  549. }
  550. else
  551. return nullptr;
  552. }
  553. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::MeshRef)
  554. {
  555. if (value)
  556. {
  557. HMesh mesh = static_resource_cast<Mesh>(value);
  558. ScriptMesh* scriptResource = ScriptResourceManager::instance().getScriptMesh(mesh);
  559. if (scriptResource == nullptr)
  560. scriptResource = ScriptResourceManager::instance().createScriptMesh(mesh);
  561. if (scriptResource != nullptr)
  562. return scriptResource->getManagedInstance();
  563. }
  564. else
  565. return nullptr;
  566. }
  567. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::PlainTextRef)
  568. {
  569. if (value)
  570. {
  571. HPlainText plainText = static_resource_cast<PlainText>(value);
  572. ScriptPlainText* scriptResource = ScriptResourceManager::instance().getScriptPlainText(plainText);
  573. if (scriptResource == nullptr)
  574. scriptResource = ScriptResourceManager::instance().createScriptPlainText(plainText);
  575. if (scriptResource != nullptr)
  576. return scriptResource->getManagedInstance();
  577. }
  578. else
  579. return nullptr;
  580. }
  581. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::ScriptCodeRef)
  582. {
  583. if (value)
  584. {
  585. HScriptCode scriptCode = static_resource_cast<ScriptCode>(value);
  586. ScriptScriptCode* scriptResource = ScriptResourceManager::instance().getScriptScriptCode(scriptCode);
  587. if (scriptResource == nullptr)
  588. scriptResource = ScriptResourceManager::instance().createScriptScriptCode(scriptCode);
  589. if (scriptResource != nullptr)
  590. return scriptResource->getManagedInstance();
  591. }
  592. else
  593. return nullptr;
  594. }
  595. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::PrefabRef)
  596. {
  597. if (value)
  598. {
  599. HPrefab prefab = static_resource_cast<Prefab>(value);
  600. ScriptPrefab* scriptResource = ScriptResourceManager::instance().getScriptPrefab(prefab);
  601. if (scriptResource == nullptr)
  602. scriptResource = ScriptResourceManager::instance().createScriptPrefab(prefab);
  603. if (scriptResource != nullptr)
  604. return scriptResource->getManagedInstance();
  605. }
  606. else
  607. return nullptr;
  608. }
  609. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::StringTableRef)
  610. {
  611. if (value)
  612. {
  613. HStringTable stringTable = static_resource_cast<StringTable>(value);
  614. ScriptStringTable* scriptResource = ScriptResourceManager::instance().getScriptStringTable(stringTable);
  615. if (scriptResource == nullptr)
  616. scriptResource = ScriptResourceManager::instance().createScriptStringTable(stringTable);
  617. if (scriptResource != nullptr)
  618. return scriptResource->getManagedInstance();
  619. }
  620. else
  621. return nullptr;
  622. }
  623. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::ManagedResourceRef)
  624. {
  625. if (value)
  626. {
  627. HManagedResource managedResource = static_resource_cast<ManagedResource>(value);
  628. ScriptManagedResource* scriptResource = ScriptResourceManager::instance().getScriptManagedResource(managedResource);
  629. assert(scriptResource != nullptr); // Managed resource managed instance is created upon creation so it may never be null
  630. return scriptResource->getManagedInstance();
  631. }
  632. else
  633. return nullptr;
  634. }
  635. }
  636. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  637. }
  638. void* ManagedSerializableFieldDataGameObjectRef::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  639. {
  640. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  641. {
  642. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  643. if(primitiveTypeInfo->mType == ScriptPrimitiveType::SceneObjectRef)
  644. {
  645. if(value)
  646. {
  647. ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getScriptSceneObject(value);
  648. if(scriptSceneObject == nullptr)
  649. scriptSceneObject = ScriptGameObjectManager::instance().createScriptSceneObject(value);
  650. return scriptSceneObject->getManagedInstance();
  651. }
  652. else
  653. return nullptr;
  654. }
  655. else if(primitiveTypeInfo->mType == ScriptPrimitiveType::ComponentRef)
  656. {
  657. if (value)
  658. {
  659. ScriptComponent* scriptComponent = ScriptGameObjectManager::instance().getScriptComponent(value);
  660. assert(scriptComponent != nullptr);
  661. return scriptComponent->getManagedInstance();
  662. }
  663. else
  664. return nullptr;
  665. }
  666. }
  667. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  668. }
  669. void* ManagedSerializableFieldDataObject::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  670. {
  671. if(typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  672. {
  673. auto objectTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoObject>(typeInfo);
  674. if(value != nullptr)
  675. {
  676. if(objectTypeInfo->mValueType)
  677. {
  678. MonoObject* managedInstance = value->getManagedInstance();
  679. if(managedInstance != nullptr)
  680. return mono_object_unbox(managedInstance); // Structs are passed as raw types because mono expects them as such
  681. }
  682. else
  683. return value->getManagedInstance();
  684. }
  685. return nullptr;
  686. }
  687. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  688. }
  689. void* ManagedSerializableFieldDataArray::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  690. {
  691. if(typeInfo->getTypeId() == TID_SerializableTypeInfoArray)
  692. {
  693. auto objectTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoArray>(typeInfo);
  694. if(value != nullptr)
  695. return value->getManagedInstance();
  696. return nullptr;
  697. }
  698. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  699. }
  700. void* ManagedSerializableFieldDataList::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  701. {
  702. if(typeInfo->getTypeId() == TID_SerializableTypeInfoList)
  703. {
  704. auto listTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoList>(typeInfo);
  705. if(value != nullptr)
  706. return value->getManagedInstance();
  707. return nullptr;
  708. }
  709. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  710. }
  711. void* ManagedSerializableFieldDataDictionary::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  712. {
  713. if(typeInfo->getTypeId() == TID_SerializableTypeInfoDictionary)
  714. {
  715. auto dictionaryTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoDictionary>(typeInfo);
  716. if(value != nullptr)
  717. return value->getManagedInstance();
  718. return nullptr;
  719. }
  720. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  721. }
  722. MonoObject* ManagedSerializableFieldDataBool::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  723. {
  724. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  725. {
  726. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  727. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Bool)
  728. return mono_value_box(MonoManager::instance().getDomain(), mono_get_boolean_class(), &value);
  729. }
  730. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  731. }
  732. MonoObject* ManagedSerializableFieldDataChar::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  733. {
  734. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  735. {
  736. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  737. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Char)
  738. return mono_value_box(MonoManager::instance().getDomain(), mono_get_char_class(), &value);
  739. }
  740. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  741. }
  742. MonoObject* ManagedSerializableFieldDataI8::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  743. {
  744. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  745. {
  746. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  747. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I8)
  748. return mono_value_box(MonoManager::instance().getDomain(), mono_get_sbyte_class(), &value);
  749. }
  750. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  751. }
  752. MonoObject* ManagedSerializableFieldDataU8::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  753. {
  754. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  755. {
  756. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  757. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U8)
  758. return mono_value_box(MonoManager::instance().getDomain(), mono_get_byte_class(), &value);
  759. }
  760. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  761. }
  762. MonoObject* ManagedSerializableFieldDataI16::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  763. {
  764. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  765. {
  766. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  767. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I16)
  768. return mono_value_box(MonoManager::instance().getDomain(), mono_get_int16_class(), &value);
  769. }
  770. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  771. }
  772. MonoObject* ManagedSerializableFieldDataU16::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  773. {
  774. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  775. {
  776. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  777. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U16)
  778. return mono_value_box(MonoManager::instance().getDomain(), mono_get_uint16_class(), &value);
  779. }
  780. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  781. }
  782. MonoObject* ManagedSerializableFieldDataI32::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  783. {
  784. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  785. {
  786. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  787. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I32)
  788. return mono_value_box(MonoManager::instance().getDomain(), mono_get_int32_class(), &value);
  789. }
  790. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  791. }
  792. MonoObject* ManagedSerializableFieldDataU32::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  793. {
  794. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  795. {
  796. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  797. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U32)
  798. return mono_value_box(MonoManager::instance().getDomain(), mono_get_uint32_class(), &value);
  799. }
  800. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  801. }
  802. MonoObject* ManagedSerializableFieldDataI64::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  803. {
  804. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  805. {
  806. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  807. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I64)
  808. return mono_value_box(MonoManager::instance().getDomain(), mono_get_int64_class(), &value);
  809. }
  810. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  811. }
  812. MonoObject* ManagedSerializableFieldDataU64::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  813. {
  814. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  815. {
  816. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  817. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U64)
  818. return mono_value_box(MonoManager::instance().getDomain(), mono_get_uint64_class(), &value);
  819. }
  820. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  821. }
  822. MonoObject* ManagedSerializableFieldDataFloat::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  823. {
  824. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  825. {
  826. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  827. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Float)
  828. return mono_value_box(MonoManager::instance().getDomain(), mono_get_single_class(), &value);
  829. }
  830. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  831. }
  832. MonoObject* ManagedSerializableFieldDataDouble::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  833. {
  834. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  835. {
  836. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  837. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Double)
  838. return mono_value_box(MonoManager::instance().getDomain(), mono_get_double_class(), &value);
  839. }
  840. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  841. }
  842. MonoObject* ManagedSerializableFieldDataString::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  843. {
  844. return (MonoObject*)getValue(typeInfo);
  845. }
  846. MonoObject* ManagedSerializableFieldDataResourceRef::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  847. {
  848. return (MonoObject*)getValue(typeInfo);
  849. }
  850. MonoObject* ManagedSerializableFieldDataGameObjectRef::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  851. {
  852. return (MonoObject*)getValue(typeInfo);
  853. }
  854. MonoObject* ManagedSerializableFieldDataObject::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  855. {
  856. if (typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  857. {
  858. auto objectTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoObject>(typeInfo);
  859. if (value != nullptr)
  860. return value->getManagedInstance();
  861. return nullptr;
  862. }
  863. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  864. }
  865. MonoObject* ManagedSerializableFieldDataArray::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  866. {
  867. return (MonoObject*)getValue(typeInfo);
  868. }
  869. MonoObject* ManagedSerializableFieldDataList::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  870. {
  871. return (MonoObject*)getValue(typeInfo);
  872. }
  873. MonoObject* ManagedSerializableFieldDataDictionary::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  874. {
  875. return (MonoObject*)getValue(typeInfo);
  876. }
  877. bool ManagedSerializableFieldDataBool::equals(const ManagedSerializableFieldDataPtr& other)
  878. {
  879. return compareFieldData(this, other);
  880. }
  881. bool ManagedSerializableFieldDataChar::equals(const ManagedSerializableFieldDataPtr& other)
  882. {
  883. return compareFieldData(this, other);
  884. }
  885. bool ManagedSerializableFieldDataI8::equals(const ManagedSerializableFieldDataPtr& other)
  886. {
  887. return compareFieldData(this, other);
  888. }
  889. bool ManagedSerializableFieldDataU8::equals(const ManagedSerializableFieldDataPtr& other)
  890. {
  891. return compareFieldData(this, other);
  892. }
  893. bool ManagedSerializableFieldDataI16::equals(const ManagedSerializableFieldDataPtr& other)
  894. {
  895. return compareFieldData(this, other);
  896. }
  897. bool ManagedSerializableFieldDataU16::equals(const ManagedSerializableFieldDataPtr& other)
  898. {
  899. return compareFieldData(this, other);
  900. }
  901. bool ManagedSerializableFieldDataI32::equals(const ManagedSerializableFieldDataPtr& other)
  902. {
  903. return compareFieldData(this, other);
  904. }
  905. bool ManagedSerializableFieldDataU32::equals(const ManagedSerializableFieldDataPtr& other)
  906. {
  907. return compareFieldData(this, other);
  908. }
  909. bool ManagedSerializableFieldDataI64::equals(const ManagedSerializableFieldDataPtr& other)
  910. {
  911. return compareFieldData(this, other);
  912. }
  913. bool ManagedSerializableFieldDataU64::equals(const ManagedSerializableFieldDataPtr& other)
  914. {
  915. return compareFieldData(this, other);
  916. }
  917. bool ManagedSerializableFieldDataFloat::equals(const ManagedSerializableFieldDataPtr& other)
  918. {
  919. return compareFieldData(this, other);
  920. }
  921. bool ManagedSerializableFieldDataDouble::equals(const ManagedSerializableFieldDataPtr& other)
  922. {
  923. return compareFieldData(this, other);
  924. }
  925. bool ManagedSerializableFieldDataString::equals(const ManagedSerializableFieldDataPtr& other)
  926. {
  927. return compareFieldData(this, other);
  928. }
  929. bool ManagedSerializableFieldDataResourceRef::equals(const ManagedSerializableFieldDataPtr& other)
  930. {
  931. return compareFieldData(this, other);
  932. }
  933. bool ManagedSerializableFieldDataGameObjectRef::equals(const ManagedSerializableFieldDataPtr& other)
  934. {
  935. return compareFieldData(this, other);
  936. }
  937. bool ManagedSerializableFieldDataObject::equals(const ManagedSerializableFieldDataPtr& other)
  938. {
  939. return compareFieldData(this, other);
  940. }
  941. bool ManagedSerializableFieldDataArray::equals(const ManagedSerializableFieldDataPtr& other)
  942. {
  943. return compareFieldData(this, other);
  944. }
  945. bool ManagedSerializableFieldDataList::equals(const ManagedSerializableFieldDataPtr& other)
  946. {
  947. return compareFieldData(this, other);
  948. }
  949. bool ManagedSerializableFieldDataDictionary::equals(const ManagedSerializableFieldDataPtr& other)
  950. {
  951. return compareFieldData(this, other);
  952. }
  953. size_t ManagedSerializableFieldDataBool::getHash()
  954. {
  955. std::hash<bool> hasher;
  956. return hasher(value);
  957. }
  958. size_t ManagedSerializableFieldDataChar::getHash()
  959. {
  960. std::hash<wchar_t> hasher;
  961. return hasher(value);
  962. }
  963. size_t ManagedSerializableFieldDataI8::getHash()
  964. {
  965. std::hash<INT8> hasher;
  966. return hasher(value);
  967. }
  968. size_t ManagedSerializableFieldDataU8::getHash()
  969. {
  970. std::hash<UINT8> hasher;
  971. return hasher(value);
  972. }
  973. size_t ManagedSerializableFieldDataI16::getHash()
  974. {
  975. std::hash<INT16> hasher;
  976. return hasher(value);
  977. }
  978. size_t ManagedSerializableFieldDataU16::getHash()
  979. {
  980. std::hash<UINT16> hasher;
  981. return hasher(value);
  982. }
  983. size_t ManagedSerializableFieldDataI32::getHash()
  984. {
  985. std::hash<INT32> hasher;
  986. return hasher(value);
  987. }
  988. size_t ManagedSerializableFieldDataU32::getHash()
  989. {
  990. std::hash<UINT32> hasher;
  991. return hasher(value);
  992. }
  993. size_t ManagedSerializableFieldDataI64::getHash()
  994. {
  995. std::hash<INT64> hasher;
  996. return hasher(value);
  997. }
  998. size_t ManagedSerializableFieldDataU64::getHash()
  999. {
  1000. std::hash<UINT64> hasher;
  1001. return hasher(value);
  1002. }
  1003. size_t ManagedSerializableFieldDataFloat::getHash()
  1004. {
  1005. std::hash<float> hasher;
  1006. return hasher(value);
  1007. }
  1008. size_t ManagedSerializableFieldDataDouble::getHash()
  1009. {
  1010. std::hash<double> hasher;
  1011. return hasher(value);
  1012. }
  1013. size_t ManagedSerializableFieldDataString::getHash()
  1014. {
  1015. std::hash<WString> hasher;
  1016. return hasher(value);
  1017. }
  1018. size_t ManagedSerializableFieldDataResourceRef::getHash()
  1019. {
  1020. std::hash<String> hasher;
  1021. return hasher(value.getUUID());
  1022. }
  1023. size_t ManagedSerializableFieldDataGameObjectRef::getHash()
  1024. {
  1025. std::hash<UINT64> hasher;
  1026. return hasher(value.getInstanceId());
  1027. }
  1028. size_t ManagedSerializableFieldDataObject::getHash()
  1029. {
  1030. std::hash<std::shared_ptr<ManagedSerializableObject>> hasher;
  1031. return hasher(value);
  1032. }
  1033. size_t ManagedSerializableFieldDataArray::getHash()
  1034. {
  1035. std::hash<std::shared_ptr<ManagedSerializableArray>> hasher;
  1036. return hasher(value);
  1037. }
  1038. size_t ManagedSerializableFieldDataList::getHash()
  1039. {
  1040. std::hash<std::shared_ptr<ManagedSerializableList>> hasher;
  1041. return hasher(value);
  1042. }
  1043. size_t ManagedSerializableFieldDataDictionary::getHash()
  1044. {
  1045. std::hash<std::shared_ptr<ManagedSerializableDictionary>> hasher;
  1046. return hasher(value);
  1047. }
  1048. void ManagedSerializableFieldDataObject::serialize()
  1049. {
  1050. if (value != nullptr)
  1051. value->serialize();
  1052. }
  1053. void ManagedSerializableFieldDataObject::deserialize()
  1054. {
  1055. if (value != nullptr)
  1056. value->deserialize();
  1057. }
  1058. void ManagedSerializableFieldDataArray::serialize()
  1059. {
  1060. if (value != nullptr)
  1061. value->serialize();
  1062. }
  1063. void ManagedSerializableFieldDataArray::deserialize()
  1064. {
  1065. if (value != nullptr)
  1066. value->deserialize();
  1067. }
  1068. void ManagedSerializableFieldDataList::serialize()
  1069. {
  1070. if (value != nullptr)
  1071. value->serialize();
  1072. }
  1073. void ManagedSerializableFieldDataList::deserialize()
  1074. {
  1075. if (value != nullptr)
  1076. value->deserialize();
  1077. }
  1078. void ManagedSerializableFieldDataDictionary::serialize()
  1079. {
  1080. if (value != nullptr)
  1081. value->serialize();
  1082. }
  1083. void ManagedSerializableFieldDataDictionary::deserialize()
  1084. {
  1085. if (value != nullptr)
  1086. value->deserialize();
  1087. }
  1088. RTTITypeBase* ManagedSerializableFieldKey::getRTTIStatic()
  1089. {
  1090. return ManagedSerializableFieldKeyRTTI::instance();
  1091. }
  1092. RTTITypeBase* ManagedSerializableFieldKey::getRTTI() const
  1093. {
  1094. return ManagedSerializableFieldKey::getRTTIStatic();
  1095. }
  1096. RTTITypeBase* ManagedSerializableFieldData::getRTTIStatic()
  1097. {
  1098. return ManagedSerializableFieldDataRTTI::instance();
  1099. }
  1100. RTTITypeBase* ManagedSerializableFieldData::getRTTI() const
  1101. {
  1102. return ManagedSerializableFieldData::getRTTIStatic();
  1103. }
  1104. RTTITypeBase* ManagedSerializableFieldDataEntry::getRTTIStatic()
  1105. {
  1106. return ManagedSerializableFieldDataEntryRTTI::instance();
  1107. }
  1108. RTTITypeBase* ManagedSerializableFieldDataEntry::getRTTI() const
  1109. {
  1110. return ManagedSerializableFieldDataEntry::getRTTIStatic();
  1111. }
  1112. RTTITypeBase* ManagedSerializableFieldDataBool::getRTTIStatic()
  1113. {
  1114. return ManagedSerializableFieldDataBoolRTTI::instance();
  1115. }
  1116. RTTITypeBase* ManagedSerializableFieldDataBool::getRTTI() const
  1117. {
  1118. return ManagedSerializableFieldDataBool::getRTTIStatic();
  1119. }
  1120. RTTITypeBase* ManagedSerializableFieldDataChar::getRTTIStatic()
  1121. {
  1122. return ManagedSerializableFieldDataCharRTTI::instance();
  1123. }
  1124. RTTITypeBase* ManagedSerializableFieldDataChar::getRTTI() const
  1125. {
  1126. return ManagedSerializableFieldDataChar::getRTTIStatic();
  1127. }
  1128. RTTITypeBase* ManagedSerializableFieldDataI8::getRTTIStatic()
  1129. {
  1130. return ManagedSerializableFieldDataI8RTTI::instance();
  1131. }
  1132. RTTITypeBase* ManagedSerializableFieldDataI8::getRTTI() const
  1133. {
  1134. return ManagedSerializableFieldDataI8::getRTTIStatic();
  1135. }
  1136. RTTITypeBase* ManagedSerializableFieldDataU8::getRTTIStatic()
  1137. {
  1138. return ManagedSerializableFieldDataU8RTTI::instance();
  1139. }
  1140. RTTITypeBase* ManagedSerializableFieldDataU8::getRTTI() const
  1141. {
  1142. return ManagedSerializableFieldDataU8::getRTTIStatic();
  1143. }
  1144. RTTITypeBase* ManagedSerializableFieldDataI16::getRTTIStatic()
  1145. {
  1146. return ManagedSerializableFieldDataI16RTTI::instance();
  1147. }
  1148. RTTITypeBase* ManagedSerializableFieldDataI16::getRTTI() const
  1149. {
  1150. return ManagedSerializableFieldDataI16::getRTTIStatic();
  1151. }
  1152. RTTITypeBase* ManagedSerializableFieldDataU16::getRTTIStatic()
  1153. {
  1154. return ManagedSerializableFieldDataU16RTTI::instance();
  1155. }
  1156. RTTITypeBase* ManagedSerializableFieldDataU16::getRTTI() const
  1157. {
  1158. return ManagedSerializableFieldDataU16::getRTTIStatic();
  1159. }
  1160. RTTITypeBase* ManagedSerializableFieldDataI32::getRTTIStatic()
  1161. {
  1162. return ManagedSerializableFieldDataI32RTTI::instance();
  1163. }
  1164. RTTITypeBase* ManagedSerializableFieldDataI32::getRTTI() const
  1165. {
  1166. return ManagedSerializableFieldDataI32::getRTTIStatic();
  1167. }
  1168. RTTITypeBase* ManagedSerializableFieldDataU32::getRTTIStatic()
  1169. {
  1170. return ManagedSerializableFieldDataU32RTTI::instance();
  1171. }
  1172. RTTITypeBase* ManagedSerializableFieldDataU32::getRTTI() const
  1173. {
  1174. return ManagedSerializableFieldDataU32::getRTTIStatic();
  1175. }
  1176. RTTITypeBase* ManagedSerializableFieldDataI64::getRTTIStatic()
  1177. {
  1178. return ManagedSerializableFieldDataI64RTTI::instance();
  1179. }
  1180. RTTITypeBase* ManagedSerializableFieldDataI64::getRTTI() const
  1181. {
  1182. return ManagedSerializableFieldDataI64::getRTTIStatic();
  1183. }
  1184. RTTITypeBase* ManagedSerializableFieldDataU64::getRTTIStatic()
  1185. {
  1186. return ManagedSerializableFieldDataU64RTTI::instance();
  1187. }
  1188. RTTITypeBase* ManagedSerializableFieldDataU64::getRTTI() const
  1189. {
  1190. return ManagedSerializableFieldDataU64::getRTTIStatic();
  1191. }
  1192. RTTITypeBase* ManagedSerializableFieldDataFloat::getRTTIStatic()
  1193. {
  1194. return ManagedSerializableFieldDataFloatRTTI::instance();
  1195. }
  1196. RTTITypeBase* ManagedSerializableFieldDataFloat::getRTTI() const
  1197. {
  1198. return ManagedSerializableFieldDataFloat::getRTTIStatic();
  1199. }
  1200. RTTITypeBase* ManagedSerializableFieldDataDouble::getRTTIStatic()
  1201. {
  1202. return ManagedSerializableFieldDataDoubleRTTI::instance();
  1203. }
  1204. RTTITypeBase* ManagedSerializableFieldDataDouble::getRTTI() const
  1205. {
  1206. return ManagedSerializableFieldDataDouble::getRTTIStatic();
  1207. }
  1208. RTTITypeBase* ManagedSerializableFieldDataString::getRTTIStatic()
  1209. {
  1210. return ManagedSerializableFieldDataStringRTTI::instance();
  1211. }
  1212. RTTITypeBase* ManagedSerializableFieldDataString::getRTTI() const
  1213. {
  1214. return ManagedSerializableFieldDataString::getRTTIStatic();
  1215. }
  1216. RTTITypeBase* ManagedSerializableFieldDataResourceRef::getRTTIStatic()
  1217. {
  1218. return ManagedSerializableFieldDataResourceRefRTTI::instance();
  1219. }
  1220. RTTITypeBase* ManagedSerializableFieldDataResourceRef::getRTTI() const
  1221. {
  1222. return ManagedSerializableFieldDataResourceRef::getRTTIStatic();
  1223. }
  1224. RTTITypeBase* ManagedSerializableFieldDataGameObjectRef::getRTTIStatic()
  1225. {
  1226. return ManagedSerializableFieldDataGameObjectRefRTTI::instance();
  1227. }
  1228. RTTITypeBase* ManagedSerializableFieldDataGameObjectRef::getRTTI() const
  1229. {
  1230. return ManagedSerializableFieldDataGameObjectRef::getRTTIStatic();
  1231. }
  1232. RTTITypeBase* ManagedSerializableFieldDataObject::getRTTIStatic()
  1233. {
  1234. return ManagedSerializableFieldDataObjectRTTI::instance();
  1235. }
  1236. RTTITypeBase* ManagedSerializableFieldDataObject::getRTTI() const
  1237. {
  1238. return ManagedSerializableFieldDataObject::getRTTIStatic();
  1239. }
  1240. RTTITypeBase* ManagedSerializableFieldDataArray::getRTTIStatic()
  1241. {
  1242. return ManagedSerializableFieldDataArrayRTTI::instance();
  1243. }
  1244. RTTITypeBase* ManagedSerializableFieldDataArray::getRTTI() const
  1245. {
  1246. return ManagedSerializableFieldDataArray::getRTTIStatic();
  1247. }
  1248. RTTITypeBase* ManagedSerializableFieldDataList::getRTTIStatic()
  1249. {
  1250. return ManagedSerializableFieldDataListRTTI::instance();
  1251. }
  1252. RTTITypeBase* ManagedSerializableFieldDataList::getRTTI() const
  1253. {
  1254. return ManagedSerializableFieldDataList::getRTTIStatic();
  1255. }
  1256. RTTITypeBase* ManagedSerializableFieldDataDictionary::getRTTIStatic()
  1257. {
  1258. return ManagedSerializableFieldDataDictionaryRTTI::instance();
  1259. }
  1260. RTTITypeBase* ManagedSerializableFieldDataDictionary::getRTTI() const
  1261. {
  1262. return ManagedSerializableFieldDataDictionary::getRTTIStatic();
  1263. }
  1264. }