restructure main, add basic font support
This commit is contained in:
		
							
								
								
									
										195
									
								
								data/fonts/console.fnt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								data/fonts/console.fnt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,195 @@ | |||||||
|  | info face="Courier New" size=-13 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=0 aa=1 padding=0,0,0,0 spacing=1,1 outline=0 | ||||||
|  | common lineHeight=16 base=12 scaleW=256 scaleH=256 pages=1 packed=0 alphaChnl=0 redChnl=0 greenChnl=0 blueChnl=0 | ||||||
|  | page id=0 file="console.tga" | ||||||
|  | chars count=191 | ||||||
|  | char id=32   x=12    y=49    width=1     height=1     xoffset=0     yoffset=12    xadvance=8     page=0  chnl=15 | ||||||
|  | char id=33   x=199   y=30    width=1     height=8     xoffset=4     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=34   x=156   y=40    width=5     height=4     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=35   x=215   y=0     width=6     height=10    xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=36   x=6     y=13    width=4     height=10    xoffset=2     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=37   x=133   y=31    width=5     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=38   x=237   y=29    width=5     height=7     xoffset=2     yoffset=5     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=39   x=200   y=39    width=1     height=4     xoffset=3     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=40   x=253   y=0     width=2     height=10    xoffset=4     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=41   x=19    y=12    width=2     height=10    xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=42   x=115   y=40    width=5     height=6     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=43   x=201   y=30    width=7     height=7     xoffset=1     yoffset=5     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=44   x=192   y=39    width=3     height=4     xoffset=2     yoffset=10    xadvance=8     page=0  chnl=15 | ||||||
|  | char id=45   x=0     y=49    width=6     height=1     xoffset=1     yoffset=8     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=46   x=223   y=37    width=2     height=2     xoffset=3     yoffset=10    xadvance=8     page=0  chnl=15 | ||||||
|  | char id=47   x=0     y=13    width=5     height=10    xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=48   x=218   y=20    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=49   x=225   y=20    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=50   x=169   y=31    width=5     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=51   x=163   y=31    width=5     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=52   x=232   y=20    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=53   x=239   y=20    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=54   x=145   y=31    width=5     height=8     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=55   x=105   y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=56   x=246   y=20    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=57   x=0     y=33    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=58   x=253   y=29    width=2     height=6     xoffset=3     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=59   x=249   y=29    width=3     height=7     xoffset=2     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=60   x=230   y=29    width=6     height=7     xoffset=1     yoffset=5     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=61   x=202   y=38    width=6     height=3     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=62   x=209   y=29    width=6     height=7     xoffset=1     yoffset=5     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=63   x=193   y=30    width=5     height=8     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=64   x=241   y=0     width=5     height=10    xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=65   x=83    y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=66   x=14    y=33    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=67   x=21    y=32    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=68   x=28    y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=69   x=42    y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=70   x=49    y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=71   x=27    y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=72   x=248   y=11    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=73   x=187   y=30    width=5     height=8     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=74   x=56    y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=75   x=187   y=21    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=76   x=63    y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=77   x=171   y=21    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=78   x=203   y=11    width=8     height=8     xoffset=0     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=79   x=163   y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=80   x=70    y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=81   x=42    y=12    width=7     height=9     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=82   x=107   y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=83   x=84    y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=84   x=131   y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=85   x=123   y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=86   x=230   y=11    width=8     height=8     xoffset=0     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=87   x=139   y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=88   x=147   y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=89   x=155   y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=90   x=175   y=30    width=5     height=8     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=91   x=15    y=12    width=3     height=10    xoffset=3     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=92   x=235   y=0     width=5     height=10    xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=93   x=11    y=12    width=3     height=10    xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=94   x=150   y=40    width=5     height=4     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=95   x=238   y=37    width=8     height=1     xoffset=0     yoffset=15    xadvance=8     page=0  chnl=15 | ||||||
|  | char id=96   x=226   y=37    width=2     height=2     xoffset=3     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=97   x=35    y=40    width=7     height=6     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=98   x=35    y=22    width=7     height=8     xoffset=0     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=99   x=66    y=40    width=6     height=6     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=100  x=43    y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=101  x=59    y=40    width=6     height=6     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=102  x=91    y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=103  x=59    y=22    width=7     height=8     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=104  x=67    y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=105  x=157   y=31    width=5     height=8     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=106  x=247   y=0     width=5     height=10    xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=107  x=91    y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=108  x=151   y=31    width=5     height=8     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=109  x=9     y=42    width=8     height=6     xoffset=0     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=110  x=27    y=41    width=7     height=6     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=111  x=87    y=40    width=6     height=6     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=112  x=98    y=31    width=6     height=8     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=113  x=99    y=22    width=7     height=8     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=114  x=94    y=40    width=6     height=6     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=115  x=73    y=40    width=6     height=6     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=116  x=223   y=29    width=6     height=7     xoffset=1     yoffset=5     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=117  x=51    y=40    width=7     height=6     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=118  x=0     y=42    width=8     height=6     xoffset=0     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=119  x=43    y=40    width=7     height=6     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=120  x=101   y=40    width=6     height=6     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=121  x=203   y=20    width=7     height=8     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=122  x=121   y=40    width=5     height=6     xoffset=2     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=123  x=195   y=11    width=3     height=9     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=124  x=22    y=12    width=1     height=10    xoffset=3     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=125  x=199   y=11    width=3     height=9     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=126  x=213   y=37    width=6     height=2     xoffset=1     yoffset=7     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=160  x=254   y=36    width=1     height=1     xoffset=0     yoffset=12    xadvance=8     page=0  chnl=15 | ||||||
|  | char id=161  x=253   y=20    width=1     height=8     xoffset=4     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=162  x=243   y=29    width=5     height=7     xoffset=2     yoffset=5     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=163  x=112   y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=164  x=108   y=40    width=6     height=6     xoffset=1     yoffset=5     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=165  x=195   y=21    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=166  x=24    y=12    width=1     height=10    xoffset=3     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=167  x=142   y=12    width=6     height=9     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=168  x=7     y=49    width=4     height=1     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=169  x=0     y=24    width=8     height=8     xoffset=0     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=170  x=167   y=40    width=4     height=4     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=171  x=127   y=40    width=7     height=5     xoffset=1     yoffset=7     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=172  x=142   y=40    width=7     height=4     xoffset=0     yoffset=8     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=173  x=247   y=37    width=6     height=1     xoffset=1     yoffset=8     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=174  x=239   y=11    width=8     height=8     xoffset=0     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=175  x=229   y=37    width=8     height=1     xoffset=0     yoffset=2     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=176  x=172   y=40    width=4     height=4     xoffset=2     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=177  x=51    y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=178  x=177   y=39    width=4     height=4     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=179  x=182   y=39    width=4     height=4     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=180  x=220   y=37    width=2     height=2     xoffset=3     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=181  x=75    y=22    width=7     height=8     xoffset=0     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=182  x=74    y=12    width=7     height=9     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=183  x=14    y=49    width=1     height=1     xoffset=5     yoffset=7     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=184  x=209   y=37    width=3     height=3     xoffset=3     yoffset=11    xadvance=8     page=0  chnl=15 | ||||||
|  | char id=185  x=196   y=39    width=3     height=4     xoffset=3     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=186  x=187   y=39    width=4     height=4     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=187  x=135   y=40    width=6     height=5     xoffset=1     yoffset=7     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=188  x=9     y=24    width=8     height=8     xoffset=0     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=189  x=18    y=23    width=8     height=8     xoffset=0     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=190  x=221   y=11    width=8     height=8     xoffset=0     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=191  x=139   y=31    width=5     height=8     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=192  x=73    y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=193  x=113   y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=194  x=105   y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=195  x=33    y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=196  x=167   y=0     width=7     height=10    xoffset=1     yoffset=2     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=197  x=0     y=0     width=7     height=12    xoffset=1     yoffset=0     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=198  x=212   y=11    width=8     height=8     xoffset=0     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=199  x=121   y=0     width=6     height=11    xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=200  x=128   y=0     width=6     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=201  x=135   y=0     width=6     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=202  x=142   y=0     width=6     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=203  x=222   y=0     width=6     height=10    xoffset=1     yoffset=2     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=204  x=149   y=0     width=5     height=11    xoffset=2     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=205  x=161   y=0     width=5     height=11    xoffset=2     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=206  x=155   y=0     width=5     height=11    xoffset=2     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=207  x=229   y=0     width=5     height=10    xoffset=2     yoffset=2     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=208  x=119   y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=209  x=8     y=0     width=8     height=11    xoffset=0     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=210  x=65    y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=211  x=81    y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=212  x=49    y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=213  x=41    y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=214  x=175   y=0     width=7     height=10    xoffset=1     yoffset=2     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=215  x=162   y=40    width=4     height=4     xoffset=2     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=216  x=50    y=12    width=7     height=9     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=217  x=17    y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=218  x=97    y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=219  x=89    y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=220  x=207   y=0     width=7     height=10    xoffset=1     yoffset=2     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=221  x=57    y=0     width=7     height=11    xoffset=1     yoffset=1     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=222  x=126   y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=223  x=211   y=20    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=224  x=34    y=12    width=7     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=225  x=26    y=12    width=7     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=226  x=106   y=12    width=7     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=227  x=58    y=12    width=7     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=228  x=115   y=22    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=229  x=199   y=0     width=7     height=10    xoffset=1     yoffset=2     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=230  x=18    y=42    width=8     height=6     xoffset=0     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=231  x=156   y=12    width=6     height=9     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=232  x=149   y=12    width=6     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=233  x=163   y=12    width=6     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=234  x=170   y=11    width=6     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=235  x=7     y=33    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=236  x=189   y=11    width=5     height=9     xoffset=2     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=237  x=183   y=11    width=5     height=9     xoffset=2     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=238  x=177   y=11    width=5     height=9     xoffset=2     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=239  x=181   y=30    width=5     height=8     xoffset=2     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=240  x=35    y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=241  x=66    y=12    width=7     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=242  x=114   y=12    width=6     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=243  x=121   y=12    width=6     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=244  x=128   y=12    width=6     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=245  x=135   y=12    width=6     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=246  x=77    y=31    width=6     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=247  x=216   y=29    width=6     height=7     xoffset=1     yoffset=5     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=248  x=80    y=40    width=6     height=6     xoffset=1     yoffset=6     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=249  x=82    y=12    width=7     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=250  x=90    y=12    width=7     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=251  x=98    y=12    width=7     height=9     xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=252  x=179   y=21    width=7     height=8     xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=253  x=25    y=0     width=7     height=11    xoffset=1     yoffset=3     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=254  x=183   y=0     width=7     height=10    xoffset=0     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
|  | char id=255  x=191   y=0     width=7     height=10    xoffset=1     yoffset=4     xadvance=8     page=0  chnl=15 | ||||||
							
								
								
									
										
											BIN
										
									
								
								data/fonts/console.tga
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								data/fonts/console.tga
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 256 KiB | 
| @@ -13,6 +13,7 @@ add_executable( gremlin | |||||||
|     main |     main | ||||||
| 	game | 	game | ||||||
| 	Explosion | 	Explosion | ||||||
|  | 	oglfont | ||||||
| ) | ) | ||||||
|  |  | ||||||
| # set dependencies | # set dependencies | ||||||
| @@ -25,7 +26,7 @@ if (WIN32) | |||||||
| endif(WIN32) | endif(WIN32) | ||||||
|  |  | ||||||
| if(UNIX) | if(UNIX) | ||||||
| 	set(PLATFORM_LIBRARIES GL X11 Xrandr -pthread) | 	set(PLATFORM_LIBRARIES GL X11 Xrandr pthread asound) | ||||||
| endif(UNIX) | endif(UNIX) | ||||||
|  |  | ||||||
| target_link_libraries(gremlin | target_link_libraries(gremlin | ||||||
|   | |||||||
							
								
								
									
										56
									
								
								src/Schedule.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								src/Schedule.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | |||||||
|  | /* | ||||||
|  |  * Schedule.h | ||||||
|  |  * | ||||||
|  |  *  Created on: 12.06.2010 | ||||||
|  |  *      Author: gmueller | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifndef SCHEDULE_H_ | ||||||
|  | #define SCHEDULE_H_ | ||||||
|  |  | ||||||
|  | class Schedule { | ||||||
|  | 	double last; | ||||||
|  | 	double interval; | ||||||
|  | 	bool exact; | ||||||
|  | 	bool paused; | ||||||
|  | public: | ||||||
|  | 	Schedule() : | ||||||
|  | 		last(0.0), interval(1.0), exact(true), paused(false) { | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	void init(double now) { | ||||||
|  | 		last = now; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	void setInterval(double interval) { | ||||||
|  | 		this->interval = interval; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	double getInterval() { | ||||||
|  | 		return interval; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	void setExact(bool exact) { | ||||||
|  | 		this->exact = exact; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	void setPaused(bool paused) { | ||||||
|  | 		this->paused = paused; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	bool next(double now) { | ||||||
|  | 		if (now > (last + interval)) { | ||||||
|  | 			if (exact) | ||||||
|  | 				last += interval; | ||||||
|  | 			else | ||||||
|  | 				last = now; | ||||||
|  | 			if (paused) | ||||||
|  | 				return false; | ||||||
|  | 			else | ||||||
|  | 				return true; | ||||||
|  | 		} else { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  | #endif /* SCHEDULE_H_ */ | ||||||
							
								
								
									
										187
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										187
									
								
								src/main.cpp
									
									
									
									
									
								
							| @@ -9,6 +9,8 @@ | |||||||
| #include "common.h" | #include "common.h" | ||||||
| #include "game.h" | #include "game.h" | ||||||
| #include "Explosion.h" | #include "Explosion.h" | ||||||
|  | #include "Schedule.h" | ||||||
|  | #include "oglfont.h" | ||||||
|  |  | ||||||
| GLUquadricObj *quadratic; | GLUquadricObj *quadratic; | ||||||
| ENetHost *host; | ENetHost *host; | ||||||
| @@ -61,7 +63,7 @@ void setup_opengl() { | |||||||
| 	glEnable( GL_LIGHTING); | 	glEnable( GL_LIGHTING); | ||||||
|  |  | ||||||
| 	// Enable vertical sync (on cards that support it) | 	// Enable vertical sync (on cards that support it) | ||||||
| 	glfwSwapInterval(1); | 	glfwSwapInterval(0); | ||||||
| } | } | ||||||
|  |  | ||||||
| void draw_team(team_t *team) { | void draw_team(team_t *team) { | ||||||
| @@ -456,19 +458,80 @@ void explosion_callback(double x, double y, double z) { | |||||||
| 	explosion.add(x, y, z); | 	explosion.add(x, y, z); | ||||||
| } | } | ||||||
|  |  | ||||||
| int main(int argc, char ** argv) { | class Application { | ||||||
| 	int width, height, x, y, last_x, last_y; | public: | ||||||
| 	double time, last_time, phi = 0.0, theta = 0.0, last_player_update, | 	void initialize(int argc, char ** argv); | ||||||
| 			last_bomb; | 	void update(); | ||||||
| 	GLboolean running; | 	void shutdown(); | ||||||
| 	int server = 0; | 	bool isRunning(); | ||||||
|  | private: | ||||||
|  | 	bool running; | ||||||
|  | 	double last_time, last_bomb; //TODO: use bomb schedule; | ||||||
|  | 	int last_x, last_y; | ||||||
|  | 	double phi, theta; | ||||||
|  | 	double camX, camY, camZ; | ||||||
|  | 	Schedule accelerate_schudule; | ||||||
|  | 	Schedule player_update_schudule; | ||||||
|  | 	game_t game; | ||||||
|  | 	int server; | ||||||
|  | 	int width, height; | ||||||
|  | 	//TrueTyeFont font; | ||||||
|  | 	oglf_font_t font; | ||||||
|  |  | ||||||
|  | 	void prepareFrame(double rx, double ry, double rz); | ||||||
|  |  | ||||||
|  | 	void loadConsoleFont(); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | void Application::loadConsoleFont() { | ||||||
|  | 	GLuint font_id = 0; | ||||||
|  |  | ||||||
|  | 	glGenTextures(1, &font_id); | ||||||
|  | 	glBindTexture(GL_TEXTURE_2D, font_id); | ||||||
|  |  | ||||||
|  | 	// Set texture parameters | ||||||
|  | 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); | ||||||
|  | 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); | ||||||
|  | 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | ||||||
|  | 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | ||||||
|  |  | ||||||
|  | 	// Upload texture from file to texture memory | ||||||
|  | 	glfwLoadTexture2D("data/fonts/console.tga", 0); | ||||||
|  | 	oglf_load(&font, "data/fonts/console.fnt", font_id); | ||||||
|  | } | ||||||
|  | void Application::prepareFrame(double rx, double ry, double rz) { | ||||||
|  | 	// Get window size (may be different than the requested size) | ||||||
|  | 	glfwGetWindowSize(&width, &height); | ||||||
|  | 	height = height > 0 ? height : 1; | ||||||
|  |  | ||||||
|  | 	// Set viewport | ||||||
|  | 	glViewport(0, 0, width, height); | ||||||
|  |  | ||||||
|  | 	// Clear color buffer | ||||||
|  | 	glClearColor(0.0f, 0.0f, 0.0f, 0.0f); | ||||||
|  | 	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | ||||||
|  |  | ||||||
|  | 	// Select and setup the projection matrix | ||||||
|  | 	glMatrixMode( GL_PROJECTION); | ||||||
|  | 	glLoadIdentity(); | ||||||
|  | 	gluPerspective(60.0f, (GLfloat) width / (GLfloat) height, 1.0f, 10000.0f); | ||||||
|  |  | ||||||
|  | 	// Select and setup the modelview matrix | ||||||
|  | 	glMatrixMode( GL_MODELVIEW); | ||||||
|  | 	glLoadIdentity(); | ||||||
|  | 	gluLookAt(camX, camY, camZ, camX + rx * 10.0f, camY + ry * 10.0f, camZ + rz | ||||||
|  | 			* 10.0f, 0.0f, 1.0f, 0.0f); | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void Application::initialize(int argc, char ** argv) { | ||||||
|  | 	server = 0; | ||||||
|  | 	double time, last_player_update; | ||||||
|  |  | ||||||
| 	quadratic = gluNewQuadric(); | 	quadratic = gluNewQuadric(); | ||||||
| 	gluQuadricNormals(quadratic, GLU_SMOOTH); | 	gluQuadricNormals(quadratic, GLU_SMOOTH); | ||||||
| 	gluQuadricTexture(quadratic, GL_TRUE); | 	gluQuadricTexture(quadratic, GL_TRUE); | ||||||
|  |  | ||||||
| 	game_t game; |  | ||||||
|  |  | ||||||
| 	game_setup(&game); | 	game_setup(&game); | ||||||
|  |  | ||||||
| 	setup_opengl(); | 	setup_opengl(); | ||||||
| @@ -484,18 +547,28 @@ int main(int argc, char ** argv) { | |||||||
| 		team_t *team = game_team(&game, 0); | 		team_t *team = game_team(&game, 0); | ||||||
| 		local_player = game_spawn_player(&game, team); | 		local_player = game_spawn_player(&game, team); | ||||||
| 	} | 	} | ||||||
| 	float plane_color[] = { 0.2f, 0.3f, 0.4f, 1.0f }; |  | ||||||
| 	size_t i; | 	size_t i; | ||||||
| 	running = GL_TRUE; | 	running = GL_TRUE; | ||||||
| 	last_time = glfwGetTime(); | 	last_time = glfwGetTime(); | ||||||
| 	last_player_update = last_time; | 	last_player_update = last_time; | ||||||
| 	last_bomb = last_time; | 	last_bomb = last_time; | ||||||
| 	double camX, camY, camZ; |  | ||||||
| 	glfwGetMousePos(&last_x, &last_y); | 	glfwGetMousePos(&last_x, &last_y); | ||||||
| 	while (running) { |  | ||||||
|  | 	accelerate_schudule.setExact(true); | ||||||
|  | 	accelerate_schudule.setInterval(0.05); | ||||||
|  |  | ||||||
|  | 	player_update_schudule.setExact(true); | ||||||
|  | 	player_update_schudule.setInterval(0.1); | ||||||
|  |  | ||||||
|  | 	loadConsoleFont(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void Application::update() { | ||||||
|  |  | ||||||
| 	// Get time and mouse position | 	// Get time and mouse position | ||||||
| 		time = glfwGetTime(); | 	double time = glfwGetTime(); | ||||||
| 	double dt = time - last_time; | 	double dt = time - last_time; | ||||||
|  | 	int x, y; | ||||||
| 	glfwGetMousePos(&x, &y); | 	glfwGetMousePos(&x, &y); | ||||||
| 	if (glfwGetMouseButton(GLFW_MOUSE_BUTTON_2) == GLFW_PRESS) { | 	if (glfwGetMouseButton(GLFW_MOUSE_BUTTON_2) == GLFW_PRESS) { | ||||||
| 		phi += (x - last_x) * 0.01; | 		phi += (x - last_x) * 0.01; | ||||||
| @@ -521,7 +594,9 @@ int main(int argc, char ** argv) { | |||||||
| 	double rx = cos(phi) * cos(theta); | 	double rx = cos(phi) * cos(theta); | ||||||
| 	double ry = sin(theta); | 	double ry = sin(theta); | ||||||
| 	double rz = sin(phi) * cos(theta); | 	double rz = sin(phi) * cos(theta); | ||||||
| 		double v = 50.0f * dt; | 	if (accelerate_schudule.next(time)) { | ||||||
|  | 		double t = accelerate_schudule.getInterval(); | ||||||
|  | 		double v = 50.0 * t; | ||||||
| 		if (glfwGetKey('W')) { | 		if (glfwGetKey('W')) { | ||||||
| 			accelerate(&game, rx * v, ry * v, rz * v); | 			accelerate(&game, rx * v, ry * v, rz * v); | ||||||
| 		} else if (glfwGetKey('S')) { | 		} else if (glfwGetKey('S')) { | ||||||
| @@ -535,61 +610,24 @@ int main(int argc, char ** argv) { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if (glfwGetKey(GLFW_KEY_SPACE)) { | 		if (glfwGetKey(GLFW_KEY_SPACE)) { | ||||||
| 			accelerate(&game, local_player->vx * -dt, local_player->vy * -dt, | 			accelerate(&game, local_player->vx * -0.1, local_player->vy * -0.1, | ||||||
| 					local_player->vz * -dt); | 					local_player->vz * -0.1); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (glfwGetKey(GLFW_KEY_LCTRL)) { | 	if (glfwGetKey(GLFW_KEY_LCTRL)) { | ||||||
| 		if (time - last_bomb > 5.0) { | 		if (time - last_bomb > 5.0) { | ||||||
| 			last_bomb = time; | 			last_bomb = time; | ||||||
| 				drop_bomb(&game, local_player->x + rx - 20.0, local_player->y | 			drop_bomb(&game, local_player->x + rx * 20.0, local_player->y + ry | ||||||
| 						+ ry * -20.0, local_player->z + rz * -20.0, 5.0); | 					* 20.0, local_player->z + rz * 20.0, 5.0); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 		if (glfwGetKey(GLFW_KEY_ENTER)) { | 	prepareFrame(rx, ry, rz); | ||||||
| 			explosion.add(200.0, 200.0, 200.0); |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		// Get window size (may be different than the requested size) |  | ||||||
| 		glfwGetWindowSize(&width, &height); |  | ||||||
| 		height = height > 0 ? height : 1; |  | ||||||
|  |  | ||||||
| 		// Set viewport |  | ||||||
| 		glViewport(0, 0, width, height); |  | ||||||
|  |  | ||||||
| 		// Clear color buffer |  | ||||||
| 		glClearColor(0.0f, 0.0f, 0.0f, 0.0f); |  | ||||||
| 		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |  | ||||||
|  |  | ||||||
| 		// Select and setup the projection matrix |  | ||||||
| 		glMatrixMode( GL_PROJECTION); |  | ||||||
| 		glLoadIdentity(); |  | ||||||
| 		gluPerspective(60.0f, (GLfloat) width / (GLfloat) height, 1.0f, |  | ||||||
| 				10000.0f); |  | ||||||
|  |  | ||||||
| 		// Select and setup the modelview matrix |  | ||||||
| 		glMatrixMode( GL_MODELVIEW); |  | ||||||
| 		glLoadIdentity(); |  | ||||||
| 		gluLookAt(camX, camY, camZ, camX + cos(phi) * cos(theta) * 10.0f, camY |  | ||||||
| 				+ sin(theta) * 10.0f, camZ + sin(phi) * cos(theta) * 10.0f, // View-point |  | ||||||
| 				0.0f, 1.0f, 0.0f); // Up-vector |  | ||||||
|  |  | ||||||
| 		service_network(&game); |  | ||||||
| 		if (server) { |  | ||||||
| 			if (time > last_player_update + 0.1) { |  | ||||||
| 				send_player_updates(&game); |  | ||||||
| 				last_player_update = time; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		game_update_players(&game, dt); |  | ||||||
| 		game_update_bombs(&game, dt, explosion_callback); |  | ||||||
|  |  | ||||||
| 	glEnable( GL_LIGHT0); | 	glEnable( GL_LIGHT0); | ||||||
| 	glEnable( GL_LIGHTING); | 	glEnable( GL_LIGHTING); | ||||||
| 	glEnable( GL_CULL_FACE); | 	glEnable( GL_CULL_FACE); | ||||||
|  | 	const float plane_color[] = { 0.2f, 0.3f, 0.4f, 1.0f }; | ||||||
| 	glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, plane_color); | 	glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, plane_color); | ||||||
| 	// Draw a textured quad | 	// Draw a textured quad | ||||||
| 	glBegin( GL_QUADS); | 	glBegin( GL_QUADS); | ||||||
| @@ -598,13 +636,13 @@ int main(int argc, char ** argv) { | |||||||
| 	glVertex3f(5000.0f, 5000.0f, 5000.0f); | 	glVertex3f(5000.0f, 5000.0f, 5000.0f); | ||||||
| 	glVertex3f(-5000.0f, 5000.0f, 5000.0f); | 	glVertex3f(-5000.0f, 5000.0f, 5000.0f); | ||||||
| 	glEnd(); | 	glEnd(); | ||||||
| 		for (i = 0; i < GAME_TEAM_COUNT; i++) | 	for (size_t i = 0; i < GAME_TEAM_COUNT; i++) | ||||||
| 		draw_team(&game.team[i]); | 		draw_team(&game.team[i]); | ||||||
|  |  | ||||||
| 		for (i = 0; i < GAME_PLAYER_COUNT; i++) | 	for (size_t i = 0; i < GAME_PLAYER_COUNT; i++) | ||||||
| 		draw_player(&game.player[i]); | 		draw_player(&game.player[i]); | ||||||
|  |  | ||||||
| 		for (i = 0; i < GAME_BOMB_COUNT; i++) | 	for (size_t i = 0; i < GAME_BOMB_COUNT; i++) | ||||||
| 		draw_bomb(&game.bomb[i]); | 		draw_bomb(&game.bomb[i]); | ||||||
|  |  | ||||||
| 	glDisable(GL_LIGHT0); | 	glDisable(GL_LIGHT0); | ||||||
| @@ -613,23 +651,48 @@ int main(int argc, char ** argv) { | |||||||
| 	explosion.update(dt * 1000.0, camX, camY, camZ); | 	explosion.update(dt * 1000.0, camX, camY, camZ); | ||||||
| 	explosion.render(); | 	explosion.render(); | ||||||
|  |  | ||||||
|  | 	oglf_begin(&font, width, height); | ||||||
|  | 	oglf_print(&font, 40, 40, "Hello"); | ||||||
|  | 	oglf_end(); | ||||||
|  |  | ||||||
| 	// Swap buffers | 	// Swap buffers | ||||||
| 	glfwSwapBuffers(); | 	glfwSwapBuffers(); | ||||||
|  |  | ||||||
| 	// Check if the ESC key was pressed or the window was closed | 	// Check if the ESC key was pressed or the window was closed | ||||||
| 	running = !glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam(GLFW_OPENED); | 	running = !glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam(GLFW_OPENED); | ||||||
|  | 	service_network(&game); | ||||||
|  | 	if (server && player_update_schudule.next(time)) { | ||||||
|  | 		send_player_updates(&game); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	game_update_players(&game, dt); | ||||||
|  | 	game_update_bombs(&game, dt, explosion_callback); | ||||||
|  |  | ||||||
| 	last_time = time; | 	last_time = time; | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void Application::shutdown() { | ||||||
|  |  | ||||||
| 	gluDeleteQuadric(quadratic); | 	gluDeleteQuadric(quadratic); | ||||||
|  |  | ||||||
| 	enet_host_destroy(host); | 	enet_host_destroy(host); | ||||||
| 	enet_deinitialize(); | 	enet_deinitialize(); | ||||||
|  | 	oglf_destroy(&font); | ||||||
| 	// Close OpenGL window and terminate GLFW | 	// Close OpenGL window and terminate GLFW | ||||||
| 	glfwTerminate(); | 	glfwTerminate(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool Application::isRunning() { | ||||||
|  | 	return running; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int main(int argc, char ** argv) { | ||||||
|  | 	Application app; | ||||||
|  | 	app.initialize(argc, argv); | ||||||
|  | 	while (app.isRunning()) | ||||||
|  | 		app.update(); | ||||||
|  | 	app.shutdown(); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										270
									
								
								src/oglfont.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										270
									
								
								src/oglfont.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,270 @@ | |||||||
|  | #include "oglfont.h" | ||||||
|  | #include <GL/gl.h> | ||||||
|  | #include <GL/glu.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <stdarg.h> | ||||||
|  |  | ||||||
|  | #define		GL_Y_FIX(f)			(1 - (f)) | ||||||
|  | static void _compile(oglf_font_t *font) { | ||||||
|  | 	int chr; | ||||||
|  |  | ||||||
|  | 	font->base_list = glGenLists(OGLF_MAX_ASCII); | ||||||
|  | 	glBindTexture(GL_TEXTURE_2D, font->fontTex); | ||||||
|  |  | ||||||
|  | 	for (chr = 0; chr < OGLF_MAX_ASCII; chr++) { | ||||||
|  | 		glNewList(font->base_list + chr - 1, GL_COMPILE); | ||||||
|  |  | ||||||
|  | 		if (font->chars[chr].w) { | ||||||
|  | 			glBegin(GL_QUADS); | ||||||
|  | 			glTexCoord2f( | ||||||
|  | 					(float) font->chars[chr].x / (float) font->w, | ||||||
|  | 					(float) GL_Y_FIX((font->chars[chr].y+font->chars[chr].h) / (float) font->h)); | ||||||
|  | 			glVertex2d((float) font->chars[chr].x_ofs, | ||||||
|  | 					(float) font->chars[chr].h + font->chars[chr].y_ofs); | ||||||
|  |  | ||||||
|  | 			glTexCoord2f( | ||||||
|  | 					(float) (font->chars[chr].x + font->chars[chr].w) | ||||||
|  | 							/ (float) font->w, | ||||||
|  | 					(float) GL_Y_FIX((font->chars[chr].y + font->chars[chr].h) / (float) font->h)); | ||||||
|  | 			glVertex2d((float) font->chars[chr].w + font->chars[chr].x_ofs, | ||||||
|  | 					(float) font->chars[chr].h + font->chars[chr].y_ofs); | ||||||
|  |  | ||||||
|  | 			glTexCoord2f((float) (font->chars[chr].x + font->chars[chr].w) | ||||||
|  | 					/ (float) font->w, | ||||||
|  | 					(float) GL_Y_FIX( font->chars[chr].y / (float) font->h)); | ||||||
|  | 			glVertex2d((float) font->chars[chr].w + font->chars[chr].x_ofs, | ||||||
|  | 					(float) font->chars[chr].y_ofs); | ||||||
|  |  | ||||||
|  | 			glTexCoord2f((float) font->chars[chr].x / (float) font->w, | ||||||
|  | 					(float) GL_Y_FIX( font->chars[chr].y / (float) font->h)); | ||||||
|  | 			glVertex2d((float) font->chars[chr].x_ofs, | ||||||
|  | 					(float) font->chars[chr].y_ofs); | ||||||
|  | 			glEnd(); | ||||||
|  | 			glTranslatef((float) (font->chars[chr].x_advance | ||||||
|  | 					), 0, 0); | ||||||
|  | 		} else { | ||||||
|  | 			// if char has no width, treat it like a space | ||||||
|  | 			glTranslatef((float) font->base, 0, 0); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		glEndList(); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int _starts_with(const char *buffer, const char *text) { | ||||||
|  | 	const char *text_ptr = text; | ||||||
|  | 	const char *buffer_ptr = buffer; | ||||||
|  | 	while (*text_ptr != 0) { | ||||||
|  |  | ||||||
|  | 		if (*text_ptr != *buffer_ptr) | ||||||
|  | 			return 0; | ||||||
|  |  | ||||||
|  | 		text_ptr++; | ||||||
|  | 		buffer_ptr++; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return 1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int _parse_line(oglf_font_t *font, char *buffer) { | ||||||
|  |  | ||||||
|  | 	if (_starts_with(buffer, "common")) { | ||||||
|  | 		int count = sscanf(buffer, | ||||||
|  | 				"common lineHeight=%d base=%d scaleW=%d scaleH=%d pages=%d\n", | ||||||
|  | 				&font->line_h, &font->base, &font->w, &font->h, &font->pages); | ||||||
|  |  | ||||||
|  | 		if (count != 5) | ||||||
|  | 			return 0; | ||||||
|  | 	} else if (_starts_with(buffer, "char ")) { | ||||||
|  | 		oglf_char_t temp_char; | ||||||
|  | 		int id; | ||||||
|  | 		int | ||||||
|  | 				count = | ||||||
|  | 						sscanf( | ||||||
|  | 								buffer, | ||||||
|  | 								"char id=%d x=%d y=%d width=%d height=%d xoffset=%d yoffset=%d xadvance=%d page=%d chnl=%*d\n", | ||||||
|  | 								&id, &temp_char.x, &temp_char.y, &temp_char.w, | ||||||
|  | 								&temp_char.h, &temp_char.x_ofs, | ||||||
|  | 								&temp_char.y_ofs, &temp_char.x_advance, | ||||||
|  | 								&temp_char.page); | ||||||
|  | 		font->chars[id] = temp_char; | ||||||
|  |  | ||||||
|  | 		if (count != 9) | ||||||
|  | 			return 0; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return 1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int oglf_load(oglf_font_t *font, const char *bmf_path, unsigned int texture) { | ||||||
|  | 	FILE *file; | ||||||
|  | 	char buffer[256]; | ||||||
|  |  | ||||||
|  | 	file = fopen(bmf_path, "r"); // could not open file for read | ||||||
|  | 	if (file == 0) | ||||||
|  | 		return 0; | ||||||
|  |  | ||||||
|  | 	font->chars = (oglf_char_t *) malloc(OGLF_MAX_ASCII * sizeof(oglf_char_t)); | ||||||
|  |  | ||||||
|  | 	while (fgets(buffer, sizeof(buffer), file) != 0) { | ||||||
|  | 		int result = _parse_line(font, buffer); | ||||||
|  | 		if (result == 0) | ||||||
|  | 			return 0; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	fclose(file); // close the source file | ||||||
|  |  | ||||||
|  | 	font->fontTex = texture; | ||||||
|  | 	font->scale = 1.f; | ||||||
|  |  | ||||||
|  | 	_compile(font); | ||||||
|  |  | ||||||
|  | 	return 1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // calculate the approx. width of a string of text | ||||||
|  | // note: no kerning info is currently evaluated | ||||||
|  | int oglf_width(oglf_font_t *font, const char *text) { | ||||||
|  | 	int w, l, i; | ||||||
|  | 	w = 0; | ||||||
|  | 	l = strlen(text); | ||||||
|  | 	for (i = 0; i < l; i++) { | ||||||
|  | 		//w += font->chars[text[i]].w; | ||||||
|  | 		w += font->chars[text[i]].x_advance; | ||||||
|  | 	} | ||||||
|  | 	return w; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // destroy the charset | ||||||
|  | void oglf_destroy(oglf_font_t *font) { | ||||||
|  | 	glDeleteLists(font->base_list, OGLF_MAX_ASCII); | ||||||
|  | 	glDeleteTextures(1, &font->fontTex); | ||||||
|  | 	free(font->chars); | ||||||
|  | } | ||||||
|  | /* | ||||||
|  |  void ogl___font_in(ogl_font *font); | ||||||
|  |  | ||||||
|  |  void bmf___font_in(ogl_font *font) { | ||||||
|  |  ogl___font_in(font); | ||||||
|  |  } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | void oglf_begin(oglf_font_t *font, int width, int height) { | ||||||
|  | 	glPushAttrib(GL_LIST_BIT | GL_CURRENT_BIT | GL_ENABLE_BIT | ||||||
|  | 			| GL_TRANSFORM_BIT); | ||||||
|  | 	glDisable(GL_DEPTH_TEST); | ||||||
|  | 	glDisable(GL_LIGHTING); | ||||||
|  | 	glDisable(GL_CULL_FACE); | ||||||
|  | 	//glNormal3f( 0.0, 0.0, 1.0); | ||||||
|  |  | ||||||
|  | 	// set projection matrix | ||||||
|  | 	glMatrixMode(GL_PROJECTION); | ||||||
|  | 	glPushMatrix(); | ||||||
|  | 	glLoadIdentity(); | ||||||
|  | 	//int newheight = (_width / 16.0) * 9.0; | ||||||
|  |     glOrtho(0.0, | ||||||
|  |                 (double)width, | ||||||
|  |                 (double)height, | ||||||
|  |                 0.0, | ||||||
|  |                 -1.0, | ||||||
|  |                 1.0); | ||||||
|  | 	// prepare model matrix | ||||||
|  | 	glMatrixMode(GL_MODELVIEW); | ||||||
|  | 	glPushMatrix(); | ||||||
|  | 	glLoadIdentity(); | ||||||
|  | 	//glScalef(font->scale, font->scale, 1.f); | ||||||
|  |  | ||||||
|  | 	glBindTexture(GL_TEXTURE_2D, font->fontTex); | ||||||
|  | 	glEnable(GL_TEXTURE_2D); | ||||||
|  |  | ||||||
|  | 	glAlphaFunc(GL_GEQUAL,0.1); | ||||||
|  | 	glEnable(GL_ALPHA_TEST); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void oglf_print_l(oglf_font_t *font, float x, float y, const char *text, int l) { | ||||||
|  | 	glMatrixMode(GL_MODELVIEW); | ||||||
|  | 	glPushMatrix(); | ||||||
|  | 	glTranslatef(x, y, 0); | ||||||
|  | 	glCallLists(l, GL_UNSIGNED_BYTE, text); | ||||||
|  | 	glPopMatrix(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void oglf_end() { | ||||||
|  | 	glPopAttrib(); | ||||||
|  | 	glMatrixMode(GL_PROJECTION); | ||||||
|  | 	glPopMatrix(); | ||||||
|  | 	glMatrixMode(GL_MODELVIEW); | ||||||
|  | 	glPopMatrix(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void oglf_print(oglf_font_t *font, float x, float y, const char *text) { | ||||||
|  | 	oglf_print_l(font, x, y, text, strlen(text)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void oglf_printf(oglf_font_t *font, int x, int y, const char *fmt, ...) { | ||||||
|  | 	char text[OGLF_MAX_LINE], *line_start, *c; | ||||||
|  | 	float h; | ||||||
|  | 	va_list ap; | ||||||
|  | 	int row; | ||||||
|  |  | ||||||
|  | 	if (strlen(fmt) == 0) | ||||||
|  | 		return; | ||||||
|  |  | ||||||
|  | 	va_start(ap, fmt); | ||||||
|  | 	vsprintf(text, fmt, ap); | ||||||
|  | 	va_end(ap); | ||||||
|  |  | ||||||
|  | 	line_start = text; | ||||||
|  | 	row = 0; | ||||||
|  | 	h = font->h / .63f; | ||||||
|  |  | ||||||
|  | 	NextL: c = strchr(line_start, '\n'); | ||||||
|  | 	if (c) { | ||||||
|  | 		row++; | ||||||
|  | 		oglf_print_l(font, (float) x, (float) (y - h * row), line_start, c | ||||||
|  | 				- line_start); | ||||||
|  | 		line_start = c + 1; | ||||||
|  | 		goto NextL; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	oglf_print_l(font, (float) x, (float) (y - h * row), line_start, strlen( | ||||||
|  | 			line_start)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  #define OGLF_CENTER_TEXT(rect, txtw, ofs)	((float)((rect[ofs+_W] - txtw - rect[ofs])/2 + rect[ofs])) | ||||||
|  |  | ||||||
|  |  // printf function which takes in account the alignment | ||||||
|  |  void ogl_printf_al(oglf_font_t *font, alignment align, GLuint *rect, | ||||||
|  |  const char *fmt, ...) { | ||||||
|  |  char text[BMF_MAX_LINE]; | ||||||
|  |  va_list ap; | ||||||
|  |  | ||||||
|  |  if (!strlen(fmt)) | ||||||
|  |  return; | ||||||
|  |  | ||||||
|  |  va_start(ap, fmt); | ||||||
|  |  vsprintf(text, fmt, ap); | ||||||
|  |  va_end(ap); | ||||||
|  |  | ||||||
|  |  switch (align) { | ||||||
|  |  case al_left: | ||||||
|  |  ogl_print(font, (float) rect[_X], | ||||||
|  |  OGLF_CENTER_TEXT(rect, font->line_h, _Y), text); | ||||||
|  |  break; | ||||||
|  |  case al_right: | ||||||
|  |  ogl_print(font, ((float) rect[_W] - ogl__width(font, text)), | ||||||
|  |  OGLF_CENTER_TEXT(rect, font->line_h, _Y), text); | ||||||
|  |  break; | ||||||
|  |  case al_center: | ||||||
|  |  ogl_print(font, OGLF_CENTER_TEXT(rect, ogl__width(font, text), _X), | ||||||
|  |  OGLF_CENTER_TEXT(rect, font->line_h, _Y), text); | ||||||
|  |  break; | ||||||
|  |  } | ||||||
|  |  } | ||||||
|  |  */ | ||||||
							
								
								
									
										49
									
								
								src/oglfont.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/oglfont.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | |||||||
|  | #ifndef	OGLF_H_ | ||||||
|  | #define	OGLF_H_ | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #define	OGLF_MAX_ASCII	256 | ||||||
|  | #define	OGLF_MAX_LINE	1024 | ||||||
|  | #define	OGLF_MAX_PATH	256 | ||||||
|  |  | ||||||
|  | typedef struct oglf_char_t { | ||||||
|  | 	unsigned int x, y, w, h; | ||||||
|  | 	unsigned int x_ofs, y_ofs; | ||||||
|  | 	unsigned int x_advance, page; | ||||||
|  | } oglf_char_t; | ||||||
|  |  | ||||||
|  | typedef struct oglf_kerninfo_t { | ||||||
|  | 	unsigned short first, second; | ||||||
|  | 	short kerning; | ||||||
|  | } oglf_kerninfo_t; | ||||||
|  |  | ||||||
|  | typedef struct oglf_font_t { | ||||||
|  | 	float scale; | ||||||
|  | 	int base, line_h, w, h, pages, kerninfo_count; | ||||||
|  | 	unsigned int fontTex; | ||||||
|  | 	int base_list; | ||||||
|  | 	oglf_kerninfo_t *kerninfo; | ||||||
|  | 	oglf_char_t *chars; | ||||||
|  | 	float mmat[16]; | ||||||
|  | } oglf_font_t; | ||||||
|  |  | ||||||
|  | int oglf_load(oglf_font_t *font, const char *bmf_path, unsigned int texture); | ||||||
|  | int oglf_width(oglf_font_t *font, const char *text); | ||||||
|  | void oglf_destroy(oglf_font_t *font); | ||||||
|  |  | ||||||
|  | void oglf_begin(oglf_font_t *font, int width, int height); | ||||||
|  | void oglf_end(); | ||||||
|  |  | ||||||
|  | void oglf_print(oglf_font_t *font, float x, float y, const char *text); | ||||||
|  | void oglf_printf_al(oglf_font_t *font, int align, unsigned int *rect, | ||||||
|  | 		const char *fmt, ...); | ||||||
|  | void oglf_printf(oglf_font_t *font, int x, int y, const char *fmt, ...); | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif // _FONT_H_ | ||||||
		Reference in New Issue
	
	Block a user
	 gmueller
					gmueller