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-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