Beispiel #1
0
        /// <summary>
        /// Unpack saved objects componenet
        /// </summary>
        /// <param name="saveComponent"></param>
        /// <param name="go"></param>
        private static void RestoreComponent(KS_SaveObjectComponent saveComponent, ref GameObject go)
        {
            // Does component exist
            if (!go.GetComponent(saveComponent.componentName))
            {
                Type componentType = Type.GetType(saveComponent.componentName);
                go.AddComponent(componentType);
            }

            object component = go.GetComponent(saveComponent.componentName) as object;

            Type type = component.GetType();

            foreach (KeyValuePair <string, object> kvp in saveComponent.fields)
            {
                var field = type.GetField(kvp.Key,
                                          BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.SetField);

                if (field != null)
                {
                    object value = kvp.Value;
                    field.SetValue(component, value);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="component"></param>
        /// <returns></returns>
        private static KS_SaveObjectComponent StoreComponent(object component)
        {
            // Setup saveable componenet
            KS_SaveObjectComponent newObjectComponent = new KS_SaveObjectComponent
            {
                fields = new Dictionary <string, object>()
            };

            // Get component type
            var type = component.GetType();

            // Get Component Public, private and instance fields
            FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);

            // Save componenet type
            newObjectComponent.componentName = type.ToString();

            // Add Each Field
            foreach (FieldInfo field in fields)
            {
                if (field != null)                               // If field null go to next
                {
                    if (field.FieldType.IsSerializable == false) // If field is not serializable skip field
                    {
                        continue;
                    }

                    if (IsFieldACollection(field.FieldType))    // Is field a collection type?
                    {
                        Type element = GetElementType(field.FieldType);

                        if (element.IsSerializable == false)    // If isnt serializable skip
                        {
                            continue;
                        }
                    }

                    newObjectComponent.fields.Add(field.Name, field.GetValue(component));
                }
            }
            return(newObjectComponent);
        }