mirror of
https://github.com/curioustorvald/Terrarum-sans-bitmap.git
synced 2026-06-06 05:58:30 +09:00
fix: partial fix for issue #12
This commit is contained in:
@@ -357,6 +357,11 @@ class GameFontBase(
|
|||||||
}
|
}
|
||||||
|
|
||||||
sheets = sheetsPack.toTypedArray()
|
sheets = sheetsPack.toTypedArray()
|
||||||
|
|
||||||
|
// make sure null char is actually null (draws nothing and has zero width)
|
||||||
|
sheets[SHEET_ASCII_VARW].regions[0].setColor(0)
|
||||||
|
sheets[SHEET_ASCII_VARW].regions[0].fill()
|
||||||
|
glyphProps[0] = GlyphProps(0, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getLineHeight(): Float = H.toFloat()
|
override fun getLineHeight(): Float = H.toFloat()
|
||||||
@@ -396,6 +401,13 @@ class GameFontBase(
|
|||||||
if (debug)
|
if (debug)
|
||||||
println("[TerrarumSansBitmap] max age: $textCacheCap")
|
println("[TerrarumSansBitmap] max age: $textCacheCap")
|
||||||
|
|
||||||
|
// Q&D fix for issue #12
|
||||||
|
// When the line ends with a diacritics, the whole letter won't render
|
||||||
|
// If the line starts with a letter-with-diacritic, it will error out
|
||||||
|
// Some diacritics (e.g. COMBINING TILDE) do not obey lowercase letters
|
||||||
|
val charSeqNotBlank = charSeq.isNotBlank() // determine emptiness BEFORE you hack a null chars in
|
||||||
|
val charSeq = "\u0000" + charSeq + 0.toChar()
|
||||||
|
|
||||||
fun Int.flipY() = this * if (flipY) 1 else -1
|
fun Int.flipY() = this * if (flipY) 1 else -1
|
||||||
|
|
||||||
// always draw at integer position; this is bitmap font after all
|
// always draw at integer position; this is bitmap font after all
|
||||||
@@ -408,7 +420,7 @@ class GameFontBase(
|
|||||||
|
|
||||||
val charSeqHash = charSeq.toCodePoints().getHash()
|
val charSeqHash = charSeq.toCodePoints().getHash()
|
||||||
|
|
||||||
if (charSeq.isNotBlank()) {
|
if (charSeqNotBlank) {
|
||||||
|
|
||||||
val cacheObj = getCache(charSeqHash)
|
val cacheObj = getCache(charSeqHash)
|
||||||
|
|
||||||
|
|||||||
@@ -25,14 +25,15 @@
|
|||||||
package net.torvald.terrarumsansbitmap.gdx
|
package net.torvald.terrarumsansbitmap.gdx
|
||||||
|
|
||||||
import com.badlogic.gdx.files.FileHandle
|
import com.badlogic.gdx.files.FileHandle
|
||||||
import com.badlogic.gdx.graphics.Color
|
|
||||||
import com.badlogic.gdx.graphics.Pixmap
|
import com.badlogic.gdx.graphics.Pixmap
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Breaks one pixmap atlas into many child pixmaps
|
||||||
|
*
|
||||||
* Created by minjaesong on 2018-09-17.
|
* Created by minjaesong on 2018-09-17.
|
||||||
*/
|
*/
|
||||||
class PixmapRegionPack(
|
class PixmapRegionPack(
|
||||||
pixmap: Pixmap,
|
pixmapAtlas: Pixmap,
|
||||||
val tileW: Int,
|
val tileW: Int,
|
||||||
val tileH: Int,
|
val tileH: Int,
|
||||||
val hGap: Int = 0,
|
val hGap: Int = 0,
|
||||||
@@ -47,8 +48,8 @@ class PixmapRegionPack(
|
|||||||
constructor(fileHandle: FileHandle, tileW: Int, tileH: Int, hGap: Int = 0, vGap: Int = 0, hFrame: Int = 0, vFrame: Int = 0, xySwapped: Boolean = false) :
|
constructor(fileHandle: FileHandle, tileW: Int, tileH: Int, hGap: Int = 0, vGap: Int = 0, hFrame: Int = 0, vFrame: Int = 0, xySwapped: Boolean = false) :
|
||||||
this(Pixmap(fileHandle), tileW, tileH, hGap, vGap, hFrame, vFrame, xySwapped)
|
this(Pixmap(fileHandle), tileW, tileH, hGap, vGap, hFrame, vFrame, xySwapped)
|
||||||
|
|
||||||
val horizontalCount = (pixmap.width - 2 * hFrame + hGap) / (tileW + hGap)
|
val horizontalCount = (pixmapAtlas.width - 2 * hFrame + hGap) / (tileW + hGap)
|
||||||
val verticalCount = (pixmap.height - 2 * vFrame + vGap) / (tileH + vGap)
|
val verticalCount = (pixmapAtlas.height - 2 * vFrame + vGap) / (tileH + vGap)
|
||||||
|
|
||||||
val regions: Array<Pixmap>
|
val regions: Array<Pixmap>
|
||||||
|
|
||||||
@@ -70,10 +71,10 @@ class PixmapRegionPack(
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
pixmap.pixels.rewind()
|
pixmapAtlas.pixels.rewind()
|
||||||
|
|
||||||
if (!xySwapped) {
|
if (!xySwapped) {
|
||||||
regions = Array<Pixmap>(horizontalCount * verticalCount, {
|
regions = Array<Pixmap>(horizontalCount * verticalCount) {
|
||||||
val rx = (it % horizontalCount * (tileW + hGap)) + hFrame // pixel, not index
|
val rx = (it % horizontalCount * (tileW + hGap)) + hFrame // pixel, not index
|
||||||
val ry = (it / horizontalCount * (tileH + vGap)) + vFrame // pixel, not index
|
val ry = (it / horizontalCount * (tileH + vGap)) + vFrame // pixel, not index
|
||||||
|
|
||||||
@@ -84,15 +85,15 @@ class PixmapRegionPack(
|
|||||||
// for every "scanline"
|
// for every "scanline"
|
||||||
for (y in 0 until tileH) {
|
for (y in 0 until tileH) {
|
||||||
|
|
||||||
val offsetY = (ry + y) * (pixmap.width * 4) + (vFrame * pixmap.width * 4)
|
val offsetY = (ry + y) * (pixmapAtlas.width * 4) + (vFrame * pixmapAtlas.width * 4)
|
||||||
val offsetX = rx * 4 + hFrame * 4
|
val offsetX = rx * 4 + hFrame * 4
|
||||||
|
|
||||||
//println("offset: ${offsetX + offsetY}")
|
//println("offset: ${offsetX + offsetY}")
|
||||||
|
|
||||||
val bytesBuffer = ByteArray(4 * tileW)
|
val bytesBuffer = ByteArray(4 * tileW)
|
||||||
|
|
||||||
pixmap.pixels.position(offsetY + offsetX)
|
pixmapAtlas.pixels.position(offsetY + offsetX)
|
||||||
pixmap.pixels.get(bytesBuffer, 0, bytesBuffer.size)
|
pixmapAtlas.pixels.get(bytesBuffer, 0, bytesBuffer.size)
|
||||||
|
|
||||||
// test print bytesbuffer
|
// test print bytesbuffer
|
||||||
/*bytesBuffer.forEachIndexed { index, it ->
|
/*bytesBuffer.forEachIndexed { index, it ->
|
||||||
@@ -112,10 +113,10 @@ class PixmapRegionPack(
|
|||||||
// todo globalFlipY ?
|
// todo globalFlipY ?
|
||||||
|
|
||||||
/*return*/region
|
/*return*/region
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
regions = Array<Pixmap>(horizontalCount * verticalCount, {
|
regions = Array<Pixmap>(horizontalCount * verticalCount) {
|
||||||
val rx = (it / verticalCount * (tileW + hGap)) + hFrame
|
val rx = (it / verticalCount * (tileW + hGap)) + hFrame
|
||||||
val ry = (it % verticalCount * (tileH + vGap)) + vFrame
|
val ry = (it % verticalCount * (tileH + vGap)) + vFrame
|
||||||
|
|
||||||
@@ -126,15 +127,15 @@ class PixmapRegionPack(
|
|||||||
// for every "scanline"
|
// for every "scanline"
|
||||||
for (y in 0 until tileH) {
|
for (y in 0 until tileH) {
|
||||||
|
|
||||||
val offsetY = (ry + y) * (pixmap.width * 4) + (vFrame * pixmap.width * 4)
|
val offsetY = (ry + y) * (pixmapAtlas.width * 4) + (vFrame * pixmapAtlas.width * 4)
|
||||||
val offsetX = rx * 4 + hFrame * 4
|
val offsetX = rx * 4 + hFrame * 4
|
||||||
|
|
||||||
//println("offset: ${offsetX + offsetY}")
|
//println("offset: ${offsetX + offsetY}")
|
||||||
|
|
||||||
val bytesBuffer = ByteArray(4 * tileW)
|
val bytesBuffer = ByteArray(4 * tileW)
|
||||||
|
|
||||||
pixmap.pixels.position(offsetY + offsetX)
|
pixmapAtlas.pixels.position(offsetY + offsetX)
|
||||||
pixmap.pixels.get(bytesBuffer, 0, bytesBuffer.size)
|
pixmapAtlas.pixels.get(bytesBuffer, 0, bytesBuffer.size)
|
||||||
|
|
||||||
// test print bytesbuffer
|
// test print bytesbuffer
|
||||||
/*bytesBuffer.forEachIndexed { index, it ->
|
/*bytesBuffer.forEachIndexed { index, it ->
|
||||||
@@ -154,7 +155,7 @@ class PixmapRegionPack(
|
|||||||
// todo globalFlipY ?
|
// todo globalFlipY ?
|
||||||
|
|
||||||
/*return*/region
|
/*return*/region
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,5 +8,6 @@ Yd
|
|||||||
/œ̃/
|
/œ̃/
|
||||||
/ɛ̃/
|
/ɛ̃/
|
||||||
ẽ
|
ẽ
|
||||||
|
/ẽ
|
||||||
when the line ends with a diacritics, whole letter wont render
|
when the line ends with a diacritics, whole letter wont render
|
||||||
if the line starts with a letter-with-diacritic, it will error out
|
if the line starts with a letter-with-diacritic, it will error out
|
||||||
Reference in New Issue
Block a user