mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-13 12:04:06 +09:00
proper way of setting quickslot #
Former-commit-id: 5cd21f043def3c7622290df5bf11f0b3f0080d30
This commit is contained in:
@@ -689,19 +689,19 @@ class StateInGame : BasicGameState() {
|
|||||||
// which means we don't need to check if i >= 0 again
|
// which means we don't need to check if i >= 0 again
|
||||||
if (actor is ActorVisible) {
|
if (actor is ActorVisible) {
|
||||||
when (actor.renderOrder) {
|
when (actor.renderOrder) {
|
||||||
ActorOrder.BEHIND -> {
|
Actor.RenderOrder.BEHIND -> {
|
||||||
val i = actorsRenderBehind.binarySearch(actor.referenceID)
|
val i = actorsRenderBehind.binarySearch(actor.referenceID)
|
||||||
actorsRenderBehind.removeAt(i)
|
actorsRenderBehind.removeAt(i)
|
||||||
}
|
}
|
||||||
ActorOrder.MIDDLE -> {
|
Actor.RenderOrder.MIDDLE -> {
|
||||||
val i = actorsRenderMiddle.binarySearch(actor.referenceID)
|
val i = actorsRenderMiddle.binarySearch(actor.referenceID)
|
||||||
actorsRenderMiddle.removeAt(i)
|
actorsRenderMiddle.removeAt(i)
|
||||||
}
|
}
|
||||||
ActorOrder.MIDTOP -> {
|
Actor.RenderOrder.MIDTOP -> {
|
||||||
val i = actorsRenderMidTop.binarySearch(actor.referenceID)
|
val i = actorsRenderMidTop.binarySearch(actor.referenceID)
|
||||||
actorsRenderMidTop.removeAt(i)
|
actorsRenderMidTop.removeAt(i)
|
||||||
}
|
}
|
||||||
ActorOrder.FRONT -> {
|
Actor.RenderOrder.FRONT -> {
|
||||||
val i = actorsRenderFront.binarySearch(actor.referenceID)
|
val i = actorsRenderFront.binarySearch(actor.referenceID)
|
||||||
actorsRenderFront.removeAt(i)
|
actorsRenderFront.removeAt(i)
|
||||||
}
|
}
|
||||||
@@ -723,16 +723,16 @@ class StateInGame : BasicGameState() {
|
|||||||
|
|
||||||
if (actor is ActorVisible) {
|
if (actor is ActorVisible) {
|
||||||
when (actor.renderOrder) {
|
when (actor.renderOrder) {
|
||||||
ActorOrder.BEHIND -> {
|
Actor.RenderOrder.BEHIND -> {
|
||||||
actorsRenderBehind.add(actor); insertionSortLastElemAV(actorsRenderBehind)
|
actorsRenderBehind.add(actor); insertionSortLastElemAV(actorsRenderBehind)
|
||||||
}
|
}
|
||||||
ActorOrder.MIDDLE -> {
|
Actor.RenderOrder.MIDDLE -> {
|
||||||
actorsRenderMiddle.add(actor); insertionSortLastElemAV(actorsRenderMiddle)
|
actorsRenderMiddle.add(actor); insertionSortLastElemAV(actorsRenderMiddle)
|
||||||
}
|
}
|
||||||
ActorOrder.MIDTOP -> {
|
Actor.RenderOrder.MIDTOP -> {
|
||||||
actorsRenderMidTop.add(actor); insertionSortLastElemAV(actorsRenderMidTop)
|
actorsRenderMidTop.add(actor); insertionSortLastElemAV(actorsRenderMidTop)
|
||||||
}
|
}
|
||||||
ActorOrder.FRONT -> {
|
Actor.RenderOrder.FRONT -> {
|
||||||
actorsRenderFront.add(actor); insertionSortLastElemAV(actorsRenderFront)
|
actorsRenderFront.add(actor); insertionSortLastElemAV(actorsRenderFront)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -754,16 +754,16 @@ class StateInGame : BasicGameState() {
|
|||||||
|
|
||||||
if (actor is ActorVisible) {
|
if (actor is ActorVisible) {
|
||||||
when (actor.renderOrder) {
|
when (actor.renderOrder) {
|
||||||
ActorOrder.BEHIND -> {
|
Actor.RenderOrder.BEHIND -> {
|
||||||
actorsRenderBehind.add(actor); insertionSortLastElemAV(actorsRenderBehind)
|
actorsRenderBehind.add(actor); insertionSortLastElemAV(actorsRenderBehind)
|
||||||
}
|
}
|
||||||
ActorOrder.MIDDLE -> {
|
Actor.RenderOrder.MIDDLE -> {
|
||||||
actorsRenderMiddle.add(actor); insertionSortLastElemAV(actorsRenderMiddle)
|
actorsRenderMiddle.add(actor); insertionSortLastElemAV(actorsRenderMiddle)
|
||||||
}
|
}
|
||||||
ActorOrder.MIDTOP -> {
|
Actor.RenderOrder.MIDTOP -> {
|
||||||
actorsRenderMidTop.add(actor); insertionSortLastElemAV(actorsRenderMidTop)
|
actorsRenderMidTop.add(actor); insertionSortLastElemAV(actorsRenderMidTop)
|
||||||
}
|
}
|
||||||
ActorOrder.FRONT -> {
|
Actor.RenderOrder.FRONT -> {
|
||||||
actorsRenderFront.add(actor); insertionSortLastElemAV(actorsRenderFront)
|
actorsRenderFront.add(actor); insertionSortLastElemAV(actorsRenderFront)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,14 @@
|
|||||||
package net.torvald.terrarum
|
package net.torvald.terrarum
|
||||||
|
|
||||||
import net.torvald.terrarum.gameactors.ActorInventory
|
import net.torvald.terrarum.gameactors.*
|
||||||
import net.torvald.terrarum.gameactors.InventoryPair
|
|
||||||
import net.torvald.terrarum.gameitem.IVKey
|
import net.torvald.terrarum.gameitem.IVKey
|
||||||
import net.torvald.terrarum.gameitem.InventoryItem
|
import net.torvald.terrarum.gameitem.InventoryItem
|
||||||
import net.torvald.terrarum.itemproperties.ItemCodex
|
import net.torvald.terrarum.itemproperties.ItemCodex
|
||||||
import net.torvald.terrarum.mapdrawer.MapCamera
|
import net.torvald.terrarum.tileproperties.Tile
|
||||||
import net.torvald.terrarum.ui.UICanvas
|
import net.torvald.terrarum.ui.*
|
||||||
import net.torvald.terrarum.ui.UIHandler
|
|
||||||
import net.torvald.terrarum.ui.UIItemTextButton
|
|
||||||
import net.torvald.terrarum.ui.UIItemTextButtonList
|
|
||||||
import org.newdawn.slick.*
|
import org.newdawn.slick.*
|
||||||
import org.newdawn.slick.state.BasicGameState
|
import org.newdawn.slick.state.BasicGameState
|
||||||
import org.newdawn.slick.state.StateBasedGame
|
import org.newdawn.slick.state.StateBasedGame
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by SKYHi14 on 2017-03-13.
|
* Created by SKYHi14 on 2017-03-13.
|
||||||
@@ -22,20 +17,34 @@ class StateUITest : BasicGameState() {
|
|||||||
|
|
||||||
val ui: UIHandler
|
val ui: UIHandler
|
||||||
|
|
||||||
val inventory = ActorInventory()
|
private val actor = object : Actor(RenderOrder.FRONT), Pocketed {
|
||||||
|
override fun update(gc: GameContainer, delta: Int) {
|
||||||
|
TODO("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun run() {
|
||||||
|
TODO("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override var inventory: ActorInventory = ActorInventory()
|
||||||
|
override val itemEquipped = Array<InventoryItem?>(InventoryItem.EquipPosition.INDEX_MAX + 1, { null })
|
||||||
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
ui = UIHandler(SimpleUI(inventory, 800, Terrarum.HEIGHT - 160))
|
ui = UIHandler(UIInventory(actor, 800, Terrarum.HEIGHT - 160))
|
||||||
|
|
||||||
ui.posX = 0
|
ui.posX = 0
|
||||||
ui.posY = 60
|
ui.posY = 60
|
||||||
ui.isVisible = true
|
ui.isVisible = true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// these are the test codes.
|
// these are the test codes.
|
||||||
// Item properties must be pre-composed using CSV/JSON, and read and made into the item instance
|
// Item properties must be pre-composed using CSV/JSON, and read and made into the item instance
|
||||||
// using factory/builder pattern. @see ItemCodex
|
// using factory/builder pattern. @see ItemCodex
|
||||||
inventory.add(object : InventoryItem() {
|
actor.actorValue[AVKey.__PLAYER_QSPREFIX + "3"] = Tile.STONE
|
||||||
|
|
||||||
|
actor.inventory.add(object : InventoryItem() {
|
||||||
init {
|
init {
|
||||||
itemProperties[IVKey.ITEMTYPE] = IVKey.ItemType.HAMMER
|
itemProperties[IVKey.ITEMTYPE] = IVKey.ItemType.HAMMER
|
||||||
}
|
}
|
||||||
@@ -48,9 +57,9 @@ class StateUITest : BasicGameState() {
|
|||||||
override var maxDurability: Double = 10.0
|
override var maxDurability: Double = 10.0
|
||||||
override var durability: Double = 6.43
|
override var durability: Double = 6.43
|
||||||
})
|
})
|
||||||
inventory.getByID(5656)!!.item.name = "Test tool"
|
actor.inventory.getByID(5656)!!.item.name = "Test tool"
|
||||||
|
|
||||||
inventory.add(object : InventoryItem() {
|
actor.inventory.add(object : InventoryItem() {
|
||||||
init {
|
init {
|
||||||
itemProperties[IVKey.ITEMTYPE] = IVKey.ItemType.ARTEFACT
|
itemProperties[IVKey.ITEMTYPE] = IVKey.ItemType.ARTEFACT
|
||||||
}
|
}
|
||||||
@@ -62,7 +71,7 @@ class StateUITest : BasicGameState() {
|
|||||||
override var category: String = InventoryItem.Category.MISC
|
override var category: String = InventoryItem.Category.MISC
|
||||||
})
|
})
|
||||||
|
|
||||||
inventory.add(ItemCodex[16], 543)
|
actor.inventory.add(ItemCodex[16], 543)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun init(container: GameContainer?, game: StateBasedGame?) {
|
override fun init(container: GameContainer?, game: StateBasedGame?) {
|
||||||
@@ -80,176 +89,3 @@ class StateUITest : BasicGameState() {
|
|||||||
ui.render(container, game, g)
|
ui.render(container, game, g)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private class SimpleUI(
|
|
||||||
val inventory: ActorInventory,
|
|
||||||
override var width: Int,
|
|
||||||
override var height: Int
|
|
||||||
) : UICanvas {
|
|
||||||
override var handler: UIHandler? = null
|
|
||||||
override var openCloseTime: Int = UICanvas.OPENCLOSE_GENERIC
|
|
||||||
|
|
||||||
val itemImagePlaceholder = Image("./assets/item_kari_24.tga")
|
|
||||||
|
|
||||||
val catButtonsToCatIdent = HashMap<String, String>()
|
|
||||||
|
|
||||||
val backgroundColour = Color(0x1c1c1c)
|
|
||||||
|
|
||||||
init {
|
|
||||||
catButtonsToCatIdent.put("GAME_INVENTORY_WEAPONS", InventoryItem.Category.WEAPON)
|
|
||||||
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)
|
|
||||||
catButtonsToCatIdent.put("CONTEXT_ITEM_MAGIC", InventoryItem.Category.MAGIC)
|
|
||||||
catButtonsToCatIdent.put("GAME_INVENTORY_BLOCKS", InventoryItem.Category.BLOCK)
|
|
||||||
catButtonsToCatIdent.put("GAME_INVENTORY_WALLS", InventoryItem.Category.WALL)
|
|
||||||
catButtonsToCatIdent.put("GAME_GENRE_MISC", InventoryItem.Category.MISC)
|
|
||||||
|
|
||||||
// special filter
|
|
||||||
catButtonsToCatIdent.put("MENU_LABEL_ALL", "__all__")
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
val itemStripGutterV = 6
|
|
||||||
val itemStripGutterH = 8
|
|
||||||
val itemInterColGutter = 8
|
|
||||||
|
|
||||||
val catButtons = UIItemTextButtonList(
|
|
||||||
this,
|
|
||||||
arrayOf(
|
|
||||||
"MENU_LABEL_ALL",
|
|
||||||
"GAME_INVENTORY_WEAPONS", // weapons and tools
|
|
||||||
"CONTEXT_ITEM_TOOL_PLURAL",
|
|
||||||
"CONTEXT_ITEM_ARMOR",
|
|
||||||
"GAME_INVENTORY_INGREDIENTS",
|
|
||||||
"GAME_INVENTORY_POTIONS",
|
|
||||||
"CONTEXT_ITEM_MAGIC",
|
|
||||||
"GAME_INVENTORY_BLOCKS",
|
|
||||||
"GAME_INVENTORY_WALLS",
|
|
||||||
"GAME_GENRE_MISC"
|
|
||||||
//"GAME_INVENTORY_FAVORITES",
|
|
||||||
),
|
|
||||||
width = (width / 3 / 100) * 100, // chop to hundreds unit (100, 200, 300, ...) with the black magic of integer division
|
|
||||||
height = height,
|
|
||||||
verticalGutter = itemStripGutterH,
|
|
||||||
readFromLang = true,
|
|
||||||
textAreaWidth = 100,
|
|
||||||
defaultSelection = 0,
|
|
||||||
iconSpriteSheet = SpriteSheet("./assets/graphics/gui/inventory/category.tga", 20, 20),
|
|
||||||
iconSpriteSheetIndices = intArrayOf(9,0,1,2,3,4,5,6,7,8),
|
|
||||||
highlightBackCol = backgroundColour screen Color(0x0c0c0c),
|
|
||||||
highlightBackBlendMode = BlendMode.NORMAL,
|
|
||||||
backgroundCol = Color(0x383838),
|
|
||||||
kinematic = true
|
|
||||||
)
|
|
||||||
|
|
||||||
val itemsStripWidth = ((width - catButtons.width) - (2 * itemStripGutterH + itemInterColGutter)) / 2
|
|
||||||
val items = Array(
|
|
||||||
2 + height / (UIItemInventoryElem.height + itemStripGutterV) * 2, {
|
|
||||||
UIItemInventoryElem(
|
|
||||||
parentUI = this,
|
|
||||||
posX = catButtons.width + if (it % 2 == 0) itemStripGutterH else (itemStripGutterH + itemsStripWidth + itemInterColGutter),
|
|
||||||
posY = itemStripGutterH + it / 2 * (UIItemInventoryElem.height + itemStripGutterV),
|
|
||||||
width = itemsStripWidth,
|
|
||||||
item = null,
|
|
||||||
amount = UIItemInventoryElem.UNIQUE_ITEM_HAS_NO_AMOUNT,
|
|
||||||
itemImage = null,
|
|
||||||
mouseoverBackCol = Color(0x282828),
|
|
||||||
mouseoverBackBlendMode = BlendMode.SCREEN,
|
|
||||||
drawBackOnNull = false
|
|
||||||
//backCol = Color(0x101010),
|
|
||||||
//backBlendMode = BlendMode.SCREEN
|
|
||||||
) })
|
|
||||||
val itemsScrollOffset = 0
|
|
||||||
|
|
||||||
var inventorySortList = ArrayList<InventoryPair>()
|
|
||||||
var rebuildList = true
|
|
||||||
|
|
||||||
private var oldCatSelect = -1
|
|
||||||
|
|
||||||
override fun update(gc: GameContainer, delta: Int) {
|
|
||||||
Terrarum.gameLocale = "koKR" // hot swap this to test
|
|
||||||
|
|
||||||
catButtons.update(gc, delta)
|
|
||||||
|
|
||||||
|
|
||||||
// monitor and check if category selection has been changed
|
|
||||||
if (oldCatSelect != catButtons.selectedIndex) {
|
|
||||||
rebuildList = true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (rebuildList) {
|
|
||||||
val filter = catButtonsToCatIdent[catButtons.selectedButton.labelText]
|
|
||||||
|
|
||||||
inventorySortList = ArrayList<InventoryPair>()
|
|
||||||
|
|
||||||
// filter items
|
|
||||||
inventory.forEach {
|
|
||||||
if (it.item.category == filter || filter == "__all__")
|
|
||||||
inventorySortList.add(it)
|
|
||||||
}
|
|
||||||
|
|
||||||
rebuildList = false
|
|
||||||
|
|
||||||
// sort if needed
|
|
||||||
// test sort by name
|
|
||||||
inventorySortList.sortBy { it.item.name }
|
|
||||||
|
|
||||||
// map sortList to item list
|
|
||||||
for (k in 0..items.size - 1) {
|
|
||||||
try {
|
|
||||||
val sortListItem = inventorySortList[k + itemsScrollOffset]
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
oldCatSelect = catButtons.selectedIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun render(gc: GameContainer, g: Graphics) {
|
|
||||||
g.color = backgroundColour
|
|
||||||
g.fillRect(0f, 0f, width.toFloat(), height.toFloat())
|
|
||||||
|
|
||||||
catButtons.render(gc, g)
|
|
||||||
|
|
||||||
|
|
||||||
items.forEach {
|
|
||||||
it.render(gc, g)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun processInput(gc: GameContainer, delta: Int, input: Input) {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun doOpening(gc: GameContainer, delta: Int) {
|
|
||||||
UICanvas.doOpeningFade(handler, openCloseTime)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun doClosing(gc: GameContainer, delta: Int) {
|
|
||||||
UICanvas.doClosingFade(handler, openCloseTime)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun endOpening(gc: GameContainer, delta: Int) {
|
|
||||||
UICanvas.endOpeningFade(handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun endClosing(gc: GameContainer, delta: Int) {
|
|
||||||
UICanvas.endClosingFade(handler)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -33,13 +33,10 @@ typealias Millisec = Int
|
|||||||
*/
|
*/
|
||||||
object Terrarum : StateBasedGame(GAME_NAME) {
|
object Terrarum : StateBasedGame(GAME_NAME) {
|
||||||
|
|
||||||
|
//////////////////////////////
|
||||||
val sysLang: String
|
// GLOBAL IMMUTABLE CONFIGS //
|
||||||
get() {
|
//////////////////////////////
|
||||||
val lan = System.getProperty("user.language")
|
val QUICKSLOT_MAX = 10
|
||||||
val country = System.getProperty("user.country")
|
|
||||||
return lan + country
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To be used with physics simulator
|
* To be used with physics simulator
|
||||||
@@ -55,6 +52,19 @@ object Terrarum : StateBasedGame(GAME_NAME) {
|
|||||||
*/
|
*/
|
||||||
val TARGET_INTERNAL_FPS = 100
|
val TARGET_INTERNAL_FPS = 100
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
val sysLang: String
|
||||||
|
get() {
|
||||||
|
val lan = System.getProperty("user.language")
|
||||||
|
val country = System.getProperty("user.country")
|
||||||
|
return lan + country
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
lateinit var appgc: AppGameContainer
|
lateinit var appgc: AppGameContainer
|
||||||
|
|
||||||
var WIDTH = 1072
|
var WIDTH = 1072
|
||||||
@@ -89,7 +99,7 @@ object Terrarum : StateBasedGame(GAME_NAME) {
|
|||||||
val memXmx: Long
|
val memXmx: Long
|
||||||
get() = Runtime.getRuntime().maxMemory() shr 20
|
get() = Runtime.getRuntime().maxMemory() shr 20
|
||||||
|
|
||||||
lateinit var environment: RunningEnvironment
|
val environment: RunningEnvironment
|
||||||
|
|
||||||
private val localeSimple = arrayOf("de", "en", "es", "it")
|
private val localeSimple = arrayOf("de", "en", "es", "it")
|
||||||
var gameLocale = "####" // lateinit placeholder
|
var gameLocale = "####" // lateinit placeholder
|
||||||
@@ -228,15 +238,15 @@ object Terrarum : StateBasedGame(GAME_NAME) {
|
|||||||
val readFromDisk = readConfigJson()
|
val readFromDisk = readConfigJson()
|
||||||
if (!readFromDisk) readConfigJson()
|
if (!readFromDisk) readConfigJson()
|
||||||
|
|
||||||
try {
|
environment = try {
|
||||||
Controllers.getController(0)
|
Controllers.getController(0)
|
||||||
environment = if (getConfigString("pcgamepadenv") == "console")
|
if (getConfigString("pcgamepadenv") == "console")
|
||||||
RunningEnvironment.CONSOLE
|
RunningEnvironment.CONSOLE
|
||||||
else
|
else
|
||||||
RunningEnvironment.PC
|
RunningEnvironment.PC
|
||||||
}
|
}
|
||||||
catch (e: IndexOutOfBoundsException) {
|
catch (e: IndexOutOfBoundsException) {
|
||||||
environment = RunningEnvironment.PC
|
RunningEnvironment.PC
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ class UIItemInventoryElem(
|
|||||||
var item: InventoryItem?,
|
var item: InventoryItem?,
|
||||||
var amount: Int,
|
var amount: Int,
|
||||||
var itemImage: Image?,
|
var itemImage: Image?,
|
||||||
|
val mouseOverTextCol: Color = Color(0xfff066),
|
||||||
val mouseoverBackCol: Color = Color(0,0,0,0),
|
val mouseoverBackCol: Color = Color(0,0,0,0),
|
||||||
val mouseoverBackBlendMode: String = BlendMode.NORMAL,
|
val mouseoverBackBlendMode: String = BlendMode.NORMAL,
|
||||||
val backCol: Color = Color(0,0,0,0),
|
val backCol: Color = Color(0,0,0,0),
|
||||||
@@ -80,7 +81,7 @@ class UIItemInventoryElem(
|
|||||||
g.drawImage(itemImage!!, posX + imgOffset, posY + imgOffset)
|
g.drawImage(itemImage!!, posX + imgOffset, posY + imgOffset)
|
||||||
|
|
||||||
// if mouse is over, text lights up
|
// if mouse is over, text lights up
|
||||||
g.color = item!!.nameColour * if (mouseUp) Color(0xffffff) else UIItemTextButton.defaultInactiveCol
|
g.color = item!!.nameColour * if (mouseUp) mouseOverTextCol else UIItemTextButton.defaultInactiveCol
|
||||||
g.drawString(
|
g.drawString(
|
||||||
item!!.name + (if (amount > 0 && !item!!.isUnique) "${0x3000.toChar()}($amount)" else "")
|
item!!.name + (if (amount > 0 && !item!!.isUnique) "${0x3000.toChar()}($amount)" else "")
|
||||||
, posX + textOffsetX
|
, posX + textOffsetX
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ object AVKey {
|
|||||||
|
|
||||||
|
|
||||||
const val __PLAYER_QUICKSLOTSEL = "__quickslotselection"
|
const val __PLAYER_QUICKSLOTSEL = "__quickslotselection"
|
||||||
/** Item ID; they are supposed to be unique */
|
/** SYNOPSIS: __qsitem1 .. __qsitem10
|
||||||
const val __PLAYER_QSPREFIX = "__qsitem" // __qsitem1 .. __qsitem10
|
* contains tem ID; they are supposed to be unique. Indices must be ONE-BASED! */
|
||||||
|
const val __PLAYER_QSPREFIX = "__qsitem" // __qsitem1 .. __qsitem10 (NOT ZERO BASED!)
|
||||||
}
|
}
|
||||||
@@ -7,11 +7,18 @@ import net.torvald.terrarum.itemproperties.ItemCodex
|
|||||||
import org.newdawn.slick.GameContainer
|
import org.newdawn.slick.GameContainer
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param renderOrder invisible/technical -> ActorOrder.MIDDLE
|
* @param renderOrder invisible/technical must use "Actor.RenderOrder.MIDDLE"
|
||||||
*
|
*
|
||||||
* Created by minjaesong on 15-12-31.
|
* Created by minjaesong on 15-12-31.
|
||||||
*/
|
*/
|
||||||
abstract class Actor(val renderOrder: ActorOrder) : Comparable<Actor>, Runnable {
|
abstract class Actor(val renderOrder: RenderOrder) : Comparable<Actor>, Runnable {
|
||||||
|
|
||||||
|
enum class RenderOrder {
|
||||||
|
BEHIND, // tapestries, some particles (obstructed by terrain)
|
||||||
|
MIDDLE, // actors
|
||||||
|
MIDTOP, // bullets, thrown items
|
||||||
|
FRONT // fake tiles
|
||||||
|
}
|
||||||
|
|
||||||
abstract fun update(gc: GameContainer, delta: Int)
|
abstract fun update(gc: GameContainer, delta: Int)
|
||||||
|
|
||||||
@@ -20,8 +27,8 @@ abstract class Actor(val renderOrder: ActorOrder) : Comparable<Actor>, Runnable
|
|||||||
* @return Reference ID. (16777216-0x7FFF_FFFF)
|
* @return Reference ID. (16777216-0x7FFF_FFFF)
|
||||||
*/
|
*/
|
||||||
open var referenceID: Int = generateUniqueReferenceID()
|
open var referenceID: Int = generateUniqueReferenceID()
|
||||||
abstract var actorValue: ActorValue
|
var actorValue = ActorValue()
|
||||||
abstract var flagDespawn: Boolean
|
@Volatile var flagDespawn = false
|
||||||
|
|
||||||
override fun equals(other: Any?) = referenceID == (other as Actor).referenceID
|
override fun equals(other: Any?) = referenceID == (other as Actor).referenceID
|
||||||
override fun hashCode() = referenceID
|
override fun hashCode() = referenceID
|
||||||
@@ -40,34 +47,32 @@ abstract class Actor(val renderOrder: ActorOrder) : Comparable<Actor>, Runnable
|
|||||||
* override var referenceID: Int = generateUniqueReferenceID()
|
* override var referenceID: Int = generateUniqueReferenceID()
|
||||||
*/
|
*/
|
||||||
fun generateUniqueReferenceID(): Int {
|
fun generateUniqueReferenceID(): Int {
|
||||||
fun checkForCollision(value: Int) =
|
fun hasCollision(value: Int) =
|
||||||
Terrarum.ingame!!.theGameHasActor(value) ||
|
try {
|
||||||
value < ItemCodex.ITEM_COUNT_MAX ||
|
Terrarum.ingame!!.theGameHasActor(value) ||
|
||||||
value < when (renderOrder) {
|
value < ItemCodex.ITEM_COUNT_MAX ||
|
||||||
ActorOrder.BEHIND -> ItemCodex.ITEM_COUNT_MAX
|
value < when (renderOrder) {
|
||||||
ActorOrder.MIDDLE -> 0x10000000
|
RenderOrder.BEHIND -> ItemCodex.ITEM_COUNT_MAX
|
||||||
ActorOrder.MIDTOP -> 0x60000000
|
RenderOrder.MIDDLE -> 0x10000000
|
||||||
ActorOrder.FRONT -> 0x70000000
|
RenderOrder.MIDTOP -> 0x60000000
|
||||||
} ||
|
RenderOrder.FRONT -> 0x70000000
|
||||||
value > when (renderOrder) {
|
} ||
|
||||||
ActorOrder.BEHIND -> 0x0FFFFFFF
|
value > when (renderOrder) {
|
||||||
ActorOrder.MIDDLE -> 0x5FFFFFFF
|
RenderOrder.BEHIND -> 0x0FFFFFFF
|
||||||
ActorOrder.MIDTOP -> 0x6FFFFFFF
|
RenderOrder.MIDDLE -> 0x5FFFFFFF
|
||||||
ActorOrder.FRONT -> 0x7FFFFFFF
|
RenderOrder.MIDTOP -> 0x6FFFFFFF
|
||||||
|
RenderOrder.FRONT -> 0x7FFFFFFF
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (gameNotInitialisedException: KotlinNullPointerException) {
|
||||||
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
var ret: Int
|
var ret: Int
|
||||||
do {
|
do {
|
||||||
ret = HQRNG().nextInt().and(0x7FFFFFFF) // set new ID
|
ret = HQRNG().nextInt().and(0x7FFFFFFF) // set new ID
|
||||||
} while (checkForCollision(ret)) // check for collision
|
} while (hasCollision(ret)) // check for collision
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class ActorOrder {
|
|
||||||
BEHIND, // tapestries, some particles (obstructed by terrain)
|
|
||||||
MIDDLE, // actors
|
|
||||||
MIDTOP, // bullets, thrown items
|
|
||||||
FRONT // fake tiles
|
|
||||||
}
|
|
||||||
@@ -4,9 +4,11 @@ import org.newdawn.slick.GameContainer
|
|||||||
import org.newdawn.slick.Graphics
|
import org.newdawn.slick.Graphics
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Actor with visible body
|
||||||
|
*
|
||||||
* Created by minjaesong on 2017-01-21.
|
* Created by minjaesong on 2017-01-21.
|
||||||
*/
|
*/
|
||||||
abstract class ActorVisible(renderOrder: ActorOrder) : Actor(renderOrder) {
|
abstract class ActorVisible(renderOrder: RenderOrder) : Actor(renderOrder) {
|
||||||
open val hitbox = Hitbox(0.0, 0.0, 0.0, 0.0)
|
open val hitbox = Hitbox(0.0, 0.0, 0.0, 0.0)
|
||||||
override abstract fun update(gc: GameContainer, delta: Int)
|
override abstract fun update(gc: GameContainer, delta: Int)
|
||||||
abstract fun drawBody(g: Graphics)
|
abstract fun drawBody(g: Graphics)
|
||||||
|
|||||||
@@ -26,11 +26,10 @@ import java.util.*
|
|||||||
*
|
*
|
||||||
* Created by minjaesong on 16-01-13.
|
* Created by minjaesong on 16-01-13.
|
||||||
*/
|
*/
|
||||||
open class ActorWithSprite(renderOrder: ActorOrder, val immobileBody: Boolean = false, physics: Boolean = true) : ActorVisible(renderOrder) {
|
open class ActorWithSprite(renderOrder: RenderOrder, val immobileBody: Boolean = false, physics: Boolean = true) : ActorVisible(renderOrder) {
|
||||||
|
|
||||||
/** !! ActorValue macros are on the very bottom of the source !! **/
|
/** !! ActorValue macros are on the very bottom of the source !! **/
|
||||||
|
|
||||||
override var actorValue: ActorValue = ActorValue()
|
|
||||||
|
|
||||||
@Transient internal var sprite: SpriteAnimation? = null
|
@Transient internal var sprite: SpriteAnimation? = null
|
||||||
@Transient internal var spriteGlow: SpriteAnimation? = null
|
@Transient internal var spriteGlow: SpriteAnimation? = null
|
||||||
@@ -162,7 +161,6 @@ open class ActorWithSprite(renderOrder: ActorOrder, val immobileBody: Boolean =
|
|||||||
|
|
||||||
|
|
||||||
@Volatile var grounded = false
|
@Volatile var grounded = false
|
||||||
override @Volatile var flagDespawn = false
|
|
||||||
/** Default to 'true' */
|
/** Default to 'true' */
|
||||||
var isVisible = true
|
var isVisible = true
|
||||||
/** Default to 'true' */
|
/** Default to 'true' */
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ object CreatureBuilder {
|
|||||||
*/
|
*/
|
||||||
@Throws(IOException::class, SlickException::class)
|
@Throws(IOException::class, SlickException::class)
|
||||||
operator fun invoke(jsonFileName: String): ActorWithSprite {
|
operator fun invoke(jsonFileName: String): ActorWithSprite {
|
||||||
val actor = ActorWithSprite(ActorOrder.MIDDLE)
|
val actor = ActorWithSprite(Actor.RenderOrder.MIDDLE)
|
||||||
InjectCreatureRaw(actor.actorValue, jsonFileName)
|
InjectCreatureRaw(actor.actorValue, jsonFileName)
|
||||||
|
|
||||||
return actor
|
return actor
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import org.newdawn.slick.Graphics
|
|||||||
/**
|
/**
|
||||||
* Created by minjaesong on 16-03-15.
|
* Created by minjaesong on 16-03-15.
|
||||||
*/
|
*/
|
||||||
class DroppedItem(private val item: InventoryItem) : ActorWithSprite(ActorOrder.MIDTOP) {
|
class DroppedItem(private val item: InventoryItem) : ActorWithSprite(Actor.RenderOrder.MIDTOP) {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (item.id >= ItemCodex.ITEM_COUNT_MAX)
|
if (item.id >= ItemCodex.ITEM_COUNT_MAX)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import net.torvald.spriteanimation.SpriteAnimation
|
|||||||
* Created by minjaesong on 16-06-17.
|
* Created by minjaesong on 16-06-17.
|
||||||
*/
|
*/
|
||||||
open class FixtureBase(physics: Boolean = true) :
|
open class FixtureBase(physics: Boolean = true) :
|
||||||
ActorWithSprite(ActorOrder.BEHIND, immobileBody = true, physics = physics) {
|
ActorWithSprite(Actor.RenderOrder.BEHIND, immobileBody = true, physics = physics) {
|
||||||
/**
|
/**
|
||||||
* 0: Open
|
* 0: Open
|
||||||
* 1: Blocked
|
* 1: Blocked
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import org.newdawn.slick.Input
|
|||||||
*
|
*
|
||||||
* Created by minjaesong on 16-10-10.
|
* Created by minjaesong on 16-10-10.
|
||||||
*/
|
*/
|
||||||
open class HistoricalFigure(val born: GameDate, val dead: GameDate? = null, realAirFriction: Boolean = false) : ActorWithSprite(ActorOrder.MIDDLE, realAirFriction) {
|
open class HistoricalFigure(val born: GameDate, val dead: GameDate? = null, realAirFriction: Boolean = false) : ActorWithSprite(Actor.RenderOrder.MIDDLE, realAirFriction) {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
this.actorValue["_bornyear"] = born.year
|
this.actorValue["_bornyear"] = born.year
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import org.newdawn.slick.Image
|
|||||||
*
|
*
|
||||||
* Created by minjaesong on 2017-01-20.
|
* Created by minjaesong on 2017-01-20.
|
||||||
*/
|
*/
|
||||||
open class ParticleBase(renderOrder: ActorOrder, maxLifeTime: Int? = null) : Runnable {
|
open class ParticleBase(renderOrder: Actor.RenderOrder, maxLifeTime: Int? = null) : Runnable {
|
||||||
|
|
||||||
/** Will NOT actually delete from the CircularArray */
|
/** Will NOT actually delete from the CircularArray */
|
||||||
@Volatile var flagDespawn = false
|
@Volatile var flagDespawn = false
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import org.newdawn.slick.Image
|
|||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2017-01-20.
|
* Created by minjaesong on 2017-01-20.
|
||||||
*/
|
*/
|
||||||
class ParticleTestRain(posX: Double, posY: Double) : ParticleBase(ActorOrder.BEHIND, 6000) {
|
class ParticleTestRain(posX: Double, posY: Double) : ParticleBase(Actor.RenderOrder.BEHIND, 6000) {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
body = Image("./assets/graphics/weathers/raindrop.tga")
|
body = Image("./assets/graphics/weathers/raindrop.tga")
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import org.newdawn.slick.Graphics
|
|||||||
/**
|
/**
|
||||||
* Created by minjaesong on 16-03-05.
|
* Created by minjaesong on 16-03-05.
|
||||||
*/
|
*/
|
||||||
class PhysTestBall : ActorWithSprite(ActorOrder.MIDDLE, immobileBody = true) {
|
class PhysTestBall : ActorWithSprite(Actor.RenderOrder.MIDDLE, immobileBody = true) {
|
||||||
|
|
||||||
private var color = Color.orange
|
private var color = Color.orange
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ open class ProjectileSimple(
|
|||||||
private val type: Int,
|
private val type: Int,
|
||||||
fromPoint: Vector2, // projected coord
|
fromPoint: Vector2, // projected coord
|
||||||
toPoint: Vector2 // arriving coord
|
toPoint: Vector2 // arriving coord
|
||||||
) : ActorWithSprite(ActorOrder.MIDTOP), Luminous, Projectile {
|
) : ActorWithSprite(Actor.RenderOrder.MIDTOP), Luminous, Projectile {
|
||||||
|
|
||||||
val damage: Int
|
val damage: Int
|
||||||
val displayColour: Color
|
val displayColour: Color
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package net.torvald.terrarum.gameactors
|
|||||||
/**
|
/**
|
||||||
* Created by minjaesong on 16-04-26.
|
* Created by minjaesong on 16-04-26.
|
||||||
*/
|
*/
|
||||||
class WeaponSwung(val itemID: Int) : ActorWithSprite(ActorOrder.MIDTOP), Luminous {
|
class WeaponSwung(val itemID: Int) : ActorWithSprite(Actor.RenderOrder.MIDTOP), Luminous {
|
||||||
// just let the solver use AABB; it's cheap but works just enough
|
// just let the solver use AABB; it's cheap but works just enough
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,64 +1,196 @@
|
|||||||
package net.torvald.terrarum.ui
|
package net.torvald.terrarum.ui
|
||||||
|
|
||||||
import org.newdawn.slick.GameContainer
|
import net.torvald.terrarum.*
|
||||||
import org.newdawn.slick.Graphics
|
import net.torvald.terrarum.Terrarum.QUICKSLOT_MAX
|
||||||
import org.newdawn.slick.Input
|
import net.torvald.terrarum.gameactors.*
|
||||||
|
import net.torvald.terrarum.gameitem.InventoryItem
|
||||||
|
import org.newdawn.slick.*
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by SKYHi14 on 2017-03-13.
|
* Created by SKYHi14 on 2017-03-13.
|
||||||
*/
|
*/
|
||||||
class UIInventory : UICanvas {
|
class UIInventory(
|
||||||
override var width: Int
|
val actor: Pocketed,
|
||||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
override var width: Int,
|
||||||
set(value) {}
|
override var height: Int
|
||||||
override var height: Int
|
) : UICanvas {
|
||||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
|
||||||
set(value) {}
|
|
||||||
override var handler: UIHandler?
|
|
||||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
|
||||||
set(value) {}
|
|
||||||
override var openCloseTime: Int
|
|
||||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
|
||||||
set(value) {}
|
|
||||||
|
|
||||||
|
val inventory: ActorInventory
|
||||||
|
get() = actor.inventory
|
||||||
|
val actorValue: ActorValue
|
||||||
|
get() = (actor as Actor).actorValue
|
||||||
|
|
||||||
private val categories = arrayOf(
|
override var handler: UIHandler? = null
|
||||||
"GAME_INVENTORY_WEAPONS", // weapons and tools
|
override var openCloseTime: Int = UICanvas.OPENCLOSE_GENERIC
|
||||||
"CONTEXT_ITEM_TOOL_PLURAL",
|
|
||||||
"CONTEXT_ITEM_ARMOR",
|
val itemImagePlaceholder = Image("./assets/item_kari_24.tga")
|
||||||
"GAME_INVENTORY_INGREDIENTS",
|
|
||||||
"GAME_INVENTORY_POTIONS",
|
val catButtonsToCatIdent = HashMap<String, String>()
|
||||||
"CONTEXT_ITEM_MAGIC",
|
|
||||||
"GAME_INVENTORY_BLOCKS",
|
val backgroundColour = Color(0x1c1c1c)
|
||||||
"GAME_INVENTORY_WALLS",
|
|
||||||
"MENU_LABEL_ALL"
|
init {
|
||||||
|
catButtonsToCatIdent.put("GAME_INVENTORY_WEAPONS", InventoryItem.Category.WEAPON)
|
||||||
|
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)
|
||||||
|
catButtonsToCatIdent.put("CONTEXT_ITEM_MAGIC", InventoryItem.Category.MAGIC)
|
||||||
|
catButtonsToCatIdent.put("GAME_INVENTORY_BLOCKS", InventoryItem.Category.BLOCK)
|
||||||
|
catButtonsToCatIdent.put("GAME_INVENTORY_WALLS", InventoryItem.Category.WALL)
|
||||||
|
catButtonsToCatIdent.put("GAME_GENRE_MISC", InventoryItem.Category.MISC)
|
||||||
|
|
||||||
|
// special filter
|
||||||
|
catButtonsToCatIdent.put("MENU_LABEL_ALL", "__all__")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
val itemStripGutterV = 6
|
||||||
|
val itemStripGutterH = 8
|
||||||
|
val itemInterColGutter = 8
|
||||||
|
|
||||||
|
val catButtons = UIItemTextButtonList(
|
||||||
|
this,
|
||||||
|
arrayOf(
|
||||||
|
"MENU_LABEL_ALL",
|
||||||
|
"GAME_INVENTORY_WEAPONS", // weapons and tools
|
||||||
|
"CONTEXT_ITEM_TOOL_PLURAL",
|
||||||
|
"CONTEXT_ITEM_ARMOR",
|
||||||
|
"GAME_INVENTORY_INGREDIENTS",
|
||||||
|
"GAME_INVENTORY_POTIONS",
|
||||||
|
"CONTEXT_ITEM_MAGIC",
|
||||||
|
"GAME_INVENTORY_BLOCKS",
|
||||||
|
"GAME_INVENTORY_WALLS",
|
||||||
|
"GAME_GENRE_MISC"
|
||||||
|
//"GAME_INVENTORY_FAVORITES",
|
||||||
|
),
|
||||||
|
width = (width / 3 / 100) * 100, // chop to hundreds unit (100, 200, 300, ...) with the black magic of integer division
|
||||||
|
height = height,
|
||||||
|
verticalGutter = itemStripGutterH,
|
||||||
|
readFromLang = true,
|
||||||
|
textAreaWidth = 100,
|
||||||
|
defaultSelection = 0,
|
||||||
|
iconSpriteSheet = SpriteSheet("./assets/graphics/gui/inventory/category.tga", 20, 20),
|
||||||
|
iconSpriteSheetIndices = intArrayOf(9,0,1,2,3,4,5,6,7,8),
|
||||||
|
highlightBackCol = backgroundColour screen Color(0x0c0c0c),
|
||||||
|
highlightBackBlendMode = BlendMode.NORMAL,
|
||||||
|
backgroundCol = Color(0x383838),
|
||||||
|
kinematic = true
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val itemsStripWidth = ((width - catButtons.width) - (2 * itemStripGutterH + itemInterColGutter)) / 2
|
||||||
|
val items = Array(
|
||||||
|
2 + height / (UIItemInventoryElem.height + itemStripGutterV) * 2, {
|
||||||
|
UIItemInventoryElem(
|
||||||
|
parentUI = this,
|
||||||
|
posX = catButtons.width + if (it % 2 == 0) itemStripGutterH else (itemStripGutterH + itemsStripWidth + itemInterColGutter),
|
||||||
|
posY = itemStripGutterH + it / 2 * (UIItemInventoryElem.height + itemStripGutterV),
|
||||||
|
width = itemsStripWidth,
|
||||||
|
item = null,
|
||||||
|
amount = UIItemInventoryElem.UNIQUE_ITEM_HAS_NO_AMOUNT,
|
||||||
|
itemImage = null,
|
||||||
|
mouseoverBackCol = Color(0x282828),
|
||||||
|
mouseoverBackBlendMode = BlendMode.SCREEN,
|
||||||
|
drawBackOnNull = false
|
||||||
|
//backCol = Color(0x101010),
|
||||||
|
//backBlendMode = BlendMode.SCREEN
|
||||||
|
) })
|
||||||
|
val itemsScrollOffset = 0
|
||||||
|
|
||||||
|
var inventorySortList = ArrayList<InventoryPair>()
|
||||||
|
var rebuildList = true
|
||||||
|
|
||||||
|
private var oldCatSelect = -1
|
||||||
|
|
||||||
override fun update(gc: GameContainer, delta: Int) {
|
override fun update(gc: GameContainer, delta: Int) {
|
||||||
TODO("not implemented")
|
Terrarum.gameLocale = "koKR" // hot swap this to test
|
||||||
|
|
||||||
|
catButtons.update(gc, delta)
|
||||||
|
|
||||||
|
|
||||||
|
// monitor and check if category selection has been changed
|
||||||
|
if (oldCatSelect != catButtons.selectedIndex) {
|
||||||
|
rebuildList = true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (rebuildList) {
|
||||||
|
val filter = catButtonsToCatIdent[catButtons.selectedButton.labelText]
|
||||||
|
|
||||||
|
inventorySortList = ArrayList<InventoryPair>()
|
||||||
|
|
||||||
|
// filter items
|
||||||
|
inventory.forEach {
|
||||||
|
if (it.item.category == filter || filter == "__all__")
|
||||||
|
inventorySortList.add(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
rebuildList = false
|
||||||
|
|
||||||
|
// sort if needed
|
||||||
|
// test sort by name
|
||||||
|
inventorySortList.sortBy { it.item.name }
|
||||||
|
|
||||||
|
// map sortList to item list
|
||||||
|
for (k in 0..items.size - 1) {
|
||||||
|
try {
|
||||||
|
val sortListItem = inventorySortList[k + itemsScrollOffset]
|
||||||
|
items[k].item = sortListItem.item
|
||||||
|
items[k].amount = sortListItem.amount
|
||||||
|
items[k].itemImage = itemImagePlaceholder
|
||||||
|
|
||||||
|
// set quickslot number
|
||||||
|
for (qs in 1..QUICKSLOT_MAX) {
|
||||||
|
if (sortListItem.item.id == actorValue.getAsInt(AVKey.__PLAYER_QSPREFIX + qs)) {
|
||||||
|
items[k].quickslot = qs % 10 // 10 -> 0, 1..9 -> 1..9
|
||||||
|
break
|
||||||
|
}
|
||||||
|
else
|
||||||
|
items[k].quickslot = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e: IndexOutOfBoundsException) {
|
||||||
|
items[k].item = null
|
||||||
|
items[k].amount = 0
|
||||||
|
items[k].itemImage = null
|
||||||
|
items[k].quickslot = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
oldCatSelect = catButtons.selectedIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun render(gc: GameContainer, g: Graphics) {
|
override fun render(gc: GameContainer, g: Graphics) {
|
||||||
TODO("not implemented")
|
g.color = backgroundColour
|
||||||
|
g.fillRect(0f, 0f, width.toFloat(), height.toFloat())
|
||||||
|
|
||||||
|
catButtons.render(gc, g)
|
||||||
|
|
||||||
|
|
||||||
|
items.forEach {
|
||||||
|
it.render(gc, g)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processInput(gc: GameContainer, delta: Int, input: Input) {
|
override fun processInput(gc: GameContainer, delta: Int, input: Input) {
|
||||||
TODO("not implemented")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun doOpening(gc: GameContainer, delta: Int) {
|
override fun doOpening(gc: GameContainer, delta: Int) {
|
||||||
TODO("not implemented")
|
UICanvas.doOpeningFade(handler, openCloseTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun doClosing(gc: GameContainer, delta: Int) {
|
override fun doClosing(gc: GameContainer, delta: Int) {
|
||||||
TODO("not implemented")
|
UICanvas.doClosingFade(handler, openCloseTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun endOpening(gc: GameContainer, delta: Int) {
|
override fun endOpening(gc: GameContainer, delta: Int) {
|
||||||
TODO("not implemented")
|
UICanvas.endOpeningFade(handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun endClosing(gc: GameContainer, delta: Int) {
|
override fun endClosing(gc: GameContainer, delta: Int) {
|
||||||
TODO("not implemented")
|
UICanvas.endClosingFade(handler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,7 @@ class UIItemTextButtonList(
|
|||||||
val iconSpriteSheetIndices: IntArray? = null,
|
val iconSpriteSheetIndices: IntArray? = null,
|
||||||
|
|
||||||
// copied directly from UIItemTextButton
|
// copied directly from UIItemTextButton
|
||||||
val activeCol: Color = Color(0xffffff),
|
val activeCol: Color = Color(0xfff066),
|
||||||
val activeBackCol: Color = Color(0,0,0,0),
|
val activeBackCol: Color = Color(0,0,0,0),
|
||||||
val activeBackBlendMode: String = BlendMode.NORMAL,
|
val activeBackBlendMode: String = BlendMode.NORMAL,
|
||||||
val highlightCol: Color = Color(0x00f8ff),
|
val highlightCol: Color = Color(0x00f8ff),
|
||||||
|
|||||||
Reference in New Issue
Block a user