mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-10 18:44:05 +09:00
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:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user