Пример #1
0
        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;
            }
        }
Пример #2
0
        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();
            }
        }