コード例 #1
0
        public void Write(BinaryBuffer buf)
        {
            buf.Write(collectionCounts.Count);
            foreach (var i in collectionCounts)
            {
                buf.Write(i);
            }

            buf.Write(fieldSizes.Count);
            foreach (var i in fieldSizes)
            {
                buf.Write(i);
            }
            fieldSizes.Clear();

            //Guid crumb, so we can jump to the guid table on read
            var guidCrumbPosition = buf.position;

            buf.position += 5;

            //Type table
            //At this point includes only node types, which we iterate through adding fields type ids
            var keys = new Type[typeToLocalID.Count];

            typeToLocalID.Keys.CopyTo(keys, 0);
            buf.Write(keys.Length);

            foreach (var type in keys)
            {
                var metaNode = NodeBindings.GetBindings(type);
                buf.Write(metaNode.fields.Length);
                foreach (var field in metaNode.fields)
                {
                    var typeUnits = TypeUnitUtility.GetTypeUnits(field.type);
                    buf.Write(typeUnits.Length);
                    foreach (var subType in typeUnits)
                    {
                        WriteLocalID(buf, subType);
                    }
                }
            }

            //Guids
            var currentPosition = buf.position;

            buf.position = guidCrumbPosition;
            buf.Write(currentPosition);
            buf.position = currentPosition;

            buf.Write(typeToLocalID.Count);
            foreach (var pair in typeToLocalID)
            {
                buf.Write(DeltaCore.GetGUID(pair.Key));
            }
            typeToLocalID.Clear();
        }
コード例 #2
0
        public void Write(BinaryBuffer buf, PrefabFooter metadata)
        {
            var numFieldsWritten = 0;

            metadata.WriteLocalID(buf, bindings.type);

            for (int i = 0; i < fields.Length; i++)
            {
                var fieldOverride = fields[i];

                if (fieldOverride.node != null)
                {
                    buf.Write(i);
                    var metaField = fieldOverride.node.Bindings.fields[fieldOverride.fieldID];
                    var start     = buf.position;
                    metaField.Write(fieldOverride.node, buf);
                    metadata.fieldSizes.Enqueue(buf.position - start);
                    numFieldsWritten++;
                }
                else if (fieldOverride.buf != null)
                {
                    buf.Write(i);
                    var start = buf.position;
                    buf.WriteBytes(fieldOverride.buf, fieldOverride.position, fieldOverride.length);
                    metadata.fieldSizes.Enqueue(buf.position - start);
                    numFieldsWritten++;
                }
            }

            metadata.collectionCounts.Push(numFieldsWritten);

            var numChildrenWritten = 0;

            for (int i = 0; i < children.Length; i++)
            {
                var child = children[i];
                if (child == null)
                {
                    continue;
                }

                buf.Write(i);
                child.Write(buf, metadata);
                numChildrenWritten++;
            }

            metadata.collectionCounts.Push(numChildrenWritten);
        }
コード例 #3
0
 public void WriteLocalID(BinaryBuffer buf, Type type)
 {
     if (!typeToLocalID.TryGetValue(type, out int localID))
     {
         localID = typeToLocalID.Count;
         typeToLocalID.Add(type, localID);
     }
     buf.Write(localID);
 }