mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
inventory UI: quickslot designation
Former-commit-id: b2bddf7c271c678213f8f346d1de4b5c1dc27f60
This commit is contained in:
@@ -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" : "Любими"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -13,6 +13,6 @@
|
||||
"GAME_INVENTORY_POTIONS" : "水薬",
|
||||
"GAME_INVENTORY_BLOCKS" : "ブロック",
|
||||
"GAME_INVENTORY_WALLS" : "壁",
|
||||
"CONTEXT_ITEM_EQUIPMENT_PLURAL" : "装備",
|
||||
"CONTEXT_ITEM_TOOL_PLURAL" : "道具",
|
||||
"GAME_INVENTORY_FAVORITES" : "登録"
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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" : "とうろく"
|
||||
}
|
||||
@@ -13,6 +13,6 @@
|
||||
"GAME_INVENTORY_POTIONS" : "물약",
|
||||
"GAME_INVENTORY_BLOCKS" : "블록",
|
||||
"GAME_INVENTORY_WALLS" : "벽지",
|
||||
"CONTEXT_ITEM_EQUIPMENT_PLURAL" : "장비",
|
||||
"CONTEXT_ITEM_TOOL_PLURAL" : "도구",
|
||||
"GAME_INVENTORY_FAVORITES" : "등록"
|
||||
}
|
||||
@@ -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" : "Избранное"
|
||||
}
|
||||
@@ -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)")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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",
|
||||
""
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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?>(InventoryItem.EquipPosition.INDEX_MAX + 1, { null })
|
||||
|
||||
|
||||
/** Must be set by PlayerFactory */
|
||||
override var faction: HashSet<Faction> = HashSet()
|
||||
/**
|
||||
|
||||
@@ -18,7 +18,7 @@ object PlayerBuilder {
|
||||
// attach sprite
|
||||
|
||||
// do etc.
|
||||
p.actorValue[AVKey.__PLAYER_QUICKBARSEL] = 0
|
||||
p.actorValue[AVKey.__PLAYER_QUICKSLOTSEL] = 0
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
|
||||
@@ -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 <tile_item>.primaryUse(gc, delta)
|
||||
p.actorValue["__aimhelper"] = true // TODO when you'll gonna implement it?
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -65,7 +65,6 @@ class UIItemTextButton(
|
||||
g.fillRect(posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
}
|
||||
|
||||
|
||||
blendNormal()
|
||||
|
||||
g.font = font
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user