diff --git a/assets/locales/bgBG/game.json b/assets/locales/bgBG/game.json index cfd95fbc2..ca2a94936 100644 --- a/assets/locales/bgBG/game.json +++ b/assets/locales/bgBG/game.json @@ -6,5 +6,12 @@ "APP_ADJUST_YOUR_MONITOR": "", "APP_WARNING_HEALTH_AND_SAFETY": "ВНИМАНИЕ-ЗДРАВЕ И БЕЗОПАСНОСТ", - "MENU_LABEL_PRESS_START_SYMBOL": "атисни >" + "MENU_LABEL_PRESS_START_SYMBOL": "атисни >", + + "GAME_INVENTORY_INGREDIENTS" : "Съставки", + "GAME_INVENTORY_POTIONS" : "Отвари", + "GAME_INVENTORY_BLOCKS" : "Блокове", + "GAME_INVENTORY_WALLS" : "Стени", + "CONTEXT_ITEM_TOOL_PLURAL" : "Инструменти", + "GAME_INVENTORY_FAVORITES" : "Любими" } \ No newline at end of file diff --git a/assets/locales/de/game.json b/assets/locales/de/game.json index 0a993e98d..771e5e544 100644 --- a/assets/locales/de/game.json +++ b/assets/locales/de/game.json @@ -12,6 +12,6 @@ "GAME_INVENTORY_POTIONS" : "Tränke", "GAME_INVENTORY_BLOCKS" : "Blöcke", "GAME_INVENTORY_WALLS" : "Wände", - "CONTEXT_ITEM_EQUIPMENT_PLURAL" : "Ausrüstungen", + "CONTEXT_ITEM_TOOL_PLURAL" : "Werkzeuge", "GAME_INVENTORY_FAVORITES" : "Favoriten" } \ No newline at end of file diff --git a/assets/locales/en/game.json b/assets/locales/en/game.json index 835722ca2..005ba94e1 100644 --- a/assets/locales/en/game.json +++ b/assets/locales/en/game.json @@ -12,6 +12,6 @@ "GAME_INVENTORY_POTIONS" : "Potions", "GAME_INVENTORY_BLOCKS" : "Blocks", "GAME_INVENTORY_WALLS" : "Walls", - "CONTEXT_ITEM_EQUIPMENT_PLURAL" : "Equipments", + "CONTEXT_ITEM_TOOL_PLURAL" : "Tools", "GAME_INVENTORY_FAVORITES" : "Favorites" } \ No newline at end of file diff --git a/assets/locales/fiFI/game.json b/assets/locales/fiFI/game.json index 86c8165ba..a3836e08d 100644 --- a/assets/locales/fiFI/game.json +++ b/assets/locales/fiFI/game.json @@ -13,6 +13,6 @@ "GAME_INVENTORY_POTIONS" : "Juomat", "GAME_INVENTORY_BLOCKS" : "Lohkareet", "GAME_INVENTORY_WALLS" : "Seinät", - "CONTEXT_ITEM_EQUIPMENT_PLURAL" : "Varusteet", + "CONTEXT_ITEM_TOOL_PLURAL" : "Työkalut", "GAME_INVENTORY_FAVORITES" : "Suosikit" } \ No newline at end of file diff --git a/assets/locales/frFR/game.json b/assets/locales/frFR/game.json index f2365ab63..240966fce 100644 --- a/assets/locales/frFR/game.json +++ b/assets/locales/frFR/game.json @@ -13,6 +13,6 @@ "GAME_INVENTORY_POTIONS" : "Potions", "GAME_INVENTORY_BLOCKS" : "Blocs", "GAME_INVENTORY_WALLS" : "Murs", - "CONTEXT_ITEM_EQUIPMENT_PLURAL" : "Équipements", + "CONTEXT_ITEM_TOOL_PLURAL" : "Outils", "GAME_INVENTORY_FAVORITES" : "Favoris" } \ No newline at end of file diff --git a/assets/locales/isIC/Polyglot-100_isIC.json b/assets/locales/isIC/Polyglot-100_isIC.json index 2567ff907..ebc3646b2 100644 --- a/assets/locales/isIC/Polyglot-100_isIC.json +++ b/assets/locales/isIC/Polyglot-100_isIC.json @@ -295,7 +295,7 @@ }, { "n": "CONTEXT_ITEM_COND_MAGICAL", - "s": "Fjölkunnugur" + "s": "Galdrafullur" }, { "n": "CONTEXT_ITEM_COND_RUSTY", @@ -371,7 +371,7 @@ }, { "n": "CONTEXT_ITEM_MAGIC", - "s": "Magic" + "s": "Galdur" }, { "n": "CONTEXT_ITEM_PISTOL", @@ -1271,7 +1271,7 @@ }, { "n": "GAME_GENRE_MISC", - "s": "Misc." + "s": "Ýmislegt" }, { "n": "GAME_GENRE_MULTIPLAYER", @@ -1403,11 +1403,11 @@ }, { "n": "GAME_INVENTORY_WEAPON", - "s": "Weapon" + "s": "Vopn" }, { "n": "GAME_INVENTORY_WEAPONS", - "s": "Weapons" + "s": "Vopn" }, { "n": "GAME_INVENTORY_YOU_CANNOT_CARRY", @@ -1939,7 +1939,7 @@ }, { "n": "MENU_LABEL_ALL", - "s": "All" + "s": "Allur" }, { "n": "MENU_LABEL_ARE_YOU_REALLY_SURE", diff --git a/assets/locales/isIC/game.json b/assets/locales/isIC/game.json index 80e8e8d5f..7ff884ec0 100644 --- a/assets/locales/isIC/game.json +++ b/assets/locales/isIC/game.json @@ -7,6 +7,12 @@ "APP_ADJUST_YOUR_MONITOR": "Best leikmaður reynsla er getur náðist með rétt kvarðaður skjárinn. Ef þú ekki gerðir, gerðu svo vel að kvarða áður en þú leikur.", "APP_WARNING_HEALTH_AND_SAFETY": "VIÐVÖRUN-HEILSA OG ÖRYGGI", - "MENU_LABEL_PRESS_START_SYMBOL": "Ýttu >" + "MENU_LABEL_PRESS_START_SYMBOL": "Ýttu >", + "GAME_INVENTORY_INGREDIENTS" : "Innihaldsefni", + "GAME_INVENTORY_POTIONS" : "Drykkir", + "GAME_INVENTORY_BLOCKS" : "Blokkir", + "GAME_INVENTORY_WALLS" : "Veggir", + "CONTEXT_ITEM_TOOL_PLURAL" : "Verkfærar", + "GAME_INVENTORY_FAVORITES" : "Uppáhalds" } \ No newline at end of file diff --git a/assets/locales/jaJP/game.json b/assets/locales/jaJP/game.json index 38d3dd5aa..1fd66ec62 100644 --- a/assets/locales/jaJP/game.json +++ b/assets/locales/jaJP/game.json @@ -13,6 +13,6 @@ "GAME_INVENTORY_POTIONS" : "水薬", "GAME_INVENTORY_BLOCKS" : "ブロック", "GAME_INVENTORY_WALLS" : "壁", - "CONTEXT_ITEM_EQUIPMENT_PLURAL" : "装備", + "CONTEXT_ITEM_TOOL_PLURAL" : "道具", "GAME_INVENTORY_FAVORITES" : "登録" } \ No newline at end of file diff --git a/assets/locales/jakanaJP/Polyglot-100_jakanaJP.json b/assets/locales/jakanaJP/Polyglot-100_jakanaJP.json index a5f4274de..305e4d7b0 100644 --- a/assets/locales/jakanaJP/Polyglot-100_jakanaJP.json +++ b/assets/locales/jakanaJP/Polyglot-100_jakanaJP.json @@ -257,7 +257,7 @@ }, { "n": "CONTEXT_ITEM_ARMOR", - "s": "鎧" + "s": "よろい" }, { "n": "CONTEXT_ITEM_ARROW", @@ -1277,7 +1277,7 @@ }, { "n": "GAME_GENRE_MISC", - "s": "その他" + "s": "そのほか" }, { "n": "GAME_GENRE_MULTIPLAYER", @@ -1409,11 +1409,11 @@ }, { "n": "GAME_INVENTORY_WEAPON", - "s": "武器" + "s": "ぶき" }, { "n": "GAME_INVENTORY_WEAPONS", - "s": "武器" + "s": "ぶき" }, { "n": "GAME_INVENTORY_YOU_CANNOT_CARRY", diff --git a/assets/locales/jakanaJP/game.json b/assets/locales/jakanaJP/game.json index e252abd93..7556546b8 100644 --- a/assets/locales/jakanaJP/game.json +++ b/assets/locales/jakanaJP/game.json @@ -7,6 +7,12 @@ "APP_ADJUST_YOUR_MONITOR": "このゲームは、てきせつにちょうせいした モニターから さいこうのプレイができます。ちょうせいして いなかったら、プレイするまえに ちょうせいしてください。", "APP_WARNING_HEALTH_AND_SAFETY": "けいこくーけんこうと あんぜんの ために", - "MENU_LABEL_PRESS_START_SYMBOL": "> ボタンを おす" + "MENU_LABEL_PRESS_START_SYMBOL": "> ボタンを おす", + "GAME_INVENTORY_INGREDIENTS" : "ざいりょう", + "GAME_INVENTORY_POTIONS" : "すいやく", + "GAME_INVENTORY_BLOCKS" : "ブロック", + "GAME_INVENTORY_WALLS" : "かべ", + "CONTEXT_ITEM_TOOL_PLURAL" : "どうぐ", + "GAME_INVENTORY_FAVORITES" : "とうろく" } \ No newline at end of file diff --git a/assets/locales/koKR/game.json b/assets/locales/koKR/game.json index bbed308a2..fb5ea72ac 100644 --- a/assets/locales/koKR/game.json +++ b/assets/locales/koKR/game.json @@ -13,6 +13,6 @@ "GAME_INVENTORY_POTIONS" : "물약", "GAME_INVENTORY_BLOCKS" : "블록", "GAME_INVENTORY_WALLS" : "벽지", - "CONTEXT_ITEM_EQUIPMENT_PLURAL" : "장비", + "CONTEXT_ITEM_TOOL_PLURAL" : "도구", "GAME_INVENTORY_FAVORITES" : "등록" } \ No newline at end of file diff --git a/assets/locales/ruRU/game.json b/assets/locales/ruRU/game.json index 04288652e..9c95a7dd6 100644 --- a/assets/locales/ruRU/game.json +++ b/assets/locales/ruRU/game.json @@ -6,6 +6,12 @@ "APP_ADJUST_YOUR_MONITOR": "", "APP_WARNING_HEALTH_AND_SAFETY": "ПРЕДУПРЕЖДЕНИЕ-ЗДОРОВЬЕ И БЕЗОПАСНОСТЬ", - "MENU_LABEL_PRESS_START_SYMBOL": "Нажмите >" + "MENU_LABEL_PRESS_START_SYMBOL": "Нажмите >", + "GAME_INVENTORY_INGREDIENTS" : "Ингредиенты", + "GAME_INVENTORY_POTIONS" : "Зелья", + "GAME_INVENTORY_BLOCKS" : "Блоки", + "GAME_INVENTORY_WALLS" : "Стены", + "CONTEXT_ITEM_TOOL_PLURAL" : "Инструменты", + "GAME_INVENTORY_FAVORITES" : "Избранное" } \ No newline at end of file diff --git a/src/net/torvald/imagefont/GameFontBase.kt b/src/net/torvald/imagefont/GameFontBase.kt index 75b7c6b6d..c8b32eddd 100644 --- a/src/net/torvald/imagefont/GameFontBase.kt +++ b/src/net/torvald/imagefont/GameFontBase.kt @@ -54,26 +54,26 @@ open class GameFontBase : Font { 9 } - private fun isHangul(c: Char) = c.toInt() >= 0xAC00 && c.toInt() < 0xD7A4 - private fun isAscii(c: Char) = c.toInt() >= 0x20 && c.toInt() <= 0xFF + private fun isHangul(c: Char) = c.toInt() in 0xAC00..0xD7A3 + private fun isAscii(c: Char) = c.toInt() in 0x20..0xFF private fun isRunic(c: Char) = runicList.contains(c) - private fun isExtA(c: Char) = c.toInt() >= 0x100 && c.toInt() < 0x180 - private fun isExtB(c: Char) = c.toInt() >= 0x180 && c.toInt() < 0x250 - private fun isKana(c: Char) = c.toInt() >= 0x3040 && c.toInt() < 0x3100 - private fun isCJKPunct(c: Char) = c.toInt() >= 0x3000 && c.toInt() < 0x3040 - private fun isUniHan(c: Char) = c.toInt() >= 0x3400 && c.toInt() < 0xA000 - private fun isCyrilic(c: Char) = c.toInt() >= 0x400 && c.toInt() < 0x460 - private fun isFullwidthUni(c: Char) = c.toInt() >= 0xFF00 && c.toInt() < 0xFF20 - private fun isUniPunct(c: Char) = c.toInt() >= 0x2000 && c.toInt() < 0x2070 - private fun isWenQuanYi1(c: Char) = c.toInt() >= 0x33F3 && c.toInt() <= 0x69FC - private fun isWenQuanYi2(c: Char) = c.toInt() >= 0x69FD && c.toInt() <= 0x9FDC - private fun isGreek(c: Char) = c.toInt() >= 0x370 && c.toInt() <= 0x3CE - private fun isThai(c: Char) = c.toInt() >= 0xE00 && c.toInt() <= 0xE7F - private fun isThaiDiacritics(c: Char) = (c.toInt() >= 0xE34 && c.toInt() <= 0xE3A) - || (c.toInt() >= 0xE47 && c.toInt() <= 0xE4E) - || (c.toInt() == 0xE31) + private fun isExtA(c: Char) = c.toInt() in 0x100..0x17F + private fun isExtB(c: Char) = c.toInt() in 0x180..0x24F + private fun isKana(c: Char) = c.toInt() in 0x3040..0x30FF + private fun isCJKPunct(c: Char) = c.toInt() in 0x3000..0x303F + private fun isUniHan(c: Char) = c.toInt() in 0x3400..0x9FFF + private fun isCyrilic(c: Char) = c.toInt() in 0x400..0x45F + private fun isFullwidthUni(c: Char) = c.toInt() in 0xFF00..0xFF1F + private fun isUniPunct(c: Char) = c.toInt() in 0x2000..0x206F + private fun isWenQuanYi1(c: Char) = c.toInt() in 0x33F3..0x69FC + private fun isWenQuanYi2(c: Char) = c.toInt() in 0x69FD..0x9FDC + private fun isGreek(c: Char) = c.toInt() in 0x370..0x3CE + private fun isThai(c: Char) = c.toInt() in 0xE00..0xE7F + private fun isThaiDiacritics(c: Char) = c.toInt() in 0xE34..0xE3A + || c.toInt() in 0xE47..0xE4E + || c.toInt() == 0xE31 private fun isThaiEF(c: Char) = c.toInt() == 0xE40 - private fun isKeycap(c: Char) = c.toInt() >= 0xE000 && c.toInt() <= 0xE07F + private fun isKeycap(c: Char) = c.toInt() in 0xE000..0xE0FF @@ -147,15 +147,14 @@ open class GameFontBase : Font { val chr = s[i] val ctype = getSheetType(s[i]) - if (chr.toInt() == 0x21B) // Romanian t; HAX! - len += 6 - else if (variableWidthSheets.contains(ctype)) { - try { - len += asciiWidths[chr.toInt()]!! + if (variableWidthSheets.contains(ctype)) { + len += try { + asciiWidths[chr.toInt()]!! } catch (e: kotlin.KotlinNullPointerException) { println("KotlinNullPointerException on glyph number ${Integer.toHexString(chr.toInt()).toUpperCase()}") - System.exit(1) + //System.exit(1) + W_LATIN_WIDE // failsafe } } else if (zeroWidthSheets.contains(ctype)) @@ -219,17 +218,17 @@ open class GameFontBase : Font { hangulSheet.getSubImage(indexCho, choRow).drawWithShadow( Math.round(x + getWidthSubstr(s, i + 1) - glyphW).toFloat(), - Math.round(((H - H_HANGUL) / 2).toFloat() + y + 1f).toFloat(), + Math.round(y).toFloat(), scale.toFloat(), thisCol ) hangulSheet.getSubImage(indexJung, jungRow).drawWithShadow( Math.round(x + getWidthSubstr(s, i + 1) - glyphW).toFloat(), - Math.round(((H - H_HANGUL) / 2).toFloat() + y + 1f).toFloat(), + Math.round(y).toFloat(), scale.toFloat(), thisCol ) hangulSheet.getSubImage(indexJong, jongRow).drawWithShadow( Math.round(x + getWidthSubstr(s, i + 1) - glyphW).toFloat(), - Math.round(((H - H_HANGUL) / 2).toFloat() + y + 1f).toFloat(), + Math.round(y).toFloat(), scale.toFloat(), thisCol ) } @@ -379,9 +378,8 @@ open class GameFontBase : Font { Math.round(x + getWidthSubstr(s, i + 1) - glyphW).toFloat(), // to deal with the height difference of the sheets - Math.round(y).toFloat() + (if (prevInstance == SHEET_CJK_PUNCT) -1 // height hack - else if (prevInstance == SHEET_FW_UNI) (H - H_HANGUL) / 2 // completely legit height adjustment - else if (prevInstance == SHEET_KEYCAP) (H - SIZE_KEYCAP) / 2 // completely legit height adjustment + Math.round(y).toFloat() + + (if (prevInstance == SHEET_KEYCAP) (H - SIZE_KEYCAP) / 2 // completely legit height adjustment else 0).toFloat(), scale.toFloat(), thisCol @@ -525,9 +523,7 @@ open class GameFontBase : Font { internal val W_LATIN_WIDE = 9 // width of regular letters internal val H = 20 - internal val H_HANGUL = 16 internal val H_UNIHAN = 16 - internal val H_KANA = 20 internal val SIZE_KEYCAP = 18 @@ -572,8 +568,8 @@ open class GameFontBase : Font { */ internal val runicList = arrayOf('ᚠ', 'ᚢ', 'ᚦ', 'ᚬ', 'ᚱ', 'ᚴ', 'ᚼ', 'ᚾ', 'ᛁ', 'ᛅ', 'ᛋ', 'ᛏ', 'ᛒ', 'ᛘ', 'ᛚ', 'ᛦ', 'ᛂ', '᛬', '᛫', '᛭', 'ᛮ', 'ᛯ', 'ᛰ') - internal var interchar = 0 - internal var scale = 1 + var interchar = 0 + var scale = 1 set(value) { if (value > 0) field = value else throw IllegalArgumentException("Font scale cannot be zero or negative (input: $value)") diff --git a/src/net/torvald/imagefont/GameFontImpl.kt b/src/net/torvald/imagefont/GameFontImpl.kt index 43406bdd8..2ac10af83 100644 --- a/src/net/torvald/imagefont/GameFontImpl.kt +++ b/src/net/torvald/imagefont/GameFontImpl.kt @@ -11,7 +11,7 @@ class GameFontImpl : GameFontBase() { init { GameFontBase.hangulSheet = SpriteSheet( - "./assets/graphics/fonts/hangul_johab.tga", GameFontBase.W_HANGUL, GameFontBase.H_HANGUL) + "./assets/graphics/fonts/hangul_johab.tga", GameFontBase.W_HANGUL, GameFontBase.H) GameFontBase.asciiSheet = SpriteSheet( "./assets/graphics/fonts/ascii_variable.tga", 15, 19, 1) GameFontBase.runicSheet = SpriteSheet( @@ -21,9 +21,9 @@ class GameFontImpl : GameFontBase() { GameFontBase.extBSheet = SpriteSheet( "./assets/graphics/fonts/LatinExtB_variable.tga", 15, 19, 1) GameFontBase.kanaSheet = SpriteSheet( - "./assets/graphics/fonts/kana.tga", GameFontBase.W_KANA, GameFontBase.H_KANA) + "./assets/graphics/fonts/kana.tga", GameFontBase.W_KANA, GameFontBase.H) GameFontBase.cjkPunct = SpriteSheet( - "./assets/graphics/fonts/cjkpunct.tga", GameFontBase.W_ASIAN_PUNCT, GameFontBase.H_KANA) + "./assets/graphics/fonts/cjkpunct.tga", GameFontBase.W_ASIAN_PUNCT, GameFontBase.H) /*uniHan = new SpriteSheet( "./assets/graphics/fonts/unifont_unihan" + ((!terrarum.gameLocale.contains("zh")) @@ -82,6 +82,7 @@ class GameFontImpl : GameFontBase() { } fun reload() { + GameFontBase.cyrilic.destroy() GameFontBase.cyrilic = SpriteSheet( when (Terrarum.gameLocale.substring(0..1)) { "bg" -> "./assets/graphics/fonts/cyrilic_bulgarian_variable.tga" diff --git a/src/net/torvald/imagefont/NewRunes.kt b/src/net/torvald/imagefont/NewRunes.kt index 106c6defc..71b88e3bd 100644 --- a/src/net/torvald/imagefont/NewRunes.kt +++ b/src/net/torvald/imagefont/NewRunes.kt @@ -10,19 +10,16 @@ import org.newdawn.slick.SpriteSheet class NewRunes : Font { private val runeSize = 12 - private val encPlane = IntArray(128, { - if (it < 0x20) - 0x20 + it - else if (it < 0x30) - 0x3000 + (it - 0x20) + // hard-coded encode map + private fun codeToEnc(code: Int): Int? = if (code in 0x21..0x3f) + code - 0x20 + else if (code in 0x3001..0x300f) + code - 0x3000 + 0x20 + else if (code in 0x3131..0x3163) + code - 0x3130 + 0x30 else - 0x3130 + (it - 0x30) - }) + null - 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) @@ -36,7 +33,7 @@ class NewRunes : Font { override fun drawString(x: Float, y: Float, text: String, col: Color) { text.forEachIndexed { index, c -> - val encodePoint = codeToEnc(c) + val encodePoint = codeToEnc(c.toInt()) if (encodePoint != null) { runes.getSubImage(encodePoint % 16, encodePoint / 16).draw( diff --git a/src/net/torvald/terrarum/StateFontTester.kt b/src/net/torvald/terrarum/StateFontTester.kt index 2092c2a94..818595df7 100644 --- a/src/net/torvald/terrarum/StateFontTester.kt +++ b/src/net/torvald/terrarum/StateFontTester.kt @@ -94,7 +94,7 @@ nopqrstuvwxyz "Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства", "Pijamalı hasta yağız şoföre çabucak güvendi", "Also supports: ‛Unicode’ „quotation marks“—dashes…「括弧」‼", - "ASCII Latin-1 Latin_Ext-A Latin_Ext-B Greek Cyrillic CJK-Ideo Kana Hangul_Syllables (More coming!)", + "ASCII Latin-1 Latin_Ext-A Latin_Ext-B Greek Cyrillic CJK-Ideo Kana Hangul_Syllables", "" ) diff --git a/src/net/torvald/terrarum/StateUITest.kt b/src/net/torvald/terrarum/StateUITest.kt index f91b73f54..41617d837 100644 --- a/src/net/torvald/terrarum/StateUITest.kt +++ b/src/net/torvald/terrarum/StateUITest.kt @@ -13,6 +13,7 @@ import net.torvald.terrarum.ui.UIItemTextButtonList import org.newdawn.slick.* import org.newdawn.slick.state.BasicGameState import org.newdawn.slick.state.StateBasedGame +import java.util.* /** * Created by SKYHi14 on 2017-03-13. @@ -68,6 +69,8 @@ class StateUITest : BasicGameState() { } override fun update(container: GameContainer, game: StateBasedGame, delta: Int) { + Terrarum.appgc.setTitle("${Terrarum.NAME} — F: ${Terrarum.appgc.fps}") + ui.update(container, delta) } @@ -92,7 +95,7 @@ private class SimpleUI(val inventory: ActorInventory) : UICanvas { init { catButtonsToCatIdent.put("GAME_INVENTORY_WEAPONS", InventoryItem.Category.WEAPON) - catButtonsToCatIdent.put("CONTEXT_ITEM_EQUIPMENT_PLURAL", InventoryItem.Category.TOOL) + catButtonsToCatIdent.put("CONTEXT_ITEM_TOOL_PLURAL", InventoryItem.Category.TOOL) catButtonsToCatIdent.put("CONTEXT_ITEM_ARMOR", InventoryItem.Category.ARMOUR) catButtonsToCatIdent.put("GAME_INVENTORY_INGREDIENTS", InventoryItem.Category.GENERIC) catButtonsToCatIdent.put("GAME_INVENTORY_POTIONS", InventoryItem.Category.POTION) @@ -111,7 +114,7 @@ private class SimpleUI(val inventory: ActorInventory) : UICanvas { arrayOf( "MENU_LABEL_ALL", "GAME_INVENTORY_WEAPONS", // weapons and tools - "CONTEXT_ITEM_EQUIPMENT_PLURAL", + "CONTEXT_ITEM_TOOL_PLURAL", "CONTEXT_ITEM_ARMOR", "GAME_INVENTORY_INGREDIENTS", "GAME_INVENTORY_POTIONS", @@ -156,7 +159,7 @@ private class SimpleUI(val inventory: ActorInventory) : UICanvas { private var oldCatSelect = -1 override fun update(gc: GameContainer, delta: Int) { - Terrarum.gameLocale = "en" // hot swap this to test + Terrarum.gameLocale = "fiFI" // hot swap this to test buttons.update(gc, delta) @@ -191,11 +194,14 @@ private class SimpleUI(val inventory: ActorInventory) : UICanvas { items[k].item = sortListItem.item items[k].amount = sortListItem.amount items[k].itemImage = itemImagePlaceholder + + items[k].quickslot = Random().nextInt(10) // TODO test } catch (e: IndexOutOfBoundsException) { items[k].item = null items[k].amount = 0 items[k].itemImage = null + items[k].quickslot = null } } } diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index e50ce4db0..d4c074723 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -279,8 +279,13 @@ object Terrarum : StateBasedGame(GAME_NAME) { break } } + + + // test acquired controller + controller!!.getAxisValue(0) } - catch (e: IndexOutOfBoundsException) { + catch (controllerDoesNotHaveAnyAxesException: java.lang.ArrayIndexOutOfBoundsException) { + controller = null } if (controller != null) { @@ -304,6 +309,7 @@ object Terrarum : StateBasedGame(GAME_NAME) { addState(StateUITest()) //addState(StateControllerRumbleTest()) //addState(StateMidiInputTest()) + //addState(StateNewRunesTest()) //ingame = StateInGame(); addState(ingame) diff --git a/src/net/torvald/terrarum/UIItemInventoryElem.kt b/src/net/torvald/terrarum/UIItemInventoryElem.kt index 9c91bf57d..0939d060f 100644 --- a/src/net/torvald/terrarum/UIItemInventoryElem.kt +++ b/src/net/torvald/terrarum/UIItemInventoryElem.kt @@ -24,7 +24,9 @@ class UIItemInventoryElem( var amount: Int, var itemImage: Image?, val backCol: Color = Color(0,0,0,0), - val backColBlendMode: String = BlendMode.NORMAL + val backColBlendMode: String = BlendMode.NORMAL, + var quickslot: Int? = null, + var equippedSlot: Int? = null ) : UIItem(parentUI) { companion object { @@ -37,10 +39,12 @@ class UIItemInventoryElem( private val imgOffset: Float get() = (this.height - itemImage!!.height).div(2).toFloat() // to snap to the pixel grid private val textOffsetX = 52f + private val textOffsetY = 8f private val durabilityCol = Color(0x22ff11) private val durabilityBack: Color; get() = durabilityCol.darkerLab(0.4f) + private val durabilityBarOffY = 35f @@ -71,20 +75,30 @@ class UIItemInventoryElem( g.drawString( item!!.name + (if (amount > 0 && !item!!.isUnique) "${0x3000.toChar()}($amount)" else "") , posX + textOffsetX - , posY + 8f + , posY + textOffsetY ) // durability metre + val barFullLen = (width - 20f) - textOffsetX + val barOffset = posX + textOffsetX if (item!!.maxDurability > 0.0) { g.color = durabilityBack g.lineWidth = 3f - val fullLen = (width - 20f) - textOffsetX - val barOffset = posX + textOffsetX - g.drawLine(barOffset, posY + 35f, barOffset + fullLen, posY + 35f) + g.drawLine(barOffset, posY + durabilityBarOffY, barOffset + barFullLen, posY + durabilityBarOffY) g.color = durabilityCol - g.drawLine(barOffset, posY + 35f, barOffset + fullLen * (item!!.durability / item!!.maxDurability).toFloat(), posY + 35f) + g.drawLine(barOffset, posY + durabilityBarOffY, barOffset + barFullLen * (item!!.durability / item!!.maxDurability).toFloat(), posY + durabilityBarOffY) } + + + // quickslot marker (TEMPORARY UNTIL WE GET BETTER DESIGN) + if (quickslot != null) { + val label = quickslot!!.plus(0xE010).toChar() + val labelW = g.font.getWidth("$label") + g.color = Color.white + g.drawString("$label", barOffset + barFullLen - labelW, posY + textOffsetY) + } + } } diff --git a/src/net/torvald/terrarum/gameactors/AVKey.kt b/src/net/torvald/terrarum/gameactors/AVKey.kt index 2064176ae..75062645a 100644 --- a/src/net/torvald/terrarum/gameactors/AVKey.kt +++ b/src/net/torvald/terrarum/gameactors/AVKey.kt @@ -87,5 +87,7 @@ object AVKey { - const val __PLAYER_QUICKBARSEL = "__quickbarselection" + const val __PLAYER_QUICKSLOTSEL = "__quickslotselection" + /** Item ID; they are supposed to be unique */ + const val __PLAYER_QSPREFIX = "__qsitem" // __qsitem1 .. __qsitem10 } \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt index 9a69f4167..116fc1964 100644 --- a/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt +++ b/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt @@ -7,8 +7,6 @@ import net.torvald.terrarum.gamecontroller.EnumKeyFunc import net.torvald.terrarum.gamecontroller.KeyMap import net.torvald.terrarum.gameitem.InventoryItem import net.torvald.terrarum.realestate.RealEstateUtility -import org.dyn4j.geometry.Vector2 -import org.lwjgl.input.Controller import org.newdawn.slick.GameContainer import org.newdawn.slick.Input import java.util.* @@ -24,9 +22,9 @@ open class ActorHumanoid(birth: GameDate, death: GameDate? = null) /** Must be set by PlayerFactory */ override var inventory: ActorInventory = ActorInventory() - override val itemEquipped = Array(InventoryItem.EquipPosition.INDEX_MAX + 1, { null }) + /** Must be set by PlayerFactory */ override var faction: HashSet = HashSet() /** diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilder.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilder.kt index 305ba7aea..537ce9e3e 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilder.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilder.kt @@ -18,7 +18,7 @@ object PlayerBuilder { // attach sprite // do etc. - p.actorValue[AVKey.__PLAYER_QUICKBARSEL] = 0 + p.actorValue[AVKey.__PLAYER_QUICKSLOTSEL] = 0 return p } diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilderCynthia.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilderCynthia.kt index c1782b19a..c838d6079 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilderCynthia.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilderCynthia.kt @@ -18,7 +18,7 @@ object PlayerBuilderCynthia { InjectCreatureRaw(p.actorValue, "CreatureHuman.json") - p.actorValue[AVKey.__PLAYER_QUICKBARSEL] = 0 + p.actorValue[AVKey.__PLAYER_QUICKSLOTSEL] = 0 p.actorValue[AVKey.NAME] = "Cynthia" diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt index ba7f23977..09ef2b402 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt @@ -60,7 +60,7 @@ object PlayerBuilderSigrid { p.actorValue[AVKey.BASEDEFENCE] = 141 - p.actorValue[AVKey.__PLAYER_QUICKBARSEL] = 0 + p.actorValue[AVKey.__PLAYER_QUICKSLOTSEL] = 0 //p.actorValue["__selectedtile"] = 147 // test code; replace with .primaryUse(gc, delta) p.actorValue["__aimhelper"] = true // TODO when you'll gonna implement it? diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilderTestSubject1.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilderTestSubject1.kt index a16951323..2e12e86fb 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilderTestSubject1.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilderTestSubject1.kt @@ -12,7 +12,7 @@ object PlayerBuilderTestSubject1 { InjectCreatureRaw(p.actorValue, "CreatureHuman.json") - p.actorValue[AVKey.__PLAYER_QUICKBARSEL] = 0 + p.actorValue[AVKey.__PLAYER_QUICKSLOTSEL] = 0 p.actorValue[AVKey.NAME] = "Test Subject 1" diff --git a/src/net/torvald/terrarum/ui/UIInventory.kt b/src/net/torvald/terrarum/ui/UIInventory.kt index 56ddcf39a..8b39b73f6 100644 --- a/src/net/torvald/terrarum/ui/UIInventory.kt +++ b/src/net/torvald/terrarum/ui/UIInventory.kt @@ -24,7 +24,7 @@ class UIInventory : UICanvas { private val categories = arrayOf( "GAME_INVENTORY_WEAPONS", // weapons and tools - "CONTEXT_ITEM_EQUIPMENT_PLURAL", + "CONTEXT_ITEM_TOOL_PLURAL", "CONTEXT_ITEM_ARMOR", "GAME_INVENTORY_INGREDIENTS", "GAME_INVENTORY_POTIONS", diff --git a/src/net/torvald/terrarum/ui/UIItemTextButton.kt b/src/net/torvald/terrarum/ui/UIItemTextButton.kt index 64303f894..5afb7d719 100644 --- a/src/net/torvald/terrarum/ui/UIItemTextButton.kt +++ b/src/net/torvald/terrarum/ui/UIItemTextButton.kt @@ -65,7 +65,6 @@ class UIItemTextButton( g.fillRect(posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat()) } - blendNormal() g.font = font diff --git a/src/net/torvald/terrarum/ui/UIPieMenu.kt b/src/net/torvald/terrarum/ui/UIPieMenu.kt index cf5ddca1b..8f37cb880 100644 --- a/src/net/torvald/terrarum/ui/UIPieMenu.kt +++ b/src/net/torvald/terrarum/ui/UIPieMenu.kt @@ -35,7 +35,7 @@ class UIPieMenu : UICanvas { override fun update(gc: GameContainer, delta: Int) { if (selection >= 0) - Terrarum.ingame!!.player.actorValue[AVKey.__PLAYER_QUICKBARSEL] = + Terrarum.ingame!!.player.actorValue[AVKey.__PLAYER_QUICKSLOTSEL] = selection % slotCount diff --git a/src/net/torvald/terrarum/ui/UIQuickBar.kt b/src/net/torvald/terrarum/ui/UIQuickBar.kt index cda0ff339..bfca2cdad 100644 --- a/src/net/torvald/terrarum/ui/UIQuickBar.kt +++ b/src/net/torvald/terrarum/ui/UIQuickBar.kt @@ -25,8 +25,8 @@ class UIQuickBar : UICanvas, MouseControlled { override var handler: UIHandler? = null private var selection: Int - get() = Terrarum.ingame!!.player.actorValue.getAsInt(AVKey.__PLAYER_QUICKBARSEL) ?: 0 - set(value) { Terrarum.ingame!!.player.actorValue[AVKey.__PLAYER_QUICKBARSEL] = value } + get() = Terrarum.ingame!!.player.actorValue.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL) ?: 0 + set(value) { Terrarum.ingame!!.player.actorValue[AVKey.__PLAYER_QUICKSLOTSEL] = value } override fun update(gc: GameContainer, delta: Int) { }