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

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