diff --git a/Slick2d/GameFontBase.kt b/Slick2d/GameFontBase.kt index ac888d3..d3a8acf 100644 --- a/Slick2d/GameFontBase.kt +++ b/Slick2d/GameFontBase.kt @@ -65,8 +65,6 @@ open class GameFontBase : Font { private fun isCyrilic(c: Char) = c.toInt() in 0x400..0x45F private fun isFullwidthUni(c: Char) = c.toInt() in 0xFF00..0xFF1F private fun isUniPunct(c: Char) = c.toInt() in 0x2000..0x206F - private fun isWenQuanYi1(c: Char) = c.toInt() in 0x33F3..0x69FC - private fun isWenQuanYi2(c: Char) = c.toInt() in 0x69FD..0x9FDC private fun isGreek(c: Char) = c.toInt() in 0x370..0x3CE @@ -86,8 +84,8 @@ open class GameFontBase : Font { private fun cjkPunctIndexX(c: Char) = (c.toInt() - 0x3000) % 16 private fun cjkPunctIndexY(c: Char) = (c.toInt() - 0x3000) / 16 - private fun uniHanIndexX(c: Char) = (c.toInt() - 0x3400) % 256 - private fun uniHanIndexY(c: Char) = (c.toInt() - 0x3400) / 256 + private fun unihanIndexX(c: Char) = (c.toInt() - 0x3400) % 256 + private fun unihanIndexY(c: Char) = (c.toInt() - 0x3400) / 256 private fun cyrilicIndexX(c: Char) = (c.toInt() - 0x400) % 16 private fun cyrilicIndexY(c: Char) = (c.toInt() - 0x400) / 16 @@ -98,19 +96,13 @@ open class GameFontBase : Font { private fun uniPunctIndexX(c: Char) = (c.toInt() - 0x2000) % 16 private fun uniPunctIndexY(c: Char) = (c.toInt() - 0x2000) / 16 - private fun wenQuanYiIndexX(c: Char) = - (c.toInt() - if (c.toInt() <= 0x4DB5) 0x33F3 else 0x33F3 + 0x4A) % 32 - private fun wenQuanYi1IndexY(c: Char) = (c.toInt() - (0x33F3 + 0x4A)) / 32 - private fun wenQuanYi2IndexY(c: Char) = (c.toInt() - 0x69FD) / 32 - private fun greekIndexX(c: Char) = (c.toInt() - 0x370) % 16 private fun greekIndexY(c: Char) = (c.toInt() - 0x370) / 16 private val unihanWidthSheets = arrayOf( SHEET_UNIHAN, SHEET_FW_UNI, - SHEET_WENQUANYI_1, - SHEET_WENQUANYI_2 + SHEET_UNIHAN ) private val zeroWidthSheets = arrayOf( SHEET_COLOURCODE @@ -216,40 +208,20 @@ open class GameFontBase : Font { } //hangulSheet.endUse() - // unihan fonts - /*uniHan.startUse(); - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); + // WenQuanYi + //uniHan.startUse() + + for (i in 0..s.length - 1) { + val ch = s[i] + + if (ch.isColourCode()) { + thisCol = colourKey[ch]!! + continue + } if (isUniHan(ch)) { - int glyphW = getWidth("" + ch); - uniHan.renderInUse( - Math.round(x - + getWidthSubstr(s, i + 1) - glyphW - ) - , Math.round((H - H_UNIHAN) / 2 + y) - , uniHanIndexX(ch) - , uniHanIndexY(ch) - ); - } - } - - uniHan.endUse();*/ - - // WenQuanYi 1 - //wenQuanYi_1.startUse() - - for (i in 0..s.length - 1) { - val ch = s[i] - - if (ch.isColourCode()) { - thisCol = colourKey[ch]!! - continue - } - - if (isWenQuanYi1(ch)) { val glyphW = getWidth("" + ch) - wenQuanYi_1.getSubImage(wenQuanYiIndexX(ch), wenQuanYi1IndexY(ch)).drawWithShadow( + uniHan.getSubImage(unihanIndexX(ch), unihanIndexY(ch)).drawWithShadow( Math.round(x + getWidthSubstr(s, i + 1) - glyphW).toFloat(), Math.round((H - H_UNIHAN) / 2 + y).toFloat(), scale.toFloat(), thisCol @@ -257,29 +229,7 @@ open class GameFontBase : Font { } } - //wenQuanYi_1.endUse() - // WenQuanYi 2 - //wenQuanYi_2.startUse() - - for (i in 0..s.length - 1) { - val ch = s[i] - - if (ch.isColourCode()) { - thisCol = colourKey[ch]!! - continue - } - - if (isWenQuanYi2(ch)) { - val glyphW = getWidth("" + ch) - wenQuanYi_2.getSubImage(wenQuanYiIndexX(ch), wenQuanYi2IndexY(ch)).drawWithShadow( - Math.round(x + getWidthSubstr(s, i + 1) - glyphW).toFloat(), - Math.round((H - H_UNIHAN) / 2 + y).toFloat(), - scale.toFloat(), thisCol - ) - } - } - - //wenQuanYi_2.endUse() + //uniHan.endUse() // regular fonts var prevInstance = -1 @@ -489,12 +439,10 @@ open class GameFontBase : Font { lateinit internal var extBSheet: SpriteSheet lateinit internal var kanaSheet: SpriteSheet lateinit internal var cjkPunct: SpriteSheet - // static SpriteSheet uniHan; + lateinit internal var uniHan: SpriteSheet lateinit internal var cyrilic: SpriteSheet lateinit internal var fullwidthForms: SpriteSheet lateinit internal var uniPunct: SpriteSheet - lateinit internal var wenQuanYi_1: SpriteSheet - lateinit internal var wenQuanYi_2: SpriteSheet lateinit internal var greekSheet: SpriteSheet internal val JUNG_COUNT = 21 @@ -519,9 +467,7 @@ open class GameFontBase : Font { internal val SHEET_CYRILIC_VARW = 8 internal val SHEET_FW_UNI = 9 internal val SHEET_UNI_PUNCT = 10 - internal val SHEET_WENQUANYI_1 = 11 - internal val SHEET_WENQUANYI_2 = 12 - internal val SHEET_GREEK_VARW = 13 + internal val SHEET_GREEK_VARW = 11 internal val SHEET_UNKNOWN = 254 diff --git a/Slick2d/GameFontImpl.kt b/Slick2d/GameFontImpl.kt index 5ec28ac..da08a7b 100644 --- a/Slick2d/GameFontImpl.kt +++ b/Slick2d/GameFontImpl.kt @@ -22,13 +22,6 @@ class GameFontImpl : GameFontBase() { "./assets/graphics/fonts/kana.tga", GameFontBase.W_KANA, GameFontBase.H) GameFontBase.cjkPunct = SpriteSheet( "./assets/graphics/fonts/cjkpunct.tga", GameFontBase.W_ASIAN_PUNCT, GameFontBase.H) - /*uniHan = new SpriteSheet( - "./assets/graphics/fonts/unifont_unihan" - + ((!terrarum.gameLocale.contains("zh")) - ? "_ja" : "") - +".tga" - , W_UNIHAN, H_UNIHAN - );*/ GameFontBase.cyrilic = SpriteSheet( when (GameFontDemo.gameLocale.substring(0..1)) { "bg" -> "./assets/graphics/fonts/cyrilic_bulgarian_variable.tga" @@ -39,10 +32,8 @@ class GameFontImpl : GameFontBase() { "./assets/graphics/fonts/fullwidth_forms.tga", GameFontBase.W_UNIHAN, GameFontBase.H_UNIHAN) GameFontBase.uniPunct = SpriteSheet( "./assets/graphics/fonts/unipunct.tga", GameFontBase.W_LATIN_WIDE, GameFontBase.H) - GameFontBase.wenQuanYi_1 = SpriteSheet( - "./assets/graphics/fonts/wenquanyi_11pt_part1.tga", 16, 18, 2) - GameFontBase.wenQuanYi_2 = SpriteSheet( - "./assets/graphics/fonts/wenquanyi_11pt_part2.tga", 16, 18, 2) + GameFontBase.uniHan = SpriteSheet( + "./assets/graphics/fonts/wenquanyi.tga", 16, 16) GameFontBase.greekSheet = SpriteSheet( "./assets/graphics/fonts/greek_variable.tga", 15, 19, 1) @@ -54,12 +45,10 @@ class GameFontImpl : GameFontBase() { GameFontBase.extBSheet, GameFontBase.kanaSheet, GameFontBase.cjkPunct, - null, // Full unihan, filler because we're using WenQuanYi + GameFontBase.uniHan, GameFontBase.cyrilic, GameFontBase.fullwidthForms, GameFontBase.uniPunct, - GameFontBase.wenQuanYi_1, - GameFontBase.wenQuanYi_2, GameFontBase.greekSheet ) GameFontBase.sheetKey = shk diff --git a/assets/graphics/fonts/wenquanyi.tga b/assets/graphics/fonts/wenquanyi.tga new file mode 100644 index 0000000..644fc3c Binary files /dev/null and b/assets/graphics/fonts/wenquanyi.tga differ diff --git a/assets/graphics/fonts/wenquanyi_11pt_part1.tga b/assets/graphics/fonts/wenquanyi_11pt_part1.tga deleted file mode 100644 index 86c9d21..0000000 Binary files a/assets/graphics/fonts/wenquanyi_11pt_part1.tga and /dev/null differ diff --git a/assets/graphics/fonts/wenquanyi_11pt_part2.tga b/assets/graphics/fonts/wenquanyi_11pt_part2.tga deleted file mode 100644 index 6a0658c..0000000 Binary files a/assets/graphics/fonts/wenquanyi_11pt_part2.tga and /dev/null differ diff --git a/demo/.idea/workspace.xml b/demo/.idea/workspace.xml index 350da7f..006a087 100644 --- a/demo/.idea/workspace.xml +++ b/demo/.idea/workspace.xml @@ -23,54 +23,62 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -133,9 +141,6 @@ - - - @@ -182,12 +187,15 @@ + + + - + @@ -415,17 +423,17 @@ - + - + - + @@ -451,6 +459,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -540,16 +624,6 @@ - - - - - - - - - - @@ -561,38 +635,47 @@ - - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/src/net/torvald/terrarum/imagefont/GameFontBase.kt b/demo/src/net/torvald/terrarum/imagefont/GameFontBase.kt index ac888d3..d3a8acf 100644 --- a/demo/src/net/torvald/terrarum/imagefont/GameFontBase.kt +++ b/demo/src/net/torvald/terrarum/imagefont/GameFontBase.kt @@ -65,8 +65,6 @@ open class GameFontBase : Font { private fun isCyrilic(c: Char) = c.toInt() in 0x400..0x45F private fun isFullwidthUni(c: Char) = c.toInt() in 0xFF00..0xFF1F private fun isUniPunct(c: Char) = c.toInt() in 0x2000..0x206F - private fun isWenQuanYi1(c: Char) = c.toInt() in 0x33F3..0x69FC - private fun isWenQuanYi2(c: Char) = c.toInt() in 0x69FD..0x9FDC private fun isGreek(c: Char) = c.toInt() in 0x370..0x3CE @@ -86,8 +84,8 @@ open class GameFontBase : Font { private fun cjkPunctIndexX(c: Char) = (c.toInt() - 0x3000) % 16 private fun cjkPunctIndexY(c: Char) = (c.toInt() - 0x3000) / 16 - private fun uniHanIndexX(c: Char) = (c.toInt() - 0x3400) % 256 - private fun uniHanIndexY(c: Char) = (c.toInt() - 0x3400) / 256 + private fun unihanIndexX(c: Char) = (c.toInt() - 0x3400) % 256 + private fun unihanIndexY(c: Char) = (c.toInt() - 0x3400) / 256 private fun cyrilicIndexX(c: Char) = (c.toInt() - 0x400) % 16 private fun cyrilicIndexY(c: Char) = (c.toInt() - 0x400) / 16 @@ -98,19 +96,13 @@ open class GameFontBase : Font { private fun uniPunctIndexX(c: Char) = (c.toInt() - 0x2000) % 16 private fun uniPunctIndexY(c: Char) = (c.toInt() - 0x2000) / 16 - private fun wenQuanYiIndexX(c: Char) = - (c.toInt() - if (c.toInt() <= 0x4DB5) 0x33F3 else 0x33F3 + 0x4A) % 32 - private fun wenQuanYi1IndexY(c: Char) = (c.toInt() - (0x33F3 + 0x4A)) / 32 - private fun wenQuanYi2IndexY(c: Char) = (c.toInt() - 0x69FD) / 32 - private fun greekIndexX(c: Char) = (c.toInt() - 0x370) % 16 private fun greekIndexY(c: Char) = (c.toInt() - 0x370) / 16 private val unihanWidthSheets = arrayOf( SHEET_UNIHAN, SHEET_FW_UNI, - SHEET_WENQUANYI_1, - SHEET_WENQUANYI_2 + SHEET_UNIHAN ) private val zeroWidthSheets = arrayOf( SHEET_COLOURCODE @@ -216,40 +208,20 @@ open class GameFontBase : Font { } //hangulSheet.endUse() - // unihan fonts - /*uniHan.startUse(); - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); + // WenQuanYi + //uniHan.startUse() + + for (i in 0..s.length - 1) { + val ch = s[i] + + if (ch.isColourCode()) { + thisCol = colourKey[ch]!! + continue + } if (isUniHan(ch)) { - int glyphW = getWidth("" + ch); - uniHan.renderInUse( - Math.round(x - + getWidthSubstr(s, i + 1) - glyphW - ) - , Math.round((H - H_UNIHAN) / 2 + y) - , uniHanIndexX(ch) - , uniHanIndexY(ch) - ); - } - } - - uniHan.endUse();*/ - - // WenQuanYi 1 - //wenQuanYi_1.startUse() - - for (i in 0..s.length - 1) { - val ch = s[i] - - if (ch.isColourCode()) { - thisCol = colourKey[ch]!! - continue - } - - if (isWenQuanYi1(ch)) { val glyphW = getWidth("" + ch) - wenQuanYi_1.getSubImage(wenQuanYiIndexX(ch), wenQuanYi1IndexY(ch)).drawWithShadow( + uniHan.getSubImage(unihanIndexX(ch), unihanIndexY(ch)).drawWithShadow( Math.round(x + getWidthSubstr(s, i + 1) - glyphW).toFloat(), Math.round((H - H_UNIHAN) / 2 + y).toFloat(), scale.toFloat(), thisCol @@ -257,29 +229,7 @@ open class GameFontBase : Font { } } - //wenQuanYi_1.endUse() - // WenQuanYi 2 - //wenQuanYi_2.startUse() - - for (i in 0..s.length - 1) { - val ch = s[i] - - if (ch.isColourCode()) { - thisCol = colourKey[ch]!! - continue - } - - if (isWenQuanYi2(ch)) { - val glyphW = getWidth("" + ch) - wenQuanYi_2.getSubImage(wenQuanYiIndexX(ch), wenQuanYi2IndexY(ch)).drawWithShadow( - Math.round(x + getWidthSubstr(s, i + 1) - glyphW).toFloat(), - Math.round((H - H_UNIHAN) / 2 + y).toFloat(), - scale.toFloat(), thisCol - ) - } - } - - //wenQuanYi_2.endUse() + //uniHan.endUse() // regular fonts var prevInstance = -1 @@ -489,12 +439,10 @@ open class GameFontBase : Font { lateinit internal var extBSheet: SpriteSheet lateinit internal var kanaSheet: SpriteSheet lateinit internal var cjkPunct: SpriteSheet - // static SpriteSheet uniHan; + lateinit internal var uniHan: SpriteSheet lateinit internal var cyrilic: SpriteSheet lateinit internal var fullwidthForms: SpriteSheet lateinit internal var uniPunct: SpriteSheet - lateinit internal var wenQuanYi_1: SpriteSheet - lateinit internal var wenQuanYi_2: SpriteSheet lateinit internal var greekSheet: SpriteSheet internal val JUNG_COUNT = 21 @@ -519,9 +467,7 @@ open class GameFontBase : Font { internal val SHEET_CYRILIC_VARW = 8 internal val SHEET_FW_UNI = 9 internal val SHEET_UNI_PUNCT = 10 - internal val SHEET_WENQUANYI_1 = 11 - internal val SHEET_WENQUANYI_2 = 12 - internal val SHEET_GREEK_VARW = 13 + internal val SHEET_GREEK_VARW = 11 internal val SHEET_UNKNOWN = 254 diff --git a/demo/src/net/torvald/terrarum/imagefont/GameFontImpl.kt b/demo/src/net/torvald/terrarum/imagefont/GameFontImpl.kt index 5ec28ac..da08a7b 100644 --- a/demo/src/net/torvald/terrarum/imagefont/GameFontImpl.kt +++ b/demo/src/net/torvald/terrarum/imagefont/GameFontImpl.kt @@ -22,13 +22,6 @@ class GameFontImpl : GameFontBase() { "./assets/graphics/fonts/kana.tga", GameFontBase.W_KANA, GameFontBase.H) GameFontBase.cjkPunct = SpriteSheet( "./assets/graphics/fonts/cjkpunct.tga", GameFontBase.W_ASIAN_PUNCT, GameFontBase.H) - /*uniHan = new SpriteSheet( - "./assets/graphics/fonts/unifont_unihan" - + ((!terrarum.gameLocale.contains("zh")) - ? "_ja" : "") - +".tga" - , W_UNIHAN, H_UNIHAN - );*/ GameFontBase.cyrilic = SpriteSheet( when (GameFontDemo.gameLocale.substring(0..1)) { "bg" -> "./assets/graphics/fonts/cyrilic_bulgarian_variable.tga" @@ -39,10 +32,8 @@ class GameFontImpl : GameFontBase() { "./assets/graphics/fonts/fullwidth_forms.tga", GameFontBase.W_UNIHAN, GameFontBase.H_UNIHAN) GameFontBase.uniPunct = SpriteSheet( "./assets/graphics/fonts/unipunct.tga", GameFontBase.W_LATIN_WIDE, GameFontBase.H) - GameFontBase.wenQuanYi_1 = SpriteSheet( - "./assets/graphics/fonts/wenquanyi_11pt_part1.tga", 16, 18, 2) - GameFontBase.wenQuanYi_2 = SpriteSheet( - "./assets/graphics/fonts/wenquanyi_11pt_part2.tga", 16, 18, 2) + GameFontBase.uniHan = SpriteSheet( + "./assets/graphics/fonts/wenquanyi.tga", 16, 16) GameFontBase.greekSheet = SpriteSheet( "./assets/graphics/fonts/greek_variable.tga", 15, 19, 1) @@ -54,12 +45,10 @@ class GameFontImpl : GameFontBase() { GameFontBase.extBSheet, GameFontBase.kanaSheet, GameFontBase.cjkPunct, - null, // Full unihan, filler because we're using WenQuanYi + GameFontBase.uniHan, GameFontBase.cyrilic, GameFontBase.fullwidthForms, GameFontBase.uniPunct, - GameFontBase.wenQuanYi_1, - GameFontBase.wenQuanYi_2, GameFontBase.greekSheet ) GameFontBase.sheetKey = shk