inventory encumberment now takes player scale into account

This commit is contained in:
minjaesong
2024-02-20 15:49:11 +09:00
parent a5953b8c87
commit 063483cfda
14 changed files with 68 additions and 29 deletions

View File

@@ -1,3 +1,6 @@
->Lang:MENU_OPTIONS_GAMEPLAY->h1 ->Lang:MENU_OPTIONS_GAMEPLAY->h1
gameplay_max_crafting->Lang:MENU_OPTIONS_MAX_CRAFTING->spinner,100,1000,100 gameplay_max_crafting->Lang:MENU_OPTIONS_MAX_CRAFTING->spinner,100,1000,100
showpickaxetooltip->Lang:MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING->toggle showpickaxetooltip->Lang:MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING->toggle
->Lang:MENU_OPTIONS_UNIT_OF_MEASUREMENT->h1
gameplay_unit_distance->Lang:MENU_OPTIONS_DISTANCE_UNIT->textsel,meter=MENU_OPTIONS_UNIT_METRIC,foot=MENU_OPTIONS_UNIT_FEET,block=MENU_OPTIONS_UNIT_BLOCKS
gameplay_unit_temperature->Lang:MENU_OPTIONS_TEMPERATURE_UNIT->textsel,celsius=MENU_OPTIONS_UNIT_CELSIUS_DNT,fahrenheit=MENU_OPTIONS_UNIT_FAHRENHEIT_DNT,kelvin=MENU_OPTIONS_UNIT_KELVIN_DNT
1 ->Lang:MENU_OPTIONS_GAMEPLAY->h1
2 gameplay_max_crafting->Lang:MENU_OPTIONS_MAX_CRAFTING->spinner,100,1000,100
3 showpickaxetooltip->Lang:MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING->toggle
4 ->Lang:MENU_OPTIONS_UNIT_OF_MEASUREMENT->h1
5 gameplay_unit_distance->Lang:MENU_OPTIONS_DISTANCE_UNIT->textsel,meter=MENU_OPTIONS_UNIT_METRIC,foot=MENU_OPTIONS_UNIT_FEET,block=MENU_OPTIONS_UNIT_BLOCKS
6 gameplay_unit_temperature->Lang:MENU_OPTIONS_TEMPERATURE_UNIT->textsel,celsius=MENU_OPTIONS_UNIT_CELSIUS_DNT,fahrenheit=MENU_OPTIONS_UNIT_FAHRENHEIT_DNT,kelvin=MENU_OPTIONS_UNIT_KELVIN_DNT

View File

@@ -1,4 +1,6 @@
{ {
"gameplay_max_crafting": 100, "gameplay_max_crafting": 100,
"showpickaxetooltip": true "showpickaxetooltip": true,
"gameplay_unit_distance": "meter",
"gameplay_unit_temperature": "celsius"
} }

View File

@@ -0,0 +1,15 @@
{
"MENU_MONITOR_CALI_TITLE": "Check Monitor",
"MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING": "Show Ore Tooltip When Mining",
"MENU_OPTIONS_MAX_CRAFTING": "Max Number of Items for Crafting",
"MENU_OPTIONS_UNIT_BLOCKS": "Blocks",
"MENU_OPTIONS_UNIT_FEET": "Imperial",
"MENU_OPTIONS_UNIT_METRIC": "Metric",
"MENU_OPTIONS_UNIT_OF_MEASUREMENT": "Unit of Measurement",
"MENU_OPTIONS_DISTANCE_UNIT": "Distance",
"MENU_OPTIONS_TEMPERATURE_UNIT": "Temperature",
"MENU_OPTIONS_UNIT_CELSIUS_DNT": "°C",
"MENU_OPTIONS_UNIT_FAHRENHEIT_DNT": "°F",
"MENU_OPTIONS_UNIT_KELVIN_DNT": "K"
}

View File

@@ -13,9 +13,6 @@
"MENU_LABEL_RENAME": "Rename", "MENU_LABEL_RENAME": "Rename",
"MENU_LABEL_USE_CODE": "Use Code", "MENU_LABEL_USE_CODE": "Use Code",
"MENU_MODE_BUILDINGMAKER": "POI Editor", "MENU_MODE_BUILDINGMAKER": "POI Editor",
"MENU_MONITOR_CALI_TITLE": "Check Monitor",
"MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING": "Show Ore Tooltip When Mining",
"MENU_OPTIONS_MAX_CRAFTING": "Max Number of Items for Crafting",
"MENU_UPDATE_UPDATE_AVAILABLE": "Update Available!", "MENU_UPDATE_UPDATE_AVAILABLE": "Update Available!",
"GAME_ACTION_GRAPPLE": "Grapple", "GAME_ACTION_GRAPPLE": "Grapple",
"GAME_ACTION_QUICKSEL": "Quick Select", "GAME_ACTION_QUICKSEL": "Quick Select",

View File

@@ -0,0 +1,11 @@
{
"MENU_MONITOR_CALI_TITLE": "모니터 확인",
"MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING": "채굴 시 광석 툴팁 보이기",
"MENU_OPTIONS_MAX_CRAFTING": "한번에 제작할 최대 아이템 수",
"MENU_OPTIONS_UNIT_BLOCKS": "블록",
"MENU_OPTIONS_UNIT_FEET": "피트",
"MENU_OPTIONS_UNIT_METRIC": "미터",
"MENU_OPTIONS_UNIT_OF_MEASUREMENT": "측정 단위",
"MENU_OPTIONS_DISTANCE_UNIT": "거리",
"MENU_OPTIONS_TEMPERATURE_UNIT": "온도"
}

View File

@@ -12,9 +12,6 @@
"MENU_LABEL_PREV_SAVES": "이전 세이브", "MENU_LABEL_PREV_SAVES": "이전 세이브",
"MENU_LABEL_RENAME": "이름 바꾸기", "MENU_LABEL_RENAME": "이름 바꾸기",
"MENU_LABEL_USE_CODE": "코드 사용", "MENU_LABEL_USE_CODE": "코드 사용",
"MENU_MONITOR_CALI_TITLE": "모니터 확인",
"MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING": "채굴 시 광석 툴팁 보이기",
"MENU_OPTIONS_MAX_CRAFTING": "한번에 제작할 최대 아이템 수",
"MENU_UPDATE_UPDATE_AVAILABLE": "새 업데이트가 있습니다!", "MENU_UPDATE_UPDATE_AVAILABLE": "새 업데이트가 있습니다!",
"GAME_ACTION_GRAPPLE": "매달리기", "GAME_ACTION_GRAPPLE": "매달리기",
"GAME_ACTION_QUICKSEL": "빠른 선택", "GAME_ACTION_QUICKSEL": "빠른 선택",

View File

@@ -8,6 +8,7 @@ import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.gameitems.ItemID import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.modulebasegame.ui.UIQuickslotBar import net.torvald.terrarum.modulebasegame.ui.UIQuickslotBar
import net.torvald.terrarum.sqr
/** /**
* Created by minjaesong on 2016-03-15. * Created by minjaesong on 2016-03-15.
@@ -38,6 +39,21 @@ class ActorInventory() : FixtureInventory() {
field = value field = value
} }
val maxCapacityByActor: Double
get() = maxCapacity * ((actor.actorValue.getAsDouble(AVKey.SCALE) ?: 1.0) * (actor.actorValue.getAsDouble(AVKey.SCALEBUFF) ?: 1.0)).sqr()
/**
* How encumbered the actor is. 1.0 if weight of the items are exactly same as the capacity limit, >1.0 if encumbered.
*/
override val encumberment: Double
get() = if (capacityMode == CAPACITY_MODE_NO_ENCUMBER)
0.0
else if (capacityMode == CAPACITY_MODE_WEIGHT)
capacity / maxCapacityByActor
else
0.0
/** /**
* List of all equipped items (tools, armours, rings, necklaces, etc.) * List of all equipped items (tools, armours, rings, necklaces, etc.)
* *

View File

@@ -254,7 +254,7 @@ open class FixtureInventory() {
/** /**
* How encumbered the actor is. 1.0 if weight of the items are exactly same as the capacity limit, >1.0 if encumbered. * How encumbered the actor is. 1.0 if weight of the items are exactly same as the capacity limit, >1.0 if encumbered.
*/ */
val encumberment: Double open val encumberment: Double
get() = if (capacityMode == CAPACITY_MODE_NO_ENCUMBER) get() = if (capacityMode == CAPACITY_MODE_NO_ENCUMBER)
0.0 0.0
else if (capacityMode == CAPACITY_MODE_WEIGHT) else if (capacityMode == CAPACITY_MODE_WEIGHT)

View File

@@ -1,11 +1,12 @@
package net.torvald.terrarum.modulebasegame.ui package net.torvald.terrarum.modulebasegame.ui
import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory
import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory
interface HasInventory { interface HasInventory {
fun getNegotiator(): InventoryTransactionNegotiator fun getNegotiator(): InventoryTransactionNegotiator
fun getFixtureInventory(): FixtureInventory fun getFixtureInventory(): FixtureInventory
fun getPlayerInventory(): FixtureInventory fun getPlayerInventory(): ActorInventory
} }

View File

@@ -11,6 +11,7 @@ import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.gameitems.isWall import net.torvald.terrarum.gameitems.isWall
import net.torvald.terrarum.itemproperties.CraftingCodex import net.torvald.terrarum.itemproperties.CraftingCodex
import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory
import net.torvald.terrarum.modulebasegame.gameactors.CraftingStation import net.torvald.terrarum.modulebasegame.gameactors.CraftingStation
import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory
import net.torvald.terrarum.modulebasegame.gameactors.InventoryPair import net.torvald.terrarum.modulebasegame.gameactors.InventoryPair
@@ -113,7 +114,7 @@ class UICrafting(val full: UIInventoryFull?) : UICanvas(
override fun getNegotiator() = negotiator override fun getNegotiator() = negotiator
override fun getFixtureInventory(): FixtureInventory = TODO() override fun getFixtureInventory(): FixtureInventory = TODO()
override fun getPlayerInventory(): FixtureInventory = INGAME.actorNowPlaying!!.inventory override fun getPlayerInventory(): ActorInventory = INGAME.actorNowPlaying!!.inventory
private val halfSlotOffset = (UIItemInventoryElemSimple.height + listGap) / 2 private val halfSlotOffset = (UIItemInventoryElemSimple.height + listGap) / 2
@@ -463,9 +464,7 @@ class UICrafting(val full: UIInventoryFull?) : UICanvas(
// let itemlists be sorted // let itemlists be sorted
itemListCraftable.rebuild() itemListCraftable.rebuild()
playerThings.rebuild(FILTER_CAT_ALL) playerThings.rebuild(FILTER_CAT_ALL)
encumbrancePerc = getPlayerInventory().let { encumbrancePerc = getPlayerInventory().encumberment.toFloat()
it.capacity.toFloat() / it.maxCapacity
}
} }
override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean { override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {

View File

@@ -7,6 +7,7 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.* import net.torvald.terrarum.*
import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid
import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory
import net.torvald.terrarum.modulebasegame.gameactors.DroppedItem import net.torvald.terrarum.modulebasegame.gameactors.DroppedItem
import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory
import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.CELLS_HOR import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.CELLS_HOR
@@ -36,7 +37,7 @@ internal class UIInventoryCells(
val weightBarWidth = UIItemInventoryElemSimple.height * 2f + UIItemInventoryItemGrid.listGap val weightBarWidth = UIItemInventoryElemSimple.height * 2f + UIItemInventoryItemGrid.listGap
// var encumbBarYPos = (App.scr.height + internalHeight).div(2) - 20 + 3f // var encumbBarYPos = (App.scr.height + internalHeight).div(2) - 20 + 3f
fun drawEncumbranceBar(batch: SpriteBatch, encumbBarXPos: Float, encumbBarYPos: Float, encumbrancePerc: Float, actorInventory: FixtureInventory) { fun drawEncumbranceBar(batch: SpriteBatch, encumbBarXPos: Float, encumbBarYPos: Float, encumbrancePerc: Float, actorInventory: ActorInventory) {
//draw player encumb //draw player encumb
// encumbrance meter // encumbrance meter
val encumbranceText = Lang["GAME_INVENTORY_ENCUMBRANCE"] val encumbranceText = Lang["GAME_INVENTORY_ENCUMBRANCE"]
@@ -75,7 +76,7 @@ internal class UIInventoryCells(
else else
"${(actorInventory.capacity * 100L).toLong() / 100.0}" "${(actorInventory.capacity * 100L).toLong() / 100.0}"
INGAME.setTooltipMessage("$capaStr/${actorInventory.maxCapacity}.0") INGAME.setTooltipMessage("$capaStr/${actorInventory.maxCapacityByActor}")
tooltipShowing[10001] = true tooltipShowing[10001] = true
} }
else { else {

View File

@@ -7,6 +7,7 @@ import net.torvald.colourutil.cieluv_getGradient
import net.torvald.terrarum.* import net.torvald.terrarum.*
import net.torvald.terrarum.App.printdbg import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory
import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory
import net.torvald.terrarum.modulebasegame.gameactors.FixtureSmelterBasic import net.torvald.terrarum.modulebasegame.gameactors.FixtureSmelterBasic
import net.torvald.terrarum.modulebasegame.gameactors.InventoryPair import net.torvald.terrarum.modulebasegame.gameactors.InventoryPair
@@ -128,7 +129,7 @@ class UISmelterBasic(val smelter: FixtureSmelterBasic) : UICanvas(
} }
} }
fun getPlayerInventory(): FixtureInventory = INGAME.actorNowPlaying!!.inventory fun getPlayerInventory(): ActorInventory = INGAME.actorNowPlaying!!.inventory
private var listModeButtonPushed = false private var listModeButtonPushed = false
@@ -357,9 +358,7 @@ class UISmelterBasic(val smelter: FixtureSmelterBasic) : UICanvas(
// let itemlists be sorted // let itemlists be sorted
inventoryFilter = { _: InventoryPair -> true } inventoryFilter = { _: InventoryPair -> true }
playerThings.rebuild(FILTER_CAT_ALL) playerThings.rebuild(FILTER_CAT_ALL)
encumbrancePerc = getPlayerInventory().let { encumbrancePerc = getPlayerInventory().encumberment.toFloat()
it.capacity.toFloat() / it.maxCapacity
}
} }
private var inventoryFilter = { _: InventoryPair -> true } private var inventoryFilter = { _: InventoryPair -> true }
@@ -368,17 +367,13 @@ class UISmelterBasic(val smelter: FixtureSmelterBasic) : UICanvas(
// let itemlists be sorted // let itemlists be sorted
inventoryFilter = filter inventoryFilter = filter
playerThings.rebuild(filter) playerThings.rebuild(filter)
encumbrancePerc = getPlayerInventory().let { encumbrancePerc = getPlayerInventory().encumberment.toFloat()
it.capacity.toFloat() / it.maxCapacity
}
} }
private fun itemListUpdateKeepCurrentFilter() { private fun itemListUpdateKeepCurrentFilter() {
// let itemlists be sorted // let itemlists be sorted
playerThings.rebuild(inventoryFilter) playerThings.rebuild(inventoryFilter)
encumbrancePerc = getPlayerInventory().let { encumbrancePerc = getPlayerInventory().encumberment.toFloat()
it.capacity.toFloat() / it.maxCapacity
}
} }
init { init {

View File

@@ -7,6 +7,7 @@ import net.torvald.terrarum.*
import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory
import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory
import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.getWidthOfCells import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.getWidthOfCells
import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryCellCommonRes.tooltipShowing import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryCellCommonRes.tooltipShowing
@@ -44,7 +45,7 @@ internal class UIStorageChest : UICanvas(
override fun getNegotiator() = negotiator override fun getNegotiator() = negotiator
override fun getFixtureInventory(): FixtureInventory = chestInventory override fun getFixtureInventory(): FixtureInventory = chestInventory
override fun getPlayerInventory(): FixtureInventory = INGAME.actorNowPlaying!!.inventory override fun getPlayerInventory(): ActorInventory = INGAME.actorNowPlaying!!.inventory
private val catBar: UIItemCatBar private val catBar: UIItemCatBar
private val itemListChest: UITemplateHalfInventory private val itemListChest: UITemplateHalfInventory

View File

@@ -7,6 +7,7 @@ import net.torvald.terrarum.*
import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory
import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory
import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryCellCommonRes.tooltipShowing import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryCellCommonRes.tooltipShowing
import net.torvald.terrarum.ui.* import net.torvald.terrarum.ui.*
@@ -36,7 +37,7 @@ class UIWorldPortalCargo(val full: UIWorldPortal) : UICanvas(), HasInventory {
override fun getNegotiator() = negotiator override fun getNegotiator() = negotiator
override fun getFixtureInventory(): FixtureInventory = chestInventory override fun getFixtureInventory(): FixtureInventory = chestInventory
override fun getPlayerInventory(): FixtureInventory = INGAME.actorNowPlaying!!.inventory override fun getPlayerInventory(): ActorInventory = INGAME.actorNowPlaying!!.inventory
private val catBar: UIItemCatBar private val catBar: UIItemCatBar
private val itemListChest: UIItemInventoryItemGrid private val itemListChest: UIItemInventoryItemGrid
@@ -155,7 +156,7 @@ class UIWorldPortalCargo(val full: UIWorldPortal) : UICanvas(), HasInventory {
itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIndex]) itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIndex])
itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIndex]) itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIndex])
encumbrancePerc = getPlayerInventory().capacity.toFloat() / getPlayerInventory().maxCapacity encumbrancePerc = (getPlayerInventory().capacity / getPlayerInventory().maxCapacityByActor).toFloat()
isEncumbered = getPlayerInventory().isEncumbered isEncumbered = getPlayerInventory().isEncumbered
} }