コード例 #1
0
ファイル: MeshRenderer.cs プロジェクト: hejob/SB3Utility
        public void LoadFrom(Stream stream)
        {
            BinaryReader reader = new BinaryReader(stream);
            m_GameObject = new PPtr<GameObject>(stream, file);
            m_Enabled = reader.ReadBoolean();
            m_CastShadows = reader.ReadBoolean();
            m_ReceiveShadows = reader.ReadBoolean();
            m_LightmapIndex = reader.ReadByte();
            m_LightmapTilingOffset = reader.ReadVector4();

            int numMaterials = reader.ReadInt32();
            m_Materials = new List<PPtr<Material>>(numMaterials);
            for (int i = 0; i < numMaterials; i++)
            {
                m_Materials.Add(new PPtr<Material>(stream, file));
            }

            int numSubsetIndices = reader.ReadInt32();
            m_SubsetIndices = reader.ReadUInt32Array(numSubsetIndices);

            m_StaticBatchRoot = new PPtr<Transform>(stream, file);
            m_UseLightProbes = reader.ReadBoolean();
            reader.ReadBytes(3);
            m_LightProbeAnchor = new PPtr<Transform>(stream, file);
            m_SortingLayerID = reader.ReadUInt32();
            m_SortingOrder = reader.ReadInt16();
            reader.ReadBytes(2);
        }
コード例 #2
0
ファイル: LASHeader.cs プロジェクト: jdauie/cloudae
        public LASHeader(BinaryReader reader)
        {
            long length = reader.BaseStream.Length;

            if (length < c_minHeaderSize[LASVersion.LAS_1_0])
                throw new OpenFailedException("Invalid format: header too short");

            if (Encoding.ASCII.GetString(reader.ReadBytes(FILE_SIGNATURE.Length)) != FILE_SIGNATURE)
                throw new OpenFailedException("Invalid format: signature does not match");

            m_fileSourceID          = reader.ReadUInt16();

            m_globalEncoding        = reader.ReadLASGlobalEncoding();
            m_projectID             = reader.ReadLASProjectID();
            m_version               = reader.ReadLASVersionInfo();

            m_systemIdentifier      = reader.ReadBytes(32).ToAsciiString();
            m_generatingSoftware    = reader.ReadBytes(32).ToAsciiString();
            m_fileCreationDayOfYear = reader.ReadUInt16();
            m_fileCreationYear      = reader.ReadUInt16();

            m_headerSize            = reader.ReadUInt16();
            m_offsetToPointData     = reader.ReadUInt32();

            ushort minHeaderSize = c_minHeaderSize[m_version.Version];
            if (length < minHeaderSize)
                throw new OpenFailedException("Invalid format: header too short for version");
            if(minHeaderSize > m_headerSize)
                throw new OpenFailedException("Invalid format: header size incorrect");

            m_numberOfVariableLengthRecords = reader.ReadUInt32();
            m_pointDataRecordFormat         = reader.ReadByte();
            m_pointDataRecordLength         = reader.ReadUInt16();
            m_legacyNumberOfPointRecords    = reader.ReadUInt32();
            m_legacyNumberOfPointsByReturn  = reader.ReadUInt32Array(5);

            m_quantization = reader.ReadSQuantization3D();
            m_extent       = reader.ReadExtent3D();

            if (m_version.Version >= LASVersion.LAS_1_3)
            {
                m_startOfWaveformDataPacketRecord = reader.ReadUInt64();
            }

            if (m_version.Version >= LASVersion.LAS_1_4)
            {
                m_startOfFirstExtendedVariableLengthRecord = reader.ReadUInt64();
                m_numberOfExtendedVariableLengthRecords    = reader.ReadUInt32();
                m_numberOfPointRecords                     = reader.ReadUInt64();
                m_numberOfPointsByReturn                   = reader.ReadUInt64Array(15);
            }
            else
            {
                m_numberOfPointRecords = m_legacyNumberOfPointRecords;
                m_numberOfPointsByReturn = new ulong[15];
                for (int i = 0; i < m_legacyNumberOfPointsByReturn.Length; i++)
                    m_numberOfPointsByReturn[i] = m_legacyNumberOfPointsByReturn[i];
            }

            // This doesn't apply to LAZ files
            //ulong pointDataRegionLength = (ulong)length - m_offsetToPointData;
            //if (pointDataRegionLength < m_pointDataRecordLength * PointCount)
            //    throw new Exception("Invalid format: point data region is not the expected size");
        }
コード例 #3
0
ファイル: JpegDecoder.cs プロジェクト: Celderon/oxyplot
        private static object ReadValue(
            BinaryReader inputReader,
            MemoryStream ms,
            bool isLittleEndian,
            ushort fieldType,
            int count,
            long baseOffset)
        {
            switch (fieldType)
            {
                case 1:
                    {
                        var valueOrOffset = inputReader.ReadUInt32(isLittleEndian);

                        if (count == 1)
                        {
                            var value = inputReader.ReadByte();
                            var x = inputReader.ReadBytes(3);
                            return value;
                        }

                        if (count < 4)
                        {
                            var value = inputReader.ReadBytes(count);
                            if (count < 4)
                            {
                                var x = inputReader.ReadBytes(4 - count);
                            }

                            return value;
                        }

                        ms.Position = baseOffset + valueOrOffset;
                        return inputReader.ReadBytes(count);
                    }

                case 2:
                    {
                        if (count <= 4)
                        {
                            var value = inputReader.ReadString(count).Trim('\0');
                            if (count < 4)
                            {
                                inputReader.ReadBytes(4 - count);
                            }

                            return value;
                        }

                        var valueOrOffset = inputReader.ReadUInt32(isLittleEndian);
                        ms.Position = baseOffset + valueOrOffset;
                        return inputReader.ReadString(count).Trim('\0');
                    }

                case 3:
                    {
                        if (count == 1)
                        {
                            var value = inputReader.ReadUInt16(isLittleEndian);
                            var x = inputReader.ReadUInt16(isLittleEndian);
                            return value;
                        }

                        if (count == 2)
                        {
                            return inputReader.ReadUInt16Array(count, isLittleEndian);
                        }

                        var valueOrOffset = inputReader.ReadUInt32(isLittleEndian);
                        ms.Position = baseOffset + valueOrOffset;
                        return inputReader.ReadUInt16Array(count, isLittleEndian);
                    }
                case 4:
                    {
                        if (count == 1)
                        {
                            return inputReader.ReadUInt32(isLittleEndian);
                        }

                        var valueOrOffset = inputReader.ReadUInt32(isLittleEndian);
                        ms.Position = baseOffset + valueOrOffset;
                        return inputReader.ReadUInt32Array(count, isLittleEndian);
                    }

                case 5:
                    {
                        var valueOrOffset = inputReader.ReadUInt32(isLittleEndian);
                        ms.Position = baseOffset + valueOrOffset;
                        if (count == 1)
                        {
                            var nominator = inputReader.ReadUInt32(isLittleEndian);
                            var denominator = inputReader.ReadUInt32(isLittleEndian);
                            return (double)nominator / denominator;
                        }

                        throw new NotImplementedException();
                    }

                case 10:
                    {
                        var valueOrOffset = inputReader.ReadInt32(isLittleEndian);
                        ms.Position = baseOffset + valueOrOffset;
                        if (count == 1)
                        {
                            var nominator = inputReader.ReadInt32(isLittleEndian);
                            var denominator = inputReader.ReadInt32(isLittleEndian);
                            return (double)nominator / denominator;
                        }

                        throw new NotImplementedException();
                    }
            }

            throw new NotImplementedException();
        }
コード例 #4
0
ファイル: ParticleAnimator.cs プロジェクト: hejob/SB3Utility
 public void LoadFrom(Stream stream)
 {
     BinaryReader reader = new BinaryReader(stream);
     m_GameObject = new PPtr<GameObject>(stream, file);
     Does_Animate_Color = reader.ReadBoolean();
     reader.ReadBytes(3);
     colorAnimation = reader.ReadUInt32Array(5);
     worldRotationAxis = reader.ReadVector3();
     localRotationAxis = reader.ReadVector3();
     sizeGrow = reader.ReadSingle();
     rndForce = reader.ReadVector3();
     force = reader.ReadVector3();
     damping = reader.ReadSingle();
     stopSimulation = reader.ReadBoolean();
     autodestruct = reader.ReadBoolean();
 }
コード例 #5
0
ファイル: BFFile.cs プロジェクト: TGEnigma/Amicitia
        private void InternalRead(BinaryReader reader)
        {
            long posFileStart = reader.GetPosition();
            short flag = reader.ReadInt16();
            short userID = reader.ReadInt16();
            int length = reader.ReadInt32();
            string tag = reader.ReadCString(4);
            int unused = reader.ReadInt32();

            if (tag != TAG)
            {
                throw new InvalidDataException("Identifier mismatch.");
            }

            int numTypeTableEntries = reader.ReadInt32();
            int numUnknown = reader.ReadInt32();

            reader.AlignPosition(16);

            TypeTableEntry[] typeTable = new TypeTableEntry[numTypeTableEntries];
            for (int i = 0; i < numTypeTableEntries; i++)
            {
                typeTable[i] = new TypeTableEntry(reader);
            }

            System.Diagnostics.Debug.Assert(typeTable[(int)TypeTableType.Strings].elementCount == 0xF0);

            for (int i = 0; i < numTypeTableEntries; i++)
            {
                reader.Seek(posFileStart + typeTable[i].dataOffset, SeekOrigin.Begin);

                switch ((TypeTableType)typeTable[i].type)
                {
                    case TypeTableType.Procedures:
                        ReadCodeLabels(reader, ref _procedures, typeTable[i].elementCount, out _requireSortProcedures);
                        break;
                    case TypeTableType.JumpLabels:
                        ReadCodeLabels(reader, ref _jumpLabels, typeTable[i].elementCount, out _requireSortJumps);
                        break;
                    case TypeTableType.Opcodes:
                        {
                            bool hasExtendedOpcodes;
                            _opcodes = BFDisassembler.ParseCodeblock(reader.ReadUInt32Array(typeTable[i].elementCount), out hasExtendedOpcodes);

                            if (hasExtendedOpcodes) // only fix up the opcode indices if they have to be
                                FixupOpcodeIndices(); // this function is kinda 2*O(n^2)
                        }
                        break;
                    case TypeTableType.Messages:
                        if (typeTable[i].elementCount > 0)
                            _messageFile = new BMDFile(StreamHelper.ReadStream(reader, typeTable[i].elementCount), false);
                        break;
                    case TypeTableType.Strings:
                        // TODO: Implement this
                        break;
                }
            }
        }
コード例 #6
0
 public void LoadFrom(Stream stream)
 {
     BinaryReader reader = new BinaryReader(stream);
     m_NeighborArray = reader.ReadUInt32Array(reader.ReadInt32());
 }
コード例 #7
0
 public void LoadFrom(Stream stream)
 {
     BinaryReader reader = new BinaryReader(stream);
     m_IDArray = reader.ReadUInt32Array(reader.ReadInt32());
     m_IndexOffset = reader.ReadUInt32();
 }
コード例 #8
0
 public void LoadFrom(Stream stream)
 {
     BinaryReader reader = new BinaryReader(stream);
     m_BlendType = reader.ReadUInt32();
     m_BlendEventID = reader.ReadUInt32();
     m_BlendEventYID = reader.ReadUInt32();
     m_ChildIndices = reader.ReadUInt32Array(reader.ReadInt32());
     m_Blend1dData = new Blend1dDataConstant(stream);
     m_Blend2dData = new Blend2dDataConstant(stream);
     m_ClipID = reader.ReadUInt32();
     m_ClipIndex = reader.ReadUInt32();
     m_Duration = reader.ReadSingle();
     m_CycleOffset = reader.ReadSingle();
     m_Mirror = reader.ReadBoolean();
     reader.ReadBytes(3);
 }