Esempio n. 1
0
 internal void ReadFrom(MyOctreeStorage.ChunkHeader header, Stream stream)
 {
     if (this.m_octree == null)
     {
         this.m_octree = new MySparseOctree(0, (header.ChunkType == MyOctreeStorage.ChunkTypeEnum.ContentLeafOctree) ? MyOctreeNode.ContentFilter : MyOctreeNode.MaterialFilter, 0);
     }
     this.m_octree.ReadFrom(header, stream);
 }
 internal void ReadFrom(MyOctreeStorage.ChunkHeader header, Stream stream)
 {
     if (m_octree == null)
     {
         Debug.Assert(header.ChunkType == MyOctreeStorage.ChunkTypeEnum.ContentLeafOctree ||
                      header.ChunkType == MyOctreeStorage.ChunkTypeEnum.MaterialLeafOctree);
         m_octree = new MySparseOctree(0, header.ChunkType == MyOctreeStorage.ChunkTypeEnum.ContentLeafOctree
             ? MyOctreeNode.ContentFilter
             : MyOctreeNode.MaterialFilter);
     }
     m_octree.ReadFrom(header, stream);
 }
Esempio n. 3
0
        internal unsafe void ReadFrom(MyOctreeStorage.ChunkHeader header, Stream stream)
        {
            this.m_treeHeight     = stream.ReadInt32();
            this.m_treeWidth      = 1 << (this.m_treeHeight & 0x1f);
            this.m_defaultContent = stream.ReadByteNoAlloc();
            int *numPtr1 = (int *)ref header.Size;

            numPtr1[0] -= 5;
            int num = header.Size / 13;

            this.m_nodes.Clear();
            for (int i = 0; i < num; i++)
            {
                MyOctreeNode node;
                uint         key = stream.ReadUInt32();
                node.ChildMask = stream.ReadByteNoAlloc();
                stream.ReadNoAlloc(&node.Data.FixedElementField, 0, 8);
                this.m_nodes.Add(key, node);
            }
        }
Esempio n. 4
0
        internal void ReadFrom(MyOctreeStorage.ChunkHeader header, Stream stream)
        {
            m_treeHeight     = stream.ReadInt32();
            m_treeWidth      = 1 << m_treeHeight;
            m_defaultContent = stream.ReadByteNoAlloc();

            header.Size -= sizeof(int) + sizeof(TLeafData);
            int nodesCount = header.Size / (sizeof(TNodeKey) + MyOctreeNode.SERIALIZED_SIZE);

            m_nodes.Clear();
            TNodeKey     key;
            MyOctreeNode node;

            for (int i = 0; i < nodesCount; ++i)
            {
                key            = stream.ReadUInt32();
                node.ChildMask = stream.ReadByteNoAlloc();
                unsafe { stream.ReadNoAlloc(node.Data, 0, MyOctreeNode.CHILD_COUNT); }
                m_nodes.Add(key, node);
            }
        }
        public void ReadFrom(ref MyOctreeStorage.ChunkHeader header, System.IO.Stream stream, ref bool isOldFormat)
        {
            m_data.Version = stream.ReadInt64();
            m_data.Seed    = stream.ReadInt64();
            m_data.Radius  = stream.ReadDouble();
            string generator = stream.ReadString();

            if (m_data.Version != STORAGE_VERSION)
            {
                isOldFormat = true;
            }

            var def = MyDefinitionManager.Static.GetDefinition <MyPlanetGeneratorDefinition>(MyStringHash.GetOrCompute(generator));

            if (def == null)
            {
                throw new Exception(String.Format("Cannot load planet generator definition for subtype '{0}'.", generator));
            }

            Generator = def;

            Init();
        }