Esempio n. 1
0
    private async void OnGUI()
    {
        if (GUILayout.Button("Save"))
        {
            canvas.SetActive(true);
            await ZSerialize.SaveScene();

            canvas.SetActive(false);
            return;
        }

        if (GUILayout.Button("Load"))
        {
            canvas.SetActive(true);
            await ZSerialize.LoadScene();

            canvas.SetActive(false);
            return;
        }

        if (GUILayout.Button("Destroy Player"))
        {
            Destroy(ballMover.gameObject);
        }

        if (ballMover && ballMover.rb)
        {
            GUILayout.Label("Velocity: " + ballMover.rb.velocity);
        }
    }
Esempio n. 2
0
        static void GetClasses()
        {
#if UNITY_2020_3_OR_NEWER
            var types =
                ZSerialize.GetPersistentTypes().Where(t => searchProject || FindObjectsOfType(t, true).Length > 0).OrderBy(t => t.Name).ToArray();
#else
            var types = ZSerialize.GetPersistentTypes().Where(t => searchProject || FindObjectsOfType(t).Length > 0)
                        .OrderBy(t => t.Name).ToArray();
#endif
            classes = types.Select(t => new Class(t, ZSerializerEditor.GetClassState(t))).ToArray();
        }
Esempio n. 3
0
    private void ToggleCanvas()
    {
        uiManager.gameObject.SetActive(!uiManager.gameObject.activeSelf);
        tutorialCanvas.SetActive(!tutorialCanvas.activeSelf);
        uiManager.DestroyAllButtons();
        var levelNames = ZSerialize.GetLevelNames();

        foreach (var levelName in levelNames)
        {
            uiManager.CreateButton(levelName, transform, () =>
            {
                ZSerialize.LoadLevel(levelName, transform, true);
            });
        }
    }
Esempio n. 4
0
    public void SaveLevel()
    {
        FindObjectOfType <NodeSpawner>().ResetNodes();
        ZSerialize.SaveLevel(levelName, levelParent);
        var uiManager = FindObjectOfType <UIManager>();

        uiManager.DestroyAllButtons();
        var levelNames = ZSerialize.GetLevelNames();

        foreach (var levelName in levelNames)
        {
            uiManager.CreateButton(levelName, transform, () =>
            {
                ZSerialize.LoadLevel(levelName, levelParent, true);
            });
        }
    }
    public async void OnEnable()
    {
        try
        {
            manager = target as PersistentMonoBehaviour;

            Type type = null;

            await Task.Run(() =>
            {
                type = AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes()).Where(t =>
                {
                    var att = t.GetCustomAttributes <CustomEditor>().FirstOrDefault();
                    if (att == null)
                    {
                        return(false);
                    }
                    var inspectedType = typeof(CustomEditor).GetField("m_InspectedType", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(att) as Type;
                    return(inspectedType == manager.GetType());
                }).FirstOrDefault();
            });


            if (type != null)
            {
                editor = CreateEditor(manager, type);
            }
            else
            {
                editor = this;
            }
        }
        catch (Exception e)
        {
            ZSerialize.LogWarning(e, DebugMode.Developer);
        }
    }
Esempio n. 6
0
 public void LoadLastSavedScene()
 {
     ZSerialize.LoadSceneGroup("Home", out _);
 }
Esempio n. 7
0
        // [MenuItem("Tools/ZSerializer/Generate Unity Component ZSerializers", priority = 20)]
        public static void GenerateUnityComponentClasses()
        {
            string longScript = @"
using UnityEngine;
using System.Linq;
using System.Collections.Generic;
namespace ZSerializer {

";

            List <Type> types = ZSerialize.UnitySerializableTypes
                                .Intersect(ZSerializerSettings.Instance.unityComponentTypes.Select(s => Type.GetType(s))).ToList();

            foreach (var type in types)
            {
                EditorUtility.DisplayProgressBar("Generating Unity Component ZSerializers", type.Name,
                                                 types.IndexOf(type) / (float)types.Count);


                if (type != typeof(PersistentGameObject))
                {
                    longScript +=
                        "[System.Serializable]\npublic sealed class " + type.Name +
                        "ZSerializer : ZSerializer.Internal.ZSerializer {\n";

                    foreach (var propertyInfo in type
                             .GetProperties(BindingFlags.Public | BindingFlags.Instance)
                             .Where(ZSerialize.PropertyIsSuitableForZSerializer))
                    {
                        longScript +=
                            $"    public {propertyInfo.PropertyType.ToString().Replace('+', '.')} " +
                            propertyInfo.Name +
                            ";\n";
                    }

                    foreach (var fieldInfo in type
                             .GetFields(BindingFlags.Public | BindingFlags.Instance)
                             .Where(f => f.GetCustomAttribute <ObsoleteAttribute>() == null))
                    {
                        var fieldType = fieldInfo.FieldType;

                        if (fieldInfo.FieldType.IsArray)
                        {
                            fieldType = fieldInfo.FieldType.GetElementType();
                        }

                        int genericParameterAmount = fieldType.GenericTypeArguments.Length;

                        longScript +=
                            $"    public {fieldInfo.FieldType.ToString().Replace('+', '.')} " + fieldInfo.Name +
                            ";\n";

                        if (genericParameterAmount > 0)
                        {
                            string oldString = $"`{genericParameterAmount}[";
                            string newString = "<";

                            var genericArguments = fieldType.GenericTypeArguments;

                            for (var i = 0; i < genericArguments.Length; i++)
                            {
                                oldString += genericArguments[i].ToString().Replace('+', '.') +
                                             (i == genericArguments.Length - 1 ? "]" : ",");
                                newString += genericArguments[i].ToString().Replace('+', '.') +
                                             (i == genericArguments.Length - 1 ? ">" : ",");
                            }

                            longScript = longScript.Replace(oldString, newString);
                        }
                    }

                    var data = ZSerializerSettings.Instance.unityComponentDataList.FirstOrDefault(d =>
                                                                                                  d.Type == type);

                    if (data != null)
                    {
                        foreach (var customVariableEntry in data.customVariableEntries)
                        {
                            longScript +=
                                $"    public {customVariableEntry.variableType} {customVariableEntry.variableName};\n";
                        }
                    }


                    longScript += "    public " + type.Name +
                                  "ZSerializer (string ZUID, string GOZUID) : base(ZUID, GOZUID) {\n" +
                                  "        var instance = ZSerializer.ZSerialize.idMap[ZSerializer.ZSerialize.CurrentGroupID][ZUID] as " +
                                  type.FullName +
                                  ";\n";

                    foreach (var propertyInfo in type
                             .GetProperties(BindingFlags.Public | BindingFlags.Instance)
                             .Where(ZSerialize.PropertyIsSuitableForZSerializer))
                    {
                        longScript += $"        " + propertyInfo.Name + " = " + "instance." + propertyInfo.Name +
                                      ";\n";
                    }

                    foreach (var fieldInfo in type
                             .GetFields(BindingFlags.Public | BindingFlags.Instance)
                             .Where(f => f.GetCustomAttribute <ObsoleteAttribute>() == null))
                    {
                        longScript += $"        " + fieldInfo.Name + " = " + "instance." + fieldInfo.Name + ";\n";
                    }

                    longScript +=
                        $"        ZSerializerSettings.Instance.unityComponentDataList.FirstOrDefault(data => data.Type == typeof({type.FullName}))?.OnSerialize?.Invoke(this, instance);\n";


                    longScript += "    }\n";


                    longScript +=
                        @"    public override void RestoreValues(UnityEngine.Component component)
    {
        var instance = (" + type.FullName + @")component;
";
                    foreach (var propertyInfo in type
                             .GetProperties(BindingFlags.Public | BindingFlags.Instance)
                             .Where(ZSerialize.PropertyIsSuitableForZSerializer))
                    {
                        longScript += $"        instance." + propertyInfo.Name + " = " + propertyInfo.Name + ";\n";
                    }

                    longScript +=
                        $"        ZSerializerSettings.Instance.unityComponentDataList.FirstOrDefault(data => data.Type == typeof({type.FullName}))?.OnDeserialize?.Invoke(this, instance);\n";


                    longScript += "    }\n";
                    longScript += "}\n";
                }
            }

            EditorUtility.ClearProgressBar();

            longScript += "}";

            if (!Directory.Exists(Application.dataPath + "/ZResources/ZSerializer"))
            {
                Directory.CreateDirectory(Application.dataPath + "/ZResources/ZSerializer");
            }

            FileStream fs = new FileStream(
                Application.dataPath + "/ZResources/ZSerializer/UnityComponentZSerializers.cs",
                FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);

            sw.Write(longScript);
            sw.Close();

            AssetDatabase.Refresh();
            ZSerialize.Log("<color=cyan>Unity Component ZSerializers rebuilt</color>", DebugMode.Informational);
        }
Esempio n. 8
0
    // public override void OnPostLoad()
    // {
    //     ballMover = FindObjectOfType<BallMover>();
    // }

    private void Start()
    {
        ballMover = FindObjectOfType <BallMover>();
        ZSerialize.LoadScene();
    }