diff --git a/src/net/torvald/terrarum/AppLoader.java b/src/net/torvald/terrarum/AppLoader.java index c7f467dc2..7186a4434 100644 --- a/src/net/torvald/terrarum/AppLoader.java +++ b/src/net/torvald/terrarum/AppLoader.java @@ -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; diff --git a/src/net/torvald/terrarum/IngameInstance.kt b/src/net/torvald/terrarum/IngameInstance.kt index 5b87bf2c0..68f78edf4 100644 --- a/src/net/torvald/terrarum/IngameInstance.kt +++ b/src/net/torvald/terrarum/IngameInstance.kt @@ -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!! + diff --git a/src/net/torvald/terrarum/ModMgr.kt b/src/net/torvald/terrarum/ModMgr.kt index 151027ce6..03d65bc25 100644 --- a/src/net/torvald/terrarum/ModMgr.kt +++ b/src/net/torvald/terrarum/ModMgr.kt @@ -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) { + 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") } } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index fcee7a5f2..d389797f6 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -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() + + ////////////////////////////// // GLOBAL IMMUTABLE CONFIGS // ////////////////////////////// @@ -629,4 +641,17 @@ interface Id_UICanvasNullable { fun Array.tail() = this.sliceArray(1 until this.size) fun Array.init() = this.sliceArray(0 until this.lastIndex) fun List.tail() = this.subList(1, this.size) -fun List.init() = this.subList(0, this.lastIndex) \ No newline at end of file +fun List.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 + get() = Terrarum.Apocryphas \ No newline at end of file diff --git a/src/net/torvald/terrarum/blockproperties/BlockCodex.kt b/src/net/torvald/terrarum/blockproperties/BlockCodex.kt index f62106244..c93a90b44 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockCodex.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockCodex.kt @@ -18,7 +18,7 @@ import java.io.IOException /** * Created by minjaesong on 2016-02-16. */ -object BlockCodex { +class BlockCodex { val blockProps = HashMap() @@ -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)) diff --git a/src/net/torvald/terrarum/blockproperties/BlockProp.kt b/src/net/torvald/terrarum/blockproperties/BlockProp.kt index 3af22f925..44bce4a99 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockProp.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockProp.kt @@ -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 diff --git a/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt b/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt index 84a743479..5347b9148 100644 --- a/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt +++ b/src/net/torvald/terrarum/blockproperties/BlockPropUtil.kt @@ -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 diff --git a/src/net/torvald/terrarum/blockproperties/WireCodex.kt b/src/net/torvald/terrarum/blockproperties/WireCodex.kt index 6e9c10413..d8d321736 100644 --- a/src/net/torvald/terrarum/blockproperties/WireCodex.kt +++ b/src/net/torvald/terrarum/blockproperties/WireCodex.kt @@ -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() - 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) { 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? {// - 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(',') diff --git a/src/net/torvald/terrarum/gameactors/Actor.kt b/src/net/torvald/terrarum/gameactors/Actor.kt index 0ea2416b3..4f18b0cd3 100644 --- a/src/net/torvald/terrarum/gameactors/Actor.kt +++ b/src/net/torvald/terrarum/gameactors/Actor.kt @@ -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 diff --git a/src/net/torvald/terrarum/gameactors/WireActor.kt b/src/net/torvald/terrarum/gameactors/WireActor.kt index 6d1d0bcef..7405c83bc 100644 --- a/src/net/torvald/terrarum/gameactors/WireActor.kt +++ b/src/net/torvald/terrarum/gameactors/WireActor.kt @@ -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 diff --git a/src/net/torvald/terrarum/gameactors/faction/Faction.kt b/src/net/torvald/terrarum/gameactors/faction/Faction.kt index 8b21c2776..9271c09d8 100644 --- a/src/net/torvald/terrarum/gameactors/faction/Faction.kt +++ b/src/net/torvald/terrarum/gameactors/faction/Faction.kt @@ -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. diff --git a/src/net/torvald/terrarum/gameactors/faction/FactionCodex.kt b/src/net/torvald/terrarum/gameactors/faction/FactionCodex.kt index 2529864a6..7340e698d 100644 --- a/src/net/torvald/terrarum/gameactors/faction/FactionCodex.kt +++ b/src/net/torvald/terrarum/gameactors/faction/FactionCodex.kt @@ -5,9 +5,13 @@ import java.util.* /** * Created by minjaesong on 2016-05-09. */ -object FactionCodex { +class FactionCodex { val factionContainer = ArrayList() + fun clear() = factionContainer.clear() + + internal constructor() + fun hasFaction(ID: FactionID): Boolean = if (factionContainer.size == 0) false diff --git a/src/net/torvald/terrarum/gamecontroller/IngameController.kt b/src/net/torvald/terrarum/gamecontroller/IngameController.kt index 6af623b06..f2e350e72 100644 --- a/src/net/torvald/terrarum/gamecontroller/IngameController.kt +++ b/src/net/torvald/terrarum/gamecontroller/IngameController.kt @@ -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.* diff --git a/src/net/torvald/terrarum/gameitem/GameItem.kt b/src/net/torvald/terrarum/gameitem/GameItem.kt index 218987548..1ec2b4e86 100644 --- a/src/net/torvald/terrarum/gameitem/GameItem.kt +++ b/src/net/torvald/terrarum/gameitem/GameItem.kt @@ -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 diff --git a/src/net/torvald/terrarum/itemproperties/ItemCodex.kt b/src/net/torvald/terrarum/itemproperties/ItemCodex.kt index 6bbd6ad2a..fcc2d4367 100644 --- a/src/net/torvald/terrarum/itemproperties/ItemCodex.kt +++ b/src/net/torvald/terrarum/itemproperties/ItemCodex.kt @@ -20,7 +20,7 @@ import java.util.* * * Created by minjaesong on 2016-03-15. */ -object ItemCodex { +class ItemCodex { /** * @@ -30,7 +30,9 @@ object ItemCodex { val dynamicItemDescription = HashMap() val dynamicToStaticTable = HashMap() - val ACTORID_MIN = ReferencingRanges.ACTORS.first + @Transient val ACTORID_MIN = ReferencingRanges.ACTORS.first + + internal constructor() fun clear() { itemCodex.clear() diff --git a/src/net/torvald/terrarum/itemproperties/Material.kt b/src/net/torvald/terrarum/itemproperties/Material.kt index 16673f2ff..d554587a9 100644 --- a/src/net/torvald/terrarum/itemproperties/Material.kt +++ b/src/net/torvald/terrarum/itemproperties/Material.kt @@ -28,12 +28,14 @@ class Material { var identifier: String = "Name not set" } -object MaterialCodex { +class MaterialCodex { val materialProps = HashMap() - 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)) } diff --git a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt index b944bd38c..47637d816 100644 --- a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt +++ b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt @@ -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) diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index f204ef168..c6d818fc6 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -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) + */ } } diff --git a/src/net/torvald/terrarum/modulebasegame/console/ExportCodices.kt b/src/net/torvald/terrarum/modulebasegame/console/ExportCodices.kt new file mode 100644 index 000000000..7d96e7485 --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/console/ExportCodices.kt @@ -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) { + println(Common.jsoner.toJson(Terrarum.BlockCodex)) + } + + override fun printUsage() { + TODO("Not yet implemented") + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/console/Inventory.kt b/src/net/torvald/terrarum/modulebasegame/console/Inventory.kt index 0bc6e9044..5fc93451b 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/Inventory.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/Inventory.kt @@ -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 /** diff --git a/src/net/torvald/terrarum/modulebasegame/console/Load.kt b/src/net/torvald/terrarum/modulebasegame/console/Load.kt index b8b27c3f9..6553cd657 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/Load.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/Load.kt @@ -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) { diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorInventory.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorInventory.kt index a5062f21b..a8c4b61ac 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorInventory.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorInventory.kt @@ -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 diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt index df1c07f0e..c7df2f0e6 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt index 26698e592..1b84149ad 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt @@ -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 diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureInventory.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureInventory.kt index 76ef224d1..4d4c5402b 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureInventory.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureInventory.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt index 05eb44e32..b8784b4d9 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/Pocketed.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/Pocketed.kt index 11f8f0846..39496affd 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/Pocketed.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/Pocketed.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ProjectileSimple.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ProjectileSimple.kt index f11ce0da2..cc06fde10 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ProjectileSimple.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ProjectileSimple.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ThreadActorUpdate.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ThreadActorUpdate.kt index 0a927b052..bab8af9bd 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ThreadActorUpdate.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ThreadActorUpdate.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt index 35a9a2a80..e35df262c 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt index dfb7c2444..74ad3ffc9 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/ui/AmmoMeterProxy.kt b/src/net/torvald/terrarum/modulebasegame/ui/AmmoMeterProxy.kt index a3d42c71e..4af847e9c 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/AmmoMeterProxy.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/AmmoMeterProxy.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/ui/ItemSlotImageFactory.kt b/src/net/torvald/terrarum/modulebasegame/ui/ItemSlotImageFactory.kt index 7b9e2aa6f..6ea705386 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/ItemSlotImageFactory.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/ItemSlotImageFactory.kt @@ -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.* /** diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt index 1ad8fdcc4..4222d10f3 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIPaletteSelector.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIPaletteSelector.kt index 65b446bc6..61adc6c51 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIPaletteSelector.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIPaletteSelector.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt index 7b0b9b029..d4f29bd3c 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt @@ -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. diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotPie.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotPie.kt index 611fee583..a7e939ea5 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotPie.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotPie.kt @@ -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. diff --git a/src/net/torvald/terrarum/realestate/LandUtil.kt b/src/net/torvald/terrarum/realestate/LandUtil.kt index b84557e18..1e7da6cd5 100644 --- a/src/net/torvald/terrarum/realestate/LandUtil.kt +++ b/src/net/torvald/terrarum/realestate/LandUtil.kt @@ -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. diff --git a/src/net/torvald/terrarum/realestate/RealEstateCodex.kt b/src/net/torvald/terrarum/realestate/RealEstateCodex.kt index 5eacf292a..012ceaa52 100644 --- a/src/net/torvald/terrarum/realestate/RealEstateCodex.kt +++ b/src/net/torvald/terrarum/realestate/RealEstateCodex.kt @@ -6,13 +6,17 @@ import java.util.* /** * Created by minjaesong on 2016-03-27. */ -object RealEstateCodex { +class RealEstateCodex { /** * HashMap * * Note that a block can have only ONE owner (as an Actor or Faction ID) */ - private var ownershipRegistry: HashMap = HashMap() + private val ownershipRegistry: HashMap = HashMap() + + fun clear() = ownershipRegistry.clear() + + internal constructor() fun setOwner(world: GameWorld, tileX: Int, tileY: Int, refID: Int) { ownershipRegistry[LandUtil.getBlockAddr(world, tileX, tileY)] = refID diff --git a/src/net/torvald/terrarum/serialise/WriteMeta.kt b/src/net/torvald/terrarum/serialise/WriteMeta.kt index 146c6cdb8..4b55fbfbf 100644 --- a/src/net/torvald/terrarum/serialise/WriteMeta.kt +++ b/src/net/torvald/terrarum/serialise/WriteMeta.kt @@ -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 = arrayOf(), // do not use list; Could not instantiate instance of class: java.util.Collections$SingletonList val worlds: Array = arrayOf() // do not use list; Could not instantiate instance of class: java.util.Collections$SingletonList ) { + override fun equals(other: Any?): Boolean { throw UnsupportedOperationException() } diff --git a/src/net/torvald/terrarum/serialise/WriteSavegame.kt b/src/net/torvald/terrarum/serialise/WriteSavegame.kt index 5b209e22d..f1d5452fa 100644 --- a/src/net/torvald/terrarum/serialise/WriteSavegame.kt +++ b/src/net/torvald/terrarum/serialise/WriteSavegame.kt @@ -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)) diff --git a/src/net/torvald/terrarum/tests/RNGTest.kt b/src/net/torvald/terrarum/tests/RNGTest.kt index 0bcf64309..561b26d6c 100644 --- a/src/net/torvald/terrarum/tests/RNGTest.kt +++ b/src/net/torvald/terrarum/tests/RNGTest.kt @@ -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.