示例#1
0
            internal Region(BinaryReaderEx br)
            {
                long start      = br.Position;
                int  nameOffset = br.ReadInt32();

                br.AssertInt32(0);
                br.ReadInt32(); // ID
                ShapeType shapeType = br.ReadEnum32 <ShapeType>();

                Position = br.ReadVector3();
                Rotation = br.ReadVector3();
                int unkOffsetA       = br.ReadInt32();
                int unkOffsetB       = br.ReadInt32();
                int shapeDataOffset  = br.ReadInt32();
                int entityDataOffset = br.ReadInt32();

                br.AssertInt32(0);

                Name = br.GetShiftJIS(start + nameOffset);

                br.Position = start + unkOffsetA;
                br.AssertInt32(0);
                br.Position = start + unkOffsetB;
                br.AssertInt32(0);

                br.Position = start + shapeDataOffset;
                switch (shapeType)
                {
                case ShapeType.Point:
                    Shape = new MSB.Shape.Point();
                    break;

                case ShapeType.Circle:
                    Shape = new MSB.Shape.Circle(br);
                    break;

                case ShapeType.Sphere:
                    Shape = new MSB.Shape.Sphere(br);
                    break;

                case ShapeType.Cylinder:
                    Shape = new MSB.Shape.Cylinder(br);
                    break;

                case ShapeType.Rect:
                    Shape = new MSB.Shape.Rect(br);
                    break;

                case ShapeType.Box:
                    Shape = new MSB.Shape.Box(br);
                    break;

                default:
                    throw new NotImplementedException($"Unimplemented shape type: {shapeType}");
                }

                br.Position = start + entityDataOffset;
                EntityID    = br.ReadInt32();
            }
            internal Region(BinaryReaderEx br)
            {
                long start = br.Position;

                long nameOffset = br.ReadInt64();

                br.AssertInt32(0);
                br.ReadInt32(); // ID
                ShapeType shapeType = br.ReadEnum32 <ShapeType>();

                Position = br.ReadVector3();
                Rotation = br.ReadVector3();
                Unk2     = br.ReadInt32();

                long baseDataOffset1 = br.ReadInt64();
                long baseDataOffset2 = br.AssertInt64(baseDataOffset1 + 4);
                long shapeDataOffset = br.ReadInt64();
                long baseDataOffset3 = br.ReadInt64();

                Name = br.GetUTF16(start + nameOffset);

                br.Position = start + baseDataOffset1;
                short countA = br.ReadInt16();

                UnkA = new List <short>(br.ReadInt16s(countA));

                br.Position = start + baseDataOffset2;
                short countB = br.ReadInt16();

                UnkB = new List <short>(br.ReadInt16s(countB));

                br.Position = start + shapeDataOffset;
                switch (shapeType)
                {
                case ShapeType.Point:
                    Shape = new MSB.Shape.Point();
                    break;

                case ShapeType.Circle:
                    Shape = new MSB.Shape.Circle(br);
                    break;

                case ShapeType.Sphere:
                    Shape = new MSB.Shape.Sphere(br);
                    break;

                case ShapeType.Cylinder:
                    Shape = new MSB.Shape.Cylinder(br);
                    break;

                case ShapeType.Box:
                    Shape = new MSB.Shape.Box(br);
                    break;

                default:
                    throw new NotImplementedException($"Unsupported shape type: {shapeType}");
                }

                br.Position = start + baseDataOffset3;
                EntityID    = br.ReadInt32();
            }
示例#3
0
            internal Region(BinaryReaderEx br)
            {
                long start      = br.Position;
                long nameOffset = br.ReadInt64();

                Unk08 = br.ReadInt16();
                br.AssertByte((byte)Type);
                ShapeType shapeType = br.ReadEnum8 <ShapeType>();

                br.ReadInt16(); // Index
                Unk0E    = br.ReadInt16();
                Position = br.ReadVector3();
                Rotation = br.ReadVector3();
                long unkOffsetA = br.ReadInt64();
                long unkOffsetB = br.ReadInt64();

                br.AssertInt32(-1);
                br.AssertPattern(0x24, 0x00);
                long shapeDataOffset = br.ReadInt64();
                long typeDataOffset  = br.ReadInt64();

                br.AssertInt64(0);
                br.AssertInt64(0);

                Name = br.GetUTF16(start + nameOffset);

                br.Position = start + unkOffsetA;
                br.AssertInt32(0);

                br.Position = start + unkOffsetB;
                br.AssertInt32(0);

                br.Position = start + shapeDataOffset;
                switch (shapeType)
                {
                case ShapeType.Point:
                    Shape = new MSB.Shape.Point();
                    break;

                case ShapeType.Circle:
                    Shape = new MSB.Shape.Circle(br);
                    break;

                case ShapeType.Sphere:
                    Shape = new MSB.Shape.Sphere(br);
                    break;

                case ShapeType.Cylinder:
                    Shape = new MSB.Shape.Cylinder(br);
                    break;

                case ShapeType.Rect:
                    Shape = new MSB.Shape.Rect(br);
                    break;

                case ShapeType.Box:
                    Shape = new MSB.Shape.Box(br);
                    break;

                default:
                    throw new NotImplementedException($"Unimplemented shape type: {shapeType}");
                }

                if (HasTypeData)
                {
                    br.Position = start + typeDataOffset;
                    ReadTypeData(br);
                }
            }