/////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////// #region CIN_CAM public void LoadCinCamSlb() { // PREPARE FOR FILE READING string path = Application.dataPath + "/Resources/" + gameVersion + "/levels/" + levelName + "/" + levelName + "/" + cinematicName + "_CAM.slb"; if (gameVersion.Equals("alpha", StringComparison.OrdinalIgnoreCase)) { path = Application.dataPath + "/Resources/" + gameVersion + "/cinematics/" + levelName + "/" + cinematicName + "_CAM.slb"; } if (!File.Exists(path)) { Debug.LogError("File not found: " + path); return; } FileStream fileStream = new FileStream(path, FileMode.Open); BinaryReader binaryReader = new BinaryReader(fileStream); // MAKE SLB PARENT GAMEOBJECT // doing this after opening the file so we don't just get an empty gameobject if we entered an invalid name or something GameObject slbParent = new GameObject(cinematicName + "_CAM.slb"); CinCam cinCam = slbParent.AddComponent <CinCam>() as CinCam; // READ cinCam.viewAngle = binaryReader.ReadSingle(); cinCam.spinMask1 = binaryReader.ReadSingle(); cinCam.spinMask2 = binaryReader.ReadSingle(); cinCam.spinMask3 = binaryReader.ReadSingle(); UInt32 entryCount = binaryReader.ReadUInt32(); UInt32 tableOffset = binaryReader.ReadUInt32(); // GO TO BEGINNING OF TABLE fileStream.Seek(tableOffset, SeekOrigin.Begin); cinCam.frames = new CinCamFrame[entryCount]; // LOOP THROUGH ENTRIES for (int i = 0; i < entryCount; i++) { // FRAMES CinCamFrame frame = new CinCamFrame(); frame.time = binaryReader.ReadSingle(); frame.position = new Vector3(-binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle()); frame.target = new Vector3(-binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle()); cinCam.frames[i] = frame; } // SHRUG // some stackoverflow post said closing the reader SHOULD close the stream but I don't trust "should" enough lol binaryReader.Close(); fileStream.Close(); Debug.Log("Loaded " + path); }
public void Save() { CinCam cinCam = gameObject.GetComponent <CinCam>(); if (cinCam == null) { Debug.LogError("CinCam component not found"); } string path = EditorUtility.SaveFilePanel("Save SLB", "", cinCam.gameObject.name, "slb"); if (path.Length == 0) { return; } FileStream fileStream = new FileStream(path, FileMode.Create); BinaryWriter binaryWriter = new BinaryWriter(fileStream); binaryWriter.Write(cinCam.viewAngle); binaryWriter.Write(cinCam.spinMask1); binaryWriter.Write(cinCam.spinMask2); binaryWriter.Write(cinCam.spinMask3); long rememberMe = fileStream.Position; binaryWriter.Write(0); // temp entry count binaryWriter.Write(24); // table offset int framesWritten = 0; for (int i = 0; i < cinCam.frames.Length; i++) { CinCamFrame currentFrame = cinCam.frames[i]; binaryWriter.Write(currentFrame.time); binaryWriter.Write(-currentFrame.position.x); binaryWriter.Write(currentFrame.position.y); binaryWriter.Write(currentFrame.position.z); binaryWriter.Write(-currentFrame.target.x); binaryWriter.Write(currentFrame.target.y); binaryWriter.Write(currentFrame.target.z); framesWritten++; if (i != cinCam.frames.Length - 1) { CinCamFrame nextFrame = cinCam.frames[i + 1]; float time = Mathf.Lerp(currentFrame.time, nextFrame.time, 0.5f); Vector3 position = Vector3.Lerp(currentFrame.position, nextFrame.position, 0.5f); Vector3 target = Vector3.Lerp(currentFrame.target, nextFrame.target, 0.5f); binaryWriter.Write(time); binaryWriter.Write(-position.x); binaryWriter.Write(position.y); binaryWriter.Write(position.z); binaryWriter.Write(-target.x); binaryWriter.Write(target.y); binaryWriter.Write(target.z); framesWritten++; } } binaryWriter.Write(20); // offset binaryWriter.Write(1); // offset count binaryWriter.Write(0xC0FFEE); // footer fileStream.Seek(rememberMe, SeekOrigin.Begin); binaryWriter.Write(framesWritten); binaryWriter.Close(); fileStream.Close(); Debug.Log("Saved " + path); }
public void Save() { CinCam cinCam = gameObject.GetComponent <CinCam>(); if (cinCam == null) { Debug.LogError("CinCam component not found"); } string path = EditorUtility.SaveFilePanel("Save SLB", "", "cin1_CAM.slb", "slb"); if (path.Length == 0) { return; } FileStream fileStream = new FileStream(path, FileMode.Create); BinaryWriter binaryWriter = new BinaryWriter(fileStream); binaryWriter.Write(cinCam.viewAngle); binaryWriter.Write(cinCam.spinMask1); binaryWriter.Write(cinCam.spinMask2); binaryWriter.Write(cinCam.spinMask3); binaryWriter.Write(cinCam.frames.Length); // entry count binaryWriter.Write(24); // table offset Vector3 offset = new Vector3(0.0f, 0.0f, -2.0f); for (int i = 0; i < cinCam.frames.Length; i++) { CinCamFrame currentFrame = cinCam.frames[i]; if (i >= firstFrameToTweak && i <= lastFrameToTweak) { // tweaked frame binaryWriter.Write(currentFrame.time); binaryWriter.Write(-(currentFrame.position.x + offset.x)); binaryWriter.Write(currentFrame.position.y + offset.y); binaryWriter.Write(currentFrame.position.z + offset.z); binaryWriter.Write(-(currentFrame.target.x + offset.x)); binaryWriter.Write(currentFrame.target.y + offset.y); binaryWriter.Write(currentFrame.target.z + offset.z); } else { // unchanged frame binaryWriter.Write(currentFrame.time); binaryWriter.Write(-currentFrame.position.x); binaryWriter.Write(currentFrame.position.y); binaryWriter.Write(currentFrame.position.z); binaryWriter.Write(-currentFrame.target.x); binaryWriter.Write(currentFrame.target.y); binaryWriter.Write(currentFrame.target.z); } } binaryWriter.Write(20); // offset binaryWriter.Write(1); // offset count binaryWriter.Write(0xC0FFEE); // footer binaryWriter.Close(); fileStream.Close(); Debug.Log("Saved " + path); }