Пример #1
0
        public override bool TryImportProperty <T>(T entity, CachedFucineProperty <T> prop, EntityData entityData,
                                                   ContentImportLog log)
        {
            var name = entityData.ValuesTable[prop.LowerCaseName];

            if (name == null)
            {
                return(false);
            }
            var sprite = ResourcesManager.GetSprite(_folder, name.ToString(), false);

            prop.SetViaFastInvoke(entity, sprite);
            return(true);
        }
        public override bool TryImportProperty <T>(
            T entity,
            CachedFucineProperty <T> prop,
            EntityData entityData,
            ContentImportLog log)
        {
            var propertyType = prop.ThisPropInfo.PropertyType;

            if (!(entityData.ValuesTable[prop.LowerCaseName] is EntityData subEntityData))
            {
                prop.SetViaFastInvoke(entity, FactoryInstantiator.CreateObjectWithDefaultConstructor(propertyType));
                return(false);
            }

            var entityType = propertyType.GetGenericArguments()[1];

            if (!(FactoryInstantiator.CreateObjectWithDefaultConstructor(propertyType) is IDictionary target))
            {
                return(false);
            }
            foreach (var k in subEntityData.ValuesTable.Keys)
            {
                var kk   = k.ToString().ToLower();
                var data = subEntityData.ValuesTable[kk];
                if (entityType.GetInterfaces().Contains(typeof(IQuickSpecEntity)) &&
                    data is string qs)
                {
                    if (!(FactoryInstantiator.CreateObjectWithDefaultConstructor(entityType) is IQuickSpecEntity
                          defaultConstructor))
                    {
                        return(false);
                    }
                    defaultConstructor.QuickSpec(qs);
                    target[kk] = defaultConstructor;
                }
                else
                {
                    var ent = FactoryInstantiator.CreateEntity(entityType, data as EntityData, log);
                    target[kk] = ent;
                }
            }

            prop.SetViaFastInvoke(entity, target);
            return(true);
        }