From 70e494e91d1b9068905a6bb570ed25eb1978128d Mon Sep 17 00:00:00 2001 From: Song Minjae Date: Fri, 16 Dec 2016 23:07:14 +0900 Subject: [PATCH] get operator on Tile/ItemPropCodex Former-commit-id: f6c4ecbad8c0ce2486524be70e68292d6aae799e Former-commit-id: 9738a693eb55861d1292e59d8df2bec7f5603c40 --- .../terrarum/gameactors/ActorWithBody.kt | 35 +++++++++++-------- .../terrarum/gameactors/DroppedItem.kt | 10 +++--- .../terrarum/gameactors/FixtureTikiTorch.kt | 4 +-- .../terrarum/gameactors/HumanoidNPC.kt | 5 ++- .../gameactors/PlayerBuilderSigrid.kt | 2 +- .../torvald/terrarum/gameitem/DynamicItem.kt | 10 +++--- .../terrarum/gameworld/WorldSimulator.kt | 8 ++--- .../terrarum/itemproperties/ItemPropCodex.kt | 12 +++---- .../terrarum/mapdrawer/LightmapRenderer.kt | 10 +++--- .../torvald/terrarum/mapdrawer/MapCamera.kt | 18 +++++----- .../terrarum/tileproperties/TilePropCodex.kt | 4 +-- .../worldobject/ComputerPartsCodex.kt | 10 +++--- 12 files changed, 65 insertions(+), 63 deletions(-) diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index fb102a943..b629b615c 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -26,16 +26,16 @@ open class ActorWithBody : Actor() { @Transient internal var sprite: SpriteAnimation? = null @Transient internal var spriteGlow: SpriteAnimation? = null - internal var drawMode: DrawMode = DrawMode.NORMAL + protected var drawMode: DrawMode = DrawMode.NORMAL @Transient private val world: GameWorld = Terrarum.ingame.world - var hitboxTranslateX: Double = 0.0// relative to spritePosX - var hitboxTranslateY: Double = 0.0// relative to spritePosY - var baseHitboxW: Int = 0 - var baseHitboxH: Int = 0 - internal var baseSpriteWidth: Int = 0 - internal var baseSpriteHeight: Int = 0 + protected var hitboxTranslateX: Double = 0.0// relative to spritePosX + protected var hitboxTranslateY: Double = 0.0// relative to spritePosY + protected var baseHitboxW: Int = 0 + protected var baseHitboxH: Int = 0 + protected var baseSpriteWidth: Int = 0 + protected var baseSpriteHeight: Int = 0 /** * * Position: top-left point * * Unit: pixel @@ -228,6 +228,11 @@ open class ActorWithBody : Actor() { internal @Volatile var walledLeft = false internal @Volatile var walledRight = false + protected val gameContainer: GameContainer + get() = Terrarum.appgc + protected val updateDelta: Int + get() = Terrarum.ingame.UPDATE_DELTA + /** * true: This actor had just made collision */ @@ -292,7 +297,7 @@ open class ActorWithBody : Actor() { val feetPosition: Vector2 get() = Vector2(hitbox.centeredX, hitbox.posY + hitbox.height) - override fun run() = update(Terrarum.appgc, Terrarum.ingame.UPDATE_DELTA) + override fun run() = update(gameContainer, updateDelta) /** * Add vector value to the velocity, in the time unit of single frame. @@ -681,7 +686,7 @@ open class ActorWithBody : Actor() { for (y in tyStart..tyEnd) { for (x in txStart..txEnd) { val tile = world.getTileFromTerrain(x, y) - if (TilePropCodex.getProp(tile).isSolid) + if (TilePropCodex[tile].isSolid) return true } } @@ -723,7 +728,7 @@ open class ActorWithBody : Actor() { } // evaluate - if (TilePropCodex.getProp(world.getTileFromTerrain(tileX, tileY)).isFluid) { + if (TilePropCodex[world.getTileFromTerrain(tileX, tileY)].isFluid) { contactAreaCounter += 1 } } @@ -733,7 +738,7 @@ open class ActorWithBody : Actor() { private fun setHorizontalFriction() { val friction = if (isPlayerNoClip) - BASE_FRICTION * TilePropCodex.getProp(TileNameCode.STONE).friction.tileFrictionToMult() + BASE_FRICTION * TilePropCodex[TileNameCode.STONE].friction.tileFrictionToMult() else BASE_FRICTION * bodyFriction.tileFrictionToMult() @@ -760,7 +765,7 @@ open class ActorWithBody : Actor() { private fun setVerticalFriction() { val friction = if (isPlayerNoClip) - BASE_FRICTION * TilePropCodex.getProp(TileNameCode.STONE).friction.tileFrictionToMult() + BASE_FRICTION * TilePropCodex[TileNameCode.STONE].friction.tileFrictionToMult() else BASE_FRICTION * bodyFriction.tileFrictionToMult() @@ -835,7 +840,7 @@ open class ActorWithBody : Actor() { for (x in tilePosXStart..tilePosXEnd) { val tile = world.getTileFromTerrain(x, tilePosY) - val thisFriction = TilePropCodex.getProp(tile).friction + val thisFriction = TilePropCodex[tile].friction if (thisFriction > friction) friction = thisFriction } @@ -860,7 +865,7 @@ open class ActorWithBody : Actor() { for (y in tilePosXStart..tilePosYEnd) { for (x in tilePosXStart..tilePosXEnd) { val tile = world.getTileFromTerrain(x, y) - val prop = TilePropCodex.getProp(tile) + val prop = TilePropCodex[tile] if (prop.isFluid && prop.density > density) density = prop.density @@ -885,7 +890,7 @@ open class ActorWithBody : Actor() { for (y in tilePosYStart..tilePosYEnd) { for (x in tilePosXStart..tilePosXEnd) { val tile = world.getTileFromTerrain(x, y) - val thisFluidDensity = TilePropCodex.getProp(tile).density + val thisFluidDensity = TilePropCodex[tile].density if (thisFluidDensity > density) density = thisFluidDensity } diff --git a/src/net/torvald/terrarum/gameactors/DroppedItem.kt b/src/net/torvald/terrarum/gameactors/DroppedItem.kt index b5f9a57b4..a75308021 100644 --- a/src/net/torvald/terrarum/gameactors/DroppedItem.kt +++ b/src/net/torvald/terrarum/gameactors/DroppedItem.kt @@ -12,17 +12,17 @@ import org.newdawn.slick.Graphics class DroppedItem(private val item: InventoryItem) : ActorWithBody() { init { - if (item.itemID >= ItemPropCodex.ITEM_COUNT_MAX) + if (item.id >= ItemPropCodex.ITEM_COUNT_MAX) throw RuntimeException("Attempted to create DroppedItem actor of a real actor; the real actor must be dropped instead.") isVisible = true - mass = if (item.itemID < TilePropCodex.TILE_UNIQUE_MAX) - TilePropCodex.getProp(item.itemID).density / 1000.0 + mass = if (item.id < TilePropCodex.TILE_UNIQUE_MAX) + TilePropCodex[item.id].density / 1000.0 else - ItemPropCodex.getProp(item.itemID).mass + ItemPropCodex[item.id].mass - scale = ItemPropCodex.getProp(item.itemID).scale + scale = ItemPropCodex[item.id].scale } override fun update(gc: GameContainer, delta: Int) { diff --git a/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt b/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt index 06ce707a9..a05f61361 100644 --- a/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt +++ b/src/net/torvald/terrarum/gameactors/FixtureTikiTorch.kt @@ -11,7 +11,7 @@ import java.util.* class FixtureTikiTorch : FixtureBase(), Luminous { override var luminosity: Int - get() = TilePropCodex.getProp(TileNameCode.TORCH).luminosity + get() = TilePropCodex[TileNameCode.TORCH].luminosity set(value) { throw UnsupportedOperationException() } @@ -35,6 +35,6 @@ class FixtureTikiTorch : FixtureBase(), Luminous { actorValue[AVKey.BASEMASS] = 1.0 - luminosity = TilePropCodex.getProp(TileNameCode.TORCH).luminosity + luminosity = TilePropCodex[TileNameCode.TORCH].luminosity } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt b/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt index 2fe4d441e..799204b64 100644 --- a/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt +++ b/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt @@ -3,7 +3,6 @@ package net.torvald.terrarum.gameactors import net.torvald.terrarum.gameactors.ActorHumanoid import net.torvald.terrarum.gameitem.EquipPosition import net.torvald.terrarum.gameitem.InventoryItem -import net.torvald.terrarum.gameitem.InventoryItemAdapter import org.luaj.vm2.Globals import org.luaj.vm2.LoadState import org.luaj.vm2.LuaError @@ -41,8 +40,8 @@ open class HumanoidNPC(aiFile: String, born: GameDate) : ActorHumanoid(born), AI } // we're having InventoryItem data so that this class could be somewhat universal - override var itemData: InventoryItem = object : InventoryItemAdapter() { - override var itemID = referenceID + override var itemData: InventoryItem = object : InventoryItem() { + override var id = referenceID override val equipPosition: Int = EquipPosition.HAND_GRIP override var mass: Double diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt index 408545e1c..d59864b02 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt @@ -77,7 +77,7 @@ object PlayerBuilderSigrid { // Test fill up inventory p.inventory.add(16) - p.itemEquipped[EquipPosition.HAND_GRIP] = ItemPropCodex.getProp(16) + p.equipItem(ItemPropCodex[16]) diff --git a/src/net/torvald/terrarum/gameitem/DynamicItem.kt b/src/net/torvald/terrarum/gameitem/DynamicItem.kt index 9e8af1267..568dd1810 100644 --- a/src/net/torvald/terrarum/gameitem/DynamicItem.kt +++ b/src/net/torvald/terrarum/gameitem/DynamicItem.kt @@ -13,7 +13,7 @@ import org.newdawn.slick.GameContainer * Created by minjaesong on 16-09-08. */ open class DynamicItem(val baseItemID: Int?, newMass: Double? = null, newScale: Double? = null) - : InventoryItemAdapter() { + : InventoryItem() { /** * Internal ID of an Item, Long @@ -22,11 +22,11 @@ open class DynamicItem(val baseItemID: Int?, newMass: Double? = null, newScale: * 32768-16777215: Dynamic items * >= 16777216: Actor RefID */ - override val itemID: Int = generateUniqueDynamicItemID() + override val id: Int = generateUniqueDynamicItemID() override val equipPosition: Int = // default to HAND_GRIP if no baseItemID given if (baseItemID != null) - ItemPropCodex.getProp(baseItemID).equipPosition + ItemPropCodex[baseItemID].equipPosition else EquipPosition.HAND_GRIP @@ -67,14 +67,14 @@ open class DynamicItem(val baseItemID: Int?, newMass: Double? = null, newScale: mass = newMass!! } else { - mass = newMass ?: ItemPropCodex.getProp(baseItemID).mass + mass = newMass ?: ItemPropCodex[baseItemID].mass } if (baseItemID == null) { scale = newScale!! } else { - scale = newScale ?: ItemPropCodex.getProp(baseItemID).scale + scale = newScale ?: ItemPropCodex[baseItemID].scale } } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameworld/WorldSimulator.kt b/src/net/torvald/terrarum/gameworld/WorldSimulator.kt index 431a51b7e..af2dc640a 100644 --- a/src/net/torvald/terrarum/gameworld/WorldSimulator.kt +++ b/src/net/torvald/terrarum/gameworld/WorldSimulator.kt @@ -206,13 +206,13 @@ object WorldSimulator { } } - fun Int.isFluid() = TilePropCodex.getProp(this).isFluid - fun Int.isSolid() = this.fluidLevel() == FLUID_MAX || TilePropCodex.getProp(this).isSolid - //fun Int.viscosity() = TilePropCodex.getProp(this). + fun Int.isFluid() = TilePropCodex[this].isFluid + fun Int.isSolid() = this.fluidLevel() == FLUID_MAX || TilePropCodex[this].isSolid + //fun Int.viscosity() = TilePropCodex[this]. fun Int.fluidLevel() = if (!this.isFluid()) 0 else (this % FLUID_MAX) + 1 fun Int.fluidType() = this / FLUID_MAX fun Int.isEven() = (this and 0x01) == 0 - fun Int.isFallable() = TilePropCodex.getProp(this).isFallable + fun Int.isFallable() = TilePropCodex[this].isFallable private fun placeFluid(world: GameWorld, x: Int, y: Int, fluidType: Byte, amount: Int) { if (world.layerTerrain.isInBound(x, y)) { diff --git a/src/net/torvald/terrarum/itemproperties/ItemPropCodex.kt b/src/net/torvald/terrarum/itemproperties/ItemPropCodex.kt index 5fd67dceb..25d06976a 100644 --- a/src/net/torvald/terrarum/itemproperties/ItemPropCodex.kt +++ b/src/net/torvald/terrarum/itemproperties/ItemPropCodex.kt @@ -9,7 +9,6 @@ import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gamecontroller.mouseTileX import net.torvald.terrarum.gamecontroller.mouseTileY import net.torvald.terrarum.gameitem.EquipPosition -import net.torvald.terrarum.gameitem.InventoryItemAdapter import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.tileproperties.TileProp import net.torvald.terrarum.tileproperties.TilePropCodex @@ -39,12 +38,11 @@ object ItemPropCodex { init { // tile items for (i in 0..ITEM_TILE_MAX) { - itemCodex[i] = object : InventoryItemAdapter() { - override val itemID: Int = i + itemCodex[i] = object : InventoryItem() { + override val id: Int = i override val equipPosition = EquipPosition.HAND_GRIP - override var mass: Double = TilePropCodex.getProp(i).density / 1000.0 - // no need to set setter as scale would not change - override var scale: Double = 1.0 + override var mass: Double = TilePropCodex[i].density / 1000.0 + override var scale: Double = 1.0 // no need to set setter as scale would not change override fun primaryUse(gc: GameContainer, delta: Int) { // TODO base punch attack @@ -67,7 +65,7 @@ object ItemPropCodex { // read from save (if applicable) and fill dynamicItemDescription } - fun getProp(code: Int): InventoryItem { + operator fun get(code: Int): InventoryItem { if (code < ITEM_STATIC_MAX) // generic item return itemCodex[code]!! // from CSV else if (code < ITEM_DYNAMIC_MAX) { diff --git a/src/net/torvald/terrarum/mapdrawer/LightmapRenderer.kt b/src/net/torvald/terrarum/mapdrawer/LightmapRenderer.kt index d1be78cdb..ffd62da82 100644 --- a/src/net/torvald/terrarum/mapdrawer/LightmapRenderer.kt +++ b/src/net/torvald/terrarum/mapdrawer/LightmapRenderer.kt @@ -18,8 +18,8 @@ import java.util.* */ object LightmapRenderer { - val overscan_open: Int = Math.min(32, 256f.div(TilePropCodex.getProp(TileNameCode.AIR).opacity and 0xFF).toFloat().ceil()) - val overscan_opaque: Int = Math.min(8, 256f.div(TilePropCodex.getProp(TileNameCode.STONE).opacity and 0xFF).toFloat().ceil()) + val overscan_open: Int = Math.min(32, 256f.div(TilePropCodex[TileNameCode.AIR].opacity and 0xFF).toFloat().ceil()) + val overscan_opaque: Int = Math.min(8, 256f.div(TilePropCodex[TileNameCode.STONE].opacity and 0xFF).toFloat().ceil()) private val LIGHTMAP_WIDTH = Terrarum.ingame.ZOOM_MIN.inv().times(Terrarum.WIDTH) .div(MapDrawer.TILE_SIZE).ceil() + overscan_open * 2 + 3 @@ -152,7 +152,7 @@ object LightmapRenderer { for (i in 0..rect_size) { val point = edgeToMaskNum(i) val tile = Terrarum.ingame.world.getTileFromTerrain(point.first, point.second) ?: TileNameCode.NULL - val isSolid = TilePropCodex.getProp(tile).isSolid + val isSolid = TilePropCodex[tile].isSolid noop_mask.set(i, isSolid) } @@ -237,8 +237,8 @@ object LightmapRenderer { var lightLevelThis: Int = 0 val thisTerrain = Terrarum.ingame.world.getTileFromTerrain(x, y) val thisWall = Terrarum.ingame.world.getTileFromWall(x, y) - val thisTileLuminosity = TilePropCodex.getProp(thisTerrain).luminosity - val thisTileOpacity = TilePropCodex.getProp(thisTerrain).opacity + val thisTileLuminosity = TilePropCodex[thisTerrain].luminosity + val thisTileOpacity = TilePropCodex[thisTerrain].opacity val sunLight = Terrarum.ingame.world.globalLight // MIX TILE diff --git a/src/net/torvald/terrarum/mapdrawer/MapCamera.kt b/src/net/torvald/terrarum/mapdrawer/MapCamera.kt index b588bcdf9..17cfcf67e 100644 --- a/src/net/torvald/terrarum/mapdrawer/MapCamera.kt +++ b/src/net/torvald/terrarum/mapdrawer/MapCamera.kt @@ -387,8 +387,8 @@ object MapCamera { var ret = 0 for (i in 0..3) { try { - if (!TilePropCodex.getProp(nearbyTiles[i]).isSolid && - !TilePropCodex.getProp(nearbyTiles[i]).isFluid) { + if (!TilePropCodex[nearbyTiles[i]].isSolid && + !TilePropCodex[nearbyTiles[i]].isFluid) { ret += (1 shl i) // add 1, 2, 4, 8 for i = 0, 1, 2, 3 } } catch (e: ArrayIndexOutOfBoundsException) { @@ -408,26 +408,26 @@ object MapCamera { nearbyTiles[NEARBY_TILE_KEY_BACK] = WORLD.getTileFrom(WALL, x , y) ?: 4096 try { - if (TilePropCodex.getProp(nearbyTiles[NEARBY_TILE_KEY_DOWN]).isSolid) + if (TilePropCodex[nearbyTiles[NEARBY_TILE_KEY_DOWN]].isSolid) // has tile on the bottom return 3 - else if (TilePropCodex.getProp(nearbyTiles[NEARBY_TILE_KEY_RIGHT]).isSolid - && TilePropCodex.getProp(nearbyTiles[NEARBY_TILE_KEY_LEFT]).isSolid) + else if (TilePropCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid + && TilePropCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid) // has tile on both sides return 0 - else if (TilePropCodex.getProp(nearbyTiles[NEARBY_TILE_KEY_RIGHT]).isSolid) + else if (TilePropCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid) // has tile on the right return 2 - else if (TilePropCodex.getProp(nearbyTiles[NEARBY_TILE_KEY_LEFT]).isSolid) + else if (TilePropCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid) // has tile on the left return 1 - else if (TilePropCodex.getProp(nearbyTiles[NEARBY_TILE_KEY_BACK]).isSolid) + else if (TilePropCodex[nearbyTiles[NEARBY_TILE_KEY_BACK]].isSolid) // has tile on the back return 0 else return 3 } catch (e: ArrayIndexOutOfBoundsException) { - return if (TilePropCodex.getProp(nearbyTiles[NEARBY_TILE_KEY_DOWN]).isSolid) + return if (TilePropCodex[nearbyTiles[NEARBY_TILE_KEY_DOWN]].isSolid) // has tile on the bottom 3 else 0 } diff --git a/src/net/torvald/terrarum/tileproperties/TilePropCodex.kt b/src/net/torvald/terrarum/tileproperties/TilePropCodex.kt index df3161fcc..f178c81ec 100644 --- a/src/net/torvald/terrarum/tileproperties/TilePropCodex.kt +++ b/src/net/torvald/terrarum/tileproperties/TilePropCodex.kt @@ -43,7 +43,7 @@ object TilePropCodex { } - fun getProp(index: Int, damage: Int): TileProp { + fun get(index: Int, damage: Int): TileProp { try { tileProps[idDamageToIndex(index, damage)].id } @@ -54,7 +54,7 @@ object TilePropCodex { return tileProps[idDamageToIndex(index, damage)] } - fun getProp(rawIndex: Int?): TileProp { + operator fun get(rawIndex: Int?): TileProp { try { tileProps[rawIndex ?: TileNameCode.NULL].id } diff --git a/src/net/torvald/terrarum/virtualcomputer/worldobject/ComputerPartsCodex.kt b/src/net/torvald/terrarum/virtualcomputer/worldobject/ComputerPartsCodex.kt index e2b0080ab..4a46acc9a 100644 --- a/src/net/torvald/terrarum/virtualcomputer/worldobject/ComputerPartsCodex.kt +++ b/src/net/torvald/terrarum/virtualcomputer/worldobject/ComputerPartsCodex.kt @@ -6,11 +6,11 @@ import java.util.* * Created by minjaesong on 16-09-08. */ object ComputerPartsCodex { - val rams = HashMap() // itemID, capacity in bytes (0 bytes - 8 GBytes) - val processors = HashMap() // itemID, cycles - val harddisks = HashMap() // itemID, capacity in bytes - val diskettes = HashMap() // itemID, capacity in bytes - val opticaldiscs = HashMap() // itemID, capacity in bytes + val rams = HashMap() // id, capacity in bytes (0 bytes - 8 GBytes) + val processors = HashMap() // id, cycles + val harddisks = HashMap() // id, capacity in bytes + val diskettes = HashMap() // id, capacity in bytes + val opticaldiscs = HashMap() // id, capacity in bytes init { // in kilobytes