Files
LoopzRemix/Cinematic.pbi
2025-07-17 20:36:20 +02:00

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