Lerp

From GECK
Jump to: navigation, search


A function added by the JohnnyGuitar NVSE Plugin.

Description

Returns an interpolation between two inputs (v0, v1) for a parameter (t) in the closed unit interval [0, 1].

Syntax

[help]
(float) Lerp v0:float v1:float t:float

Example

set fVal to Lerp v0 v1 t

To bring the player from one point to another in a linear fashion, starting by activating a "zipline" object:

scn ZipLineScript

float oldX 
float oldY
float oldZ

float newX
float newY
float newZ

float zipX 
float zipY
float zipZ

short playerusingzipline  

float fCurrentTime
float fTime
float fTimeInSecondsHowLongShouldPlayerUseZipLine  ;could be a global

begin OnActivate Player

  if playerusingzipline == 0
    set oldX to ZipLineStartREFR.GetPos X
    set oldY to ZipLineStartREFR.GetPos Y
    set oldZ to ZipLineStartREFR.GetPos Z

    set newX to ZipLineEndREFR.GetPos X
    set newY to ZipLineEndREFR.GetPos Y
    set newZ to ZipLineEndREFR.GetPos Z

    set fTimeInSecondsHowLongShouldPlayerUseZipLine to 5
    set playerusingzipline to 1
    set fCurrentTime to 0
    DisablePlayerControls 1, 0, 0, 0, 0, 0, 0  ;prevent player from doing weird stuff.
  endif

end


begin GameMode

	if playerusingzipline

           ;* Prevent player from dying due to falling.
           Player.ResetFallTime
           Player.SetActorVelocity Z 0
	
           ;* Displace the player.
	   set fCurrentTime to fCurrentTime + GetSecondsPassed
	   set fTime to fCurrentTime / fTimeInSecondsHowLongShouldPlayerUseZipLine
	
	   set zipX to Lerp oldX newX fTime
	   set zipY to Lerp oldY newY fTime
	   set zipZ to Lerp oldZ newZ fTime
	
	   player.SetPosEx zipX zipY zipZ
	     if fTime >= 1
	        set playerusingzipline to 0
	        EnablePlayerControls
	    endif
	endif
end