BsScriptSerializableField.cpp 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. #include "BsScriptSerializableField.h"
  2. #include "BsScriptSerializableObjectInfo.h"
  3. #include "BsScriptSerializableFieldRTTI.h"
  4. #include "BsMonoUtil.h"
  5. #include "BsMonoManager.h"
  6. #include "BsScriptResourceManager.h"
  7. #include "BsScriptGameObjectManager.h"
  8. #include "BsScriptTexture2D.h"
  9. #include "BsScriptSpriteTexture.h"
  10. #include "BsScriptSceneObject.h"
  11. #include "BsScriptComponent.h"
  12. #include "BsScriptSerializableObject.h"
  13. #include "BsScriptSerializableArray.h"
  14. using namespace CamelotFramework;
  15. namespace BansheeEngine
  16. {
  17. ScriptSerializableFieldKeyPtr ScriptSerializableFieldKey::create(CM::UINT16 typeId, CM::UINT16 fieldId)
  18. {
  19. ScriptSerializableFieldKeyPtr fieldKey = cm_shared_ptr<ScriptSerializableFieldKey>();
  20. fieldKey->mTypeId = typeId;
  21. fieldKey->mFieldId = fieldId;
  22. return fieldKey;
  23. }
  24. ScriptSerializableFieldDataEntryPtr ScriptSerializableFieldDataEntry::create(const ScriptSerializableFieldKeyPtr& key, const ScriptSerializableFieldDataPtr& value)
  25. {
  26. ScriptSerializableFieldDataEntryPtr fieldDataEntry = cm_shared_ptr<ScriptSerializableFieldDataEntry>();
  27. fieldDataEntry->mKey = key;
  28. fieldDataEntry->mValue = value;
  29. return fieldDataEntry;
  30. }
  31. ScriptSerializableFieldDataPtr ScriptSerializableFieldData::create(const ScriptSerializableTypeInfoPtr& typeInfo, void* value)
  32. {
  33. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  34. {
  35. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  36. switch (primitiveTypeInfo->mType)
  37. {
  38. case ScriptPrimitiveType::Bool:
  39. {
  40. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataBool>();
  41. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  42. return fieldData;
  43. }
  44. case ScriptPrimitiveType::Char:
  45. {
  46. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataChar>();
  47. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  48. return fieldData;
  49. }
  50. case ScriptPrimitiveType::I8:
  51. {
  52. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataI8>();
  53. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  54. return fieldData;
  55. }
  56. case ScriptPrimitiveType::U8:
  57. {
  58. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataU8>();
  59. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  60. return fieldData;
  61. }
  62. case ScriptPrimitiveType::I16:
  63. {
  64. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataI16>();
  65. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  66. return fieldData;
  67. }
  68. case ScriptPrimitiveType::U16:
  69. {
  70. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataU16>();
  71. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  72. return fieldData;
  73. }
  74. case ScriptPrimitiveType::I32:
  75. {
  76. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataI32>();
  77. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  78. return fieldData;
  79. }
  80. case ScriptPrimitiveType::U32:
  81. {
  82. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataU32>();
  83. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  84. return fieldData;
  85. }
  86. case ScriptPrimitiveType::I64:
  87. {
  88. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataI64>();
  89. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  90. return fieldData;
  91. }
  92. case ScriptPrimitiveType::U64:
  93. {
  94. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataU64>();
  95. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  96. return fieldData;
  97. }
  98. case ScriptPrimitiveType::Float:
  99. {
  100. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataFloat>();
  101. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  102. return fieldData;
  103. }
  104. case ScriptPrimitiveType::Double:
  105. {
  106. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataDouble>();
  107. memcpy(&fieldData->value, value, sizeof(fieldData->value));
  108. return fieldData;
  109. }
  110. case ScriptPrimitiveType::String:
  111. {
  112. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataString>();
  113. if(value != nullptr)
  114. fieldData->value = MonoUtil::monoToWString((MonoString*)value);
  115. return fieldData;
  116. }
  117. case ScriptPrimitiveType::TextureRef:
  118. {
  119. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataResourceRef>();
  120. if(value != nullptr)
  121. {
  122. MonoObject* managedInstance = (MonoObject*)value;
  123. ScriptTexture2D* scriptTexture2D = ScriptTexture2D::toNative(managedInstance);
  124. fieldData->value = static_resource_cast<ScriptTexture2D>(scriptTexture2D->getNativeHandle());
  125. }
  126. return fieldData;
  127. }
  128. case ScriptPrimitiveType::SpriteTextureRef:
  129. {
  130. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataResourceRef>();
  131. if(value != nullptr)
  132. {
  133. MonoObject* managedInstance = (MonoObject*)value;
  134. ScriptSpriteTexture* scriptSpriteTexture = ScriptSpriteTexture::toNative(managedInstance);
  135. fieldData->value = static_resource_cast<SpriteTexture>(scriptSpriteTexture->getNativeHandle());
  136. }
  137. return fieldData;
  138. }
  139. case ScriptPrimitiveType::SceneObjectRef:
  140. {
  141. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataGameObjectRef>();
  142. if(value != nullptr)
  143. {
  144. MonoObject* managedInstance = (MonoObject*)value;
  145. ScriptSceneObject* scriptSceneObject = ScriptSceneObject::toNative(managedInstance);
  146. fieldData->value = static_object_cast<SceneObject>(scriptSceneObject->getNativeHandle());
  147. }
  148. return fieldData;
  149. }
  150. case ScriptPrimitiveType::ComponentRef:
  151. {
  152. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataGameObjectRef>();
  153. if(value != nullptr)
  154. {
  155. MonoObject* managedInstance = (MonoObject*)value;
  156. ScriptComponent* scriptComponent = ScriptComponent::toNative(managedInstance);
  157. fieldData->value = static_object_cast<Component>(scriptComponent->getNativeHandle());
  158. }
  159. return fieldData;
  160. }
  161. }
  162. }
  163. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  164. {
  165. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataObject>();
  166. if(value != nullptr)
  167. {
  168. fieldData->value = ScriptSerializableObject::create((MonoObject*)value);
  169. }
  170. return fieldData;
  171. }
  172. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoArray)
  173. {
  174. auto fieldData = cm_shared_ptr<ScriptSerializableFieldDataArray>();
  175. if(value != nullptr)
  176. {
  177. fieldData->value = ScriptSerializableArray::create((MonoObject*)value, std::static_pointer_cast<ScriptSerializableTypeInfoArray>(typeInfo));
  178. }
  179. return fieldData;
  180. }
  181. return nullptr;
  182. }
  183. void* ScriptSerializableFieldDataBool::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  184. {
  185. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  186. {
  187. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  188. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Bool)
  189. return &value;
  190. }
  191. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  192. }
  193. void* ScriptSerializableFieldDataChar::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  194. {
  195. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  196. {
  197. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  198. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Char)
  199. return &value;
  200. }
  201. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  202. }
  203. void* ScriptSerializableFieldDataI8::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  204. {
  205. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  206. {
  207. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  208. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I8)
  209. return &value;
  210. }
  211. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  212. }
  213. void* ScriptSerializableFieldDataU8::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  214. {
  215. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  216. {
  217. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  218. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U8)
  219. return &value;
  220. }
  221. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  222. }
  223. void* ScriptSerializableFieldDataI16::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  224. {
  225. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  226. {
  227. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  228. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I16)
  229. return &value;
  230. }
  231. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  232. }
  233. void* ScriptSerializableFieldDataU16::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  234. {
  235. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  236. {
  237. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  238. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U16)
  239. return &value;
  240. }
  241. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  242. }
  243. void* ScriptSerializableFieldDataI32::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  244. {
  245. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  246. {
  247. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  248. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I32)
  249. return &value;
  250. }
  251. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  252. }
  253. void* ScriptSerializableFieldDataU32::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  254. {
  255. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  256. {
  257. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  258. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U32)
  259. return &value;
  260. }
  261. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  262. }
  263. void* ScriptSerializableFieldDataI64::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  264. {
  265. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  266. {
  267. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  268. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I64)
  269. return &value;
  270. }
  271. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  272. }
  273. void* ScriptSerializableFieldDataU64::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  274. {
  275. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  276. {
  277. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  278. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U64)
  279. return &value;
  280. }
  281. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  282. }
  283. void* ScriptSerializableFieldDataFloat::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  284. {
  285. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  286. {
  287. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  288. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Float)
  289. return &value;
  290. }
  291. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  292. }
  293. void* ScriptSerializableFieldDataDouble::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  294. {
  295. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  296. {
  297. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  298. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Double)
  299. return &value;
  300. }
  301. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  302. }
  303. void* ScriptSerializableFieldDataString::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  304. {
  305. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  306. {
  307. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  308. if(primitiveTypeInfo->mType == ScriptPrimitiveType::String)
  309. {
  310. return MonoUtil::wstringToMono(MonoManager::instance().getDomain(), value);
  311. }
  312. }
  313. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  314. }
  315. void* ScriptSerializableFieldDataResourceRef::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  316. {
  317. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  318. {
  319. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  320. if(primitiveTypeInfo->mType == ScriptPrimitiveType::TextureRef)
  321. {
  322. ScriptTexture2D* scriptResource = ScriptResourceManager::instance().getScriptTexture(value);
  323. if(scriptResource == nullptr)
  324. scriptResource = ScriptResourceManager::instance().createScriptTexture(value);
  325. return scriptResource->getManagedInstance();
  326. }
  327. else if(primitiveTypeInfo->mType == ScriptPrimitiveType::SpriteTextureRef)
  328. {
  329. ScriptSpriteTexture* scriptResource = ScriptResourceManager::instance().getScriptSpriteTexture(value);
  330. if(scriptResource == nullptr)
  331. scriptResource = ScriptResourceManager::instance().createScriptSpriteTexture(value);
  332. return scriptResource->getManagedInstance();
  333. }
  334. }
  335. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  336. }
  337. void* ScriptSerializableFieldDataGameObjectRef::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  338. {
  339. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  340. {
  341. auto primitiveTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoPrimitive>(typeInfo);
  342. if(primitiveTypeInfo->mType == ScriptPrimitiveType::SceneObjectRef)
  343. {
  344. ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getScriptSceneObject(value);
  345. if(scriptSceneObject == nullptr)
  346. scriptSceneObject = ScriptGameObjectManager::instance().createScriptSceneObject(value);
  347. return scriptSceneObject->getManagedInstance();
  348. }
  349. else if(primitiveTypeInfo->mType == ScriptPrimitiveType::SpriteTextureRef)
  350. {
  351. ScriptComponent* scriptComponent = ScriptGameObjectManager::instance().getScriptComponent(value);
  352. if(scriptComponent == nullptr)
  353. scriptComponent = ScriptGameObjectManager::instance().createScriptComponent(value);
  354. return scriptComponent->getManagedInstance();
  355. }
  356. }
  357. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  358. }
  359. void* ScriptSerializableFieldDataObject::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  360. {
  361. if(typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  362. {
  363. auto objectTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoObject>(typeInfo);
  364. return value->getManagedInstance();
  365. }
  366. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  367. }
  368. void* ScriptSerializableFieldDataArray::getValue(const ScriptSerializableTypeInfoPtr& typeInfo)
  369. {
  370. if(typeInfo->getTypeId() == TID_SerializableTypeInfoArray)
  371. {
  372. auto objectTypeInfo = std::static_pointer_cast<ScriptSerializableTypeInfoArray>(typeInfo);
  373. return value->getManagedInstance();
  374. }
  375. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  376. }
  377. RTTITypeBase* ScriptSerializableFieldKey::getRTTIStatic()
  378. {
  379. return ScriptSerializableFieldKeyRTTI::instance();
  380. }
  381. RTTITypeBase* ScriptSerializableFieldKey::getRTTI() const
  382. {
  383. return ScriptSerializableFieldKey::getRTTIStatic();
  384. }
  385. RTTITypeBase* ScriptSerializableFieldData::getRTTIStatic()
  386. {
  387. return ScriptSerializableFieldDataRTTI::instance();
  388. }
  389. RTTITypeBase* ScriptSerializableFieldData::getRTTI() const
  390. {
  391. return ScriptSerializableFieldData::getRTTIStatic();
  392. }
  393. RTTITypeBase* ScriptSerializableFieldDataEntry::getRTTIStatic()
  394. {
  395. return ScriptSerializableFieldDataEntryRTTI::instance();
  396. }
  397. RTTITypeBase* ScriptSerializableFieldDataEntry::getRTTI() const
  398. {
  399. return ScriptSerializableFieldDataEntry::getRTTIStatic();
  400. }
  401. RTTITypeBase* ScriptSerializableFieldDataBool::getRTTIStatic()
  402. {
  403. return ScriptSerializableFieldDataBoolRTTI::instance();
  404. }
  405. RTTITypeBase* ScriptSerializableFieldDataBool::getRTTI() const
  406. {
  407. return ScriptSerializableFieldDataBool::getRTTIStatic();
  408. }
  409. RTTITypeBase* ScriptSerializableFieldDataChar::getRTTIStatic()
  410. {
  411. return ScriptSerializableFieldDataCharRTTI::instance();
  412. }
  413. RTTITypeBase* ScriptSerializableFieldDataChar::getRTTI() const
  414. {
  415. return ScriptSerializableFieldDataChar::getRTTIStatic();
  416. }
  417. RTTITypeBase* ScriptSerializableFieldDataI8::getRTTIStatic()
  418. {
  419. return ScriptSerializableFieldDataI8RTTI::instance();
  420. }
  421. RTTITypeBase* ScriptSerializableFieldDataI8::getRTTI() const
  422. {
  423. return ScriptSerializableFieldDataI8::getRTTIStatic();
  424. }
  425. RTTITypeBase* ScriptSerializableFieldDataU8::getRTTIStatic()
  426. {
  427. return ScriptSerializableFieldDataU8RTTI::instance();
  428. }
  429. RTTITypeBase* ScriptSerializableFieldDataU8::getRTTI() const
  430. {
  431. return ScriptSerializableFieldDataU8::getRTTIStatic();
  432. }
  433. RTTITypeBase* ScriptSerializableFieldDataI16::getRTTIStatic()
  434. {
  435. return ScriptSerializableFieldDataI16RTTI::instance();
  436. }
  437. RTTITypeBase* ScriptSerializableFieldDataI16::getRTTI() const
  438. {
  439. return ScriptSerializableFieldDataI16::getRTTIStatic();
  440. }
  441. RTTITypeBase* ScriptSerializableFieldDataU16::getRTTIStatic()
  442. {
  443. return ScriptSerializableFieldDataU16RTTI::instance();
  444. }
  445. RTTITypeBase* ScriptSerializableFieldDataU16::getRTTI() const
  446. {
  447. return ScriptSerializableFieldDataU16::getRTTIStatic();
  448. }
  449. RTTITypeBase* ScriptSerializableFieldDataI32::getRTTIStatic()
  450. {
  451. return ScriptSerializableFieldDataI32RTTI::instance();
  452. }
  453. RTTITypeBase* ScriptSerializableFieldDataI32::getRTTI() const
  454. {
  455. return ScriptSerializableFieldDataI32::getRTTIStatic();
  456. }
  457. RTTITypeBase* ScriptSerializableFieldDataU32::getRTTIStatic()
  458. {
  459. return ScriptSerializableFieldDataU32RTTI::instance();
  460. }
  461. RTTITypeBase* ScriptSerializableFieldDataU32::getRTTI() const
  462. {
  463. return ScriptSerializableFieldDataU32::getRTTIStatic();
  464. }
  465. RTTITypeBase* ScriptSerializableFieldDataI64::getRTTIStatic()
  466. {
  467. return ScriptSerializableFieldDataI64RTTI::instance();
  468. }
  469. RTTITypeBase* ScriptSerializableFieldDataI64::getRTTI() const
  470. {
  471. return ScriptSerializableFieldDataI64::getRTTIStatic();
  472. }
  473. RTTITypeBase* ScriptSerializableFieldDataU64::getRTTIStatic()
  474. {
  475. return ScriptSerializableFieldDataU64RTTI::instance();
  476. }
  477. RTTITypeBase* ScriptSerializableFieldDataU64::getRTTI() const
  478. {
  479. return ScriptSerializableFieldDataU64::getRTTIStatic();
  480. }
  481. RTTITypeBase* ScriptSerializableFieldDataFloat::getRTTIStatic()
  482. {
  483. return ScriptSerializableFieldDataFloatRTTI::instance();
  484. }
  485. RTTITypeBase* ScriptSerializableFieldDataFloat::getRTTI() const
  486. {
  487. return ScriptSerializableFieldDataFloat::getRTTIStatic();
  488. }
  489. RTTITypeBase* ScriptSerializableFieldDataDouble::getRTTIStatic()
  490. {
  491. return ScriptSerializableFieldDataDoubleRTTI::instance();
  492. }
  493. RTTITypeBase* ScriptSerializableFieldDataDouble::getRTTI() const
  494. {
  495. return ScriptSerializableFieldDataDouble::getRTTIStatic();
  496. }
  497. RTTITypeBase* ScriptSerializableFieldDataString::getRTTIStatic()
  498. {
  499. return ScriptSerializableFieldDataStringRTTI::instance();
  500. }
  501. RTTITypeBase* ScriptSerializableFieldDataString::getRTTI() const
  502. {
  503. return ScriptSerializableFieldDataString::getRTTIStatic();
  504. }
  505. RTTITypeBase* ScriptSerializableFieldDataResourceRef::getRTTIStatic()
  506. {
  507. return ScriptSerializableFieldDataResourceRefRTTI::instance();
  508. }
  509. RTTITypeBase* ScriptSerializableFieldDataResourceRef::getRTTI() const
  510. {
  511. return ScriptSerializableFieldDataResourceRef::getRTTIStatic();
  512. }
  513. RTTITypeBase* ScriptSerializableFieldDataGameObjectRef::getRTTIStatic()
  514. {
  515. return ScriptSerializableFieldDataGameObjectRefRTTI::instance();
  516. }
  517. RTTITypeBase* ScriptSerializableFieldDataGameObjectRef::getRTTI() const
  518. {
  519. return ScriptSerializableFieldDataGameObjectRef::getRTTIStatic();
  520. }
  521. RTTITypeBase* ScriptSerializableFieldDataObject::getRTTIStatic()
  522. {
  523. return ScriptSerializableFieldDataObjectRTTI::instance();
  524. }
  525. RTTITypeBase* ScriptSerializableFieldDataObject::getRTTI() const
  526. {
  527. return ScriptSerializableFieldDataObject::getRTTIStatic();
  528. }
  529. RTTITypeBase* ScriptSerializableFieldDataArray::getRTTIStatic()
  530. {
  531. return ScriptSerializableFieldDataArrayRTTI::instance();
  532. }
  533. RTTITypeBase* ScriptSerializableFieldDataArray::getRTTI() const
  534. {
  535. return ScriptSerializableFieldDataArray::getRTTIStatic();
  536. }
  537. }