From c5004c3ff63fc082d6ecb3718640d3963ef3202f Mon Sep 17 00:00:00 2001 From: minjaesong Date: Mon, 19 Jun 2017 21:44:18 +0900 Subject: [PATCH] Armenian, Georgian (+other Kartvelian langs) --- assets/hayeren_variable.tga | Bin 0 -> 122924 bytes assets/kartuli_variable.tga | Bin 0 -> 61484 bytes terrarumsansbitmap/gdx/GameFontBase.kt | 141 +++++++++++++------- terrarumsansbitmap/gdx/TextureRegionPack.kt | 10 +- 4 files changed, 98 insertions(+), 53 deletions(-) create mode 100644 assets/hayeren_variable.tga create mode 100644 assets/kartuli_variable.tga diff --git a/assets/hayeren_variable.tga b/assets/hayeren_variable.tga new file mode 100644 index 0000000000000000000000000000000000000000..d1a38cb918e73c87e05b5f69f4da5287e035efdf GIT binary patch literal 122924 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 TzWnnafByAvU;h5{U*7%)>2F~X literal 0 HcmV?d00001 diff --git a/terrarumsansbitmap/gdx/GameFontBase.kt b/terrarumsansbitmap/gdx/GameFontBase.kt index 0b31191..2283aa8 100644 --- a/terrarumsansbitmap/gdx/GameFontBase.kt +++ b/terrarumsansbitmap/gdx/GameFontBase.kt @@ -87,9 +87,11 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo private fun isGreek(c: Char) = c.toInt() in codeRange[SHEET_GREEK_VARW] private fun isThai(c: Char) = c.toInt() in codeRange[SHEET_THAI_VARW] private fun isDiacritics(c: Char) = c.toInt() in 0xE34..0xE3A - || c.toInt() in 0xE47..0xE4E - || c.toInt() == 0xE31 + || c.toInt() in 0xE47..0xE4E + || c.toInt() == 0xE31 private fun isCustomSym(c: Char) = c.toInt() in codeRange[SHEET_CUSTOM_SYM] + private fun isArmenian(c: Char) = c.toInt() in codeRange[SHEET_HAYEREN_VARW] + private fun isKartvelian(c: Char) = c.toInt() in codeRange[SHEET_KARTULI_VARW] @@ -129,6 +131,12 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo private fun symbolIndexX(c: Char) = (c.toInt() - 0xE000) % 16 private fun symbolIndexY(c: Char) = (c.toInt() - 0xE000) / 16 + private fun armenianIndexX(c: Char) = (c.toInt() - 0x530) % 16 + private fun armenianIndexY(c: Char) = (c.toInt() - 0x530) / 16 + + private fun kartvelianIndexX(c: Char) = (c.toInt() - 0x10D0) % 16 + private fun kartvelianIndexY(c: Char) = (c.toInt() - 0x10D0) / 16 + private val unihanWidthSheets = arrayOf( SHEET_UNIHAN, SHEET_FW_UNI @@ -140,7 +148,9 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo SHEET_CYRILIC_VARW, SHEET_UNI_PUNCT, SHEET_GREEK_VARW, - SHEET_THAI_VARW + SHEET_THAI_VARW, + SHEET_HAYEREN_VARW, + SHEET_KARTULI_VARW ) private val fontParentDir = if (fontDir.endsWith('/') || fontDir.endsWith('\\')) fontDir else "$fontDir/" @@ -157,6 +167,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo "unipunct_variable.tga", "greek_variable.tga", "thai_variable.tga", + "hayeren_variable.tga", + "kartuli_variable.tga", "puae000-e0ff.tga" ) private val cyrilic_bg = "cyrilic_bulgarian_variable.tga" @@ -174,6 +186,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo 0x2000..0x206F, 0x370..0x3CE, 0xE00..0xE7F, + 0x530..0x58F, + 0x10D0..0x10FF, 0xE000..0xE0FF ) private val glyphWidths: HashMap = HashMap() // if the value is negative, it's diacritics @@ -383,59 +397,64 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo batch.draw(hangulSheet.get(indexJong, jongRow), x + textBWidth[index], y) } else { - val offset = if (!isDiacritics(c)) 0 else { - if (index > 0) // LIMITATION: does not support double (or more) diacritics properly - (textBGSize[index] - textBGSize[index - 1]) / 2 - else - textBGSize[index] - } + try { + val offset = if (!isDiacritics(c)) 0 else { + if (index > 0) // LIMITATION: does not support double (or more) diacritics properly + (textBGSize[index] - textBGSize[index - 1]) / 2 + else + textBGSize[index] + } - if (!noShadow) { - batch.color = shadowCol - batch.draw( - sheets[sheetID].get(sheetXY[0], sheetXY[1]), - x + textBWidth[index] + 1 + offset, - y + (if (sheetID == SHEET_UNIHAN) // evil exceptions - offsetUnihan - else if (sheetID == SHEET_CUSTOM_SYM) - offsetCustomSym - else - 0) * if (flipY) 1 else -1 - ) + if (!noShadow) { + batch.color = shadowCol + batch.draw( + sheets[sheetID].get(sheetXY[0], sheetXY[1]), + x + textBWidth[index] + 1 + offset, + y + (if (sheetID == SHEET_UNIHAN) // evil exceptions + offsetUnihan + else if (sheetID == SHEET_CUSTOM_SYM) + offsetCustomSym + else + 0) * if (flipY) 1 else -1 + ) + batch.draw( + sheets[sheetID].get(sheetXY[0], sheetXY[1]), + x + textBWidth[index] + offset, + y + (if (sheetID == SHEET_UNIHAN) // evil exceptions + offsetUnihan + 1 + else if (sheetID == SHEET_CUSTOM_SYM) + offsetCustomSym + 1 + else + 1) * if (flipY) 1 else -1 + ) + batch.draw( + sheets[sheetID].get(sheetXY[0], sheetXY[1]), + x + textBWidth[index] + 1 + offset, + y + (if (sheetID == SHEET_UNIHAN) // evil exceptions + offsetUnihan + 1 + else if (sheetID == SHEET_CUSTOM_SYM) + offsetCustomSym + 1 + else + 1) * if (flipY) 1 else -1 + ) + } + + + batch.color = mainCol batch.draw( sheets[sheetID].get(sheetXY[0], sheetXY[1]), x + textBWidth[index] + offset, - y + (if (sheetID == SHEET_UNIHAN) // evil exceptions - offsetUnihan + 1 - else if (sheetID == SHEET_CUSTOM_SYM) - offsetCustomSym + 1 - else - 1) * if (flipY) 1 else -1 - ) - batch.draw( - sheets[sheetID].get(sheetXY[0], sheetXY[1]), - x + textBWidth[index] + 1 + offset, - y + (if (sheetID == SHEET_UNIHAN) // evil exceptions - offsetUnihan + 1 - else if (sheetID == SHEET_CUSTOM_SYM) - offsetCustomSym + 1 - else - 1) * if (flipY) 1 else -1 + y + + if (sheetID == SHEET_UNIHAN) // evil exceptions + offsetUnihan + else if (sheetID == SHEET_CUSTOM_SYM) + offsetCustomSym + else 0 ) } - - - batch.color = mainCol - batch.draw( - sheets[sheetID].get(sheetXY[0], sheetXY[1]), - x + textBWidth[index] + offset, - y + - if (sheetID == SHEET_UNIHAN) // evil exceptions - offsetUnihan - else if (sheetID == SHEET_CUSTOM_SYM) - offsetCustomSym - else 0 - ) + catch (noSuchGlyph: ArrayIndexOutOfBoundsException) { + batch.color = mainCol + } } } @@ -510,6 +529,10 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo return SHEET_THAI_VARW else if (isCustomSym(c)) return SHEET_CUSTOM_SYM + else if (isArmenian(c)) + return SHEET_HAYEREN_VARW + else if (isKartvelian(c)) + return SHEET_KARTULI_VARW else return SHEET_UNKNOWN // fixed width @@ -563,6 +586,14 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo sheetX = symbolIndexX(ch) sheetY = symbolIndexY(ch) } + SHEET_HAYEREN_VARW -> { + sheetX = armenianIndexX(ch) + sheetY = armenianIndexY(ch) + } + SHEET_KARTULI_VARW -> { + sheetX = kartvelianIndexX(ch) + sheetY = kartvelianIndexY(ch) + } else -> { sheetX = ch.toInt() % 16 sheetY = ch.toInt() / 16 @@ -602,6 +633,12 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo } } + private val glyphLayout = GlyphLayout() + + fun getWidth(text: String): Int { + glyphLayout.setText(this, text) + return glyphLayout.width.toInt() + } companion object { @@ -634,7 +671,9 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo internal val SHEET_UNI_PUNCT = 9 internal val SHEET_GREEK_VARW = 10 internal val SHEET_THAI_VARW = 11 - internal val SHEET_CUSTOM_SYM = 12 + internal val SHEET_HAYEREN_VARW = 12 + internal val SHEET_KARTULI_VARW = 13 + internal val SHEET_CUSTOM_SYM = 14 internal val SHEET_UNKNOWN = 254 diff --git a/terrarumsansbitmap/gdx/TextureRegionPack.kt b/terrarumsansbitmap/gdx/TextureRegionPack.kt index 79f0980..9e9aed6 100644 --- a/terrarumsansbitmap/gdx/TextureRegionPack.kt +++ b/terrarumsansbitmap/gdx/TextureRegionPack.kt @@ -1,5 +1,6 @@ package net.torvald.terrarumsansbitmap.gdx +import com.badlogic.gdx.files.FileHandle import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.TextureRegion @@ -16,6 +17,11 @@ class TextureRegionPack( val vFrame: Int = 0 ) { + constructor(ref: String, tileW: Int, tileH: Int, hGap: Int = 0, vGap: Int = 0, hFrame: Int = 0, vFrame: Int = 0) : + this(Texture(ref), tileW, tileH, hGap, vGap, hFrame, vFrame) + constructor(fileHandle: FileHandle, tileW: Int, tileH: Int, hGap: Int = 0, vGap: Int = 0, hFrame: Int = 0, vFrame: Int = 0) : + this(Texture(fileHandle), tileW, tileH, hGap, vGap, hFrame, vFrame) + companion object { /** Intented for Y-down coord system, typically fon Non-GDX codebase */ var globalFlipY = false @@ -23,8 +29,8 @@ class TextureRegionPack( val regions: Array - private val horizontalCount = (texture.width - 2 * hFrame + hGap) / (tileW + hGap) - private val verticalCount = (texture.height - 2 * vFrame + vGap) / (tileH + vGap) + val horizontalCount = (texture.width - 2 * hFrame + hGap) / (tileW + hGap) + val verticalCount = (texture.height - 2 * vFrame + vGap) / (tileH + vGap) init { //println("texture: $texture, dim: ${texture.width} x ${texture.height}, grid: $horizontalCount x $verticalCount, cellDim: $tileW x $tileH")