コード例 #1
0
        public override List <string> Save()
        {
            var list = base.Save();

            list.AddRange(SaveAttribute.GetFields(this, false));

            return(list);
        }
コード例 #2
0
    private string DetectStoredFormat()
    {
        bool staticMode = false, DynamicMode = false;

        //script level
        foreach (MonoBehaviour mono in ((SerializableComponent)target).GetComponents <MonoBehaviour>())
        {
            if (!SerializableFiles.NeedLink(mono))
            {
                continue;
            }
            //dynamic posistion,etc.. save..
            SaveAttribute FirstOrDefault = (mono.GetType().GetCustomAttributes(typeof(SaveAttribute), true).FirstOrDefault() as SaveAttribute);
            if (FirstOrDefault != null && FirstOrDefault.InstanceNewOnLoad == SaveAttribute.InstanceStatus.Instance)
            {
                DynamicMode = true;
            }

            foreach (FieldInfo field in mono.GetType().GetFields(SerializableGame.Flags))
            {
                SaveAttribute saveAttribute = SerializableFiles.IsMemberSaveAttribute(field);
                if (saveAttribute != null)
                {
                    if (saveAttribute.InstanceNewOnLoad == SaveAttribute.InstanceStatus.NotInstance)
                    {
                        //static
                        staticMode = true;
                    }
                    else if (saveAttribute.InstanceNewOnLoad == SaveAttribute.InstanceStatus.Instance)
                    {
                        //dynamic
                        DynamicMode = true;
                    }
                }
            }
        }
        if (staticMode && DynamicMode)
        {
            return("ERROR");//error box
        }

        if (staticMode)
        {
            return("static mode");
        }

        if (DynamicMode)
        {
            return("dynamic mode");
        }

        return("Internal ERROR");//error box
    }
コード例 #3
0
        public List <string> Save()
        {
            var list = SaveAttribute.GetFields(this);

            foreach (var part in partManager.GetPartsOrDefault <ISaveLoadable>())
            {
                list.AddRange(part.OnSave().GetSave());
            }

            foreach (var effect in effects)
            {
                list.AddRange(effect.Save());
            }

            return(list);
        }
コード例 #4
0
 public static bool NeedLink(MonoBehaviour check)
 {
     if (check.GetType().GetCustomAttributes(typeof(SaveAttribute), true).FirstOrDefault() is SaveAttribute)
     {
         return(true);
     }
     foreach (FieldInfo field in check.GetType().GetFields())
     {
         SaveAttribute saveAttribute = SerializableFiles.IsMemberSaveAttribute(field);
         if (saveAttribute != null)
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #5
0
ファイル: Weapon.cs プロジェクト: abc013/WarriorsSnuggery
        public virtual List <string> Save()
        {
            var list = SaveAttribute.GetFields(this);

            if (Origin != null)
            {
                list.Add("Origin=" + Origin.ID);
            }
            if (Target.Type == TargetType.ACTOR)
            {
                list.Add("TargetActor=" + Target.Actor.ID);
            }

            list.Add("OriginalTargetPosition=" + Target.Position);
            list.Add("OriginalTargetHeight=" + Target.Height);

            return(list);
        }
コード例 #6
0
    public static void TransferStaticScriptsSaving(Type t, Dictionary <string, object> target, GamePersistence.SaveType transferState)
    {
        Type savedAttribute = typeof(SaveAttribute);

        foreach (FieldInfo f in getFieldsFromType(t, typeof(object), false))
        {
            if (f.IsStatic && f.IsDefined(savedAttribute, true))
            {
                SaveAttribute currentSaveAttribute = (SaveAttribute)
                                                     (f.GetCustomAttributes(savedAttribute, false)[0]);

                if ((transferState == GamePersistence.SaveType.Game && currentSaveAttribute.saveForScene) ||
                    (transferState == GamePersistence.SaveType.Scene && currentSaveAttribute.saveForGame))
                {
                    object value = GetTransformedValue(f.GetValue(null));
                    target.Add(f.Name, value);
                }
            }
        }
    }
コード例 #7
0
    public static void transferScriptsSaving(object source, Dictionary <string, object> target, PersistentGameDataController.SaveType transferState)
    {
        Type sourceType = source.GetType();

        Type savedAttribute = typeof(SaveAttribute);

        foreach (FieldInfo f in getFieldsFromType(sourceType, typeof(SaveableMonoBehaviour)))
        {
            if (f.IsDefined(savedAttribute, true))
            {
                SaveAttribute currentSaveAttribute = (SaveAttribute)
                                                     (f.GetCustomAttributes(savedAttribute, false)[0]);

                if ((transferState == PersistentGameDataController.SaveType.Game && currentSaveAttribute.saveForScene) ||
                    (transferState == PersistentGameDataController.SaveType.Scene && currentSaveAttribute.saveForGame))
                {
                    object value = getValue(f.GetValue(source));
                    target.Add(f.Name, value);
                }
            }
        }
    }
コード例 #8
0
    private string GameObjectName(string key, string prefab, List <MonoBehaviourValues> KeyData)
    {
        if (key != "")
        {
            Type loadType = Type.GetType(KeyData[0].ClassTypeName);
            if (loadType == null)
            {
                return("Null ERROR " + KeyData[0].ClassTypeName);
            }
            SaveAttribute atribute = SerializableFiles.IsMemberSaveAttribute(loadType.GetField(KeyData[0].ObjectsData[0].field, SerializableGame.Flags));

            return("The key: " + key + " is for " + (loadType.GetField(atribute.ReferentValue).Name + " object"));
        }
        else if (prefab != "")
        {
            if (prefab.IndexOf("/") > 0)
            {
                return(prefab.Substring(prefab.LastIndexOf("/") + 1));
            }
            return(prefab);
        }

        return("Key and Prefab ERROR!!");
    }
コード例 #9
0
 public List <string> Save()
 {
     return(SaveAttribute.GetFields(this));
 }
コード例 #10
0
    //field value 1 = position
    //field value 2 = rotation
    //field value 3 = scale

    public static void SaveAll(string filename)
    {
        List <GameObjectValue> GameObjectsValues = new List <GameObjectValue>();

        //GameObject level
        foreach (GameObject go in ToSaveGameObjects)
        {
            //GameObject variables
            String Searchkey = "";
            //To avoid invalid use of keys
            string ReferentValueKey = "";
            String PrefabPath       = "";
            List <MonoBehaviourValues> ScriptsList = new List <MonoBehaviourValues>();

            //script level
            foreach (MonoBehaviour mono in go.GetComponents <MonoBehaviour>())
            {
                if (!SerializableFiles.NeedLink(mono))
                {
                    continue;
                }

                //script variables
                List <FieldValue> Field_Values = new List <FieldValue>();

                SaveAttribute LastsaveAttribute = null;

                //extras saves
                SaveAttribute ExtraSave = mono.GetType().GetCustomAttributes(typeof(SaveAttribute), true).FirstOrDefault() as SaveAttribute;
                if (ExtraSave != null)
                {
                    LastsaveAttribute = ExtraSave;

                    if (ExtraSave.SavePosition)
                    {
                        Field_Values.Add(new FieldValue("1", new SVector3(mono.transform.position)));
                    }

                    if (ExtraSave.SaveRotation)
                    {
                        Field_Values.Add(new FieldValue("2", new SQuaternion(mono.transform.rotation)));
                    }

                    if (ExtraSave.SaveScale)
                    {
                        Field_Values.Add(new FieldValue("3", new SVector3(mono.transform.localScale)));
                    }
                }

                foreach (FieldInfo field in mono.GetType().GetFields(Flags))
                {
                    SaveAttribute saveAttribute = SerializableFiles.IsMemberSaveAttribute(field);
                    if (saveAttribute != null)
                    {
                        //To convert non-serializable objects to serializable objects
                        object FieldValue = SerializableObjects.Adapter.ToSerializableObject(field.GetValue(mono));
                        Field_Values.Add(new FieldValue(field.Name, FieldValue));
                        //To avoid invalid use of keys
                        if (ReferentValueKey != "" && ReferentValueKey != saveAttribute.ReferentValue)
                        {
                            Debug.LogError("Only supports the use of a single key(" + ReferentValueKey + " != " + saveAttribute.ReferentValue + ")");
                            return;
                        }
                        ReferentValueKey  = saveAttribute.ReferentValue;
                        LastsaveAttribute = saveAttribute;
                    }
                }

                if (LastsaveAttribute != null && LastsaveAttribute.InstanceNewOnLoad.Equals(SaveAttribute.InstanceStatus.NotInstance))
                {
                    //set by key!
                    if (PrefabPath.Length > 0)
                    {
                        Debug.LogError("Only you can save with a type of stored, static or dynamic mode");
                        return;
                    }

                    Searchkey = mono.GetType().GetField(LastsaveAttribute.ReferentValue, Flags).GetValue(mono).ToString();
                }
                else if (LastsaveAttribute != null && LastsaveAttribute.InstanceNewOnLoad.Equals(SaveAttribute.InstanceStatus.Instance))
                {
                    //set by prefab
                    if (Searchkey.Length > 0)
                    {
                        Debug.LogError("Only you can save with a type of stored, static or dynamic mode");
                        return;
                    }

                    if (!GameObjectPrefabName.ContainsKey(mono.gameObject))
                    {
                        Debug.LogError(string.Format("You can only save PrefabInstance!, {0} was not created by SerializableManager.PrefabInstantiate(GameObject prefab)",
                                                     mono.gameObject.name));
                        return;
                    }

                    GameObjectPrefabName.TryGetValue(mono.gameObject, out PrefabPath);
                }
                else
                {
                    Debug.LogError("You need save with a type of stored, static or dynamic mode");
                    return;
                }

                ScriptsList.Add(new MonoBehaviourValues(mono.GetType(), mono.enabled, Field_Values));
            }//script level

            GameObjectsValues.Add(new GameObjectValue(Searchkey, PrefabPath, ScriptsList));
        }//GameObject level

        //to show debug
        if (DebugSave)
        {
            foreach (GameObjectValue debu in GameObjectsValues)
            {
                Debug.Log(debu.ToString());
            }
        }

        SerializableFiles.Save(GameObjectsValues, filename);

        Debug.Log("Successfully save file: " + filename + (SerializableManager.current.Encrypt? " (Encrypted)" : ""));
    }
コード例 #11
0
    public static void Load(string filename)
    {
        object loadobj = SerializableFiles.Load(filename);

        if (loadobj is String)
        {
            Debug.LogError(loadobj);
            return;
        }

        if (loadobj == null || (loadobj is List <GameObjectValue>) == false)
        {
            Debug.LogError("Could not load the file: " + filename);
            return;
        }
        List <GameObjectValue> LoadList = (List <GameObjectValue>)loadobj;

        //to show debug
        if (DebugSave)
        {
            foreach (GameObjectValue debu in LoadList)
            {
                Debug.Log(debu.ToString());
            }
        }

        foreach (GameObjectValue GameObjectToLoad in LoadList)
        {
            GameObject Load = null;

            if (GameObjectToLoad.PrefabPath.Length > 0)
            {
                //dynamic mode
                GameObject LoadPrefab = Resources.Load(GameObjectToLoad.PrefabPath, typeof(GameObject)) as GameObject;
                Load = GameObject.Instantiate(LoadPrefab, Vector3.zero, Quaternion.identity) as GameObject;
                SerializableGame.GameObjectPrefabName.Add(Load, GameObjectToLoad.PrefabPath);
            }

            Dictionary <Type, int> repeated = new Dictionary <Type, int>();

            foreach (MonoBehaviourValues script in GameObjectToLoad.Scripts)
            {
                Type loadType = Type.GetType(script.ClassTypeName);

                if (GameObjectToLoad.PrefabPath.Length > 0)
                {
                    //dynamic mode

                    Component   ToSet      = null;
                    Component[] components = Load.GetComponents(loadType);
                    if (components.Length > 1)
                    {
                        int value = 1;
                        if (repeated.TryGetValue(loadType, out value))
                        {
                            repeated.Remove(loadType);
                            repeated.Add(loadType, value + 1);
                            value++;
                        }
                        else
                        {
                            repeated.Add(loadType, value);
                        }
                        ToSet = components[value];
                    }
                    else
                    {
                        ToSet = components[0];
                    }

                    foreach (FieldValue Field_Values in script.ObjectsData)
                    {
                        String Field = Field_Values.field;

                        if (Field == "1")
                        {
                            Load.transform.position = (Field_Values.value as SVector3).getVector();
                        }
                        else if (Field == "2")
                        {
                            Load.transform.rotation = (Field_Values.value as SQuaternion).getQuaternion();
                        }
                        else if (Field == "3")
                        {
                            Load.transform.localScale = (Field_Values.value as SVector3).getVector();
                        }
                        else
                        {
                            loadType.GetField(Field, Flags).SetValue(ToSet, Adapter.FormSerializableObject(Field_Values.value));
                        }
                    }

                    ((MonoBehaviour)ToSet).enabled = script.Enable;
                    Load.SendMessage("OnLoad", SendMessageOptions.DontRequireReceiver);
                }
                else
                {
                    //static mode
                    foreach (object gameobject in UnityEngine.Object.FindObjectsOfType(loadType))
                    {
                        SaveAttribute atribute = SerializableFiles.IsMemberSaveAttribute(gameobject.GetType().GetField(script.ObjectsData[0].field, Flags));

                        if ((loadType.GetField(atribute.ReferentValue).GetValue(gameobject).ToString()) == GameObjectToLoad.Searchkey)
                        {
                            foreach (FieldValue Field_Values in script.ObjectsData)
                            {
                                gameobject.GetType().GetField(Field_Values.field, Flags).SetValue(gameobject, Field_Values.value);
                            }

                            ((MonoBehaviour)gameobject).enabled = script.Enable;
                            ((MonoBehaviour)gameobject).SendMessage("OnLoad", SendMessageOptions.DontRequireReceiver);
                        }
                    }
                }
            }
        }
        Debug.Log("Successfully loaded file: " + filename + (SerializableFiles.LastLoadIsEncrypt? " (Encrypted)" : ""));
    }