From f6e2a3b04949101337e6a9f6f90d9db7d24952bc Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 26 Jul 2018 05:32:28 +0900 Subject: [PATCH] working demo; fixed chinese shading bug operation not guaranteed on Slick2d --- .idea/workspace.xml | 159 ++++++++++-------- FontTestGDX/lib/TerrarumSansBitmap.jar | Bin 55148 -> 56332 bytes FontTestGDX/src/FontTestGDX.kt | 28 ++- LICENSE.md | 2 +- README.md | 2 +- .../terrarumsansbitmap/gdx/GameFontBase.kt | 12 +- 6 files changed, 120 insertions(+), 83 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 7780478..d9cf356 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -7,34 +7,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + @@ -116,11 +108,14 @@ @@ -144,11 +139,6 @@ - - - - - @@ -178,6 +168,7 @@ + @@ -201,7 +192,7 @@ - + @@ -224,25 +215,21 @@ - + - - - - - - - - - - + @@ -416,7 +398,7 @@ - + @@ -424,7 +406,7 @@ - + @@ -633,30 +615,61 @@ - + - - + + - - - - + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + diff --git a/FontTestGDX/lib/TerrarumSansBitmap.jar b/FontTestGDX/lib/TerrarumSansBitmap.jar index 521e9d4eb7bfa6edbc560ac4187ededde14f7330..c36fbaf9d8db7b1481ad44e7f278d3c8913e8d02 100644 GIT binary patch delta 23295 zcmYhh1B@<86D_)DW{+*#wr$(CZO=EhZQHhO+cx*u@BHuPCb!eQ(y4U1Q`K3?s!Cng zf<(82z$i$A{6+Z#0Ri!6l{x`NANW7CCHNo4QTz`(xc`SQ{J<;JN$fz{fV64@8e?PU zw|=%(&{jl*vDl;G2m}nYU%S{f;tWwLQr~8EF zimTlV-@RAgJ@>4#-)Wkv6t^LxG;m9|*UvrspNx%-oCV`J{x1su9uJ*?fZ|+8Go=eo zT1LF-^NZ%x+#EBl#F!Cgz|y9SgOLy4dV%a!nDT^7)#y{FgO!(<^r-R#5(U&((q=ZA zjKxHR!QFZ>-c)kFfZ%s4=jGdfh4rm88m1I1mJSa*$To$_f`q1l+BvDq+WW&Th5n%9MDg+W(* zr|`o3qMUWL98vb?vP2$i6ep~hYUK%$6VspD7EP}es&&$02@8RkShy^x#EeOC`ze~+7F-42vhM{~1e#)!zg zpd>qHhK|jgyO#Hl(?yHAAhG24Wy8zDy}_@5{hY<`LT(8yy9wm%ijZ z*EaQN*6?CG^=#WKVzx%}4DMo^^3DIF)UhiS2YcdNq%qw1e zmQ=$lvq}04aQN@NqQ!TyE1#=#Yx}$2?=hCADTHWxhvYpPMN0QYA1^%Ec^+dS69!`iu&+BszhO)^wDQl$$AE1j}7Q-PW| z6ZM|&3>O|wLF-}L1QjnLjtcY9MJ=9*KrN<>NefIZfkp$Cl!#d}Byi|`aEpcHksA#}4IZK0OfV2KB$-sMo#0~09s^t>1`)jZ4I_VBNj`${SKXmih# z`rQaMicO}JDbj<9gOeQ>hCEW@GLj(cgtF-a2K7Kyxw5JjICfHR9mj`QW|}NEF=92~(ejFNuE9UVk~+xh z(oo0BL8s`kp`Vo+JQK|qnKwJq76BGm=bm(cY=cpMM7>4l(m6nX|IOd9il&Wbr38A< z(%U?HQt|S|{eA_`9i4#dQPq_+Mo*%usJ+k9d(daol=Jk>A6hDDNq6T$mqqgW$*X7d z6>TmpuPR;N6*tyX8{}4fWlz!-U89w(T|J14m{jzIiL-fR7Utykw)_D5Jp(?Vp>2<^ zOFk;0dqjVXkfg2y)gh>_1LYyoHbRsLtDB)sg)~gjzl1bw(I-RdN9n3jg+g>S$b+BV z3X~vJ-3qiISltYR5ZE?DWQEpk(5*u1N9b%&2idw5$b)a(48suIHbeXoE^mZ_5ZpFG zc7)cA(Xm1hnxSQdELx#yg#hi_bl0eZsBVUN2rpY9)FBT2bULKLL2d_DggVCPaF7RD zT@E=2LT&{q!7D!uc_&MhHiw6-4IQP@^~7S~WHZ;kw8_elfS5&Qt+ z3Io+$u@RWbT3(doEp~7+OS{Kvb*&iclGTHBo>T`ZZZ3h~AlIHces;4##D7AB{JP(okk~|_Ozs^ECOqMM*9vc%~ z%a0tf&~(An&#ur0Sq*)DCaJmy^>iB-sj2S{yW9d*fr3`DxDq2RV{ysRriKvyzCH?W z1o`v%^;3E-TkZ1G41kRJ!BSUtc0@CqE~Jr~XBQNcmTjeI24lhXeL>vfnXP8Yn+p8# zxy)>d@!KJrxx|X8qHG8*MPpoFbvQ~A z=vIwM!xu@wy@v7#@p0_LuKU$Fmyc0 z<|-!4S{LdNKjA?5`HRN=_`Vc%hN5Oek@t)~0G={K>Wa1>+QZ+#Uxf=~F}*KL)i?V5 z<%M_h@XuoiC>0;6FaA(@`dnYJ5%UL5uHiHBd3iBx!ccqWW+tDo1BM}Y%veUBIK$`z zz$Z)?hF?F!#JzAR%TOFfCx+j&fc0V?!}jpKawunL9wUzV8>cY-5Iu&S!5iriEli)$ z`q;g7s8i@3L$&c6tuX7*9Y!nDSFR!Q5I%+*!SynyA=IBg69j+${7ZzNpbaLNq(y^01^`?Lw6EJ zI%69{XXg|ZS$k|z3_r6Ylbo2SoIjRXsY?CLtspxb$x04b5;C|n9U?^INGdp^T}jWw zT}@{0tMl4^f6;4o+8zEt0w4Ml#ePxj=fqIcwD=Qk+^tQ2eoy~AoYnOKwa4&=a!XmL zk4*%J^;U@{-jhTr)h-4s0}%1M0)9)n#)uapQg%-&%0D1~3pbkwFuryvRtr>a7f75+ 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 aTJK7bp)=IQ!~eIM>h99Ii)yC-W&a1#OX~>$ delta 22190 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 diff --git a/FontTestGDX/src/FontTestGDX.kt b/FontTestGDX/src/FontTestGDX.kt index e65c427..bb3cd42 100644 --- a/FontTestGDX/src/FontTestGDX.kt +++ b/FontTestGDX/src/FontTestGDX.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.Screen import com.badlogic.gdx.backends.lwjgl.LwjglApplication import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration import com.badlogic.gdx.graphics.GL20 +import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.terrarumsansbitmap.gdx.GameFontBase /** @@ -13,8 +14,19 @@ class FontTestGDX : Game() { lateinit var font: GameFontBase + lateinit var inputText: List + + lateinit var batch: SpriteBatch + override fun create() { - font = GameFontBase("./assets") + font = GameFontBase("./assets", flipY = false) // must test for two cases + + val inTextFile = Gdx.files.internal("./FontTestGDX/demotext.txt") + val reader = inTextFile.reader() + inputText = reader.readLines() + reader.close() + + batch = SpriteBatch() } override fun getScreen(): Screen? { @@ -26,12 +38,20 @@ class FontTestGDX : Game() { override fun render() { - Gdx.gl.glClearColor(.094f, .094f, .094f, 1f) + Gdx.gl.glClearColor(1f - 0xBA/255f, 1f - 0xDA/255f, 1f - 0x55/255f, 1f) Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) Gdx.gl.glEnable(GL20.GL_TEXTURE_2D) Gdx.gl.glEnable(GL20.GL_BLEND) Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA) + + batch.begin() + + inputText.reversed().forEachIndexed { index, s -> + font.draw(batch, s, 10f, 10f + index * font.lineHeight) + } + + batch.end() } override fun pause() { @@ -52,8 +72,8 @@ fun main(args: Array) { val appConfig = LwjglApplicationConfiguration() appConfig.vSyncEnabled = false appConfig.resizable = false//true; - appConfig.width = 740 // photographic ratio (1.5:1) - appConfig.height = 1110 // photographic ratio (1.5:1) + appConfig.width = 1024 // photographic ratio (1.5:1) + appConfig.height = 1024 // photographic ratio (1.5:1) appConfig.title = "Terrarum Sans Bitmap Test (GDX)" LwjglApplication(FontTestGDX(), appConfig) diff --git a/LICENSE.md b/LICENSE.md index f7bb48b..ed86c6e 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ Terrarum Sans Bitmap -Copyright (c) 2017 Minjae Song (Torvald) and the contributors +Copyright (c) 2017-2018 Minjae Song (Torvald) and the contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 2955468..1fb81ab 100644 --- a/README.md +++ b/README.md @@ -239,4 +239,4 @@ This is a Kotlin-like pseudocode for assembling the glyph: Thanks to kind people of [/r/Typography](https://www.reddit.com/r/typography/) for amazing feedbacks. -CJK Ideographs are powered by [WenQuanYi Font](http://wenq.org/wqy2/index.cgi?BitmapSong). The font is distributed under the GNU GPL version 2. Although the glyphs themselves are not copyrightable (the program codes—e.g. TTF—do), we would like to give a credit for the font and the people behind it. +CJK Ideographs are powered by [WenQuanYi Font](http://wenq.org/wqy2/index.cgi?BitmapSong). The font is distributed under the GNU GPL version 2. Although, in some countries including where I'm based on, the shapes of typefaces are not copyrightable (the program codes—e.g. TTF—do), we would like to give a credit for the font and the people behind it. diff --git a/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt b/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt index f306653..00b57fd 100644 --- a/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt +++ b/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt @@ -400,6 +400,10 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo private lateinit var originalColour: Color override fun draw(batch: Batch, str: CharSequence, x: Float, y: Float): GlyphLayout? { + + fun Int.flipY() = this * if (flipY) 1 else -1 + + // always draw at integer position; this is bitmap font after all val x = Math.round(x).toFloat() val y = Math.round(y).toFloat() @@ -508,7 +512,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo sheets[sheetID].get(sheetX, sheetY), x + textBWidth[index] + 1 + offset, y + (if (sheetID == SHEET_UNIHAN) // evil exceptions - offsetUnihan + offsetUnihan.flipY() else if (sheetID == SHEET_CUSTOM_SYM) offsetCustomSym else @@ -518,7 +522,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo sheets[sheetID].get(sheetX, sheetY), x + textBWidth[index] + offset, y + (if (sheetID == SHEET_UNIHAN) // evil exceptions - offsetUnihan + 1 + offsetUnihan.flipY() + 1 else if (sheetID == SHEET_CUSTOM_SYM) offsetCustomSym + 1 else @@ -528,11 +532,11 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo sheets[sheetID].get(sheetX, sheetY), x + textBWidth[index] + 1 + offset, y + (if (sheetID == SHEET_UNIHAN) // evil exceptions - offsetUnihan + 1 + offsetUnihan.flipY() + 1 else if (sheetID == SHEET_CUSTOM_SYM) offsetCustomSym + 1 else - 1) * if (flipY) 1 else -1 + 1).flipY() ) }