public void Update() { if (!_done || !Cam.Done) { var tuple = Cam.UpdatePosition(); if (tuple.CamPosition != tuple.CamTarget) { (CamTarget, CamPosition, ViewMatrix, ProjectionMatrix) = tuple; //Debug.WriteLine((CamTarget, CamPosition, ViewMatrix, ProjectionMatrix)); } } if (Cam.Done) { if (!BMultiShotAnimation || Cam.Time == 0) { _done = true; return; } using (var br = Stage.Open()) if (br != null) { ReadAnimation(LastCameraPointer - 2, br); } } else { Cam.UpdateTime(); _done = false; } }
public void Update() { //const float V = 100f; //cam.startingTime = 64; float step = cam.CurrentTime.Ticks / (float)cam.TotalTime.Ticks; camTarget = Vector3.SmoothStep(cam.Camera_Lookat(0), cam.Camera_Lookat(1), step); camPosition = Vector3.SmoothStep(cam.Camera_World(0), cam.Camera_World(1), step); // float camWorldX = MathHelper.Lerp(cam.Camera_World_X_s16[0] / V, // cam.Camera_World_X_s16[1] / V, step) + 30; // float camWorldY = MathHelper.Lerp(cam.Camera_World_Y_s16[0] / V, // cam.Camera_World_Y_s16[1] / V, step) - 40; // float camWorldZ = MathHelper.Lerp(cam.Camera_World_Z_s16[0] / V, // cam.Camera_World_Z_s16[1] / V, step) + 0; // float camTargetX = MathHelper.Lerp(cam.Camera_Lookat_X_s16[0] / V, // cam.Camera_Lookat_X_s16[1] / V, step) + 30; // float camTargetY = MathHelper.Lerp(cam.Camera_Lookat_Y_s16[0] / V, //cam.Camera_Lookat_Y_s16[1] / V, step) - 40; // float camTargetZ = MathHelper.Lerp(cam.Camera_Lookat_Z_s16[0] / V, //cam.Camera_Lookat_Z_s16[1] / V, step) + 0; //camPosition = new Vector3(camWorldX, -camWorldY, -camWorldZ); //camTarget = new Vector3(camTargetX, -camTargetY, -camTargetZ); float fovDirector = MathHelper.SmoothStep(cam.startingFOV, cam.endingFOV, step); viewMatrix = Matrix.CreateLookAt(camPosition, camTarget, Vector3.Up); projectionMatrix = Matrix.CreatePerspectiveFieldOfView( MathHelper.ToRadians(fovDirector / 8), Memory.graphics.GraphicsDevice.Viewport.AspectRatio, 1f, 1000f); //worldMatrix = Matrix.CreateWorld(camTarget, Vector3. // Forward, Vector3.Up); //ate = new AlphaTestEffect(Memory.graphics.GraphicsDevice) //{ // Projection = projectionMatrix, // View = viewMatrix, // World = worldMatrix //}; if (cam.CurrentTime >= cam.TotalTime) { if (bMultiShotAnimation && cam.time != 0) { using (BinaryReader br = Stage.Open()) if (br != null) { ReadAnimation(lastCameraPointer - 2, br); } } } else //cam.startingTime += Module_battle_debug.BATTLECAMERA_FRAMETIME; { cam.UpdateTime(); } }