moved Codices out of the singleton so they can be serialised

This commit is contained in:
minjaesong
2021-09-04 17:55:37 +09:00
parent 57e4b83649
commit 6bea9c9f07
42 changed files with 180 additions and 98 deletions

View File

@@ -1,6 +1,8 @@
package net.torvald.terrarum;
import com.badlogic.gdx.*;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.audio.AudioDevice;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
@@ -21,7 +23,7 @@ import net.torvald.terrarum.concurrent.ThreadExecutor;
import net.torvald.terrarum.controller.GdxControllerAdapter;
import net.torvald.terrarum.controller.TerrarumController;
import net.torvald.terrarum.controller.XinputControllerAdapter;
import net.torvald.terrarum.gameactors.*;
import net.torvald.terrarum.gameactors.BlockMarkerActor;
import net.torvald.terrarum.gamecontroller.KeyToggler;
import net.torvald.terrarum.gameworld.GameWorld;
import net.torvald.terrarum.imagefont.TinyAlphNum;
@@ -35,9 +37,11 @@ import net.torvald.terrarum.worlddrawer.CreateTileAtlas;
import net.torvald.terrarumsansbitmap.gdx.GameFontBase;
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack;
import net.torvald.util.DebugTimers;
import java.io.File;
import java.io.IOException;
import java.util.*;
import static net.torvald.terrarum.TerrarumKt.gdxClearAndSetBlend;
import static net.torvald.terrarum.TerrarumKt.printStackTrace;

View File

@@ -3,11 +3,16 @@ package net.torvald.terrarum
import com.badlogic.gdx.Screen
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.AppLoader.printdbg
import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.terrarum.blockproperties.WireCodex
import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.gameactors.ActorID
import net.torvald.terrarum.gameactors.BlockMarkerActor
import net.torvald.terrarum.gameactors.faction.FactionCodex
import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.itemproperties.MaterialCodex
import net.torvald.terrarum.modulebasegame.IngameRenderer
import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.VirtualDisk
@@ -306,3 +311,7 @@ class NoSuchActorWithIDException(id: ActorID) : Exception("Actor with ID $id doe
class NoSuchActorWithRefException(actor: Actor) : Exception("No such actor in the game: $actor")
class ReferencedActorAlreadyExistsException(actor: Actor) : Exception("The actor $actor already exists in the game")
class ProtectedActorRemovalException(whatisit: String) : Exception("Attempted to removed protected actor '$whatisit'")
val INGAME: IngameInstance
get() = Terrarum.ingame!!

View File

@@ -6,8 +6,8 @@ import net.torvald.terrarum.AppLoader.*
import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.terrarum.blockproperties.WireCodex
import net.torvald.terrarum.gameitem.GameItem
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.itemproperties.MaterialCodex
import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.utils.CSVFetcher
@@ -141,6 +141,7 @@ object ModMgr {
catch (e: Throwable) {
printdbgerr(this, "There was an error while loading module $moduleName")
printdbgerr(this, "\t$e")
e.printStackTrace(System.err)
moduleInfo.remove(moduleName)
}
}
@@ -242,8 +243,8 @@ object ModMgr {
object GameBlockLoader {
@JvmStatic operator fun invoke(module: String) {
BlockCodex(module, "blocks/blocks.csv")
WireCodex(module, "wires/")
Terrarum.BlockCodex = BlockCodex(module, "blocks/blocks.csv")
Terrarum.WireCodex = WireCodex(module, "wires/")
}
}
@@ -265,6 +266,8 @@ object ModMgr {
}
private fun register(module: String, csv: List<CSVRecord>) {
Terrarum.ItemCodex = ItemCodex()
csv.forEach {
val className: String = it["classname"].toString()
val internalID: Int = it["id"].toInt()
@@ -293,7 +296,7 @@ object ModMgr {
val matePath = "materials/"
@JvmStatic operator fun invoke(module: String) {
MaterialCodex(module, matePath + "materials.csv")
Terrarum.MaterialCodex = MaterialCodex(module, matePath + "materials.csv")
}
}
}

View File

@@ -15,9 +15,13 @@ import net.torvald.UnsafeHelper
import net.torvald.random.HQRNG
import net.torvald.terrarum.AppLoader.*
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.terrarum.blockproperties.WireCodex
import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.gameactors.ActorID
import net.torvald.terrarum.gameactors.faction.FactionCodex
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.itemproperties.MaterialCodex
import net.torvald.terrarum.ui.UICanvas
import net.torvald.terrarum.worlddrawer.WorldCamera
import net.torvald.terrarumsansbitmap.gdx.GameFontBase
@@ -52,6 +56,14 @@ object Terrarum : Disposable {
}
open lateinit var BlockCodex: BlockCodex
open lateinit var ItemCodex: ItemCodex
open lateinit var WireCodex: WireCodex
open lateinit var MaterialCodex: MaterialCodex
open lateinit var FactionCodex: FactionCodex
open var Apocryphas = HashMap<String, Any>()
//////////////////////////////
// GLOBAL IMMUTABLE CONFIGS //
//////////////////////////////
@@ -629,4 +641,17 @@ interface Id_UICanvasNullable {
fun <T> Array<T>.tail() = this.sliceArray(1 until this.size)
fun <T> Array<T>.init() = this.sliceArray(0 until this.lastIndex)
fun <T> List<T>.tail() = this.subList(1, this.size)
fun <T> List<T>.init() = this.subList(0, this.lastIndex)
fun <T> List<T>.init() = this.subList(0, this.lastIndex)
val BlockCodex: BlockCodex
get() = Terrarum.BlockCodex
val ItemCodex: ItemCodex
get() = Terrarum.ItemCodex
val WireCodex: WireCodex
get() = Terrarum.WireCodex
val MaterialCodex: MaterialCodex
get() = Terrarum.MaterialCodex
val FactionCodex: FactionCodex
get() = Terrarum.FactionCodex
val Apocryphas: HashMap<String, Any>
get() = Terrarum.Apocryphas

View File

@@ -18,7 +18,7 @@ import java.io.IOException
/**
* Created by minjaesong on 2016-02-16.
*/
object BlockCodex {
class BlockCodex {
val blockProps = HashMap<ItemID, BlockProp>()
@@ -27,13 +27,13 @@ object BlockCodex {
/** 65536 */
//val MAX_TERRAIN_TILES = GameWorld.TILES_SUPPORTED
private val nullProp = BlockProp()
@Transient private val nullProp = BlockProp()
var highestNumber = -1 // does not include virtual ones
private set
// fake props for "randomised" dynamic lights
const val DYNAMIC_RANDOM_CASES = 64
@Transient val DYNAMIC_RANDOM_CASES = 64
private var virtualTileCursor = 1
/**
@@ -55,10 +55,12 @@ object BlockCodex {
virtualToTile.clear()
}
private constructor()
/**
* Later entry (possible from other modules) will replace older ones
*/
operator fun invoke(module: String, path: String) {
internal constructor(module: String, path: String) : this() {
AppLoader.printmsg(this, "Building block properties table")
try {
register(module, CSVFetcher.readFromModule(module, path))

View File

@@ -2,6 +2,7 @@ package net.torvald.terrarum.blockproperties
import net.torvald.gdx.graphics.Cvec
import net.torvald.random.XXHash32
import net.torvald.terrarum.*
import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.gameworld.fmod

View File

@@ -4,8 +4,7 @@ import com.badlogic.gdx.Gdx
import com.jme3.math.FastMath
import net.torvald.gdx.graphics.Cvec
import net.torvald.random.HQRNG
import net.torvald.terrarum.Second
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.*
import net.torvald.terrarum.gameworld.WorldTime
import net.torvald.terrarum.weather.WeatherMixer

View File

@@ -1,37 +1,44 @@
package net.torvald.terrarum.blockproperties
import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.CommonResourcePool
import net.torvald.terrarum.ModMgr
import net.torvald.terrarum.*
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
import net.torvald.terrarum.gameitem.GameItem
import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.utils.CSVFetcher
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import org.apache.commons.csv.CSVRecord
import java.io.IOException
/**
* ItemCodex must be initialised first!
*
* Created by minjaesong on 2016-02-16.
*/
object WireCodex {
class WireCodex {
val wireProps = HashMap<ItemID, WireProp>()
private val nullProp = WireProp()
@Transient private val nullProp = WireProp()
fun clear() {
wireProps.clear()
}
private constructor() {
try {
Terrarum.ItemCodex["testtesttest"]
}
catch (e: UninitializedPropertyAccessException) {
throw UninitializedPropertyAccessException("ItemCodex not initialised!")
}
}
/**
* `wire.csv` and texture for all wires are expected to be found in the given path.
*
* @param module name of the module
* @param path to the "wires" directory, not path to the CSV; must end with a slash!
*/
operator fun invoke(module: String, path: String) {
internal constructor(module: String, path: String) : this() {
AppLoader.printmsg(this, "Building wire properties table for module $module")
try {
register(module, path, CSVFetcher.readFromModule(module, path + "wires.csv"))
@@ -54,7 +61,7 @@ object WireCodex {
private fun register(module: String, path: String, records: List<CSVRecord>) {
records.forEach {
WireCodex.setProp(module, it.intVal("id"), it)
setProp(module, it.intVal("id"), it)
}
AppLoader.printmsg(this, "Registering wire textures into the resource pool")
@@ -70,7 +77,7 @@ object WireCodex {
CommonResourcePool.loadAll()
}
fun getAll() = WireCodex.wireProps.values
fun getAll() = wireProps.values
/*fun get(index: Int): WireProp {
try {
@@ -99,11 +106,11 @@ object WireCodex {
}*/
operator fun get(blockID: ItemID?): WireProp {
if (blockID == null || blockID == "basegame:"+Block.NULL) {
return WireCodex.nullProp
return nullProp
}
try {
return WireCodex.wireProps[blockID]!!
return wireProps[blockID]!!
}
catch (e: NullPointerException) {
throw NullPointerException("Wireprop with id $blockID does not exist.")
@@ -111,7 +118,7 @@ object WireCodex {
}
fun getOrNull(blockID: ItemID?): WireProp? {//<O>
return WireCodex.wireProps[blockID]
return wireProps[blockID]
}
private fun setProp(modname: String, key: Int, record: CSVRecord) {
@@ -127,7 +134,7 @@ object WireCodex {
prop.outputType = record.get("outputtype") ?: prop.accepts
prop.canBranch = record.boolVal("branching")
WireCodex.wireProps[prop.id] = prop
wireProps[prop.id] = prop
// load java class
val invImgRef = record.get("inventoryimg").split(',')

View File

@@ -2,7 +2,6 @@ package net.torvald.terrarum.gameactors
import net.torvald.terrarum.ReferencingRanges
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.itemproperties.ItemCodex.ACTORID_MIN
typealias ActorID = Int

View File

@@ -1,13 +1,9 @@
package net.torvald.terrarum.gameactors
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.BlendMode
import net.torvald.terrarum.CommonResourcePool
import net.torvald.terrarum.Point2i
import net.torvald.terrarum.*
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
import net.torvald.terrarum.blockproperties.WireCodex
import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.toInt
/**
* FIXME Constructor is super expensive

View File

@@ -1,7 +1,7 @@
package net.torvald.terrarum.gameactors.faction
import net.torvald.random.HQRNG
import java.util.HashSet
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2016-02-15.

View File

@@ -5,9 +5,13 @@ import java.util.*
/**
* Created by minjaesong on 2016-05-09.
*/
object FactionCodex {
class FactionCodex {
val factionContainer = ArrayList<Faction>()
fun clear() = factionContainer.clear()
internal constructor()
fun hasFaction(ID: FactionID): Boolean =
if (factionContainer.size == 0)
false

View File

@@ -6,6 +6,7 @@ import com.badlogic.gdx.Input.Keys
import com.badlogic.gdx.InputAdapter
import com.badlogic.gdx.controllers.Controllers
import com.badlogic.gdx.utils.GdxRuntimeException
import net.torvald.terrarum.*
import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.AppLoader.printdbg
import net.torvald.terrarum.AppLoader.printdbgerr
@@ -15,7 +16,6 @@ import net.torvald.terrarum.floorInt
import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameitem.GameItem
import net.torvald.terrarum.gameworld.fmod
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.worlddrawer.WorldCamera
import java.util.*

View File

@@ -10,6 +10,7 @@ import net.torvald.terrarum.itemproperties.Material
import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory
import net.torvald.terrarum.modulebasegame.gameactors.Pocketed
import net.torvald.terrarum.*
typealias ItemID = String

View File

@@ -20,7 +20,7 @@ import java.util.*
*
* Created by minjaesong on 2016-03-15.
*/
object ItemCodex {
class ItemCodex {
/**
* <ItemID or RefID for Actor, TheItem>
@@ -30,7 +30,9 @@ object ItemCodex {
val dynamicItemDescription = HashMap<ItemID, GameItem>()
val dynamicToStaticTable = HashMap<ItemID, ItemID>()
val ACTORID_MIN = ReferencingRanges.ACTORS.first
@Transient val ACTORID_MIN = ReferencingRanges.ACTORS.first
internal constructor()
fun clear() {
itemCodex.clear()

View File

@@ -28,12 +28,14 @@ class Material {
var identifier: String = "Name not set"
}
object MaterialCodex {
class MaterialCodex {
val materialProps = HashMap<String, Material>()
private val nullMaterial = Material()
@Transient private val nullMaterial = Material()
operator fun invoke(module: String, path: String) {
private constructor()
internal constructor(module: String, path: String) : this() {
register(CSVFetcher.readFromModule(module, path))
}

View File

@@ -1,15 +1,10 @@
package net.torvald.terrarum.modulebasegame
import net.torvald.terrarum.*
import net.torvald.terrarum.AppLoader.IS_DEVELOPMENT_BUILD
import net.torvald.terrarum.AppLoader.printdbg
import net.torvald.terrarum.CommonResourcePool
import net.torvald.terrarum.ModMgr
import net.torvald.terrarum.ModuleEntryPoint
import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.terrarum.blockproperties.BlockProp
import net.torvald.terrarum.gameitem.GameItem
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.itemproperties.MaterialCodex
import net.torvald.terrarum.modulebasegame.gameitems.BlockBase
import net.torvald.terrarum.modulebasegame.imagefont.WatchFont
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
@@ -29,8 +24,8 @@ class EntryPoint : ModuleEntryPoint() {
// the order of invocation is important! Material should be the first as blocks and items are depend on it.
ModMgr.GameMaterialLoader.invoke(moduleName)
ModMgr.GameBlockLoader.invoke(moduleName)
ModMgr.GameItemLoader.invoke(moduleName)
ModMgr.GameBlockLoader.invoke(moduleName)
ModMgr.GameLanguageLoader.invoke(moduleName)

View File

@@ -215,6 +215,11 @@ open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) {
lateinit var gameLoadMode: GameLoadMode
lateinit var gameLoadInfoPayload: Any
lateinit var newBlockCodex: Any
lateinit var newWireCodex: Any
lateinit var newItemCodex: Any
lateinit var newMaterialCodex: Any
@@ -229,7 +234,7 @@ open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) {
when (gameLoadMode) {
GameLoadMode.CREATE_NEW -> enterCreateNewWorld(gameLoadInfoPayload as NewWorldParameters)
GameLoadMode.LOAD_FROM -> enterLoadFromSave(gameLoadInfoPayload as WriteMeta.WorldMeta)
GameLoadMode.LOAD_FROM -> enterLoadFromSave(gameLoadInfoPayload as WriteMeta.WorldMeta, newItemCodex)
}
IngameRenderer.setRenderedWorld(world)
@@ -257,7 +262,7 @@ open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) {
/**
* Init instance by loading saved world
*/
private fun enterLoadFromSave(meta: WriteMeta.WorldMeta) {
private fun enterLoadFromSave(meta: WriteMeta.WorldMeta, items: Any) {
if (gameInitialised) {
printdbg(this, "loaded successfully.")
}
@@ -266,21 +271,21 @@ open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) {
WeatherMixer.loadFromSave(meta.weatseed0, meta.weatseed1)
// Load BlockCodex //
BlockCodex.clear()
meta.blocks.forEach { module, csv -> BlockCodex.fromCSV(module, csv.doc) }
/*BlockCodex.clear()
(BlockCodex::class as Any).javaClass.getField("INSTANCE").set(BlockCodex::class.objectInstance, meta.blocks)
// Load WireCodex //
WireCodex.clear()
meta.wires.forEach { module, csv -> WireCodex.fromCSV(module, ModMgr.getPath(module, "wires/"), csv.doc) }
(WireCodex::class as Any).javaClass.getField("INSTANCE").set(WireCodex::class.objectInstance, meta.wires)
*/
// Load ItemCodex //
ItemCodex.clear()
meta.items.forEach { module, csv -> ModMgr.GameItemLoader.fromCSV(module, csv.doc) }
// TODO registerNewDynamicItem
(ItemCodex::class as Any).javaClass.getField("INSTANCE").set(ItemCodex::class.objectInstance, items)
// Load MaterialCodex //
MaterialCodex.clear()
meta.materials.forEach { module, csv -> MaterialCodex.fromCSV(module, csv.doc) }
/*MaterialCodex.clear()
(MaterialCodex::class as Any).javaClass.getField("INSTANCE").set(MaterialCodex::class.objectInstance, meta.materials)
*/
}
}

View File

@@ -0,0 +1,18 @@
package net.torvald.terrarum.modulebasegame.console
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.console.ConsoleCommand
import net.torvald.terrarum.serialise.Common
/**
* Created by minjaesong on 2021-09-04.
*/
object ExportCodices : ConsoleCommand {
override fun execute(args: Array<String>) {
println(Common.jsoner.toJson(Terrarum.BlockCodex))
}
override fun printUsage() {
TODO("Not yet implemented")
}
}

View File

@@ -6,7 +6,7 @@ import net.torvald.terrarum.console.Echo
import net.torvald.terrarum.console.EchoError
import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.*
import net.torvald.terrarum.modulebasegame.gameactors.Pocketed
/**

View File

@@ -25,7 +25,6 @@ object Load : ConsoleCommand {
val disk = VDUtil.readDiskArchive(file, charset = charset)
val meta = ReadMeta(disk)
meta.blocks.forEach { s, str -> println("Module $s\n"); println(str.doc) }
println(meta.loadorder.joinToString())
}
catch (e: IOException) {

View File

@@ -1,10 +1,10 @@
package net.torvald.terrarum.modulebasegame.gameactors
import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.ItemCodex
import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.gameitem.GameItem
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.modulebasegame.ui.UIQuickslotBar

View File

@@ -2,18 +2,15 @@ package net.torvald.terrarum.modulebasegame.gameactors
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.graphics.g2d.TextureRegion
import net.torvald.terrarum.AppLoader.printdbg
import net.torvald.terrarum.BlockCodex
import net.torvald.terrarum.ItemCodex
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZEF
import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameactors.ActorWithBody
import net.torvald.terrarum.gameactors.PhysProperties
import net.torvald.terrarum.gameitem.GameItem
import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.worlddrawer.WorldCamera
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
/**
* Created by minjaesong on 2016-03-15.

View File

@@ -15,6 +15,7 @@ import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.ui.UICanvas
import org.dyn4j.geometry.Vector2
import net.torvald.terrarum.*
typealias BlockBoxIndex = Int

View File

@@ -8,6 +8,7 @@ import net.torvald.terrarum.lock
import net.torvald.terrarum.modulebasegame.TerrarumIngame
import java.math.BigInteger
import java.util.concurrent.locks.ReentrantLock
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2021-03-16.

View File

@@ -8,6 +8,7 @@ import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameactors.faction.FactionFactory
import net.torvald.terrarum.worlddrawer.CreateTileAtlas
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2016-02-03.

View File

@@ -5,6 +5,7 @@ import net.torvald.terrarum.gameactors.ActorValue
import net.torvald.terrarum.gameitem.GameItem
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2016-01-15.

View File

@@ -13,6 +13,7 @@ import net.torvald.terrarum.gameactors.Luminous
import net.torvald.terrarum.gameactors.PhysProperties
import org.dyn4j.geometry.Vector2
import java.util.*
import net.torvald.terrarum.*
/**
* Simplest projectile.

View File

@@ -4,6 +4,7 @@ import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.itemproperties.ItemCodex
import java.util.concurrent.Callable
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2016-05-25.

View File

@@ -9,6 +9,7 @@ import net.torvald.terrarum.gameactors.ActorWithBody
import net.torvald.terrarum.gameitem.GameItem
import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2019-05-02.

View File

@@ -17,6 +17,7 @@ import net.torvald.terrarum.modulebasegame.gameactors.DroppedItem
import net.torvald.terrarum.modulebasegame.gameitems.PickaxeCore.BASE_MASS_AND_SIZE
import net.torvald.terrarum.modulebasegame.gameitems.PickaxeCore.TOOL_DURABILITY_BASE
import kotlin.math.roundToInt
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2019-03-10.

View File

@@ -3,6 +3,7 @@ package net.torvald.terrarum.modulebasegame.ui
import net.torvald.terrarum.gameitem.GameItem
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2017-04-21.

View File

@@ -8,6 +8,7 @@ import net.torvald.terrarum.gameitem.GameItem
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.toInt
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import net.torvald.terrarum.*
/**

View File

@@ -17,6 +17,7 @@ import net.torvald.terrarum.ui.UIItemTextButtonList
import net.torvald.terrarum.ui.UIItemTextButtonList.Companion.DEFAULT_BACKGROUNDCOL
import net.torvald.terrarum.worlddrawer.CreateTileAtlas
import kotlin.math.roundToInt
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2019-02-14.

View File

@@ -15,6 +15,7 @@ import net.torvald.terrarum.modulebasegame.BuildingMaker
import net.torvald.terrarum.modulebasegame.ui.ItemSlotImageFactory.CELLCOLOUR_BLACK
import net.torvald.terrarum.ui.UICanvas
import net.torvald.terrarum.ui.UINSMenu
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2019-02-03.

View File

@@ -11,6 +11,7 @@ import net.torvald.terrarum.gameworld.fmod
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.ui.UICanvas
import net.torvald.terrarum.*
/**
* A bar-shaped representation of the Quickslot.

View File

@@ -14,6 +14,7 @@ import net.torvald.terrarum.modulebasegame.ui.UIQuickslotBar.Companion.COMMON_OP
import net.torvald.terrarum.modulebasegame.ui.UIQuickslotBar.Companion.SLOT_COUNT
import net.torvald.terrarum.ui.UICanvas
import org.dyn4j.geometry.Vector2
import net.torvald.terrarum.*
/**
* The Sims styled pie representation of the Quickslot.

View File

@@ -5,6 +5,7 @@ import net.torvald.terrarum.gameactors.faction.FactionCodex
import net.torvald.terrarum.gameworld.BlockAddress
import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.gameworld.fmod
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2016-03-27.

View File

@@ -6,13 +6,17 @@ import java.util.*
/**
* Created by minjaesong on 2016-03-27.
*/
object RealEstateCodex {
class RealEstateCodex {
/**
* HashMap<Absolute block number, Actor/Faction ID>
*
* Note that a block can have only ONE owner (as an Actor or Faction ID)
*/
private var ownershipRegistry: HashMap<Long, Int> = HashMap()
private val ownershipRegistry: HashMap<Long, Int> = HashMap()
fun clear() = ownershipRegistry.clear()
internal constructor()
fun setOwner(world: GameWorld, tileX: Int, tileY: Int, refID: Int) {
ownershipRegistry[LandUtil.getBlockAddr(world, tileX, tileY)] = refID

View File

@@ -8,10 +8,7 @@ import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.ByteArray64
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.ByteArray64Reader
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.EntryFile
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.VirtualDisk
import net.torvald.terrarum.utils.MetaModuleCSVPair
import net.torvald.terrarum.utils.ZipCodedStr
import net.torvald.terrarum.weather.WeatherMixer
import java.io.StringReader
/**
* Created by minjaesong on 2021-08-23.
@@ -33,26 +30,6 @@ object WriteMeta {
creation_t = world.creationTime,
lastplay_t = world.lastPlayTime,
playtime_t = world.totalPlayTime + currentPlayTime_t,
blocks = ModMgr.getFilesFromEveryMod("blocks/blocks.csv").fold(MetaModuleCSVPair()) {
map, (modname, file) ->
map[modname] = ZipCodedStr(file.readText ())
/*return*/map
},
items = ModMgr.getFilesFromEveryMod("items/itemid.csv").fold(MetaModuleCSVPair()) {
map, (modname, file) ->
map[modname] = ZipCodedStr(file.readText ())
/*return*/map
},
wires = ModMgr.getFilesFromEveryMod("wires/wires.csv").fold(MetaModuleCSVPair()) {
map, (modname, file) ->
map[modname] = ZipCodedStr(file.readText ())
/*return*/map
},
materials = ModMgr.getFilesFromEveryMod("materials/materials.csv").fold(MetaModuleCSVPair()) {
map, (modname, file) ->
map[modname] = ZipCodedStr(file.readText ())
/*return*/map
},
loadorder = ModMgr.loadOrder.toTypedArray(),
worlds = ingame.gameworldIndices.toTypedArray()
)
@@ -78,13 +55,10 @@ object WriteMeta {
val creation_t: Long = 0,
val lastplay_t: Long = 0,
val playtime_t: Long = 0,
val blocks: MetaModuleCSVPair = MetaModuleCSVPair(),
val items: MetaModuleCSVPair = MetaModuleCSVPair(),
val wires: MetaModuleCSVPair = MetaModuleCSVPair(),
val materials: MetaModuleCSVPair = MetaModuleCSVPair(),
val loadorder: Array<String> = arrayOf(), // do not use list; Could not instantiate instance of class: java.util.Collections$SingletonList
val worlds: Array<Int> = arrayOf() // do not use list; Could not instantiate instance of class: java.util.Collections$SingletonList
) {
override fun equals(other: Any?): Boolean {
throw UnsupportedOperationException()
}

View File

@@ -1,8 +1,8 @@
package net.torvald.terrarum.serialise
import net.torvald.terrarum.*
import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.gameactors.BlockMarkerActor
import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.SanicLoadScreen
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.*
@@ -37,6 +37,26 @@ object WriteSavegame {
val meta = DiskEntry(-1, 0, "savegame".toByteArray(), creation_t, time_t, metaContent)
addFile(disk, meta)
// Write BlockCodex//
/*val blockCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(BlockCodex, BlockCodex.javaClass).toByteArray(Common.CHARSET)))
val blocks = DiskEntry(-16, 0, "blocks".toByteArray(), creation_t, time_t, blockCodexContent)
addFile(disk, blocks)
// Write ItemCodex//
val itemCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(ItemCodex, ItemCodex.javaClass).toByteArray(Common.CHARSET)))
val items = DiskEntry(-17, 0, "items".toByteArray(), creation_t, time_t, itemCodexContent)
addFile(disk, items)
// Write WireCodex//
val wireCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(WireCodex, WireCodex.javaClass).toByteArray(Common.CHARSET)))
val wires = DiskEntry(-18, 0, "wires".toByteArray(), creation_t, time_t, wireCodexContent)
addFile(disk, wires)
// Write MaterialCodex//
val materialCodexContent = EntryFile(ByteArray64.fromByteArray(Common.jsoner.toJson(MaterialCodex, MaterialCodex.javaClass).toByteArray(Common.CHARSET)))
val materials = DiskEntry(-19, 0, "materials".toByteArray(), creation_t, time_t, materialCodexContent)
addFile(disk, materials)*/
// Write World //
val worldNum = ingame.world.worldIndex
val worldContent = EntryFile(WriteWorld.encodeToByteArray64(ingame))

View File

@@ -6,6 +6,7 @@ import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.terrarum.gameworld.fmod
import net.torvald.terrarum.serialise.toLittle
import java.util.*
import net.torvald.terrarum.*
/**
* Created by minjaesong on 2019-07-27.