;-NewBitmap Structure myFontData x.l y.l Width.l Height.l EndStructure Structure BitmapFont SpriteId.i FirstClipSpriteId.l AsciiStart.c AsciiEnd.c Array Tab.l(10) Array FontData.myFontData(1) EndStructure Global NewList BitmapFont.BitmapFont() Procedure.i CatchBitmapFont(FirstClipSpriteId.l,FontFileName.S) Protected z.l Protected *Mem,*Dat *Mem=AddElement(BitmapFont()) BitmapFont()\FirstClipSpriteId=FirstClipSpriteId *Dat=ReadDataPackage("Datas.pck",FontFileName+".dat") BitmapFont()\AsciiStart=PeekB(*Dat) BitmapFont()\AsciiEnd=PeekB(*Dat+1) ;Debug BitmapFont()\AsciiStart ;Debug BitmapFont()\AsciiEnd ;ShowMemoryViewer(*Dat,MemorySize(*Dat)) ;End ReDim BitmapFont()\FontData(BitmapFont()\AsciiEnd-BitmapFont()\AsciiStart) CopyMemory(*Dat+2,@BitmapFont()\FontData(),SizeOf(myFontData)*ArraySize(BitmapFont()\FontData())) FreeMemory(*Dat) ; If OpenFile(0,"Datas/"+FileName+".dat") ; BitmapFont()\AsciiStart=ReadCharacter(0,#PB_Ascii) ; BitmapFont()\AsciiEnd=ReadCharacter(0,#PB_Ascii) ; ReDim BitmapFont()\FontData(BitmapFont()\AsciiEnd-BitmapFont()\AsciiStart) ; ReadData(0,@BitmapFont()\FontData(),SizeOf(myFontData)*ArraySize(BitmapFont()\FontData())) ; CloseFile(0) ; EndIf BitmapFont()\SpriteId=CatchSpriteFromPackage(#PB_Any,FontFileName+".png");LoadSprite(#PB_Any,"Datas/"+FileName+".png",#PB_Sprite_AlphaBlending) If IsSprite(BitmapFont()\SpriteId) For z=0 To ArraySize(BitmapFont()\FontData()) RecordSprite(FirstClipSpriteId+z,BitmapFont()\SpriteId,BitmapFont()\FontData(z)\x,BitmapFont()\FontData(z)\y,BitmapFont()\FontData(z)\Width,BitmapFont()\FontData(z)\Height,BitmapFont()\FontData(z)\Width/BitmapFont()\FontData(z)\Height, 1) Next Else Debug "error load font" End EndIf ProcedureReturn *Mem EndProcedure Procedure.i LoadBitmapFont(FirstClipSpriteId.l,FileName.s="MonoFont") Protected z.l Protected *Mem *Mem=AddElement(BitmapFont()) BitmapFont()\FirstClipSpriteId=FirstClipSpriteId If OpenFile(0,"Datas/"+FileName+".dat") BitmapFont()\AsciiStart=ReadCharacter(0,#PB_Ascii) BitmapFont()\AsciiEnd=ReadCharacter(0,#PB_Ascii) ReDim BitmapFont()\FontData(BitmapFont()\AsciiEnd-BitmapFont()\AsciiStart) ReadData(0,@BitmapFont()\FontData(),SizeOf(myFontData)*ArraySize(BitmapFont()\FontData())) CloseFile(0) EndIf Debug FileName+".png" BitmapFont()\SpriteId=LoadSprite(#PB_Any,"Datas/"+FileName+".png",#PB_Sprite_AlphaBlending) If IsSprite(BitmapFont()\SpriteId) For z=0 To ArraySize(BitmapFont()\FontData()) RecordSprite(FirstClipSpriteId+z,BitmapFont()\SpriteId,BitmapFont()\FontData(z)\x,BitmapFont()\FontData(z)\y,BitmapFont()\FontData(z)\Width,BitmapFont()\FontData(z)\Height,BitmapFont()\FontData(z)\Width/BitmapFont()\FontData(z)\Height, 1) Next Else Debug "error load font" End EndIf ProcedureReturn *Mem EndProcedure Procedure TextBitmapWidth(string.s) Protected l.l,c.l,n.l,width.l,size.l=0 Protected tabIndex.l=0 For l=0 To Len(String)-1 c=Asc(Mid(String,l+1,1));-BitmapFont()\AsciiStart width=0 If c=9 ; TAB Width=BitmapFont()\Tab(tabIndex) -Size tabIndex=tabIndex+1 ElseIf c=32; Espace and _ Width=GUI\HalfBlockSize Else c=c-BitmapFont()\AsciiStart If c>=1 And c-1 And FontID=1 Or c0 Protected RealLineSpacing=Titles\LineSpacing*GUI\BlockSize Protected LineHeight.f=GUI\BlockSize+RealLineSpacing Titles\ScrollY=Titles\ScrollY+ ScreenHeight()*(ElapsedMilliseconds()-Titles\StartTime)/Titles\Speed ;6000 If Titles\ScrollY>ScreenHeight()+ ListSize(Titles\Title())* LineHeight If Titles\Event>-1: PostEventGUI(Titles\Event) EndIf Titles\ScrollY=0 EndIf ForEach Titles\Title() DrawingBitmapFont(Titles\Title()\FondId) Protected.l Y=ScreenHeight() + ListIndex(Titles\Title()) * LineHeight - Titles\ScrollY If Y>-LineHeight And YMessage()\StartTime Message()\MessStep=Message()\MessStep+1 Message()\StartTime=0 EndIf Case 1; Display If Message()\StartTime=0:Message()\StartTime=ElapsedMilliseconds()+Message()\Duration:EndIf If ElapsedMilliseconds()>Message()\StartTime Message()\MessStep=Message()\MessStep+1 Message()\StartTime=0 EndIf Fade=255 Case 2; If Message()\StartTime=0:Message()\StartTime=ElapsedMilliseconds()+Message()\FadeDuration:EndIf Fade=Int((Message()\StartTime-ElapsedMilliseconds())*255/Message()\FadeDuration) If ElapsedMilliseconds()>Message()\StartTime Message()\MessStep=Message()\MessStep+1 Message()\StartTime=0 EndIf Case 3 EndSelect DrawingBitmapFont(Message()\Font) Protected Width.l=TextBitmapWidth(Message()\String) DrawBitmapText((ScreenWidth()-Width)/2,GUI\BenchY+GUI\BenchHeight,Message()\String,Fade) If Message()\MessStep=3 DeleteElement(Message()) EndIf EndIf EndProcedure ; IDE Options = PureBasic 6.11 LTS (Windows - x64) ; CursorPosition = 255 ; FirstLine = 255 ; Folding = --- ; EnableXP