GDX: fixed wrong shadow col, support for flipped Y coord

This commit is contained in:
minjaesong
2017-06-18 01:03:26 +09:00
parent 65108a0630
commit ab211d6433
2 changed files with 21 additions and 13 deletions

View File

@@ -32,9 +32,12 @@ import java.util.zip.GZIPInputStream
* Glyphs are drawn lazily (calculated on-the-fly, rather than load up all), which is inevitable as we just can't load * Glyphs are drawn lazily (calculated on-the-fly, rather than load up all), which is inevitable as we just can't load
* up 40k+ characters on the machine, which will certainly make loading time painfully long. * up 40k+ characters on the machine, which will certainly make loading time painfully long.
* *
* @param noShadow Self-explanatory
* @param flipY If you have Y-down coord system implemented on your GDX (e.g. legacy codebase), set this to ```true``` so that the shadow won't be upside-down. For glyph getting upside-down, set ```TextureRegionPack.globalFlipY = true```.
*
* Created by minjaesong on 2017-06-15. * Created by minjaesong on 2017-06-15.
*/ */
class GameFontBase(fontDir: String, val noShadow: Boolean = false) : BitmapFont() { class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Boolean = false) : BitmapFont() {
private fun getHanChosung(hanIndex: Int) = hanIndex / (JUNG_COUNT * JONG_COUNT) private fun getHanChosung(hanIndex: Int) = hanIndex / (JUNG_COUNT * JONG_COUNT)
private fun getHanJungseong(hanIndex: Int) = hanIndex / JONG_COUNT % JUNG_COUNT private fun getHanJungseong(hanIndex: Int) = hanIndex / JONG_COUNT % JUNG_COUNT
@@ -332,8 +335,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false) : BitmapFont(
//textBWidth.forEach { print("$it ") }; println() //textBWidth.forEach { print("$it ") }; println()
val mainCol = this.color.cpy() val mainCol = batch.color.cpy()
val shadowCol = this.color.cpy().mul(0.5f) val shadowCol = batch.color.cpy().mul(0.5f,0.5f,0.5f,1f)
textBuffer.forEachIndexed { index, c -> textBuffer.forEachIndexed { index, c ->
@@ -359,16 +362,16 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false) : BitmapFont(
batch.color = shadowCol batch.color = shadowCol
batch.draw(hangulSheet.get(indexCho, choRow ), x + textBWidth[index] + 1, y) batch.draw(hangulSheet.get(indexCho, choRow ), x + textBWidth[index] + 1, y)
batch.draw(hangulSheet.get(indexCho, choRow ), x + textBWidth[index] , y - 1) batch.draw(hangulSheet.get(indexCho, choRow ), x + textBWidth[index] , y + if (flipY) 1 else -1)
batch.draw(hangulSheet.get(indexCho, choRow ), x + textBWidth[index] + 1, y - 1) batch.draw(hangulSheet.get(indexCho, choRow ), x + textBWidth[index] + 1, y + if (flipY) 1 else -1)
batch.draw(hangulSheet.get(indexJung, jungRow), x + textBWidth[index] + 1, y) batch.draw(hangulSheet.get(indexJung, jungRow), x + textBWidth[index] + 1, y)
batch.draw(hangulSheet.get(indexJung, jungRow), x + textBWidth[index] , y - 1) batch.draw(hangulSheet.get(indexJung, jungRow), x + textBWidth[index] , y + if (flipY) 1 else -1)
batch.draw(hangulSheet.get(indexJung, jungRow), x + textBWidth[index] + 1, y - 1) batch.draw(hangulSheet.get(indexJung, jungRow), x + textBWidth[index] + 1, y + if (flipY) 1 else -1)
batch.draw(hangulSheet.get(indexJong, jongRow), x + textBWidth[index] + 1, y) batch.draw(hangulSheet.get(indexJong, jongRow), x + textBWidth[index] + 1, y)
batch.draw(hangulSheet.get(indexJong, jongRow), x + textBWidth[index] , y - 1) batch.draw(hangulSheet.get(indexJong, jongRow), x + textBWidth[index] , y + if (flipY) 1 else -1)
batch.draw(hangulSheet.get(indexJong, jongRow), x + textBWidth[index] + 1, y - 1) batch.draw(hangulSheet.get(indexJong, jongRow), x + textBWidth[index] + 1, y + if (flipY) 1 else -1)
} }
@@ -400,7 +403,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false) : BitmapFont(
batch.draw( batch.draw(
sheets[sheetID].get(sheetXY[0], sheetXY[1]), sheets[sheetID].get(sheetXY[0], sheetXY[1]),
x + textBWidth[index] + offset, x + textBWidth[index] + offset,
y - 1 + y + if (flipY) 1 else -1 +
if (sheetID == SHEET_UNIHAN) // evil exceptions if (sheetID == SHEET_UNIHAN) // evil exceptions
offsetUnihan offsetUnihan
else if (sheetID == SHEET_CUSTOM_SYM) else if (sheetID == SHEET_CUSTOM_SYM)
@@ -410,7 +413,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false) : BitmapFont(
batch.draw( batch.draw(
sheets[sheetID].get(sheetXY[0], sheetXY[1]), sheets[sheetID].get(sheetXY[0], sheetXY[1]),
x + textBWidth[index] + 1 + offset, x + textBWidth[index] + 1 + offset,
y - 1 + y + if (flipY) 1 else -1 +
if (sheetID == SHEET_UNIHAN) // evil exceptions if (sheetID == SHEET_UNIHAN) // evil exceptions
offsetUnihan offsetUnihan
else if (sheetID == SHEET_CUSTOM_SYM) else if (sheetID == SHEET_CUSTOM_SYM)
@@ -434,8 +437,6 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false) : BitmapFont(
} }
} }
this.color = mainCol
return null return null
} }

View File

@@ -16,6 +16,11 @@ class TextureRegionPack(
val vFrame: Int = 0 val vFrame: Int = 0
) { ) {
companion object {
/** Intented for Y-down coord system, typically fon Non-GDX codebase */
var globalFlipY = false
}
val regions: Array<TextureRegion> val regions: Array<TextureRegion>
private val horizontalCount = (texture.width - 2 * hFrame + hGap) / (tileW + hGap) private val horizontalCount = (texture.width - 2 * hFrame + hGap) / (tileW + hGap)
@@ -32,6 +37,8 @@ class TextureRegionPack(
region.setRegion(texture) region.setRegion(texture)
region.setRegion(rx, ry, tileW, tileH) region.setRegion(rx, ry, tileW, tileH)
region.flip(false, globalFlipY)
/*return*/region /*return*/region
}) })
} }