Ejemplo n.º 1
0
        public bool IsPositionListIdentical(CollisionCameraData other)
        {
            var a = PositionList;
            var b = other.PositionList;

            if (a.Count != b.Count)
            {
                return(false);
            }

            for (int i = 0; i < a.Count; i++)
            {
                if (!a[i].Data.SequenceEqual(b[i].Data))
                {
                    return(false);
                }
            }
            return(true);
        }
Ejemplo n.º 2
0
        public void Initialize(BinaryReader br)
        {
            long seekBack;

            byte[] data;

            //initialize header
            data     = new byte[HEADER_SIZE];
            seekBack = br.Seek(HeaderOffset.Offset);
            br.Read(data, 0, HEADER_SIZE);
            InitializeHeader(data);

            //initialize polygon list
            data = new byte[CollisionPolygon.SIZE];
            br.Seek(PolyArray.Offset);
            for (int i = 0; i < Polys; i++)
            {
                br.Read(data, 0, CollisionPolygon.SIZE);
                PolyList.Add(new CollisionPolygon(data));
            }

            //initialize polygon types
            data = new byte[CollisionPolyType.SIZE];
            br.Seek(PolyTypeArray.Offset);
            PolyTypes = GetPolygonTypeListLength();

            for (int i = 0; i < PolyTypes; i++)
            {
                br.Read(data, 0, CollisionPolyType.SIZE);
                int hi  = Endian.ConvertInt32(data, 0);
                int low = Endian.ConvertInt32(data, 4);
                PolyTypeList.Add(new CollisionPolyType(hi, low));
            }

            //initialize vertex list
            br.Seek(VertexArray.Offset);

            for (int i = 0; i < Vertices; i++)
            {
                VertexList.Add(new Vector3 <short>(br.ReadBigInt16(), br.ReadBigInt16(), br.ReadBigInt16()));
            }


            //initialize camera data
            if (CameraDataArray != 0)
            {
                br.Seek(CameraDataArray.Offset);
                CameraDatas = GetCameraDataListLength();

                for (int i = 0; i < CameraDatas; i++)
                {
                    var camData = new CollisionCameraData(br);
                    CameraDataList.Add(camData);
                    if (CameraDataMin == 0 ||
                        (camData.PositionAddress != 0 &&
                         camData.PositionAddress.Offset < CameraDataMin.Offset))
                    {
                        CameraDataMin = camData.PositionAddress;
                    }
                }
            }

            //initialize water box data
            if (WaterBoxes > 0)
            {
                br.Seek(WaterBoxesArray.Offset);
                for (int i = 0; i < WaterBoxes; i++)
                {
                    data = br.ReadBytes(CollisionWaterBox.SIZE);
                    WaterBoxList.Add(new CollisionWaterBox(data));
                }
            }

            br.Seek(seekBack);
        }