Пример #1
0
 public void Read(BinaryReader reader, M2Header header)
 {
     reader.BaseStream.Position = header.ofsCameras;
     type      = reader.ReadUInt32();
     far_clip  = reader.ReadSingle();
     near_clip = reader.ReadSingle();
     positions.Read(reader);
     position_base = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
     target_positions.Read(reader);
     target_position_base = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
     rolldata.Read(reader);
     fovdata.Read(reader);
 }
Пример #2
0
        public static void LoadM2Cameras(string dataPath)
        {
            FlyByCameraStorage.Clear();
            Log.outInfo(LogFilter.ServerLoading, "Loading Cinematic Camera files");

            uint oldMSTime = Time.GetMSTime();

            foreach (CinematicCameraRecord cameraEntry in CliDB.CinematicCameraStorage.Values)
            {
                string filename = dataPath + "/cameras/" + $"FILE{cameraEntry.FileDataID:x8}.xxx";

                try
                {
                    using (BinaryReader m2file = new BinaryReader(new FileStream(filename, FileMode.Open, FileAccess.Read)))
                    {
                        // Check file has correct magic (MD21)
                        if (m2file.ReadUInt32() != 0x3132444D) //"MD21"
                        {
                            Log.outError(LogFilter.ServerLoading, "Camera file {0} is damaged. File identifier not found.", filename);
                            continue;
                        }

                        m2file.ReadUInt32(); //unknown size

                        // Read header
                        M2Header header = m2file.Read <M2Header>();

                        // Get camera(s) - Main header, then dump them.
                        m2file.BaseStream.Position = 8 + header.ofsCameras;
                        M2Camera cam = m2file.Read <M2Camera>();

                        m2file.BaseStream.Position = 8;
                        readCamera(cam, new BinaryReader(new MemoryStream(m2file.ReadBytes((int)m2file.BaseStream.Length - 8))), cameraEntry);
                    }
                }
                catch (EndOfStreamException)
                {
                    Log.outError(LogFilter.ServerLoading, "Camera file {0} is damaged. Camera references position beyond file end", filename);
                }
                catch (FileNotFoundException)
                {
                    Log.outError(LogFilter.ServerLoading, "File {0} not found!!!!", filename);
                }
            }
            Log.outInfo(LogFilter.ServerLoading, "Loaded {0} cinematic waypoint sets in {1} ms", FlyByCameraStorage.Keys.Count, Time.GetMSTimeDiffToNow(oldMSTime));
        }
Пример #3
0
        public static void LoadM2Cameras(string dataPath)
        {
            FlyByCameraStorage.Clear();
            Log.outInfo(LogFilter.ServerLoading, "Loading Cinematic Camera files");

            uint oldMSTime = Time.GetMSTime();

            foreach (CinematicCameraRecord cameraEntry in CliDB.CinematicCameraStorage.Values)
            {
                string filename = dataPath + "/cameras/" + string.Format("FILE{0:x8}.xxx", cameraEntry.ModelFileDataID);

                try
                {
                    using (BinaryReader m2file = new BinaryReader(new FileStream(filename, FileMode.Open, FileAccess.Read)))
                    {
                        // Check file has correct magic (MD21)
                        if (m2file.ReadStringFromChars(4) != "MD21")
                        {
                            Log.outError(LogFilter.ServerLoading, "Camera file {0} is damaged. File identifier not found.", filename);
                            continue;
                        }

                        var unknownSize = m2file.ReadUInt32(); //unknown size

                        // Read header
                        M2Header header = m2file.ReadStruct <M2Header>();
                        var      buffer = new BinaryReader(new MemoryStream(m2file.ToByteArray(), 8, (int)(m2file.BaseStream.Length - 8)));

                        // Get camera(s) - Main header, then dump them.
                        M2Camera cam = m2file.ReadStruct <M2Camera>(8 + header.ofsCameras);

                        readCamera(cam, (uint)m2file.BaseStream.Length - 8, buffer, cameraEntry);
                    }
                }
                catch (EndOfStreamException)
                {
                    Log.outError(LogFilter.ServerLoading, "Camera file {0} is damaged. Camera references position beyond file end", filename);
                }
                catch (FileNotFoundException)
                {
                    Log.outError(LogFilter.ServerLoading, "File {0} not found!!!!", filename);
                }
            }
            Log.outInfo(LogFilter.ServerLoading, "Loaded {0} cinematic waypoint sets in {1} ms", FlyByCameraStorage.Count, Time.GetMSTimeDiffToNow(oldMSTime));
        }