259 lines
7.7 KiB
Plaintext
259 lines
7.7 KiB
Plaintext
EnumerationBinary
|
|
#Align_Hor_Left
|
|
#Align_Hor_Middle
|
|
#Align_Hor_Right
|
|
#Align_Ver_Top
|
|
#Align_Ver_Middle
|
|
#Align_Ver_Bottom
|
|
EndEnumeration
|
|
|
|
Structure SpriteMove
|
|
StartValue.f
|
|
EndValue.f
|
|
*Value.FLoat
|
|
StartTime.l
|
|
Duration.l
|
|
Easing.l
|
|
Event.l
|
|
AutoDestroySprites.b
|
|
EndStructure
|
|
Enumeration
|
|
#Spr_Depth_Background
|
|
#Spr_Depth_Middle
|
|
#Spr_Depth_Front
|
|
#Spr_ALL
|
|
EndEnumeration
|
|
Structure SpriteData
|
|
SpriteNo.l
|
|
X.f
|
|
Y.f
|
|
Width.f
|
|
Height.f
|
|
Opacity.f
|
|
Size.f
|
|
Align.c
|
|
Depth.l
|
|
List Move.SpriteMove()
|
|
MoveStartTime.q
|
|
AutoDestroy.b ;if #true autodestroy the sprite (From DisplayEngine())
|
|
EndStructure
|
|
|
|
Global NewList Sprites.SpriteData()
|
|
|
|
Procedure.i NewSprite(SpriteNo.l,X.f,Y.f,Width.f,Height.f,Opacity.l,Size.f,Depth.l=#Spr_Depth_Front,Align.b=9)
|
|
Protected *Mem
|
|
*Mem=AddElement(Sprites())
|
|
Sprites()\SpriteNo=SpriteNo
|
|
Sprites()\X=X
|
|
Sprites()\Y=Y
|
|
Sprites()\Width=Width
|
|
Sprites()\Height=Height
|
|
Sprites()\Opacity=Opacity
|
|
Sprites()\Size=Size
|
|
Sprites()\MoveStartTime=-1
|
|
Sprites()\Align=Align
|
|
Sprites()\AutoDestroy=#False
|
|
Sprites()\Depth=Depth
|
|
ProcedureReturn *Mem
|
|
EndProcedure
|
|
|
|
|
|
Procedure _Addmove(*Sprite.SpriteData,ThisStartTime.l,*Value,StartValue.f,EndValue.f,Duration.l,Easing.l,Event.l=-1)
|
|
AddElement(*Sprite\Move())
|
|
*Sprite\Move()\Value=*Value
|
|
*Sprite\Move()\StartTime=ThisStartTime
|
|
*Sprite\Move()\StartValue=StartValue
|
|
*Sprite\Move()\EndValue=EndValue
|
|
*Sprite\Move()\Duration=Duration
|
|
*Sprite\Move()\Easing=Easing
|
|
*Sprite\Move()\Event=Event
|
|
EndProcedure
|
|
|
|
Procedure ClearMove(*Sprite.SpriteData)
|
|
ClearList(*Sprite\Move())
|
|
EndProcedure
|
|
|
|
Procedure StartMove(*Sprite.SpriteData,StartTime.q=0)
|
|
If StartTime=0
|
|
*Sprite\MoveStartTime=ElapsedMilliseconds()
|
|
Else
|
|
*Sprite\MoveStartTime=StartTime
|
|
EndIf
|
|
EndProcedure
|
|
|
|
Procedure StartAllMove()
|
|
Protected StartTime.q=ElapsedMilliseconds()
|
|
ForEach Sprites()\Move()
|
|
;Sprites()\Move()\StartTime=StartTime
|
|
Next
|
|
EndProcedure
|
|
|
|
Procedure myDisplaySprite(*Sprite.SpriteData)
|
|
;Display
|
|
Protected X.f
|
|
Protected Y.f
|
|
Protected Width.f
|
|
Protected Height.f
|
|
Protected RealWidth.l
|
|
Protected RealHeight.l
|
|
If *Sprite\SpriteNo>0 And IsSprite(GameSprite(*Sprite\SpriteNo)\SpriteId)
|
|
ClipSprite(GameSprite(*Sprite\SpriteNo)\SpriteId,GameSprite(*Sprite\SpriteNo)\ClipX,GameSprite(*Sprite\SpriteNo)\ClipY,GameSprite(*Sprite\SpriteNo)\ClipWidth,GameSprite(*Sprite\SpriteNo)\ClipHeight)
|
|
|
|
If *Sprite\Width<>-1
|
|
Width=*Sprite\Width
|
|
Else
|
|
Width=GameSprite(*Sprite\SpriteNo)\DisplayWidth
|
|
EndIf
|
|
|
|
If *Sprite\Height<>-1
|
|
Height=*Sprite\Height
|
|
Else
|
|
Height=GameSprite(*Sprite\SpriteNo)\DisplayHeight
|
|
EndIf
|
|
|
|
RealWidth=Width * GUI\BlockSize
|
|
RealHeight=Height * GUI\BlockSize
|
|
If Not (*Sprite\Opacity=0 Or Height=0 Or Width=0)
|
|
ZoomSprite(GameSprite(*Sprite\SpriteNo)\SpriteId,RealWidth * *Sprite\Size,RealHeight * *Sprite\Size)
|
|
|
|
If *Sprite\Align & #Align_Hor_Left = #Align_Hor_Left
|
|
X=*Sprite\X
|
|
EndIf
|
|
|
|
If *Sprite\Align & #Align_Hor_Middle = #Align_Hor_Middle
|
|
X=*Sprite\X-Width/2* *Sprite\Size
|
|
EndIf
|
|
|
|
If *Sprite\Align & #Align_Hor_Right = #Align_Hor_Right
|
|
X=*Sprite\X-Width* *Sprite\Size
|
|
EndIf
|
|
|
|
If *Sprite\Align & #Align_Ver_Top = #Align_Ver_Top
|
|
Y=*Sprite\Y
|
|
EndIf
|
|
|
|
If *Sprite\Align & #Align_Ver_Middle=#Align_Ver_Middle
|
|
Y=*Sprite\Y-Height/2* *Sprite\Size
|
|
EndIf
|
|
If *Sprite\Align & #Align_Ver_Bottom= #Align_Ver_Bottom
|
|
Y=*Sprite\Y-Height* *Sprite\Size
|
|
EndIf
|
|
X=X * GUI\BlockSize
|
|
Y=Y * GUI\BlockSize
|
|
DisplayTransparentSprite(GameSprite(*Sprite\SpriteNo)\SpriteId,X,Y,*Sprite\Opacity)
|
|
EndIf
|
|
Else
|
|
;Debug "Error with sprite"
|
|
EndIf
|
|
EndProcedure
|
|
|
|
Procedure DisplaySprites(Depth.l=#Spr_ALL)
|
|
Protected SpriteNo.l
|
|
|
|
Protected ThisStartTime.q
|
|
Protected ThisEndTime.q
|
|
Protected ElapsedTime.l
|
|
Protected AutodestroySprite.b
|
|
ForEach Sprites()
|
|
If Depth=#Spr_ALL Or Sprites()\Depth=Depth
|
|
;Move
|
|
If Sprites()\MoveStartTime>-1
|
|
If ListSize(Sprites()\Move())>0
|
|
ForEach Sprites()\Move()
|
|
ThisStartTime=Sprites()\MoveStartTime+Sprites()\Move()\StartTime
|
|
ThisEndTime=ThisStartTime+Sprites()\Move()\Duration
|
|
If ElapsedMilliseconds()>=ThisStartTime And ElapsedMilliseconds()<=ThisEndTime
|
|
|
|
ElapsedTime.l=ElapsedMilliseconds()-ThisStartTime
|
|
|
|
Sprites()\Move()\Value\f=GetEasingPosValue(Sprites()\Move()\StartValue, Sprites()\Move()\EndValue,ThisStartTime, Sprites()\Move()\Duration, Sprites()\Move()\Easing)
|
|
;Debug StrF(ListIndex(Sprites()\Move())) +" Value:"+StrF( Sprites()\Move()\Value\f)+" Elapestime:"+Str(ElapsedTime)
|
|
;At the End
|
|
ElseIf ElapsedMilliseconds()>=ThisEndTime
|
|
Sprites()\Move()\Value\f=Sprites()\Move()\EndValue
|
|
;new Event
|
|
If Sprites()\Move()\Event>-1
|
|
PostEventGUI(Sprites()\Move()\Event)
|
|
Sprites()\Move()\Event=-1
|
|
EndIf
|
|
DeleteElement(Sprites()\Move())
|
|
|
|
EndIf
|
|
Next
|
|
Else
|
|
;AutodestroySprite=Sprites()\AutoDestroySprites
|
|
|
|
EndIf
|
|
EndIf
|
|
|
|
;Display
|
|
myDisplaySprite(Sprites())
|
|
; SpriteNo=Sprites()\SpriteNo
|
|
; If SpriteNo>0 And IsSprite(GameSprite(SpriteNo)\SpriteId)
|
|
; ClipSprite(GameSprite(SpriteNo)\SpriteId,GameSprite(SpriteNo)\ClipX,GameSprite(SpriteNo)\ClipY,GameSprite(SpriteNo)\ClipWidth,GameSprite(SpriteNo)\ClipHeight)
|
|
;
|
|
; If Sprites()\Width<>-1
|
|
; Width=Sprites()\Width
|
|
; Else
|
|
; Width=GameSprite(SpriteNo)\DisplayWidth
|
|
; EndIf
|
|
;
|
|
; If Sprites()\Height<>-1
|
|
; Height=Sprites()\Height
|
|
; Else
|
|
; Height=GameSprite(SpriteNo)\DisplayHeight
|
|
; EndIf
|
|
;
|
|
; RealWidth=Width * GUI\BlockSize
|
|
; RealHeight=Height * GUI\BlockSize
|
|
; If Not (Sprites()\Opacity=0 Or Height=0 Or Width=0)
|
|
; ZoomSprite(GameSprite(SpriteNo)\SpriteId,RealWidth * Sprites()\Size,RealHeight * Sprites()\Size)
|
|
;
|
|
; If Sprites()\Align & #Align_Hor_Left = #Align_Hor_Left
|
|
; X=Sprites()\X
|
|
; EndIf
|
|
;
|
|
; If Sprites()\Align & #Align_Hor_Middle = #Align_Hor_Middle
|
|
; X=Sprites()\X-Width/2* Sprites()\Size
|
|
; EndIf
|
|
;
|
|
; If Sprites()\Align & #Align_Hor_Right = #Align_Hor_Right
|
|
; X=Sprites()\X-Width* Sprites()\Size
|
|
; EndIf
|
|
;
|
|
; If Sprites()\Align & #Align_Ver_Top = #Align_Ver_Top
|
|
; Y=Sprites()\Y
|
|
; EndIf
|
|
;
|
|
; If Sprites()\Align & #Align_Ver_Middle=#Align_Ver_Middle
|
|
; Y=Sprites()\Y-Height/2* Sprites()\Size
|
|
; EndIf
|
|
; If Sprites()\Align & #Align_Ver_Bottom= #Align_Ver_Bottom
|
|
; Y=Sprites()\Y-Height* Sprites()\Size
|
|
; EndIf
|
|
; X=X * GUI\BlockSize
|
|
; Y=Y * GUI\BlockSize
|
|
; DisplayTransparentSprite(GameSprite(SpriteNo)\SpriteId,X,Y,Sprites()\Opacity)
|
|
; EndIf
|
|
; Else
|
|
; ;Debug "Error with sprite"
|
|
; EndIf
|
|
|
|
If ListSize(Sprites()\Move())=0 And AutodestroySprite=#True
|
|
DeleteElement(Sprites())
|
|
EndIf
|
|
EndIf
|
|
Next
|
|
EndProcedure
|
|
|
|
Procedure ClearAllSprite()
|
|
ClearList(Sprites())
|
|
EndProcedure
|
|
|
|
|
|
|
|
; IDE Options = PureBasic 6.00 Beta 6 (Windows - x64)
|
|
; CursorPosition = 183
|
|
; FirstLine = 134
|
|
; Folding = --
|
|
; EnableXP |