BsManagedSerializableField.cpp 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136
  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 "BsScriptSceneObject.h"
  18. #include "BsScriptComponent.h"
  19. #include "BsManagedSerializableObject.h"
  20. #include "BsManagedSerializableArray.h"
  21. #include "BsManagedSerializableList.h"
  22. #include "BsManagedSerializableDictionary.h"
  23. namespace BansheeEngine
  24. {
  25. ManagedSerializableFieldKeyPtr ManagedSerializableFieldKey::create(UINT16 typeId, UINT16 fieldId)
  26. {
  27. ManagedSerializableFieldKeyPtr fieldKey = bs_shared_ptr<ManagedSerializableFieldKey>();
  28. fieldKey->mTypeId = typeId;
  29. fieldKey->mFieldId = fieldId;
  30. return fieldKey;
  31. }
  32. ManagedSerializableFieldDataEntryPtr ManagedSerializableFieldDataEntry::create(const ManagedSerializableFieldKeyPtr& key, const ManagedSerializableFieldDataPtr& value)
  33. {
  34. ManagedSerializableFieldDataEntryPtr fieldDataEntry = bs_shared_ptr<ManagedSerializableFieldDataEntry>();
  35. fieldDataEntry->mKey = key;
  36. fieldDataEntry->mValue = value;
  37. return fieldDataEntry;
  38. }
  39. ManagedSerializableFieldDataPtr ManagedSerializableFieldData::create(const ManagedSerializableTypeInfoPtr& typeInfo, MonoObject* value)
  40. {
  41. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  42. {
  43. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  44. switch (primitiveTypeInfo->mType)
  45. {
  46. case ScriptPrimitiveType::Bool:
  47. {
  48. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataBool>();
  49. if(value != nullptr)
  50. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  51. return fieldData;
  52. }
  53. case ScriptPrimitiveType::Char:
  54. {
  55. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataChar>();
  56. if(value != nullptr)
  57. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  58. return fieldData;
  59. }
  60. case ScriptPrimitiveType::I8:
  61. {
  62. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataI8>();
  63. if(value != nullptr)
  64. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  65. return fieldData;
  66. }
  67. case ScriptPrimitiveType::U8:
  68. {
  69. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataU8>();
  70. if(value != nullptr)
  71. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  72. return fieldData;
  73. }
  74. case ScriptPrimitiveType::I16:
  75. {
  76. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataI16>();
  77. if(value != nullptr)
  78. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  79. return fieldData;
  80. }
  81. case ScriptPrimitiveType::U16:
  82. {
  83. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataU16>();
  84. if(value != nullptr)
  85. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  86. return fieldData;
  87. }
  88. case ScriptPrimitiveType::I32:
  89. {
  90. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataI32>();
  91. if(value != nullptr)
  92. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  93. return fieldData;
  94. }
  95. case ScriptPrimitiveType::U32:
  96. {
  97. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataU32>();
  98. if(value != nullptr)
  99. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  100. return fieldData;
  101. }
  102. case ScriptPrimitiveType::I64:
  103. {
  104. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataI64>();
  105. if(value != nullptr)
  106. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  107. return fieldData;
  108. }
  109. case ScriptPrimitiveType::U64:
  110. {
  111. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataU64>();
  112. if(value != nullptr)
  113. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  114. return fieldData;
  115. }
  116. case ScriptPrimitiveType::Float:
  117. {
  118. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataFloat>();
  119. if(value != nullptr)
  120. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  121. return fieldData;
  122. }
  123. case ScriptPrimitiveType::Double:
  124. {
  125. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataDouble>();
  126. if(value != nullptr)
  127. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  128. return fieldData;
  129. }
  130. case ScriptPrimitiveType::String:
  131. {
  132. MonoString* strVal = (MonoString*)(value);
  133. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataString>();
  134. if(strVal != nullptr)
  135. fieldData->value = MonoUtil::monoToWString(strVal);
  136. return fieldData;
  137. }
  138. case ScriptPrimitiveType::Texture2DRef:
  139. {
  140. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  141. if(value != nullptr)
  142. {
  143. ScriptTexture2D* scriptTexture2D = ScriptTexture2D::toNative(value);
  144. fieldData->value = static_resource_cast<ScriptTexture2D>(scriptTexture2D->getNativeHandle());
  145. }
  146. return fieldData;
  147. }
  148. case ScriptPrimitiveType::Texture3DRef:
  149. {
  150. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  151. if (value != nullptr)
  152. {
  153. ScriptTexture3D* scriptTexture3D = ScriptTexture3D::toNative(value);
  154. fieldData->value = static_resource_cast<ScriptTexture3D>(scriptTexture3D->getNativeHandle());
  155. }
  156. return fieldData;
  157. }
  158. case ScriptPrimitiveType::TextureCubeRef:
  159. {
  160. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  161. if (value != nullptr)
  162. {
  163. ScriptTextureCube* scriptTextureCube = ScriptTextureCube::toNative(value);
  164. fieldData->value = static_resource_cast<ScriptTextureCube>(scriptTextureCube->getNativeHandle());
  165. }
  166. return fieldData;
  167. }
  168. case ScriptPrimitiveType::SpriteTextureRef:
  169. {
  170. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  171. if(value != nullptr)
  172. {
  173. ScriptSpriteTexture* scriptSpriteTexture = ScriptSpriteTexture::toNative(value);
  174. fieldData->value = static_resource_cast<SpriteTexture>(scriptSpriteTexture->getNativeHandle());
  175. }
  176. return fieldData;
  177. }
  178. case ScriptPrimitiveType::ShaderRef:
  179. {
  180. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  181. if (value != nullptr)
  182. {
  183. ScriptShader* scriptShader = ScriptShader::toNative(value);
  184. fieldData->value = static_resource_cast<ScriptShader>(scriptShader->getNativeHandle());
  185. }
  186. return fieldData;
  187. }
  188. case ScriptPrimitiveType::MaterialRef:
  189. {
  190. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  191. if (value != nullptr)
  192. {
  193. ScriptMaterial* scriptMaterial = ScriptMaterial::toNative(value);
  194. fieldData->value = static_resource_cast<ScriptMaterial>(scriptMaterial->getNativeHandle());
  195. }
  196. return fieldData;
  197. }
  198. case ScriptPrimitiveType::ManagedResourceRef:
  199. {
  200. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  201. if(value != nullptr)
  202. {
  203. ScriptManagedResource* scriptManagedResource = ScriptManagedResource::toNative(value);
  204. fieldData->value = static_resource_cast<ManagedResource>(scriptManagedResource->getNativeHandle());
  205. }
  206. return fieldData;
  207. }
  208. case ScriptPrimitiveType::PlainTextRef:
  209. {
  210. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  211. if (value != nullptr)
  212. {
  213. ScriptPlainText* scriptPlainResource = ScriptPlainText::toNative(value);
  214. fieldData->value = static_resource_cast<PlainText>(scriptPlainResource->getNativeHandle());
  215. }
  216. return fieldData;
  217. }
  218. case ScriptPrimitiveType::ScriptCodeRef:
  219. {
  220. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  221. if (value != nullptr)
  222. {
  223. ScriptScriptCode* scriptScriptCode = ScriptScriptCode::toNative(value);
  224. fieldData->value = static_resource_cast<ScriptCode>(scriptScriptCode->getNativeHandle());
  225. }
  226. return fieldData;
  227. }
  228. case ScriptPrimitiveType::SceneObjectRef:
  229. {
  230. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataGameObjectRef>();
  231. if(value != nullptr)
  232. {
  233. ScriptSceneObject* scriptSceneObject = ScriptSceneObject::toNative(value);
  234. fieldData->value = static_object_cast<SceneObject>(scriptSceneObject->getNativeHandle());
  235. }
  236. return fieldData;
  237. }
  238. case ScriptPrimitiveType::ComponentRef:
  239. {
  240. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataGameObjectRef>();
  241. if(value != nullptr)
  242. {
  243. ScriptComponent* scriptComponent = ScriptComponent::toNative(value);
  244. fieldData->value = static_object_cast<Component>(scriptComponent->getNativeHandle());
  245. }
  246. return fieldData;
  247. }
  248. }
  249. }
  250. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  251. {
  252. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataObject>();
  253. if(value != nullptr)
  254. {
  255. fieldData->value = ManagedSerializableObject::createFromExisting(value);
  256. }
  257. return fieldData;
  258. }
  259. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoArray)
  260. {
  261. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataArray>();
  262. if(value != nullptr)
  263. {
  264. fieldData->value = ManagedSerializableArray::createFromExisting(value, std::static_pointer_cast<ManagedSerializableTypeInfoArray>(typeInfo));
  265. }
  266. return fieldData;
  267. }
  268. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoList)
  269. {
  270. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataList>();
  271. if(value != nullptr)
  272. {
  273. fieldData->value = ManagedSerializableList::createFromExisting(value, std::static_pointer_cast<ManagedSerializableTypeInfoList>(typeInfo));
  274. }
  275. return fieldData;
  276. }
  277. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoDictionary)
  278. {
  279. auto fieldData = bs_shared_ptr<ManagedSerializableFieldDataDictionary>();
  280. if(value != nullptr)
  281. {
  282. fieldData->value = ManagedSerializableDictionary::createFromExisting(value, std::static_pointer_cast<ManagedSerializableTypeInfoDictionary>(typeInfo));
  283. }
  284. return fieldData;
  285. }
  286. return nullptr;
  287. }
  288. void* ManagedSerializableFieldDataBool::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  289. {
  290. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  291. {
  292. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  293. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Bool)
  294. return &value;
  295. }
  296. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  297. }
  298. void* ManagedSerializableFieldDataChar::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  299. {
  300. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  301. {
  302. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  303. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Char)
  304. return &value;
  305. }
  306. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  307. }
  308. void* ManagedSerializableFieldDataI8::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  309. {
  310. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  311. {
  312. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  313. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I8)
  314. return &value;
  315. }
  316. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  317. }
  318. void* ManagedSerializableFieldDataU8::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  319. {
  320. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  321. {
  322. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  323. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U8)
  324. return &value;
  325. }
  326. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  327. }
  328. void* ManagedSerializableFieldDataI16::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  329. {
  330. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  331. {
  332. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  333. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I16)
  334. return &value;
  335. }
  336. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  337. }
  338. void* ManagedSerializableFieldDataU16::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  339. {
  340. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  341. {
  342. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  343. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U16)
  344. return &value;
  345. }
  346. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  347. }
  348. void* ManagedSerializableFieldDataI32::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  349. {
  350. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  351. {
  352. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  353. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I32)
  354. return &value;
  355. }
  356. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  357. }
  358. void* ManagedSerializableFieldDataU32::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  359. {
  360. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  361. {
  362. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  363. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U32)
  364. return &value;
  365. }
  366. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  367. }
  368. void* ManagedSerializableFieldDataI64::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  369. {
  370. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  371. {
  372. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  373. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I64)
  374. return &value;
  375. }
  376. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  377. }
  378. void* ManagedSerializableFieldDataU64::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  379. {
  380. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  381. {
  382. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  383. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U64)
  384. return &value;
  385. }
  386. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  387. }
  388. void* ManagedSerializableFieldDataFloat::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  389. {
  390. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  391. {
  392. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  393. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Float)
  394. return &value;
  395. }
  396. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  397. }
  398. void* ManagedSerializableFieldDataDouble::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  399. {
  400. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  401. {
  402. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  403. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Double)
  404. return &value;
  405. }
  406. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  407. }
  408. void* ManagedSerializableFieldDataString::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  409. {
  410. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  411. {
  412. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  413. if(primitiveTypeInfo->mType == ScriptPrimitiveType::String)
  414. {
  415. return MonoUtil::wstringToMono(MonoManager::instance().getDomain(), value);
  416. }
  417. }
  418. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  419. }
  420. void* ManagedSerializableFieldDataResourceRef::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  421. {
  422. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  423. {
  424. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  425. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Texture2DRef)
  426. {
  427. if(value)
  428. {
  429. HTexture texture = static_resource_cast<Texture>(value);
  430. ScriptTexture2D* scriptResource = ScriptResourceManager::instance().getScriptTexture2D(texture);
  431. if(scriptResource == nullptr)
  432. scriptResource = ScriptResourceManager::instance().createScriptTexture2D(texture);
  433. return scriptResource->getManagedInstance();
  434. }
  435. else
  436. return nullptr;
  437. }
  438. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::Texture3DRef)
  439. {
  440. if (value)
  441. {
  442. HTexture texture = static_resource_cast<Texture>(value);
  443. ScriptTexture3D* scriptResource = ScriptResourceManager::instance().getScriptTexture3D(texture);
  444. if (scriptResource == nullptr)
  445. scriptResource = ScriptResourceManager::instance().createScriptTexture3D(texture);
  446. return scriptResource->getManagedInstance();
  447. }
  448. else
  449. return nullptr;
  450. }
  451. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::TextureCubeRef)
  452. {
  453. if (value)
  454. {
  455. HTexture texture = static_resource_cast<Texture>(value);
  456. ScriptTextureCube* scriptResource = ScriptResourceManager::instance().getScriptTextureCube(texture);
  457. if (scriptResource == nullptr)
  458. scriptResource = ScriptResourceManager::instance().createScriptTextureCube(texture);
  459. return scriptResource->getManagedInstance();
  460. }
  461. else
  462. return nullptr;
  463. }
  464. else if(primitiveTypeInfo->mType == ScriptPrimitiveType::SpriteTextureRef)
  465. {
  466. if(value)
  467. {
  468. HSpriteTexture spriteTexture = static_resource_cast<SpriteTexture>(value);
  469. ScriptSpriteTexture* scriptResource = ScriptResourceManager::instance().getScriptSpriteTexture(spriteTexture);
  470. if(scriptResource == nullptr)
  471. scriptResource = ScriptResourceManager::instance().createScriptSpriteTexture(spriteTexture);
  472. if(scriptResource != nullptr)
  473. return scriptResource->getManagedInstance();
  474. }
  475. else
  476. return nullptr;
  477. }
  478. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::ShaderRef)
  479. {
  480. if (value)
  481. {
  482. HShader shader = static_resource_cast<Shader>(value);
  483. ScriptShader* scriptResource = ScriptResourceManager::instance().getScriptShader(shader);
  484. if (scriptResource == nullptr)
  485. scriptResource = ScriptResourceManager::instance().createScriptShader(shader);
  486. if (scriptResource != nullptr)
  487. return scriptResource->getManagedInstance();
  488. }
  489. else
  490. return nullptr;
  491. }
  492. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::MaterialRef)
  493. {
  494. if (value)
  495. {
  496. HMaterial material = static_resource_cast<Material>(value);
  497. ScriptMaterial* scriptResource = ScriptResourceManager::instance().getScriptMaterial(material);
  498. if (scriptResource == nullptr)
  499. scriptResource = ScriptResourceManager::instance().createScriptMaterial(material);
  500. if (scriptResource != nullptr)
  501. return scriptResource->getManagedInstance();
  502. }
  503. else
  504. return nullptr;
  505. }
  506. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::PlainTextRef)
  507. {
  508. if (value)
  509. {
  510. HPlainText plainText = static_resource_cast<PlainText>(value);
  511. ScriptPlainText* scriptResource = ScriptResourceManager::instance().getScriptPlainText(plainText);
  512. if (scriptResource == nullptr)
  513. scriptResource = ScriptResourceManager::instance().createScriptPlainText(plainText);
  514. if (scriptResource != nullptr)
  515. return scriptResource->getManagedInstance();
  516. }
  517. else
  518. return nullptr;
  519. }
  520. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::ScriptCodeRef)
  521. {
  522. if (value)
  523. {
  524. HScriptCode scriptCode = static_resource_cast<ScriptCode>(value);
  525. ScriptScriptCode* scriptResource = ScriptResourceManager::instance().getScriptScriptCode(scriptCode);
  526. if (scriptResource == nullptr)
  527. scriptResource = ScriptResourceManager::instance().createScriptScriptCode(scriptCode);
  528. if (scriptResource != nullptr)
  529. return scriptResource->getManagedInstance();
  530. }
  531. else
  532. return nullptr;
  533. }
  534. else if (primitiveTypeInfo->mType == ScriptPrimitiveType::ManagedResourceRef)
  535. {
  536. if (value)
  537. {
  538. HManagedResource managedResource = static_resource_cast<ManagedResource>(value);
  539. ScriptManagedResource* scriptResource = ScriptResourceManager::instance().getScriptManagedResource(managedResource);
  540. assert(scriptResource != nullptr); // Managed resource managed instance is created upon creation so it may never be null
  541. return scriptResource->getManagedInstance();
  542. }
  543. else
  544. return nullptr;
  545. }
  546. }
  547. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  548. }
  549. void* ManagedSerializableFieldDataGameObjectRef::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  550. {
  551. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  552. {
  553. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  554. if(primitiveTypeInfo->mType == ScriptPrimitiveType::SceneObjectRef)
  555. {
  556. if(value)
  557. {
  558. ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getScriptSceneObject(value);
  559. if(scriptSceneObject == nullptr)
  560. scriptSceneObject = ScriptGameObjectManager::instance().createScriptSceneObject(value);
  561. return scriptSceneObject->getManagedInstance();
  562. }
  563. else
  564. return nullptr;
  565. }
  566. else if(primitiveTypeInfo->mType == ScriptPrimitiveType::ComponentRef)
  567. {
  568. if (value)
  569. {
  570. ScriptComponent* scriptComponent = ScriptGameObjectManager::instance().getScriptComponent(value);
  571. assert(scriptComponent != nullptr);
  572. return scriptComponent->getManagedInstance();
  573. }
  574. else
  575. return nullptr;
  576. }
  577. }
  578. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  579. }
  580. void* ManagedSerializableFieldDataObject::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  581. {
  582. if(typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  583. {
  584. auto objectTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoObject>(typeInfo);
  585. if(value != nullptr)
  586. {
  587. if(objectTypeInfo->mValueType)
  588. {
  589. MonoObject* managedInstance = value->getManagedInstance();
  590. if(managedInstance != nullptr)
  591. return mono_object_unbox(managedInstance); // Structs are passed as raw types because mono expects them as such
  592. }
  593. else
  594. return value->getManagedInstance();
  595. }
  596. return nullptr;
  597. }
  598. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  599. }
  600. void* ManagedSerializableFieldDataArray::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  601. {
  602. if(typeInfo->getTypeId() == TID_SerializableTypeInfoArray)
  603. {
  604. auto objectTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoArray>(typeInfo);
  605. if(value != nullptr)
  606. return value->getManagedInstance();
  607. return nullptr;
  608. }
  609. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  610. }
  611. void* ManagedSerializableFieldDataList::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  612. {
  613. if(typeInfo->getTypeId() == TID_SerializableTypeInfoList)
  614. {
  615. auto listTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoList>(typeInfo);
  616. if(value != nullptr)
  617. return value->getManagedInstance();
  618. return nullptr;
  619. }
  620. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  621. }
  622. void* ManagedSerializableFieldDataDictionary::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  623. {
  624. if(typeInfo->getTypeId() == TID_SerializableTypeInfoDictionary)
  625. {
  626. auto dictionaryTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoDictionary>(typeInfo);
  627. if(value != nullptr)
  628. return value->getManagedInstance();
  629. return nullptr;
  630. }
  631. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  632. }
  633. MonoObject* ManagedSerializableFieldDataBool::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  634. {
  635. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  636. {
  637. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  638. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Bool)
  639. return mono_value_box(MonoManager::instance().getDomain(), mono_get_boolean_class(), &value);
  640. }
  641. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  642. }
  643. MonoObject* ManagedSerializableFieldDataChar::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  644. {
  645. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  646. {
  647. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  648. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Char)
  649. return mono_value_box(MonoManager::instance().getDomain(), mono_get_char_class(), &value);
  650. }
  651. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  652. }
  653. MonoObject* ManagedSerializableFieldDataI8::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  654. {
  655. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  656. {
  657. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  658. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I8)
  659. return mono_value_box(MonoManager::instance().getDomain(), mono_get_sbyte_class(), &value);
  660. }
  661. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  662. }
  663. MonoObject* ManagedSerializableFieldDataU8::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  664. {
  665. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  666. {
  667. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  668. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U8)
  669. return mono_value_box(MonoManager::instance().getDomain(), mono_get_byte_class(), &value);
  670. }
  671. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  672. }
  673. MonoObject* ManagedSerializableFieldDataI16::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  674. {
  675. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  676. {
  677. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  678. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I16)
  679. return mono_value_box(MonoManager::instance().getDomain(), mono_get_int16_class(), &value);
  680. }
  681. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  682. }
  683. MonoObject* ManagedSerializableFieldDataU16::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  684. {
  685. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  686. {
  687. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  688. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U16)
  689. return mono_value_box(MonoManager::instance().getDomain(), mono_get_uint16_class(), &value);
  690. }
  691. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  692. }
  693. MonoObject* ManagedSerializableFieldDataI32::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  694. {
  695. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  696. {
  697. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  698. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I32)
  699. return mono_value_box(MonoManager::instance().getDomain(), mono_get_int32_class(), &value);
  700. }
  701. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  702. }
  703. MonoObject* ManagedSerializableFieldDataU32::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  704. {
  705. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  706. {
  707. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  708. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U32)
  709. return mono_value_box(MonoManager::instance().getDomain(), mono_get_uint32_class(), &value);
  710. }
  711. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  712. }
  713. MonoObject* ManagedSerializableFieldDataI64::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  714. {
  715. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  716. {
  717. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  718. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I64)
  719. return mono_value_box(MonoManager::instance().getDomain(), mono_get_int64_class(), &value);
  720. }
  721. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  722. }
  723. MonoObject* ManagedSerializableFieldDataU64::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  724. {
  725. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  726. {
  727. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  728. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U64)
  729. return mono_value_box(MonoManager::instance().getDomain(), mono_get_uint64_class(), &value);
  730. }
  731. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  732. }
  733. MonoObject* ManagedSerializableFieldDataFloat::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  734. {
  735. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  736. {
  737. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  738. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Float)
  739. return mono_value_box(MonoManager::instance().getDomain(), mono_get_single_class(), &value);
  740. }
  741. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  742. }
  743. MonoObject* ManagedSerializableFieldDataDouble::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  744. {
  745. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  746. {
  747. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  748. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Double)
  749. return mono_value_box(MonoManager::instance().getDomain(), mono_get_double_class(), &value);
  750. }
  751. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  752. }
  753. MonoObject* ManagedSerializableFieldDataString::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  754. {
  755. return (MonoObject*)getValue(typeInfo);
  756. }
  757. MonoObject* ManagedSerializableFieldDataResourceRef::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  758. {
  759. return (MonoObject*)getValue(typeInfo);
  760. }
  761. MonoObject* ManagedSerializableFieldDataGameObjectRef::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  762. {
  763. return (MonoObject*)getValue(typeInfo);
  764. }
  765. MonoObject* ManagedSerializableFieldDataObject::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  766. {
  767. if (typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  768. {
  769. auto objectTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoObject>(typeInfo);
  770. if (value != nullptr)
  771. return value->getManagedInstance();
  772. return nullptr;
  773. }
  774. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  775. }
  776. MonoObject* ManagedSerializableFieldDataArray::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  777. {
  778. return (MonoObject*)getValue(typeInfo);
  779. }
  780. MonoObject* ManagedSerializableFieldDataList::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  781. {
  782. return (MonoObject*)getValue(typeInfo);
  783. }
  784. MonoObject* ManagedSerializableFieldDataDictionary::getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo)
  785. {
  786. return (MonoObject*)getValue(typeInfo);
  787. }
  788. RTTITypeBase* ManagedSerializableFieldKey::getRTTIStatic()
  789. {
  790. return ManagedSerializableFieldKeyRTTI::instance();
  791. }
  792. RTTITypeBase* ManagedSerializableFieldKey::getRTTI() const
  793. {
  794. return ManagedSerializableFieldKey::getRTTIStatic();
  795. }
  796. RTTITypeBase* ManagedSerializableFieldData::getRTTIStatic()
  797. {
  798. return ManagedSerializableFieldDataRTTI::instance();
  799. }
  800. RTTITypeBase* ManagedSerializableFieldData::getRTTI() const
  801. {
  802. return ManagedSerializableFieldData::getRTTIStatic();
  803. }
  804. RTTITypeBase* ManagedSerializableFieldDataEntry::getRTTIStatic()
  805. {
  806. return ManagedSerializableFieldDataEntryRTTI::instance();
  807. }
  808. RTTITypeBase* ManagedSerializableFieldDataEntry::getRTTI() const
  809. {
  810. return ManagedSerializableFieldDataEntry::getRTTIStatic();
  811. }
  812. RTTITypeBase* ManagedSerializableFieldDataBool::getRTTIStatic()
  813. {
  814. return ManagedSerializableFieldDataBoolRTTI::instance();
  815. }
  816. RTTITypeBase* ManagedSerializableFieldDataBool::getRTTI() const
  817. {
  818. return ManagedSerializableFieldDataBool::getRTTIStatic();
  819. }
  820. RTTITypeBase* ManagedSerializableFieldDataChar::getRTTIStatic()
  821. {
  822. return ManagedSerializableFieldDataCharRTTI::instance();
  823. }
  824. RTTITypeBase* ManagedSerializableFieldDataChar::getRTTI() const
  825. {
  826. return ManagedSerializableFieldDataChar::getRTTIStatic();
  827. }
  828. RTTITypeBase* ManagedSerializableFieldDataI8::getRTTIStatic()
  829. {
  830. return ManagedSerializableFieldDataI8RTTI::instance();
  831. }
  832. RTTITypeBase* ManagedSerializableFieldDataI8::getRTTI() const
  833. {
  834. return ManagedSerializableFieldDataI8::getRTTIStatic();
  835. }
  836. RTTITypeBase* ManagedSerializableFieldDataU8::getRTTIStatic()
  837. {
  838. return ManagedSerializableFieldDataU8RTTI::instance();
  839. }
  840. RTTITypeBase* ManagedSerializableFieldDataU8::getRTTI() const
  841. {
  842. return ManagedSerializableFieldDataU8::getRTTIStatic();
  843. }
  844. RTTITypeBase* ManagedSerializableFieldDataI16::getRTTIStatic()
  845. {
  846. return ManagedSerializableFieldDataI16RTTI::instance();
  847. }
  848. RTTITypeBase* ManagedSerializableFieldDataI16::getRTTI() const
  849. {
  850. return ManagedSerializableFieldDataI16::getRTTIStatic();
  851. }
  852. RTTITypeBase* ManagedSerializableFieldDataU16::getRTTIStatic()
  853. {
  854. return ManagedSerializableFieldDataU16RTTI::instance();
  855. }
  856. RTTITypeBase* ManagedSerializableFieldDataU16::getRTTI() const
  857. {
  858. return ManagedSerializableFieldDataU16::getRTTIStatic();
  859. }
  860. RTTITypeBase* ManagedSerializableFieldDataI32::getRTTIStatic()
  861. {
  862. return ManagedSerializableFieldDataI32RTTI::instance();
  863. }
  864. RTTITypeBase* ManagedSerializableFieldDataI32::getRTTI() const
  865. {
  866. return ManagedSerializableFieldDataI32::getRTTIStatic();
  867. }
  868. RTTITypeBase* ManagedSerializableFieldDataU32::getRTTIStatic()
  869. {
  870. return ManagedSerializableFieldDataU32RTTI::instance();
  871. }
  872. RTTITypeBase* ManagedSerializableFieldDataU32::getRTTI() const
  873. {
  874. return ManagedSerializableFieldDataU32::getRTTIStatic();
  875. }
  876. RTTITypeBase* ManagedSerializableFieldDataI64::getRTTIStatic()
  877. {
  878. return ManagedSerializableFieldDataI64RTTI::instance();
  879. }
  880. RTTITypeBase* ManagedSerializableFieldDataI64::getRTTI() const
  881. {
  882. return ManagedSerializableFieldDataI64::getRTTIStatic();
  883. }
  884. RTTITypeBase* ManagedSerializableFieldDataU64::getRTTIStatic()
  885. {
  886. return ManagedSerializableFieldDataU64RTTI::instance();
  887. }
  888. RTTITypeBase* ManagedSerializableFieldDataU64::getRTTI() const
  889. {
  890. return ManagedSerializableFieldDataU64::getRTTIStatic();
  891. }
  892. RTTITypeBase* ManagedSerializableFieldDataFloat::getRTTIStatic()
  893. {
  894. return ManagedSerializableFieldDataFloatRTTI::instance();
  895. }
  896. RTTITypeBase* ManagedSerializableFieldDataFloat::getRTTI() const
  897. {
  898. return ManagedSerializableFieldDataFloat::getRTTIStatic();
  899. }
  900. RTTITypeBase* ManagedSerializableFieldDataDouble::getRTTIStatic()
  901. {
  902. return ManagedSerializableFieldDataDoubleRTTI::instance();
  903. }
  904. RTTITypeBase* ManagedSerializableFieldDataDouble::getRTTI() const
  905. {
  906. return ManagedSerializableFieldDataDouble::getRTTIStatic();
  907. }
  908. RTTITypeBase* ManagedSerializableFieldDataString::getRTTIStatic()
  909. {
  910. return ManagedSerializableFieldDataStringRTTI::instance();
  911. }
  912. RTTITypeBase* ManagedSerializableFieldDataString::getRTTI() const
  913. {
  914. return ManagedSerializableFieldDataString::getRTTIStatic();
  915. }
  916. RTTITypeBase* ManagedSerializableFieldDataResourceRef::getRTTIStatic()
  917. {
  918. return ManagedSerializableFieldDataResourceRefRTTI::instance();
  919. }
  920. RTTITypeBase* ManagedSerializableFieldDataResourceRef::getRTTI() const
  921. {
  922. return ManagedSerializableFieldDataResourceRef::getRTTIStatic();
  923. }
  924. RTTITypeBase* ManagedSerializableFieldDataGameObjectRef::getRTTIStatic()
  925. {
  926. return ManagedSerializableFieldDataGameObjectRefRTTI::instance();
  927. }
  928. RTTITypeBase* ManagedSerializableFieldDataGameObjectRef::getRTTI() const
  929. {
  930. return ManagedSerializableFieldDataGameObjectRef::getRTTIStatic();
  931. }
  932. RTTITypeBase* ManagedSerializableFieldDataObject::getRTTIStatic()
  933. {
  934. return ManagedSerializableFieldDataObjectRTTI::instance();
  935. }
  936. RTTITypeBase* ManagedSerializableFieldDataObject::getRTTI() const
  937. {
  938. return ManagedSerializableFieldDataObject::getRTTIStatic();
  939. }
  940. RTTITypeBase* ManagedSerializableFieldDataArray::getRTTIStatic()
  941. {
  942. return ManagedSerializableFieldDataArrayRTTI::instance();
  943. }
  944. RTTITypeBase* ManagedSerializableFieldDataArray::getRTTI() const
  945. {
  946. return ManagedSerializableFieldDataArray::getRTTIStatic();
  947. }
  948. RTTITypeBase* ManagedSerializableFieldDataList::getRTTIStatic()
  949. {
  950. return ManagedSerializableFieldDataListRTTI::instance();
  951. }
  952. RTTITypeBase* ManagedSerializableFieldDataList::getRTTI() const
  953. {
  954. return ManagedSerializableFieldDataList::getRTTIStatic();
  955. }
  956. RTTITypeBase* ManagedSerializableFieldDataDictionary::getRTTIStatic()
  957. {
  958. return ManagedSerializableFieldDataDictionaryRTTI::instance();
  959. }
  960. RTTITypeBase* ManagedSerializableFieldDataDictionary::getRTTI() const
  961. {
  962. return ManagedSerializableFieldDataDictionary::getRTTIStatic();
  963. }
  964. }