new inventory category 'fixtures'; fixture code refactoring

This commit is contained in:
minjaesong
2023-10-04 01:03:40 +09:00
parent fc8138f3b1
commit 9a527a4508
25 changed files with 73 additions and 158 deletions

View File

@@ -15,27 +15,14 @@ import net.torvald.terrarum.modulecomputers.gameactors.FixtureHomeComputer
/**
* Created by minjaesong on 2021-12-04.
*/
class ItemHomeComputer(originalID: ItemID) : GameItem(originalID) {
class ItemHomeComputer(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulecomputers.gameactors.FixtureHomeComputer") {
override var dynamicID: ItemID = originalID
override var baseMass = 20.0
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = FixtureItemBase.getItemImageFromSheet("dwarventech", "sprites/fixtures/desktop_computer.tga", TerrarumAppConfiguration.TILE_SIZE, TerrarumAppConfiguration.TILE_SIZE)
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_DESKTOP_COMPUTER"
}
override fun startPrimaryUse(actor: ActorWithBody, delta: Float) = mouseInInteractableRange(actor) { _, _, mtx, mty ->
val item = FixtureHomeComputer()
if (item.spawn(mtx, mty, if (actor is IngamePlayer) actor.uuid else null)) 1L else -1L
// return true when placed, false when cannot be placed
}
override var originalName = "ITEM_DESKTOP_COMPUTER"
}

Binary file not shown.

View File

@@ -1,5 +1,6 @@
{
"CONTEXT_GENERATOR_SEED": "Seed",
"CONTEXT_ITEM_FIXTURES": "Fixtures",
"CONTEXT_ITEM_MAP": "Map",
"CONTEXT_ITEM_TOOL_PLURAL": "Tools",
"CONTEXT_PLACE_COORDINATE": "Coordinate",

View File

@@ -1,5 +1,6 @@
{
"CONTEXT_GENERATOR_SEED": "시드",
"CONTEXT_ITEM_FIXTURES": "기구",
"CONTEXT_ITEM_MAP": "지도",
"CONTEXT_ITEM_TOOL_PLURAL": "도구",
"CONTEXT_PLACE_COORDINATE": "좌표",

View File

@@ -177,6 +177,11 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo
forceAddActor(it)
}
blockMarkingActor.let {
it.unsetGhost()
it.setGhostColourNone()
}
gameInitialised = true
}

View File

@@ -39,7 +39,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
# Windows -- C:\Users\<username>\AppData\Roaming\Terrarum
# macOS -- /Users/<username>/Library/Application Support/Terrarum
# Linux -- /home/<username>/.Terrarum
# Please refrain from removing 'basegame' on the load order -- it may render the game unpalyable.
# Please refrain from removing 'basegame' on the load order -- it may render the game unplayable.
basegame
"""
@@ -66,6 +66,7 @@ basegame
// Commit counts up to the Release 0.3.0: 2259
// Commit counts up to the Release 0.3.1: 2278
// Commit counts up to the Release 0.3.2: 2732
// Commit counts up to the Release 0.3.3: ????
const val VERSION_TAG: String = ""

View File

@@ -26,30 +26,33 @@ class UIItemInventoryCatBar(
}
internal val catIcons: TextureRegionPack = CommonResourcePool.getAsTextureRegionPack("inventory_category")
internal val catArrangement: IntArray = intArrayOf(9,6,7,1,0,2,3,4,5,8)
private val catArrangement: IntArray = intArrayOf(9,6,7,1,0,2,1_011,3,4,5,8) // icon order
internal val catIconsMeaning = listOf( // sortedBy: catArrangement
arrayOf(GameItem.Category.WEAPON),
arrayOf(GameItem.Category.TOOL, GameItem.Category.WIRE),
arrayOf(GameItem.Category.ARMOUR),
arrayOf(GameItem.Category.GENERIC),
arrayOf(GameItem.Category.POTION),
arrayOf(GameItem.Category.MAGIC),
arrayOf(GameItem.Category.BLOCK),
arrayOf(GameItem.Category.WALL),
arrayOf(GameItem.Category.MISC),
arrayOf(CAT_ALL)
arrayOf(CAT_ALL),
arrayOf(GameItem.Category.BLOCK),
arrayOf(GameItem.Category.WALL),
arrayOf(GameItem.Category.TOOL, GameItem.Category.WIRE),
arrayOf(GameItem.Category.WEAPON),
arrayOf(GameItem.Category.ARMOUR),
arrayOf(GameItem.Category.FIXTURE),
arrayOf(GameItem.Category.GENERIC),
arrayOf(GameItem.Category.POTION),
arrayOf(GameItem.Category.MAGIC),
arrayOf(GameItem.Category.MISC),
)
internal val catIconsLabels = listOf(
{ Lang["GAME_INVENTORY_WEAPONS"] },
{ Lang["MENU_LABEL_ALL"] },
{ Lang["GAME_INVENTORY_BLOCKS"] },
{ Lang["GAME_INVENTORY_WALLS"] },
{ Lang["CONTEXT_ITEM_TOOL_PLURAL"] },
{ Lang["GAME_INVENTORY_WEAPONS"] },
{ Lang["CONTEXT_ITEM_ARMOR"] },
{ Lang["CONTEXT_ITEM_FIXTURES"] },
{ Lang["GAME_INVENTORY_INGREDIENTS"] },
{ Lang["GAME_INVENTORY_POTIONS"] },
{ Lang["CONTEXT_ITEM_MAGIC"] },
{ Lang["GAME_INVENTORY_BLOCKS"] },
{ Lang["GAME_INVENTORY_WALLS"] },
{ Lang["GAME_GENRE_MISC"] },
{ Lang["MENU_LABEL_ALL"] },
)
@@ -60,11 +63,11 @@ class UIItemInventoryCatBar(
private val mainButtons: Array<UIItemImageButton>
private val buttonGapSize = (width.toFloat() - (catArrangement.size * catIcons.tileW)) / (catArrangement.size)
/** raw order */
private var selectedIndex = 0 // default to ALL
var selectedIndex = 0 // default to ALL
private set
/** re-arranged order */
val selectedIcon: Int
get() = catArrangement[selectedIndex]
// val selectedIcon: Int
// get() = catArrangement[selectedIndex]
private val sideButtons: Array<UIItemImageButton>
@@ -75,9 +78,13 @@ class UIItemInventoryCatBar(
val iconPosX = ((buttonGapSize / 2) + index * (catIcons.tileW + buttonGapSize)).roundToInt()
val iconPosY = 0
val iconIndex = catArrangement[index]
val iconIndexX = iconIndex % 1000
val iconIndexY = iconIndex / 1000
UIItemImageButton(
inventoryUI,
catIcons.get(catArrangement[index], 0),
catIcons.get(iconIndexX, iconIndexY),
activeBackCol = Color(0),
backgroundCol = Color(0),
highlightBackCol = Color(0),
@@ -291,7 +298,7 @@ class UIItemInventoryCatBar(
// label
batch.color = Color.WHITE
catIconsLabels[selectedIcon]().let {
catIconsLabels[selectedIndex]().let {
App.fontGame.draw(batch, it, posX + ((width - App.fontGame.getWidth(it)) / 2), posY + highlighterYPos + 4)
}
}

View File

@@ -52,7 +52,7 @@ abstract class GameItem(val originalID: ItemID) : Comparable<GameItem>, Cloneabl
* - `BLOCK_AIR` Prints out `Lang.get("BLOCK_AIR")`
* - `BLOCK_AIR>>=BLOCK_WALL_NAME_TEMPLATE` Prints out `Formatter().format(Lang.get("BLOCK_WALL_NAME_TEMPLATE"), Lang.get("BLOCK_AIR")).toString()`
*/
@Transient var originalName: String = ""
@Transient open var originalName: String = ""
var newName: String = ""
@@ -101,16 +101,8 @@ abstract class GameItem(val originalID: ItemID) : Comparable<GameItem>, Cloneabl
/**
* Where to equip the item.
*
* Can't use 'open val' as GSON doesn't like that. Initialise this property like:
*
* ```
* init {
* equipPosition = EquipPosition.HAND_GRIP
* }
* ```
*/
@Transient var equipPosition: Int = EquipPosition.NULL
@Transient open var equipPosition: Int = EquipPosition.NULL
internal val material: Material
get() = MaterialCodex.getOrDefault(materialId)

View File

@@ -154,7 +154,7 @@ open class GameWorld(
var weatherbox = Weatherbox()
init {
weatherbox.initWith(WeatherMixer.weatherDict["generic01"]!!, 3600L)
weatherbox.initWith(WeatherMixer.weatherDict["generic01"] ?: WeatherMixer.DEFAULT_WEATHER, 3600L)
val currentWeather = weatherbox.currentWeather
// TEST FILL WITH RANDOM VALUES
(0..6).map { WeatherMixer.takeUniformRand(0f..1f) }.let {

View File

@@ -107,8 +107,7 @@ class EntryPoint : ModuleEntryPoint() {
// }
init {
equipPosition = EquipPosition.HAND_GRIP
tags.addAll(tile.tags)
tags.addAll(tile.tags)
originalName =
if (isWall && tags.contains("UNLIT")) "${tile.nameKey}>>=BLOCK_UNLIT_TEMPLATE>>=BLOCK_WALL_NAME_TEMPLATE"
else if (isWall) "${tile.nameKey}>>=BLOCK_WALL_NAME_TEMPLATE"

View File

@@ -39,10 +39,13 @@ open class FixtureItemBase(originalID: ItemID, val fixtureClassName: String) : G
@Transient private var ghostInit = AtomicBoolean(false)
override var dynamicID: ItemID = originalID
override var baseMass = 1.0
override var inventoryCategory = Category.MISC
@Transient override var baseMass = 1.0
@Transient override var inventoryCategory = Category.FIXTURE
override val isDynamic = false
override val materialId = ""
@Transient override val materialId = ""
@Transient override var equipPosition: Int = EquipPosition.HAND_GRIP
/**
* Do not address the CommonResourcePool directly; just do it like this snippet:

View File

@@ -12,18 +12,13 @@ class ItemLogicSignalEmitter(originalID: ItemID) : FixtureItemBase(originalID, "
override var dynamicID: ItemID = originalID
override var baseMass = FixtureLogicSignalEmitter.MASS
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = getItemImageFromSingleImage("basegame", "sprites/fixtures/signal_source.tga")
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_LOGIC_SIGNAL_EMITTER"
}
override var originalName = "ITEM_LOGIC_SIGNAL_EMITTER"
override fun effectWhileEquipped(actor: ActorWithBody, delta: Float) {
super.effectWhileEquipped(actor, delta)

View File

@@ -14,16 +14,11 @@ class ItemStorageChest(originalID: ItemID) : FixtureItemBase(originalID, "net.to
override var dynamicID: ItemID = originalID
override var baseMass = FixtureTikiTorch.MASS
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsTextureRegion("itemplaceholder_48")
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_STORAGE_CHEST"
}
override var originalName = "ITEM_STORAGE_CHEST"
}

View File

@@ -14,22 +14,12 @@ class ItemSwingingDoorOak(originalID: ItemID) :
override var dynamicID: ItemID = originalID
override var baseMass = 20.0 // 360[L] * 0.1 * 0.56[SpecificGravity], rounded to the nearest integer
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(8,3)
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_DOOR_OAK"
}
@Transient override val makeFixture: () -> FixtureBase = {
FixtureSwingingDoorOak()
}
override var originalName = "ITEM_DOOR_OAK"
}
class ItemSwingingDoorEbony(originalID: ItemID) :
@@ -37,22 +27,12 @@ class ItemSwingingDoorEbony(originalID: ItemID) :
override var dynamicID: ItemID = originalID
override var baseMass = 30.0 // 360[L] * 0.1 * 0.82[SpecificGravity], rounded to the nearest integer
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(9,3)
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_DOOR_EBONY"
}
@Transient override val makeFixture: () -> FixtureBase = {
FixtureSwingingDoorEbony()
}
override var originalName = "ITEM_DOOR_EBONY"
}
class ItemSwingingDoorBirch(originalID: ItemID) :
@@ -60,22 +40,12 @@ class ItemSwingingDoorBirch(originalID: ItemID) :
override var dynamicID: ItemID = originalID
override var baseMass = 17.0 // 360[L] * 0.1 * 0.48[SpecificGravity], rounded to the nearest integer
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(10,3)
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_DOOR_BIRCH"
}
@Transient override val makeFixture: () -> FixtureBase = {
FixtureSwingingDoorBirch()
}
override var originalName = "ITEM_DOOR_BIRCH"
}
class ItemSwingingDoorRosewood(originalID: ItemID) :
@@ -83,20 +53,10 @@ class ItemSwingingDoorRosewood(originalID: ItemID) :
override var dynamicID: ItemID = originalID
override var baseMass = 24.0 // 360[L] * 0.1 * 0.68[SpecificGravity], rounded to the nearest integer
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(11,3)
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_DOOR_ROSEWOOD"
}
@Transient override val makeFixture: () -> FixtureBase = {
FixtureSwingingDoorRosewood()
}
override var originalName = "ITEM_DOOR_ROSEWOOD"
}

View File

@@ -16,17 +16,12 @@ class ItemTapestry(originalID: ItemID) : FixtureItemBase(originalID, "net.torval
override var dynamicID: ItemID = originalID
override var baseMass = 6.0
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsTextureRegion("itemplaceholder_16")
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_TAPESTRY"
}
override var originalName = "ITEM_TAPESTRY"
@Transient override val makeFixture: () -> FixtureBase = {
FixtureTapestry(

View File

@@ -12,17 +12,12 @@ class ItemTikiTorch(originalID: ItemID) : FixtureItemBase(originalID, "net.torva
override var dynamicID: ItemID = originalID
override var baseMass = FixtureTikiTorch.MASS
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = getItemImageFromSheet("basegame", "sprites/fixtures/tiki_torch.tga", 16, 32)
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_TIKI_TORCH"
}
override var originalName = "ITEM_TIKI_TORCH"
}

View File

@@ -12,17 +12,12 @@ class ItemTypewriter(originalID: ItemID) : FixtureItemBase(originalID, "net.torv
override var dynamicID: ItemID = originalID
override var baseMass = FixtureTikiTorch.MASS
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = getItemImageFromSheet("basegame", "sprites/fixtures/typewriter.tga", 32, 16)
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_TYPEWRITER"
}
override var originalName = "ITEM_TYPEWRITER"
}

View File

@@ -11,17 +11,12 @@ class ItemWallCalendar(originalID: ItemID) : FixtureItemBase(originalID, "net.to
override var dynamicID: ItemID = originalID
override var baseMass = 1.0
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = getItemImageFromSingleImage("basegame", "sprites/fixtures/calendar.tga")
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_CALENDAR"
}
override var originalName = "ITEM_CALENDAR"
}

View File

@@ -10,18 +10,12 @@ class ItemWorkbench(originalID: ItemID) : FixtureItemBase(originalID, "net.torva
override var baseMass = 20.0
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = getItemImageFromSingleImage("basegame", "sprites/fixtures/workbench.tga")
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_WORKBENCH"
}
override var originalName = "ITEM_WORKBENCH"
}

View File

@@ -12,17 +12,11 @@ class ItemWorldPortal(originalID: ItemID) : FixtureItemBase(originalID, "net.tor
override var dynamicID: ItemID = originalID
override var baseMass = 6000.0
override var inventoryCategory = Category.MISC
override val isDynamic = false
override val materialId = ""
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(3,3)
override var baseToolSize: Double? = baseMass
init {
equipPosition = EquipPosition.HAND_GRIP
originalName = "ITEM_WORLD_PORTAL"
}
override var originalName = "ITEM_WORLD_PORTAL"
}

View File

@@ -72,7 +72,7 @@ internal class UIInventoryCells(
fun rebuildList() {
// App.printdbg(this, "rebuilding list")
itemList.rebuild(full.catBar.catIconsMeaning[full.catBar.selectedIcon])
itemList.rebuild(full.catBar.catIconsMeaning[full.catBar.selectedIndex])
equipped.rebuild()
encumbrancePerc = full.actor.inventory.encumberment.toFloat()
@@ -81,7 +81,7 @@ internal class UIInventoryCells(
fun resetStatusAsCatChanges(oldcat: Int?, newcat: Int) {
itemList.itemPage = 0 // set scroll to zero
itemList.rebuild(full.catBar.catIconsMeaning[full.catBar.catArrangement[newcat]]) // have to manually rebuild, too!
itemList.rebuild(full.catBar.catIconsMeaning[newcat]) // have to manually rebuild, too!
}
override fun updateUI(delta: Float) {

View File

@@ -176,6 +176,7 @@ class UINewWorld(val remoCon: UIRemoCon) : UICanvas() {
val ingame = TerrarumIngame(App.batch)
val playerDisk = existingPlayer ?: App.savegamePlayers[UILoadGovernor.playerUUID]!!.loadable()
playerDisk.rebuild()
val player = ReadActor.invoke(
playerDisk,
ByteArray64Reader(playerDisk.getFile(SAVEGAMEINFO)!!.bytes, Common.CHARSET)

View File

@@ -131,8 +131,8 @@ internal class UIStorageChest : UICanvas(
}
private fun itemListUpdate() {
itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIcon])
itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIcon])
itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIndex])
itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIndex])
encumbrancePerc = getPlayerInventory().capacity.toFloat() / getPlayerInventory().maxCapacity
isEncumbered = getPlayerInventory().isEncumbered
@@ -143,13 +143,13 @@ internal class UIStorageChest : UICanvas(
itemListChest.navRemoCon.gridModeButtons[0].highlighted = !yes
itemListChest.navRemoCon.gridModeButtons[1].highlighted = yes
itemListChest.itemPage = 0
itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIcon])
itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIndex])
itemListPlayer.isCompactMode = yes
itemListPlayer.navRemoCon.gridModeButtons[0].highlighted = !yes
itemListPlayer.navRemoCon.gridModeButtons[1].highlighted = yes
itemListPlayer.itemPage = 0
itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIcon])
itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIndex])
itemListUpdate()
}

View File

@@ -123,8 +123,8 @@ class UIWorldPortalCargo(val full: UIWorldPortal) : UICanvas(), HasInventory {
}
private fun itemListUpdate() {
itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIcon])
itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIcon])
itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIndex])
itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIndex])
encumbrancePerc = getPlayerInventory().capacity.toFloat() / getPlayerInventory().maxCapacity
isEncumbered = getPlayerInventory().isEncumbered
@@ -135,13 +135,13 @@ class UIWorldPortalCargo(val full: UIWorldPortal) : UICanvas(), HasInventory {
itemListChest.navRemoCon.gridModeButtons[0].highlighted = !yes
itemListChest.navRemoCon.gridModeButtons[1].highlighted = yes
itemListChest.itemPage = 0
itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIcon])
itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIndex])
itemListPlayer.isCompactMode = yes
itemListPlayer.navRemoCon.gridModeButtons[0].highlighted = !yes
itemListPlayer.navRemoCon.gridModeButtons[1].highlighted = yes
itemListPlayer.itemPage = 0
itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIcon])
itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIndex])
itemListUpdate()
}

View File

@@ -181,7 +181,7 @@ internal object WeatherMixer : RNGConsumer {
weatherDB[weather.classification]!!.add(weather)
}
weatherDict["titlescreen"] = weatherDB[WEATHER_GENERIC]!![0].copy(identifier = "titlescreen", windSpeed = 1f)
weatherDict["titlescreen"] = weatherDB[WEATHER_GENERIC]?.get(0)?.copy(identifier = "titlescreen", windSpeed = 1f) ?: DEFAULT_WEATHER
}
/**