Пример #1
0
        private static void Configure(UIModel model, int parent, int index, UISchema schema, MemoryBinaryWriter modelWriter, TypeDecomposer decomposer, UIPropertyWriterContext context, List <Type> types, ref long totalSize)
        {
            var node   = model.nodes[index];
            var header = new HeaderConfig
            {
                configurationMask = node.mask,
                schemaIndex       = schema.elements.FindIndex((element) => element.identifier == node.identifier),
                flags             = 0,
                childCount        = node.children.Count,
                parent            = parent
            };
            var sizeOffset   = modelWriter.Length;
            var headerOffset = modelWriter.Length + sizeof(int);
            int size         = 0;

            modelWriter.Write(0);
            modelWriter.WriteBytes(UnsafeUtility.AddressOf(ref header), UnsafeUtility.SizeOf <HeaderConfig>());
            foreach (var child in node.children)
            {
                modelWriter.Write(child);
            }

            size += UnsafeUtility.SizeOf <HeaderConfig>() + (UnsafeUtility.SizeOf <int>() * node.children.Count);
            size += ConfigureBlocks(node, modelWriter, decomposer, ref context, types, size, out header.flags);
            UnsafeUtility.MemCpy((((IntPtr)modelWriter.Data) + sizeOffset).ToPointer(), UnsafeUtility.AddressOf(ref size), UnsafeUtility.SizeOf <int>());
            UnsafeUtility.MemCpy((((IntPtr)modelWriter.Data) + headerOffset).ToPointer(), UnsafeUtility.AddressOf(ref header), UnsafeUtility.SizeOf <HeaderConfig>());
            totalSize += UnsafeUtility.SizeOf <int>() + size;
            foreach (var child in node.children)
            {
                Configure(model, index, child, schema, modelWriter, decomposer, context, types, ref totalSize);
            }
        }
Пример #2
0
        public override void OnInspectorGUI()
        {
            if (uiSchemaProperty.objectReferenceValue == null)
            {
                if (GUILayout.Button("Create new panel"))
                {
                    string savePath = EditorUtility.SaveFilePanelInProject(
                        "Save Panel File To ..", defaultName, "asset", "please select a folder and enter the file name");

                    // get our dialog box and path
                    if (Directory.Exists(Path.GetDirectoryName(savePath)))
                    {
                        UISchema uiSchema = ScriptableObject.CreateInstance <UISchema>();
                        uiSchema.Panel = PanelSchema.GetDefaults();
                        if (!File.Exists(savePath))
                        {
                            AssetDatabase.CreateAsset(uiSchema, savePath);                        // don't save over existing file
                        }
                        serializedObject.Update();
                        uiSchemaProperty.objectReferenceValue = uiSchema;
                        serializedObject.ApplyModifiedProperties();
                    }
                }
            }
            else
            {
                base.OnInspectorGUI();

                if (Application.isPlaying)
                {
                    EditorGUILayout.Space();

                    if (GUILayout.Button("Save Layout"))
                    {
                        string savePath = EditorUtility.SaveFilePanelInProject(
                            "Save Panel File To ..", defaultName, "asset", "please select a folder and enter the file name");

                        // get our dialog box and path
                        if (Directory.Exists(Path.GetDirectoryName(savePath)))
                        {
                            m_instance.Save();
                            UISchema uiSchema = (UISchema)uiSchemaProperty.objectReferenceValue;
                            if (!File.Exists(savePath))
                            {
                                AssetDatabase.CreateAsset(uiSchema, savePath);
                            }

                            serializedObject.Update();

                            /*uiSchemaProperty.objectReferenceValue = uiSchema;
                             * serializedObject.ApplyModifiedProperties();*/
                        }
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Serializes a UIModel in the following format:
        /// Total Length: ulong (excluding this field)
        /// Node Count: int
        /// For each node present:
        /// Node Size: int (excluding this field)
        /// Header Data: HeaderConfig
        /// Children: int[], total length of children array can be found inside the HeaderConfig.
        /// ConfigBlocks: Which config blocks are present can be found by querying the configuration mask in the headerconfig
        /// </summary>
        public static void Write(this UIModel model, Stream stream, UISchema schema)
        {
            Contract.Assert(model.group != null);
            using var modelWriter = new MemoryBinaryWriter();
            modelWriter.Write(0UL);
            modelWriter.Write(model.nodes.Count);
            var context = new UIPropertyWriterContext
            {
                group = model.group
            };
            var  decomposer = new TypeDecomposer();
            var  types      = new List <Type>();
            long totalSize  = UnsafeUtility.SizeOf <int>();

            Configure(model, -1, 0, schema, modelWriter, decomposer, context, types, ref totalSize);

            /* for (int i = 0; i < model.nodes.Count; i++) {
             *  totalSize += Configure(model.nodes[i], modelWriter, decomposer, context, types) + UnsafeUtility.SizeOf<int>();
             * } */
            UnsafeUtility.MemCpy(modelWriter.Data, UnsafeUtility.AddressOf(ref totalSize), UnsafeUtility.SizeOf <ulong>());
            using var modelStream = new UnmanagedMemoryStream(modelWriter.Data, modelWriter.Length);
            modelStream.CopyTo(stream);
        }
Пример #4
0
 protected override void OnCreate()
 {
     base.OnCreate();
     schema         = UIGlobalSettings.GetOrCreateSettings().schema;
     compiledSchema = this.schema.Compile(Allocator.Persistent);
 }