示例#1
0
        public void SceneRateControlledFly(FScene scene, Camera cam, Vector2 curPos, RateControlInfo rc)
        {
            float dt = (FPlatform.RealTime() - rc.lastTime);

            rc.lastTime = FPlatform.RealTime();

            float delta_y = (curPos.y - rc.startPos.y);

            rc.curSpeedY =
                rc_update_speed(delta_y, rc.rampUpRadius, rc.deadZoneRadius, rc.maxAccel, rc.maxSpeed, dt, rc.curSpeedY);
            float delta_x = (curPos.x - rc.startPos.x);

            rc.curSpeedX =
                rc_update_speed(delta_x, rc.rampUpRadius, rc.deadZoneRadius, rc.maxAccel, rc.maxSpeed, dt, rc.curSpeedX);


            Vector3 forward, up;

            if (rc.StayLevel)
            {
                forward = new Vector3(cam.transform.forward.x, 0.0f, cam.transform.forward.z);
                forward.Normalize();
                up = Vector3.up;
            }
            else
            {
                forward = cam.gameObject.transform.forward;
                up      = cam.gameObject.transform.up;
            }
            Vector3 curScenePos = scene.RootGameObject.transform.position;
            Vector3 newScenePos = curScenePos - dt * rc.curSpeedY * forward;

            scene.RootGameObject.transform.position = newScenePos;
            scene.RootGameObject.transform.RotateAround(
                cam.transform.position, up, -dt * rc.curSpeedX * rc.angleMultipler);
        }
示例#2
0
        // in egocentric camera system the "eye" is moving up/down, which means the scene moves in opposite direction
        public void SceneRateControlledEgogentricPan(FScene scene, fCamera cam, Vector2f curPos, RateControlInfo rc)
        {
            float dt = (FPlatform.RealTime() - rc.lastTime);

            rc.lastTime = FPlatform.RealTime();

            float delta_y = (curPos.y - rc.startPos.y);

            rc.curSpeedY =
                rc_update_speed(delta_y, rc.rampUpRadius, rc.deadZoneRadius, rc.maxAccel, rc.maxSpeed, dt, rc.curSpeedY);
            float delta_x = (curPos.x - rc.startPos.x);

            rc.curSpeedX =
                rc_update_speed(delta_x, rc.rampUpRadius, rc.deadZoneRadius, rc.maxAccel, rc.maxSpeed, dt, rc.curSpeedX);


            Frame3f  camFrame = cam.GetWorldFrame();
            Vector3f forward  = camFrame.Z;
            Vector3f up       = camFrame.Y;

            if (rc.StayLevel)
            {
                forward = new Vector3(forward.x, 0.0f, forward.z);
                forward.Normalize();
                up = Vector3.up;
            }
            Vector3f right       = Vector3.Cross(up, forward);
            Vector3f curScenePos = scene.RootGameObject.GetPosition();
            Vector3f newScenePos = curScenePos - dt * (rc.curSpeedY * up + rc.curSpeedX * right);

            scene.RootGameObject.SetPosition(newScenePos);
        }