From 4a36d3e7f191b32a8b0f73686abb756f4cfc5f9d Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 9 Aug 2018 21:11:11 +0900 Subject: [PATCH] bitmap for Devanagari (only) --- FontTestGDX/src/FontTestGDX.kt | 1 - assets/devanagari_bengali_variable.tga | Bin 0 -> 327724 bytes .../terrarumsansbitmap/gdx/GameFontBase.kt | 21 +++++++++++++++--- 3 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 assets/devanagari_bengali_variable.tga diff --git a/FontTestGDX/src/FontTestGDX.kt b/FontTestGDX/src/FontTestGDX.kt index e50f95f..3cd9eda 100644 --- a/FontTestGDX/src/FontTestGDX.kt +++ b/FontTestGDX/src/FontTestGDX.kt @@ -206,7 +206,6 @@ class FontTestGDX : Game() { batch.draw(tex, 0f, (TEXH.toFloat()/appConfig.height)*TEXH - scrollOffsetY, TEXW.toFloat(), -(TEXH.toFloat() / appConfig.height) * TEXH.toFloat()) - font.draw(batch, "TESTTESTTEST", 0f, 0f) batch.end() } diff --git a/assets/devanagari_bengali_variable.tga b/assets/devanagari_bengali_variable.tga new file mode 100644 index 0000000000000000000000000000000000000000..56ea66dd5d5c6d1ac55eae28f48e116168d99931 GIT binary patch literal 327724 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
6sVoNjJqu1D@s&0pnr&(f`Plwa|xJkF*2 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 literal 0 HcmV?d00001 diff --git a/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt b/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt index da0f309..277a630 100644 --- a/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt +++ b/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt @@ -137,6 +137,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo private fun isCharsetOverride(c: Int) = c in 0xFFFF8..0xFFFFF private fun isCherokee(c: Int) = c in codeRange[SHEET_TSALAGI_VARW] private fun isInsular(c: Int) = c == 0x1D79 || c in 0xA779..0xA787 + private fun isNagariBengali(c: Int) = c in codeRange[SHEET_NAGARI_BENGALI_VARW] private fun extAindexX(c: Int) = (c - 0x100) % 16 @@ -198,6 +199,10 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo private fun insularIndexY(c: Int) = if (c == 0x1D79) 0 else (c - 0xA770) / 16 + private fun nagariIndexX(c: Int) = (c - 0x900) % 16 + private fun nagariIndexY(c: Int) = (c - 0x900) / 16 + + private fun getColour(codePoint: Int): Color { // input: 0x10ARGB, out: RGBA8888 if (colourBuffer.containsKey(codePoint)) return colourBuffer[codePoint]!! @@ -235,7 +240,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo SHEET_BULGARIAN_VARW, SHEET_SERBIAN_VARW, SHEET_TSALAGI_VARW, - SHEET_INSUAR_VARW + SHEET_INSUAR_VARW, + SHEET_NAGARI_BENGALI_VARW ) private val fontParentDir = if (fontDir.endsWith('/') || fontDir.endsWith('\\')) fontDir else "$fontDir/" @@ -261,7 +267,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo "cyrilic_bulgarian_variable.tga", "cyrilic_serbian_variable.tga", "tsalagi_variable.tga", - "insular_variable.tga" + "insular_variable.tga", + "devanagari_bengali_variable.tga" ) private val codeRange = arrayOf( // MUST BE MATCHING WITH SHEET INDICES!! 0..0xFF, @@ -285,7 +292,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo 0xF00000..0xF0005F, // assign them to PUA 0xF00060..0xF000BF, // assign them to PUA 0x13A0..0x13F5, - 0xA770..0xA787 + 0xA770..0xA787, + 0x900..0x9FF ) private val glyphProps: HashMap = HashMap() private val sheets: Array @@ -694,6 +702,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo return SHEET_TSALAGI_VARW else if (isInsular(c)) return SHEET_INSUAR_VARW + else if (isNagariBengali(c)) + return SHEET_NAGARI_BENGALI_VARW else return SHEET_UNKNOWN // fixed width @@ -779,6 +789,10 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo sheetX = insularIndexX(ch) sheetY = insularIndexY(ch) } + SHEET_NAGARI_BENGALI_VARW -> { + sheetX = nagariIndexX(ch) + sheetY = nagariIndexY(ch) + } else -> { sheetX = ch % 16 sheetY = ch / 16 @@ -985,6 +999,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo internal val SHEET_SERBIAN_VARW = 19 internal val SHEET_TSALAGI_VARW = 20 internal val SHEET_INSUAR_VARW = 21 + internal val SHEET_NAGARI_BENGALI_VARW=22 internal val SHEET_UNKNOWN = 254