-------------------------------------------------------------------------------- -- State............ : Intro -- Author........... : -- Description...... : -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- function CarDemoCamera.Intro_onLoop ( ) -------------------------------------------------------------------------------- local target = this.hTarget ( ) if ( target ~= nil ) then local dt = application.getLastFrameTime ( ) local o = this.getObject ( ) local tx, ty, tz = object.getTranslation ( target, object.kGlobalSpace ) local vx, vy, vz local dist = 7 local focale = 23 local speed = dynamics.getLinearSpeed ( target ) local minspeed = 5 vx, vy, vz = object.getDirection ( target, object.kGlobalSpace ) dist = dist + vy * 5 focale = focale + vy * 5 dist = math.interpolate ( this.nCurDist ( ), dist, 2 * dt ) focale = math.interpolate ( this.nCurFocale ( ), focale, 2 * dt ) this.nCurDist ( dist ) this.nCurFocale ( focale ) local lookUp = vy > 0.95 vx, vy, vz = math.vectorNormalize ( vx, 0, vz ) vx, vy, vz = math.vectorScale ( vx, vy, vz, -dist ) vx, vy, vz = math.vectorAdd ( vx, vy, vz, tx, ty + 3 * ( 30 - math.min ( 30, speed ) ) / 30, tz ) local ox, oy, oz = object.getTranslation ( o, object.kGlobalSpace ) vx, vy, vz = math.vectorSubtract ( vx, vy, vz, ox, oy, oz ) local lmax = math.vectorLength ( vx, vy, vz ) vx, vy, vz = math.vectorNormalize ( vx, vy, vz ) local scl = 200 --5 + math.clamp ( lmax / 2 - 10, 0, 150 ) vx, vy, vz = math.vectorScale ( vx, vy, vz, scl * dt ) local l = math.min ( math.vectorLength ( vx, vy, vz ), lmax ) vx, vy, vz = math.vectorNormalize ( vx, vy, vz ) vx, vy, vz = math.vectorScale ( vx, vy, vz, l ) object.translate ( o, vx, vy, vz, object.kGlobalSpace ) object.lookAt ( o, tx, ty + 0.5, tz, object.kGlobalSpace, 1 ) camera.setFieldOfView ( o, focale ) -- Motion blur -- camera.setMotionBlurFactor ( o, math.min ( 0.85, 45 * dt * ( 1.15 - math.min ( lmax, 500 ) / 500 ) ) ) if ( lmax < 10 ) then this.Follow ( ) end end -------------------------------------------------------------------------------- end --------------------------------------------------------------------------------