Initial commit
This commit is contained in:
259
SpritesObj.pbi
Normal file
259
SpritesObj.pbi
Normal file
@@ -0,0 +1,259 @@
|
||||
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
|
Reference in New Issue
Block a user