128 lines
3.3 KiB
Plaintext
128 lines
3.3 KiB
Plaintext
;- Cinematic
|
|
Enumeration
|
|
#CV_X
|
|
#CV_Y
|
|
#CV_Width
|
|
#CV_Height
|
|
#CV_Opacity
|
|
#CV_Size
|
|
#CV_End
|
|
EndEnumeration
|
|
|
|
Structure CineValue
|
|
Value.f
|
|
Easing.l
|
|
EndStructure
|
|
|
|
Structure CineStep
|
|
Array CineValue.CineValue(#CV_End-1)
|
|
Duration.l
|
|
EndStructure
|
|
|
|
Structure Cinematic
|
|
StartTime.q
|
|
StepIndex.l
|
|
Duration.l
|
|
Array *TargetValue.Long(#CV_End-1)
|
|
Loop.b
|
|
List CineStep.CineStep()
|
|
EndStructure
|
|
|
|
Global NewList Cinematic.Cinematic()
|
|
|
|
Procedure.i NewCinematic()
|
|
Protected *c.Cinematic=AddElement(Cinematic())
|
|
*c\StartTime=-1
|
|
ProcedureReturn *c
|
|
EndProcedure
|
|
|
|
Procedure StartCinematic(*C.Cinematic)
|
|
*C\StartTime=ElapsedMilliseconds()
|
|
Cinematic()\StepIndex=-1
|
|
Cinematic()\Duration=-1
|
|
EndProcedure
|
|
|
|
Procedure AddCinematicStep(*c.Cinematic,Duration.l)
|
|
Protected *Step.CineStep=AddElement(*c\CineStep())
|
|
*Step\Duration=Duration
|
|
Protected n.l
|
|
For n=0 To #CV_End-1
|
|
*Step\CineValue(n)\Value=-1
|
|
Next
|
|
ProcedureReturn *Step
|
|
EndProcedure
|
|
|
|
Procedure FreeCinematicStep(*c.Cinematic)
|
|
ClearList(*c\CineStep())
|
|
EndProcedure
|
|
|
|
Procedure AddCinematicValue(*c.Cinematic,ValueIndex.l,*Value)
|
|
*c\TargetValue(ValueIndex)=*Value
|
|
EndProcedure
|
|
|
|
Procedure AddCinematicStepValue(*Step.CineStep,ValueIndex.l,Value.f,Easing.l)
|
|
*Step\CineValue(ValueIndex)\Value=Value
|
|
*Step\CineValue(ValueIndex)\Easing=Easing
|
|
EndProcedure
|
|
|
|
|
|
Procedure RenderCinematics()
|
|
Protected *Start.CineStep
|
|
Protected *Target.CineStep
|
|
Protected CurrentPos.CineStep
|
|
Protected ElapsedTime.q
|
|
Protected n.l
|
|
ForEach Cinematic()
|
|
If Cinematic()\StartTime<>-1
|
|
|
|
ElapsedTime=ElapsedMilliseconds()-Cinematic()\StartTime
|
|
|
|
If ElapsedTime>Cinematic()\Duration
|
|
|
|
Cinematic()\StepIndex=Cinematic()\StepIndex+1
|
|
Cinematic()\StartTime=ElapsedMilliseconds()
|
|
ElapsedTime=0
|
|
EndIf
|
|
If Cinematic()\StepIndex>=0 And Cinematic()\StepIndex<ListSize(Cinematic()\CineStep())-1
|
|
SelectElement(Cinematic()\CineStep(),Cinematic()\StepIndex)
|
|
*Start=Cinematic()\CineStep()
|
|
Debug "*Start="+Str(*Start)
|
|
SelectElement(Cinematic()\CineStep(),Cinematic()\StepIndex+1)
|
|
*Target=Cinematic()\CineStep()
|
|
Debug "*Target="+Str(*Target)
|
|
Cinematic()\Duration=*Target\Duration
|
|
For n=0 To #CV_End-1
|
|
If Cinematic()\TargetValue(n)<>0 And Cinematic()\TargetValue(n)\l<>-1
|
|
|
|
Cinematic()\TargetValue(n)\l=GetEasingPosValue(*Start\CineValue(n)\Value, *Target\CineValue(n)\Value ,Cinematic()\StartTime, *Target\Duration, *Target\CineValue(n)\Easing)
|
|
;Cinematic()\SpriteObj\Size=*Start\Size + ( ElapsedTime * ( *Target\Size - *Start\Size ) / *Target\Duration)
|
|
If n= #CV_Height
|
|
Debug Cinematic()\TargetValue(n)\l
|
|
EndIf
|
|
|
|
EndIf
|
|
|
|
Next
|
|
|
|
|
|
Else ; If End Cinematic
|
|
SelectElement(Cinematic()\CineStep(),ListSize(Cinematic()\CineStep())-1)
|
|
*Target=Cinematic()\CineStep()
|
|
For n=0 To #CV_End-1
|
|
If Cinematic()\TargetValue(n)<>0
|
|
Cinematic()\TargetValue(n)\l=*Target\CineValue(n)\Value
|
|
EndIf
|
|
Next
|
|
If Cinematic()\Loop=#True
|
|
StartCinematic(Cinematic())
|
|
EndIf
|
|
EndIf
|
|
|
|
|
|
EndIf
|
|
Next
|
|
EndProcedure
|
|
; IDE Options = PureBasic 6.00 Beta 5 (Windows - x64)
|
|
; CursorPosition = 100
|
|
; Folding = --
|
|
; EnableXP |