fixes, bits and pieces, changes in ID referencing, terrain and wall takes damage, working test pickaxe, and a new issue

This commit is contained in:
Song Minjae
2017-04-17 02:18:52 +09:00
parent 6087072d3d
commit f2ae2d9449
40 changed files with 502 additions and 249 deletions

View File

@@ -1,35 +1,30 @@
package net.torvald.terrarum.gameworld
import net.torvald.terrarum.realestate.RealEstateUtility
import org.dyn4j.geometry.Vector2
import org.newdawn.slick.SlickException
class GameWorld
/**
* @param width
* *
* @param height
* *
* @throws SlickException
*/
@Throws(SlickException::class)
constructor(//properties
val width: Int, val height: Int) {
typealias TileAddress = Long
typealias TileDamage = Int
class GameWorld(val width: Int, val height: Int) {
//layers
val layerWall: MapLayer
/**
* Get MapLayer object of terrain
* @return MapLayer terrain layer
*/
val layerTerrain: MapLayer
val layerWire: MapLayer
val wallDamage: PairedMapLayer
val terrainDamage: PairedMapLayer
val layerWallLowBits: PairedMapLayer
val layerTerrainLowBits: PairedMapLayer
val spawnX: Int
val spawnY: Int
val wallDamages = HashMap<TileAddress, TileDamage>()
val terrainDamages = HashMap<TileAddress, TileDamage>()
//public World physWorld = new World( new Vec2(0, -TerrarumMain.game.gravitationalAccel) );
//physics
/** Meter per second squared. Currently only the downward gravity is supported. No reverse gravity :p */
@@ -47,8 +42,8 @@ constructor(//properties
layerTerrain = MapLayer(width, height)
layerWall = MapLayer(width, height)
layerWire = MapLayer(width, height)
terrainDamage = PairedMapLayer(width, height)
wallDamage = PairedMapLayer(width, height)
layerTerrainLowBits = PairedMapLayer(width, height)
layerWallLowBits = PairedMapLayer(width, height)
time = WorldTime(
71 * WorldTime.DAY_LENGTH +
@@ -87,11 +82,11 @@ constructor(//properties
* @return byte[][] damage code pair
*/
val damageDataArray: Array<ByteArray>
get() = terrainDamage.dataPair
get() = layerTerrainLowBits.dataPair
fun getTileFromWall(x: Int, y: Int): Int? {
val wall: Int? = layerWall.getTile(x fmod width, y)
val wallDamage: Int? = getWallDamage(x fmod width, y)
val wallDamage: Int? = getWallLowBits(x fmod width, y)
return if (wall == null || wallDamage == null)
null
else
@@ -100,7 +95,7 @@ constructor(//properties
fun getTileFromTerrain(x: Int, y: Int): Int? {
val terrain: Int? = layerTerrain.getTile(x fmod width, y)
val terrainDamage: Int? = getTerrainDamage(x fmod width, y)
val terrainDamage: Int? = getTerrainLowBits(x fmod width, y)
return if (terrain == null || terrainDamage == null)
null
else
@@ -111,12 +106,12 @@ constructor(//properties
return layerWire.getTile(x fmod width, y)
}
fun getWallDamage(x: Int, y: Int): Int? {
return wallDamage.getData(x fmod width, y)
fun getWallLowBits(x: Int, y: Int): Int? {
return layerWallLowBits.getData(x fmod width, y)
}
fun getTerrainDamage(x: Int, y: Int): Int? {
return terrainDamage.getData(x fmod width, y)
fun getTerrainLowBits(x: Int, y: Int): Int? {
return layerTerrainLowBits.getData(x fmod width, y)
}
/**
@@ -145,12 +140,12 @@ constructor(//properties
fun setTileWall(x: Int, y: Int, tile: Byte, damage: Int) {
layerWall.setTile(x fmod width, y, tile)
wallDamage.setData(x fmod width, y, damage)
layerWallLowBits.setData(x fmod width, y, damage)
}
fun setTileTerrain(x: Int, y: Int, tile: Byte, damage: Int) {
layerTerrain.setTile(x fmod width, y, tile)
terrainDamage.setData(x fmod width, y, damage)
layerTerrainLowBits.setData(x fmod width, y, damage)
}
fun setTileWire(x: Int, y: Int, tile: Byte) {
@@ -216,6 +211,32 @@ constructor(//properties
}
}
fun inflctTerrainDamage(x: Int, y: Int, damage: Int) {
val addr = RealEstateUtility.getAbsoluteTileNumber(x, y)
if (terrainDamages[addr] == null) {
terrainDamages[addr] = damage
}
else {
terrainDamages[addr] = terrainDamages[addr]!! + damage
}
}
fun getTerrainDamage(x: Int, y: Int) =
terrainDamages[RealEstateUtility.getAbsoluteTileNumber(x, y)] ?: 0
fun inflctWallDamage(x: Int, y: Int, damage: Int) {
val addr = RealEstateUtility.getAbsoluteTileNumber(x, y)
if (wallDamages[addr] == null) {
wallDamages[addr] = damage
}
else {
wallDamages[addr] = wallDamages[addr]!! + damage
}
}
fun getWallDamage(x: Int, y: Int) =
wallDamages[RealEstateUtility.getAbsoluteTileNumber(x, y)] ?: 0
companion object {
@Transient val WALL = 0
@@ -224,7 +245,7 @@ constructor(//properties
@Transient val TILES_SUPPORTED = MapLayer.RANGE * PairedMapLayer.RANGE
@Transient val SIZEOF: Byte = MapLayer.SIZEOF
@Transient val LAYERS: Byte = 4 // terrain, wall (terrainDamage + wallDamage), wire
@Transient val LAYERS: Byte = 4 // terrain, wall (layerTerrainLowBits + layerWallLowBits), wire
}
}

View File

@@ -2,6 +2,7 @@ package net.torvald.terrarum.gameworld
import net.torvald.random.HQRNG
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.AnyPlayer
import net.torvald.terrarum.gameactors.HistoricalFigure
import net.torvald.terrarum.gameactors.Player
import net.torvald.terrarum.gameactors.roundInt
@@ -40,8 +41,7 @@ object WorldSimulator {
private val world = Terrarum.ingame!!.world
// TODO future Kotlin feature -- typealias AnyPlayer: HistoricalFigure
operator fun invoke(p: HistoricalFigure?, delta: Int) {
operator fun invoke(p: AnyPlayer?, delta: Int) {
if (p != null) {
updateXFrom = p.hitbox.centeredX.div(FeaturesDrawer.TILE_SIZE).minus(FLUID_UPDATING_SQUARE_RADIUS).roundInt()
updateYFrom = p.hitbox.centeredY.div(FeaturesDrawer.TILE_SIZE).minus(FLUID_UPDATING_SQUARE_RADIUS).roundInt()

View File

@@ -98,8 +98,6 @@ class WorldTime(initTime: Long = 0L) {
)
val DAY_NAMES_SHORT = arrayOf("Mon", "Tys", "Mid", "Tor", "Fre", "Lau", "Sun", "Ver")
// FIXME Next to Granite is Felsite
val MONTH_NAMES = arrayOf(
"Opal", "Obsidian", "Granite", "Slate", "Felsite", "Hematite",
"Malachite", "Galena", "Limestone", "Sandstone", "Timber", "Moonstone"

View File

@@ -16,8 +16,8 @@ import net.torvald.terrarum.gameactors.GameDate
*
* Created by minjaesong on 16-01-24.
*/
@Deprecated("Are you even reading the name?")
class YeOldeWorldTime {
internal var TIME_T = 0L // TODO use it! Epoch: Year 125, 1st Granite, 0h00:00
internal var seconds: Int // 0 - 59
internal var minutes: Int // 0 - 59