126 lines
3.9 KiB
Plaintext
126 lines
3.9 KiB
Plaintext
Structure Cinestep
|
|
Value.SpriteObj
|
|
Duration.l
|
|
EasingH.l
|
|
EasingV.l
|
|
EndStructure
|
|
|
|
Structure Cinematic
|
|
*Value.SpriteObj
|
|
StartTime.q
|
|
Duration.l
|
|
StepIndex.l
|
|
Loob.b
|
|
EventGUI.l
|
|
List Cinestep.Cinestep()
|
|
EndStructure
|
|
|
|
Global NewList Cinematic.Cinematic()
|
|
|
|
Procedure AddCinematicStep(*C.Cinematic,Duration,EasingV.l,EasingH.l)
|
|
Protected *Step.CineStep
|
|
*Step=AddElement(*C\Cinestep())
|
|
*Step\Duration=Duration
|
|
*Step\EasingH=EasingH
|
|
*Step\EasingV=EasingV
|
|
ProcedureReturn *Step
|
|
EndProcedure
|
|
|
|
Procedure SetCinematicStepValue(*Step.Cinestep,X.f,Y.f,Width.f=-1,Height.f=-1,Opacity=255,Size.f=1)
|
|
*Step\Value\X=X
|
|
*Step\Value\Y=Y
|
|
*Step\Value\Width=Width
|
|
*Step\Value\Height=Height
|
|
*Step\Value\Opacity=Opacity
|
|
*Step\Value\Size=Size
|
|
EndProcedure
|
|
|
|
Procedure NewCinematic(*SpriteObj,EventGUI=-1)
|
|
Protected *Cine.Cinematic
|
|
*Cine=AddElement(Cinematic())
|
|
*Cine\Value=*SpriteObj
|
|
*Cine\StartTime=-1 ; No Started
|
|
*Cine\StepIndex=-1
|
|
*Cine\EventGUI=EventGUI
|
|
*Cine\Duration=0
|
|
ProcedureReturn *Cine
|
|
EndProcedure
|
|
|
|
Procedure RenderCinematics()
|
|
Protected ElapsedTime.q
|
|
Protected *Start.Cinestep
|
|
Protected *Target.Cinestep
|
|
ForEach Cinematic()
|
|
If Cinematic()\StartTime<>-1
|
|
ElapsedTime=ElapsedMilliseconds()-Cinematic()\StartTime
|
|
|
|
|
|
If ElapsedTime>Cinematic()\Duration
|
|
Cinematic()\StepIndex=Cinematic()\StepIndex+1
|
|
Cinematic()\StartTime=ElapsedMilliseconds()
|
|
If Cinematic()\StepIndex>ListSize(Cinematic()\CineStep())-2
|
|
Debug "End"
|
|
If Cinematic()\EventGUI>0
|
|
Debug "PostEventGUI="+Str(Cinematic()\EventGUI)
|
|
PostEventGUI(Cinematic()\EventGUI)
|
|
EndIf
|
|
If Cinematic()\Loob=#True
|
|
Cinematic()\StepIndex=0
|
|
Else
|
|
Cinematic()\StartTime=-1
|
|
Cinematic()\StepIndex=-1
|
|
EndIf
|
|
EndIf
|
|
EndIf
|
|
If ListSize(Cinematic()\CineStep())>0 And Cinematic()\StepIndex>=0 And Cinematic()\StepIndex<ListSize(Cinematic()\CineStep())-1
|
|
SelectElement(Cinematic()\CineStep(),Cinematic()\StepIndex)
|
|
*Start=Cinematic()\CineStep()
|
|
SelectElement(Cinematic()\CineStep(),Cinematic()\StepIndex+1)
|
|
*Target=Cinematic()\CineStep()
|
|
Cinematic()\Duration=*Target\Duration
|
|
|
|
|
|
If Cinematic()\StartTime<>-1
|
|
Cinematic()\Value\X=GetEasingPosValue(*Start\Value\X, *Target\Value\X,Cinematic()\StartTime, *Target\Duration, *Target\EasingH)
|
|
Cinematic()\Value\Y=GetEasingPosValue(*Start\Value\Y, *Target\Value\Y,Cinematic()\StartTime, *Target\Duration, *Target\EasingV)
|
|
If *Target\Value\Width<>-1
|
|
Cinematic()\Value\Width=GetEasingPosValue(*Start\Value\Width, *Target\Value\Width,Cinematic()\StartTime, *Target\Duration, *Target\EasingH)
|
|
EndIf
|
|
If *Target\Value\Height<>-1
|
|
Cinematic()\Value\Height=GetEasingPosValue(*Start\Value\Height, *Target\Value\Height,Cinematic()\StartTime, *Target\Duration, *Target\EasingV)
|
|
EndIf
|
|
If *Target\Value\Opacity<>-1
|
|
Cinematic()\Value\Opacity=GetEasingPosValue(*Start\Value\Opacity, *Target\Value\Opacity,Cinematic()\StartTime, *Target\Duration, 0)
|
|
EndIf
|
|
If *Target\Value\Size<>-1
|
|
Cinematic()\Value\Size=GetEasingPosValue(*Start\Value\Size, *Target\Value\Size,Cinematic()\StartTime, *Target\Duration, 0)
|
|
EndIf
|
|
EndIf
|
|
EndIf
|
|
EndIf
|
|
Next
|
|
EndProcedure
|
|
|
|
Procedure StartCinematic(*C.Cinematic=0)
|
|
If *C=0
|
|
ForEach Cinematic()
|
|
Cinematic()\StartTime=ElapsedMilliseconds()
|
|
Cinematic()\StepIndex=-1
|
|
Next
|
|
Else
|
|
*C\StartTime=ElapsedMilliseconds()
|
|
*C\StepIndex=-1
|
|
EndIf
|
|
EndProcedure
|
|
|
|
Procedure FreeAllCinematics()
|
|
ForEach Cinematic()
|
|
ClearList(Cinematic()\Cinestep())
|
|
Next
|
|
ClearList(Cinematic())
|
|
EndProcedure
|
|
; IDE Options = PureBasic 6.00 Beta 5 (Windows - x64)
|
|
; CursorPosition = 74
|
|
; FirstLine = 37
|
|
; Folding = --
|
|
; EnableXP |