| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #include "BsScriptSerializableList.h"
- #include "BsScriptSerializableListRTTI.h"
- #include "BsMonoManager.h"
- #include "BsRuntimeScriptObjects.h"
- #include "BsScriptSerializableField.h"
- #include "BsMonoClass.h"
- #include "BsMonoMethod.h"
- using namespace CamelotFramework;
- namespace BansheeEngine
- {
- ScriptSerializableList::ScriptSerializableList(const ConstructPrivately& dummy)
- :mManagedInstance(nullptr), mNumElements(0)
- {
- }
- ScriptSerializableList::ScriptSerializableList(const ConstructPrivately& dummy, const ScriptSerializableTypeInfoListPtr& typeInfo, MonoObject* managedInstance)
- :mListTypeInfo(typeInfo), mManagedInstance(managedInstance), mNumElements(0)
- {
- mNumElements = getLength();
- }
- ScriptSerializableListPtr ScriptSerializableList::create(MonoObject* managedInstance, const ScriptSerializableTypeInfoListPtr& typeInfo)
- {
- if(!RuntimeScriptObjects::instance().getSystemGenericListClass()->isInstanceOfType(managedInstance))
- return nullptr;
- return cm_shared_ptr<ScriptSerializableList>(ConstructPrivately(), typeInfo, managedInstance);
- }
- ScriptSerializableListPtr ScriptSerializableList::createEmpty()
- {
- return cm_shared_ptr<ScriptSerializableList>(ConstructPrivately());
- }
- void ScriptSerializableList::serializeManagedInstance()
- {
- mListEntries.resize(mNumElements);
- for(UINT32 i = 0; i < mNumElements; i++)
- {
- mListEntries[i] = getFieldData(i);
- }
- }
- void ScriptSerializableList::deserializeManagedInstance()
- {
- if(!mListTypeInfo->isTypeLoaded())
- return;
- ::MonoClass* listMonoClass = mListTypeInfo->getMonoClass();
- MonoClass* listClass = MonoManager::instance().findClass(listMonoClass);
- if(listClass == nullptr)
- return;
- mManagedInstance = listClass->createInstance();
- setLength(mNumElements);
- CM::UINT32 idx = 0;
- for(auto& arrayEntry : mListEntries)
- {
- setFieldData(idx, arrayEntry);
- idx++;
- }
- }
- void ScriptSerializableList::setFieldData(CM::UINT32 arrayIdx, const ScriptSerializableFieldDataPtr& val)
- {
- if(val->isValueType())
- setValue(arrayIdx, val->getValue(mListTypeInfo->mElementType));
- else
- {
- MonoObject* ptrToObj = (MonoObject*)val->getValue(mListTypeInfo->mElementType);
- setValue(arrayIdx, &ptrToObj);
- }
- }
- ScriptSerializableFieldDataPtr ScriptSerializableList::getFieldData(CM::UINT32 arrayIdx)
- {
- return ScriptSerializableFieldData::create(mListTypeInfo->mElementType, getValue(arrayIdx));
- }
- void ScriptSerializableList::setValue(CM::UINT32 arrayIdx, void* val)
- {
- // TODO
- }
- void* ScriptSerializableList::getValue(CM::UINT32 arrayIdx)
- {
- // TODO
-
- return nullptr;
- }
- UINT32 ScriptSerializableList::getLength() const
- {
- // TODO
-
- return 0;
- }
- void ScriptSerializableList::setLength(UINT32 length)
- {
- // TODO
- }
- RTTITypeBase* ScriptSerializableList::getRTTIStatic()
- {
- return ScriptSerializableListRTTI::instance();
- }
- RTTITypeBase* ScriptSerializableList::getRTTI() const
- {
- return ScriptSerializableList::getRTTIStatic();
- }
- }
|