a
Verfasst: 10.11.2008 17:28
a
Code: Alles auswählen
Structure GfxRes
ResIndex.i
Sprite.i
Sprite3D.i
EndStructure
Structure Animation
RunTime.i
FrameCnt.i
FrameShowTime.LArray
FrameSprite.LArray
FrameSprite3D.LArray
EndStructure
Global Dim Animations.Animation(0)
Global AnimationsCnt.i = -1
;returns the sprite handle of the actual animation frame
;TimeIndex will be set to the new real time index
Procedure.i GfxGetAnimFrame(AnimIndex.i, *TimeIndex.Integer)
Define.i i, AnimTime, Rounds, CompRoundTime
While AnimTime + LA_Get(Animations(AnimIndex)\FrameShowTime, i) < *TimeIndex\i
AnimTime = AnimTime + LA_Get(Animations(AnimIndex)\FrameShowTime, i)
i + 1
If i = Animations(AnimIndex)\FrameCnt
i = 0
EndIf
Wend
Rounds = AnimTime / Animations(AnimIndex)\RunTime
CompRoundTime = Rounds * Animations(AnimIndex)\RunTime
*TimeIndex\i = *TimeIndex\i - CompRoundTime
ProcedureReturn LA_Get(Animations(AnimIndex)\FrameSprite3D, i)
EndProcedure
;creates a animation from sprites with fix show time for each sprite
;returns the animation index of the new animation
Procedure.i GfxCreateSmplAnim(Frames.GfxRes())
Define.i Result
AnimationsCnt + 1
ReDim Animations.Animation(AnimationsCnt)
FirstElement(Frames())
Animations(AnimationsCnt)\FrameCnt + 1
LA_Add(Animations(AnimationsCnt)\FrameShowTime, 100, 1)
LA_Add(Animations(AnimationsCnt)\FrameSprite,Frames()\Sprite, 1)
LA_Add(Animations(AnimationsCnt)\FrameSprite3D,Frames()\Sprite3D, 1)
Repeat
Result = NextElement(Frames())
If Result <> 0
Animations(AnimationsCnt)\FrameCnt + 1
LA_Add(Animations(AnimationsCnt)\FrameShowTime, 100, 1)
LA_Add(Animations(AnimationsCnt)\FrameSprite, Frames()\Sprite, 1)
LA_Add(Animations(AnimationsCnt)\FrameSprite3D, Frames()\Sprite3D, 1)
EndIf
Until Result = 0
Animations(AnimationsCnt)\RunTime = Animations(AnimationsCnt)\FrameCnt * 100
ProcedureReturn AnimationsCnt
EndProcedure