new runes impl and test

Former-commit-id: f92f6d528128ed19aadffee7e112daa5736d50e3
This commit is contained in:
Song Minjae
2017-03-24 23:59:57 +09:00
parent d61970af05
commit a3fc937d6f
7 changed files with 100 additions and 5969 deletions

3
.gitignore vendored
View File

@@ -1,4 +1,5 @@
out/*
bin/*
hs_err_pid*
.idea/workspace.xml
Thumbs.db
.DS_Store

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,56 @@
package net.torvald.imagefont
import org.newdawn.slick.Color
import org.newdawn.slick.Font
import org.newdawn.slick.SpriteSheet
/**
* Created by SKYHi14 on 2017-03-24.
*/
class NewRunes : Font {
private val runeSize = 12
private val encPlane = IntArray(128, {
if (it < 0x10)
0x20 + it
else if (it < 0x30)
0x3000 + (it - 0x20)
else
0x3130 + (it - 0x30)
})
private fun codeToEnc(c: Char): Int? {
val result = encPlane.binarySearch(c.toInt())
return if (result >= 0) result else null
}
private val runes = SpriteSheet("./assets/graphics/fonts/newrunes.tga", runeSize, runeSize)
var scale = 1
var linegap = 8
override fun getHeight(str: String) = 12
override fun drawString(x: Float, y: Float, text: String) = drawString(x, y, text, Color.white)
override fun drawString(x: Float, y: Float, text: String, col: Color) {
text.forEachIndexed { index, c ->
val encodePoint = codeToEnc(c)
if (encodePoint != null) {
runes.getSubImage(encodePoint % 16, encodePoint / 16).draw(
x + runeSize * index * scale, y, scale.toFloat(), col
)
}
}
}
override fun drawString(x: Float, y: Float, text: String, col: Color, startIndex: Int, endIndex: Int) {
UnsupportedOperationException("not implemented")
}
override fun getWidth(str: String) = runeSize * str.length
override fun getLineHeight() = (runeSize + linegap) * scale
}

View File

@@ -0,0 +1,42 @@
package net.torvald.terrarum
import net.torvald.imagefont.NewRunes
import org.newdawn.slick.*
import org.newdawn.slick.state.BasicGameState
import org.newdawn.slick.state.StateBasedGame
/**
* Created by SKYHi14 on 2017-03-24.
*/
class StateNewRunesTest : BasicGameState() {
lateinit var runes: NewRunes
override fun init(gc: GameContainer, game: StateBasedGame) {
runes = NewRunes()
runes.scale = 2
}
override fun update(gc: GameContainer, game: StateBasedGame, delta: Int) {
}
override fun render(gc: GameContainer, game: StateBasedGame, g: Graphics) {
g.background = Color(0x282828)
g.font = runes
g.color = Color(0x00c0f3)
val text = arrayOf(
"ㅎㅏㅣㄹㅏㄹㅍㅏㄴㅌㅏㅈㅣ",
"ㅈㅔㄹㄷㅏㅢㅈㅓㄴㅅㅓㄹ." // <<insert troll_face here>>
)
text.forEachIndexed { index, s ->
g.drawString(s, 30f, 30f + (runes.lineHeight * index))
}
}
override fun getID(): Int = Terrarum.STATE_ID_TEST_FONT
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff