Sample Program1.bmx 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. 'This BMX file was edited with BLIde ( http://www.blide.org )
  2. 'Begin program:
  3. SetGraphicsDriver GLMax2DDriver()
  4. 'Notify ("This is a test program for " + TFontMachineVersion.Version())
  5. Graphics 800, 600, 0, 0
  6. SetBlend ALPHABLEND
  7. 'Cargamos fondo
  8. Global fondo:TImage = LoadImage(My.Resources.Images.GNOME_GreenField_1024x768_jpg)
  9. '~n
  10. DrawImage(fondo, 0, 0)
  11. Flip
  12. Global fnt3:TBitmapFont = LoadBitmapFont(my.Resources.Fonts.Small_fmf)
  13. Global fnt:TBitmapFont = LoadBitmapFont(My.Resources.Fonts.NewCaveman_fmf, LoadingProgress) '->Create the font object
  14. Global fnt2:TBitmapFont = LoadBitmapFont(My.Resources.Fonts.Jungle_fmf)
  15. Global fnt4:TBitmapFont = LoadBitmapFont(my.Resources.Fonts.Luxury_fmf)
  16. fnt3.RenderFX = New RenderHTML
  17. Print("width is " + fnt3.GetTxtWidth("Hello!"))
  18. Type RenderWaves Extends iTextRendererFXBase
  19. Method DrawBorderChar(e:TDrawCharAction)
  20. e.Y = e.Y + (20 * Sin((MilliSecs() / 4) + e.X * e.currentscaleX)) * e.CurrentScaleY
  21. If Self.ChainFX <> Null Then Self.ChainFX.DrawBorderChar(e)
  22. End Method
  23. Method DrawFaceChar(e:TDrawCharAction)
  24. e.Y = e.Y + (20 * Sin((MilliSecs() / 4) + e.X * e.currentscaleX)) * e.CurrentScaleY
  25. End Method
  26. Method DrawShadowChar(e:TDrawCharAction)
  27. e.Y = e.Y + (20 * Cos((MilliSecs() / 4) + e.X * e.currentscaleX)) * e.currentscaleY
  28. End Method
  29. Method DrawTextBegin(e:TDrawTextAction)
  30. End Method
  31. Method DrawTextEnd(e:TDrawTextAction)
  32. End Method
  33. End Type
  34. Type MyRenderer Extends iTextRendererFXBase
  35. Method DrawFaceChar(e:TDrawCharAction)
  36. e.Status = eDrawCharStatus.Face
  37. e.Y = e.Y + Rand(- 2, 2)
  38. End Method
  39. End Type
  40. Type RenderWaves2 Extends iTextRendererFXBase
  41. Method DrawBorderChar(e:TDrawCharAction)
  42. e.Y = e.Y + Float(20 * Sin((MilliSecs() / 4) + e.X * e.currentscaleX)) * e.CurrentScaley
  43. End Method
  44. Method DrawFaceChar(e:TDrawCharAction)
  45. e.Y = e.Y + Float(20 * Tan((MilliSecs() / 4) + e.X * e.currentscaleX)) * e.CurrentScaleY
  46. End Method
  47. Method DrawShadowChar(e:TDrawCharAction)
  48. e.Y = e.Y + Float(20 * Cos((MilliSecs() / 4) + e.X * e.currentscaleX)) * e.CurrentScaleY
  49. End Method
  50. Method DrawTextBegin(e:TDrawTextAction)
  51. End Method
  52. Method DrawTextEnd(e:TDrawTextAction)
  53. End Method
  54. End Type
  55. Type RenderKerning Extends iTextRendererFXBase
  56. Field InitialVKerning:Float
  57. Field InitialHKerning:Float
  58. Method DrawBorderChar(e:TDrawCharAction)
  59. e.font.Kerning.SetHKerning(3 * Sin((MilliSecs() / 4) + e.X))
  60. End Method
  61. Method DrawFaceChar(e:TDrawCharAction)
  62. Local factor:Float = Sin((MilliSecs() / 4) + e.X)
  63. e.font.Kerning.SetHKerning(3 * factor)
  64. End Method
  65. Method DrawShadowChar(e:TDrawCharAction)
  66. e.font.Kerning.SetHKerning(3 * Sin((MilliSecs() / 4) + e.X))
  67. End Method
  68. Method DrawTextBegin(e:TDrawTextAction)
  69. initialvkerning = e.Font.Kerning.getvkerning()
  70. initialhkerning = e.Font.Kerning.gethkerning()
  71. End Method
  72. Method DrawTextEnd(e:TDrawTextAction)
  73. e.Font.Kerning.SetHKerning(initialhkerning)
  74. e.Font.Kerning.SetVKerning(initialvkerning)
  75. End Method
  76. End Type
  77. Type InverseRendering Extends iTextRendererFXBase
  78. Method DrawShadowChar(e:TDrawCharAction)
  79. e.Handled = True
  80. Local img:TImage
  81. img = e.font.Getfaceimage(e.Char)
  82. If img <> Null Then DrawImage(img, e.X, e.Y)
  83. End Method
  84. Method DrawFaceChar(e:TDrawCharAction)
  85. e.Handled = True
  86. Local img:TImage
  87. img = e.font.GetShadowimage(e.Char)
  88. If img <> Null Then DrawImage(img, e.X, e.Y)
  89. End Method
  90. Method DrawTextBegin(e:TDrawTextAction)
  91. End Method
  92. Method DrawBorderChar(e:TDrawCharAction)
  93. End Method
  94. Method DrawTextEnd(e:TDrawTextAction)
  95. End Method
  96. End Type
  97. Type RenderHTML Extends iTextRendererFXBase
  98. Field IsBold:Int = False
  99. Method DrawBorderChar(e:TDrawCharAction)
  100. 'e.font.Kerning.SetHKerning(3 * Sin((MilliSecs() / 4) + e.X))
  101. End Method
  102. Method DrawFaceChar(e:TDrawCharAction)
  103. 'e.font.Kerning.SetHKerning(3 * Sin((MilliSecs() / 4) + e.X))
  104. If e.Char = Asc("@") Then
  105. isbold = True
  106. e.Char = 0
  107. ElseIf e.Char = 32 Then
  108. isbold = False
  109. Else
  110. If isbold Then
  111. SetScale(e.CurrentScaleX * 1.1, e.CurrentScaleY * 1.1)
  112. 'DrawImage(e.font.GetFaceImage(e.Char), e.X + 1, e.Y)
  113. 'DrawImage(e.font.GetFaceImage(e.Char), e.X - 1, e.Y)
  114. 'DrawImage(e.font.GetFaceImage(e.Char), e.X, e.Y + 1)
  115. DrawImage(e.font.GetFaceImage(e.Char), e.X, e.Y)
  116. SetScale(e.CurrentScaleX, e.CurrentScaleY)
  117. 'e.Handled = True
  118. EndIf
  119. End If
  120. End Method
  121. Method DrawShadowChar(e:TDrawCharAction)
  122. 'e.font.Kerning.SetHKerning(3 * Sin((MilliSecs() / 4) + e.X))
  123. End Method
  124. Method DrawTextBegin(e:TDrawTextAction)
  125. isbold = False
  126. End Method
  127. Method DrawTextEnd(e:TDrawTextAction)
  128. IsBold = False
  129. End Method
  130. End Type
  131. 'Run program:
  132. 'SetClsColor(255, 255, 255)
  133. 'Framecount variables:
  134. Global fps:Int, frms:Int = 0
  135. Local Mil:Int = MilliSecs() + 1000
  136. Global rot:Float = 0
  137. Global Scale:Float = 1
  138. GCCollect()
  139. While Not KeyHit(KEY_ESCAPE)
  140. Cls
  141. DrawImage(fondo, 0, 0)
  142. SetRotation(Rot)
  143. SetScale Scale, Scale
  144. fnt.DrawText("Caveman font", 0, 12)
  145. 'fnt3.DrawText("Small font (abcefghijklmnopqrstuvwxyz~nABCDEFGHIJKLMNOPQRSTUVWXYZ~náéíóúñàèìòùýÿçÇ_!·$%&/()1234567890,.-{}[]", 20, 132)
  146. fnt2.DrawText("Jungle Font", 0, 182)
  147. fnt4.DrawText("Luxury ~nfont~n...", 50, 312)
  148. fnt3.DrawText("@SPACE Toggle FX on/off~n@A Draw border(On/Off)~n@S Draw shadow(On/Off)~n@Z Blue channel~n@X Red channel~n@C All channels~n@Q Increase kerning~n@W Decrease kerning~n@U-I Modify rotation~n@O-P Modify scale~nFPS: @" + fps, 630, 32)
  149. SetRotation(0)
  150. SetScale 1, 1
  151. Flip
  152. frms = frms + 1
  153. If MilliSecs() >= mil Then
  154. mil = MilliSecs() + 1000
  155. fps = frms
  156. frms = 0
  157. End If
  158. ProcessKeys()
  159. 'gccollect()
  160. 'sleep 1
  161. Wend
  162. End
  163. Function LoadingProgress(percent:Float) '--> Called by the module!
  164. If percent Mod 10 = 0 Then
  165. SetColor(255, 255, 255)
  166. DrawImage(fondo, 0, 0)
  167. fnt3.DrawText("LOADING (" + Int(percent) + "%)", 0, 0)
  168. Flip
  169. EndIf
  170. End Function
  171. 'Summary: Process all the user keys
  172. Function ProcessKeys()
  173. If KeyHit(KEY_A) Then
  174. fnt.SetDrawBorder(Not fnt.GetDrawBorder())
  175. fnt2.SetDrawBorder(Not fnt2.GetDrawBorder())
  176. fnt3.SetDrawBorder(Not fnt3.GetDrawBorder())
  177. ElseIf KeyHit(KEY_S) Then
  178. fnt.SetDrawShadow(Not fnt.GetDrawShadow())
  179. fnt2.SetDrawShadow(Not fnt2.GetDrawShadow())
  180. fnt3.SetDrawShadow(Not fnt3.GetDrawShadow())
  181. ElseIf KeyDown(KEY_Z) Then
  182. SetColor 0, 0, 255
  183. ElseIf KeyHit(KEY_X) Then
  184. SetColor 255, 0, 0
  185. ElseIf KeyHit(KEY_C)
  186. SetColor 255, 255, 255
  187. ElseIf KeyHit(KEY_D) Then
  188. DebugStop
  189. ElseIf KeyDown(KEY_Q) Then
  190. fnt.Kerning.SetHKerning(fnt.kerning.GetHKerning() +.1)
  191. fnt2.kerning.SetHKerning(fnt.kerning.GetHKerning() +.1)
  192. fnt3.kerning.SetHKerning(fnt.kerning.GetHKerning() +.1)
  193. fnt4.kerning.SetHKerning(fnt.kerning.GetHKerning() +.1)
  194. fnt.kerning.SetVKerning(fnt.kerning.GetvKerning() +.1)
  195. fnt2.kerning.setVKerning (fnt.kerning.GetvKerning() +.1)
  196. fnt3.kerning.SetvKerning(fnt.kerning.GetvKerning() +.1)
  197. fnt4.kerning.SetvKerning(fnt.kerning.GetvKerning() +.1)
  198. ElseIf KeyDown(KEY_W) Then
  199. fnt.kerning.SetHKerning(fnt.kerning.GetHKerning() -.1)
  200. fnt2.kerning.SetHKerning(fnt.kerning.GetHKerning() -.1)
  201. fnt3.kerning.SetHKerning(fnt.kerning.GetHKerning() -.1)
  202. fnt4.kerning.SetHKerning(fnt.kerning.GetHKerning() -.1)
  203. fnt.kerning.SetVKerning(fnt.kerning.GetvKerning() -.1)
  204. fnt2.kerning.setVKerning (fnt.kerning.GetvKerning() -.1)
  205. fnt3.kerning.SetvKerning(fnt.kerning.GetvKerning() -.1)
  206. fnt4.kerning.SetvKerning(fnt.kerning.GetvKerning() -.1)
  207. ElseIf KeyDown(KEY_I) Then
  208. rot:+.5
  209. ElseIf KeyDown(KEY_U) Then
  210. rot:-.5
  211. ElseIf KeyDown(KEY_P)
  212. Scale = Scale * 1.01
  213. ElseIf KeyDown(KEY_O)
  214. Scale = Scale * 0.99
  215. ElseIf KeyHit(KEY_SPACE) Then
  216. If fnt2.RenderFX = Null Then
  217. fnt2.RenderFX = New RenderWaves
  218. fnt.RenderFX = New RenderWaves2
  219. 'fnt.RenderFX.ChainFX = New RenderKerning
  220. fnt3.RenderFX = New RenderHTML
  221. fnt3.RenderFX = New RenderKerning
  222. fnt3.RenderFX.ChainFX = New RenderWaves
  223. fnt3.RenderFX.ChainFX.chainfx = New RenderHTML
  224. fnt4.RenderFX = New RenderKerning
  225. Else
  226. fnt2.RenderFX = Null
  227. fnt.RenderFX = Null
  228. fnt4.RenderFX = Null
  229. fnt3.RenderFX = New RenderHTML
  230. EndIf
  231. ElseIf KeyHit(KEY_D) Then
  232. DebugStop
  233. End If
  234. 'FlushKeys
  235. End Function