From 63d2880d8b6eb64f5c5de4b8206bbee19e6078e3 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 26 Jul 2019 03:28:57 +0900 Subject: [PATCH] grass tex revert to smooth --- assets/graphics/fonts/7x13_Tamzen7x14b.tga | 2 +- assets/mods/basegame/blocks/33 - Copy.tga | 3 + assets/mods/basegame/blocks/33.tga | 2 +- src/net/torvald/terrarum/AppLoader.java | 6 +- .../torvald/terrarum/CommonResourcePool.kt | 51 +++++-- .../terrarum/gameactors/ActorWBMovable.kt | 2 +- .../torvald/terrarum/gameworld/BlockLayer.kt | 20 +-- .../terrarum/itemproperties/ItemCodex.kt | 3 +- .../terrarum/modulebasegame/BuildingMaker.kt | 2 +- .../terrarum/modulebasegame/EntryPoint.kt | 8 +- .../gameactors/FixtureCraftingTable.kt | 6 +- .../gameitems/ItemCraftingTable.kt | 4 +- .../gameitems/PickaxeGeneric.kt | 9 +- .../gameitems/TikiTorchTester.kt | 4 +- .../gameitems/WirePieceSignalWire.kt | 4 +- .../modulebasegame/ui/UIInventoryFull.kt | 6 +- .../ui/UIItemInventoryEquippedView.kt | 1 + .../terrarum/tests/WorldgenNoiseSandbox.kt | 139 ++++++++++++++++++ .../graphics/sprites/fixtures/workbench.psd | 3 + .../graphics/terrain/terrain_mask_type02.psd | 4 +- 20 files changed, 227 insertions(+), 52 deletions(-) create mode 100644 assets/mods/basegame/blocks/33 - Copy.tga create mode 100644 src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt create mode 100644 work_files/graphics/sprites/fixtures/workbench.psd diff --git a/assets/graphics/fonts/7x13_Tamzen7x14b.tga b/assets/graphics/fonts/7x13_Tamzen7x14b.tga index c1010945d..13a03775b 100644 --- a/assets/graphics/fonts/7x13_Tamzen7x14b.tga +++ b/assets/graphics/fonts/7x13_Tamzen7x14b.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04fc4f4d12b18e3412f70c03640679521782ee3a090ecc027758e118f083e4ce +oid sha256:774287193d4e37023f2020484e0afbdd6c1c6b9ee31b21aa82099d7d53b49b96 size 93228 diff --git a/assets/mods/basegame/blocks/33 - Copy.tga b/assets/mods/basegame/blocks/33 - Copy.tga new file mode 100644 index 000000000..d914553d4 --- /dev/null +++ b/assets/mods/basegame/blocks/33 - Copy.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de4fd8cf302101beb2a9a2aa57bad0f265366ba27e0774e2ef0ce22f0cd39d23 +size 200748 diff --git a/assets/mods/basegame/blocks/33.tga b/assets/mods/basegame/blocks/33.tga index d914553d4..7e144838b 100644 --- a/assets/mods/basegame/blocks/33.tga +++ b/assets/mods/basegame/blocks/33.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de4fd8cf302101beb2a9a2aa57bad0f265366ba27e0774e2ef0ce22f0cd39d23 +oid sha256:8adc6fdd5d899b5cb626b46a85c8c3da03ac377925eaae0a927e75c17557dd0a size 200748 diff --git a/src/net/torvald/terrarum/AppLoader.java b/src/net/torvald/terrarum/AppLoader.java index a7661440b..9842b25ab 100644 --- a/src/net/torvald/terrarum/AppLoader.java +++ b/src/net/torvald/terrarum/AppLoader.java @@ -29,6 +29,7 @@ import net.torvald.terrarum.gameworld.GameWorld; import net.torvald.terrarum.imagefont.TinyAlphNum; import net.torvald.terrarum.modulebasegame.IngameRenderer; import net.torvald.terrarum.modulebasegame.TerrarumIngame; +import net.torvald.terrarum.modulebasegame.ui.ItemSlotImageFactory; import net.torvald.terrarum.utils.JsonFetcher; import net.torvald.terrarum.utils.JsonWriter; import net.torvald.terrarumsansbitmap.gdx.GameFontBase; @@ -254,7 +255,7 @@ public class AppLoader implements ApplicationListener { private void initViewPort(int width, int height) { // Set Y to point downwards - camera.setToOrtho(true, width, height); + camera.setToOrtho(true, width, height); // some elements are pre-flipped, while some are not. The statement itself is absolutely necessary to make edge of the screen as the origin // Update camera matrix camera.update(); @@ -648,6 +649,7 @@ public class AppLoader implements ApplicationListener { fontGame.dispose(); fontSmallNumbers.dispose(); + ItemSlotImageFactory.INSTANCE.dispose(); textureWhiteSquare.dispose(); textureWhiteCircle.dispose(); @@ -734,7 +736,7 @@ public class AppLoader implements ApplicationListener { } else { ModMgr.INSTANCE.invoke(); // invoke Module Manager - AppLoader.resourcePool.loadAll(); + CommonResourcePool.INSTANCE.loadAll(); printdbg(this, "all modules loaded successfully"); IngameRenderer.initialise(); } diff --git a/src/net/torvald/terrarum/CommonResourcePool.kt b/src/net/torvald/terrarum/CommonResourcePool.kt index c6849b8f9..9b5edf93e 100644 --- a/src/net/torvald/terrarum/CommonResourcePool.kt +++ b/src/net/torvald/terrarum/CommonResourcePool.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.utils.Disposable import com.badlogic.gdx.utils.Queue +import net.torvald.UnsafePtr import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** @@ -11,8 +12,9 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack */ object CommonResourcePool { - private val loadingList = Queue Any>>() + private val loadingList = Queue() private val pool = HashMap() + private val poolKillFun = HashMap Unit)?>() //private val typesMap = HashMap>() private var loadCounter = -1 // using counters so that the loading can be done on separate thread (gg if the asset requires GL context to be loaded) val loaded: Boolean @@ -46,8 +48,26 @@ object CommonResourcePool { } } + /** + * Following objects doesn't need destroy function: + * - com.badlogic.gdx.utils.Disposable + * - com.badlogic.gdx.graphics.Texture + * - com.badlogic.gdx.graphics.g2d.TextureRegion + * - net.torvald.UnsafePtr + */ fun addToLoadingList(identifier: String, loadFunction: () -> Any) { - loadingList.addFirst(identifier to loadFunction) + CommonResourcePool.addToLoadingList(identifier, loadFunction, null) + } + + /** + * Following objects doesn't need destroy function: + * - com.badlogic.gdx.utils.Disposable + * - com.badlogic.gdx.graphics.Texture + * - com.badlogic.gdx.graphics.g2d.TextureRegion + * - net.torvald.UnsafePtr + */ + fun addToLoadingList(identifier: String, loadFunction: () -> Any, destroyFunction: (() -> Unit)?) { + loadingList.addFirst(ResourceLoadingDescriptor(identifier, loadFunction, destroyFunction)) if (loadCounter == -1) loadCounter = 1 @@ -56,13 +76,13 @@ object CommonResourcePool { } /** - * You are supposed to call this function only once. + * Consumes the loading list. After the load, the list will be empty */ fun loadAll() { if (loaded) throw IllegalStateException("Assets are already loaded and shipped out :p") while (!loadingList.isEmpty) { - val (name, loadfun) = loadingList.removeFirst() + val (name, loadfun, killfun) = loadingList.removeFirst() if (pool.containsKey(name)) { throw IllegalArgumentException("Assets with identifier '$name' already exists.") @@ -70,6 +90,7 @@ object CommonResourcePool { //typesMap[name] = type pool[name] = loadfun.invoke() + poolKillFun[name] = killfun loadCounter -= 1 } @@ -85,19 +106,25 @@ object CommonResourcePool { fun getAsTexture(identifier: String) = getAs(identifier) fun dispose() { - pool.forEach { _, u -> + pool.forEach { name, u -> try { - if (u is Disposable) - u.dispose() - else if (u is Texture) - u.dispose() - else if (u is TextureRegion) - u.texture.dispose() - // TODO + when { + u is Disposable -> u.dispose() + u is Texture -> u.dispose() + u is TextureRegion -> u.texture.dispose() + u is UnsafePtr -> u.destroy() + else -> poolKillFun[name]?.invoke() + } } catch (e: Throwable) { e.printStackTrace() } } } + + private data class ResourceLoadingDescriptor( + val name: String, + val loadfun: () -> Any, + val killfun: (() -> Unit)? = null + ) } \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameactors/ActorWBMovable.kt b/src/net/torvald/terrarum/gameactors/ActorWBMovable.kt index c96c2fa85..eda9aa49a 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWBMovable.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWBMovable.kt @@ -1430,7 +1430,7 @@ open class ActorWBMovable(renderOrder: RenderOrder, val immobileBody: Boolean = // debug display of hIntTilewiseHitbox if (KeyToggler.isOn(Input.Keys.F9)) { - val blockMark = AppLoader.resourcePool.getAsTextureRegionPack("blockmarkings_common").get(0, 0) + val blockMark = CommonResourcePool.getAsTextureRegionPack("blockmarkings_common").get(0, 0) batch.color = HITBOX_COLOURS0 for (y in 0..intTilewiseHitbox.height.toInt()) { diff --git a/src/net/torvald/terrarum/gameworld/BlockLayer.kt b/src/net/torvald/terrarum/gameworld/BlockLayer.kt index a9d6fb171..ad943584f 100644 --- a/src/net/torvald/terrarum/gameworld/BlockLayer.kt +++ b/src/net/torvald/terrarum/gameworld/BlockLayer.kt @@ -6,12 +6,19 @@ import net.torvald.UnsafePtr import net.torvald.terrarum.AppLoader.printdbg /** + * Memory layout: + * ``` + * a7 a6 a5 a4 a3 a2 a1 a0 | xx xx xx xx aB aA a9 a8 || + * ``` + * where a_n is a tile number + * * Original version Created by minjaesong on 2016-01-17. * Unsafe version Created by minjaesong on 2019-06-08. * * Note to self: refrain from using shorts--just do away with two bytes: different system have different endianness */ open class BlockLayer(val width: Int, val height: Int) : Disposable { + // for some reason, all the efforts of saving the memory space were futile. // using unsafe pointer gets you 100 fps, whereas using directbytebuffer gets you 90 internal val ptr: UnsafePtr = UnsafeHelper.allocate(width * height * BYTES_PER_BLOCK) @@ -21,18 +28,7 @@ open class BlockLayer(val width: Int, val height: Int) : Disposable { } /** - * @param data Byte array representation of the layer, where: - * - every 2n-th byte is lowermost 8 bits of the tile number - * - every (2n+1)th byte is uppermost 4 (4096 blocks) or 8 (65536 blocks) bits of the tile number. - * - * When 4096-block mode is being used, every (2n+1)th byte is filled in this format: - * ``` - * (MSB) 0 0 0 0 a b c d (LSB) - * ``` - * - * In other words, the valid range for the every (2n+1)th byte is 0..15. - * - * TL;DR: LITTLE ENDIAN PLEASE + * @param data Byte array representation of the layer */ constructor(width: Int, height: Int, data: ByteArray) : this(width, height) { TODO() diff --git a/src/net/torvald/terrarum/itemproperties/ItemCodex.kt b/src/net/torvald/terrarum/itemproperties/ItemCodex.kt index c7321a084..ff60d9340 100644 --- a/src/net/torvald/terrarum/itemproperties/ItemCodex.kt +++ b/src/net/torvald/terrarum/itemproperties/ItemCodex.kt @@ -3,6 +3,7 @@ package net.torvald.terrarum.itemproperties import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.terrarum.AppLoader import net.torvald.terrarum.AppLoader.printdbg +import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.Terrarum import net.torvald.terrarum.blockproperties.Fluid import net.torvald.terrarum.gameitem.GameItem @@ -34,7 +35,7 @@ object ItemCodex { val ACTORID_MIN = ITEM_DYNAMIC.endInclusive + 1 private val itemImagePlaceholder: TextureRegion - get() = AppLoader.resourcePool.getAsTextureRegion("itemplaceholder_24") // copper pickaxe + get() = CommonResourcePool.getAsTextureRegion("itemplaceholder_24") // copper pickaxe // TODO: when generalised, there's no guarantee that blocks will be used as an item. Write customised item prop loader and init it on the Ingame diff --git a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt index 9c6be6d6b..8c2a254f5 100644 --- a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt +++ b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt @@ -132,7 +132,7 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { val selection = ArrayList() - val blockMarkings = AppLoader.resourcePool.getAsTextureRegionPack("blockmarkings_common") + val blockMarkings = CommonResourcePool.getAsTextureRegionPack("blockmarkings_common") internal var showSelection = true val blockPointingCursor = object : ActorWithBody(Actor.RenderOrder.OVERLAY) { diff --git a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt index c1bcb13b3..9d60f1159 100644 --- a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt +++ b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt @@ -1,8 +1,8 @@ package net.torvald.terrarum.modulebasegame -import net.torvald.terrarum.AppLoader 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 @@ -33,13 +33,13 @@ class EntryPoint : ModuleEntryPoint() { // load common resources to the AssetsManager - AppLoader.resourcePool.addToLoadingList("$moduleName.items16") { + CommonResourcePool.addToLoadingList("$moduleName.items16") { TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items.tga"), 16, 16) } - AppLoader.resourcePool.addToLoadingList("$moduleName.items24") { + CommonResourcePool.addToLoadingList("$moduleName.items24") { TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items24.tga"), 24, 24) } - AppLoader.resourcePool.addToLoadingList("$moduleName.items48") { + CommonResourcePool.addToLoadingList("$moduleName.items48") { TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items48.tga"), 48, 48) } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureCraftingTable.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureCraftingTable.kt index 852b6f57f..6be73a6c1 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureCraftingTable.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureCraftingTable.kt @@ -3,7 +3,7 @@ package net.torvald.terrarum.modulebasegame.gameactors import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch -import net.torvald.terrarum.AppLoader +import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.Second import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameactors.AVKey @@ -21,7 +21,7 @@ internal class FixtureCraftingTable : FixtureBase( init { setHitboxDimension(16, 16, 0, 0) - makeNewSprite(TextureRegionPack(AppLoader.resourcePool.getAsTextureRegion("itemplaceholder_16").texture, 16, 16)) + makeNewSprite(TextureRegionPack(CommonResourcePool.getAsTextureRegion("itemplaceholder_16").texture, 16, 16)) sprite!!.setRowsAndFrames(1, 1) actorValue[AVKey.BASEMASS] = MASS @@ -49,7 +49,7 @@ internal object UICraftingTable : UICanvas() { override fun renderUI(batch: SpriteBatch, camera: Camera) { batch.color = Color.WHITE - batch.draw(AppLoader.resourcePool.getAsTextureRegion("test_texture"), 0f, 0f) + batch.draw(CommonResourcePool.getAsTextureRegion("test_texture"), 0f, 0f) } diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemCraftingTable.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemCraftingTable.kt index 2cd81cf14..6216c4614 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemCraftingTable.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemCraftingTable.kt @@ -1,7 +1,7 @@ package net.torvald.terrarum.modulebasegame.gameitems import com.badlogic.gdx.graphics.g2d.TextureRegion -import net.torvald.terrarum.AppLoader +import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameitem.GameItem import net.torvald.terrarum.gameitem.ItemID @@ -23,7 +23,7 @@ class ItemCraftingTable(originalID: ItemID) : GameItem(originalID) { override val isDynamic = false override val material = Material() override val itemImage: TextureRegion? - get() = AppLoader.resourcePool.getAsTextureRegion("itemplaceholder_16") + get() = CommonResourcePool.getAsTextureRegion("itemplaceholder_16") override var baseToolSize: Double? = baseMass init { diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt index 4c3c29e1a..50e0d442c 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt @@ -1,7 +1,7 @@ package net.torvald.terrarum.modulebasegame.gameitems import com.badlogic.gdx.graphics.g2d.TextureRegion -import net.torvald.terrarum.AppLoader +import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.Point2d import net.torvald.terrarum.Terrarum import net.torvald.terrarum.blockproperties.Block @@ -14,7 +14,6 @@ import net.torvald.terrarum.itemproperties.MaterialCodex import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.gameitems.PickaxeCore.BASE_MASS_AND_SIZE import net.torvald.terrarum.modulebasegame.gameitems.PickaxeCore.TOOL_DURABILITY_BASE -import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import kotlin.math.roundToInt /** @@ -85,7 +84,7 @@ class PickaxeCopper(originalID: ItemID) : GameItem(originalID) { override val material = MaterialCodex["CUPR"] override var baseMass = material.density.toDouble() / MaterialCodex["IRON"].density * BASE_MASS_AND_SIZE override val itemImage: TextureRegion? - get() = (AppLoader.resourcePool["basegame.items24"] as TextureRegionPack).get(0,0) + get() = CommonResourcePool.getAsTextureRegionPack("basegame.items24").get(0,0) init { super.equipPosition = GameItem.EquipPosition.HAND_GRIP @@ -112,7 +111,7 @@ class PickaxeIron(originalID: ItemID) : GameItem(originalID) { override val material = MaterialCodex["IRON"] override var baseMass = material.density.toDouble() / MaterialCodex["IRON"].density * BASE_MASS_AND_SIZE override val itemImage: TextureRegion? - get() = (AppLoader.resourcePool["basegame.items24"] as TextureRegionPack).get(1,0) + get() = CommonResourcePool.getAsTextureRegionPack("basegame.items24").get(1,0) init { super.equipPosition = GameItem.EquipPosition.HAND_GRIP @@ -139,7 +138,7 @@ class PickaxeSteel(originalID: ItemID) : GameItem(originalID) { override val material = MaterialCodex["STAL"] override var baseMass = material.density.toDouble() / MaterialCodex["IRON"].density * BASE_MASS_AND_SIZE override val itemImage: TextureRegion? - get() = (AppLoader.resourcePool["basegame.items24"] as TextureRegionPack).get(2,0) + get() = CommonResourcePool.getAsTextureRegionPack("basegame.items24").get(2,0) init { super.equipPosition = GameItem.EquipPosition.HAND_GRIP diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/TikiTorchTester.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/TikiTorchTester.kt index 318734f02..851485bc7 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/TikiTorchTester.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/TikiTorchTester.kt @@ -1,7 +1,7 @@ package net.torvald.terrarum.modulebasegame.gameitems import com.badlogic.gdx.graphics.g2d.TextureRegion -import net.torvald.terrarum.AppLoader +import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameitem.GameItem import net.torvald.terrarum.gameitem.ItemID @@ -22,7 +22,7 @@ class TikiTorchTester(originalID: ItemID) : GameItem(originalID) { override val isDynamic = false override val material = Material() override val itemImage: TextureRegion? - get() = AppLoader.resourcePool.getAsTextureRegion("itemplaceholder_48") + get() = CommonResourcePool.getAsTextureRegion("itemplaceholder_48") override var baseToolSize: Double? = baseMass init { diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt index 59a107aaf..42b0ce835 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt @@ -1,7 +1,7 @@ package net.torvald.terrarum.modulebasegame.gameitems import com.badlogic.gdx.graphics.g2d.TextureRegion -import net.torvald.terrarum.AppLoader +import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.blockproperties.Wire import net.torvald.terrarum.gameitem.GameItem import net.torvald.terrarum.gameitem.ItemID @@ -22,7 +22,7 @@ class WirePieceSignalWire(originalID: ItemID) : GameItem(originalID) { override val isDynamic = false override val material = Material() override val itemImage: TextureRegion? - get() = AppLoader.resourcePool.getAsTextureRegionPack("basegame.items16").get(1,9) + get() = CommonResourcePool.getAsTextureRegionPack("basegame.items16").get(1,9) init { super.equipPosition = GameItem.EquipPosition.HAND_GRIP diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt index a6d57e810..892956954 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt @@ -45,9 +45,13 @@ class UIInventoryFull( init { handler.allowESCtoClose = true + CommonResourcePool.addToLoadingList("inventory_caticons") { + TextureRegionPack("./assets/graphics/gui/inventory/category.tga", 20, 20) + } + CommonResourcePool.loadAll() } - internal val catIcons: TextureRegionPack = TextureRegionPack("./assets/graphics/gui/inventory/category.tga", 20, 20) + internal val catIcons: TextureRegionPack = CommonResourcePool.getAsTextureRegionPack("inventory_caticons") internal val catArrangement: IntArray = intArrayOf(9,6,7,1,0,2,3,4,5,8) diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryEquippedView.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryEquippedView.kt index 1cd63660f..860de164d 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryEquippedView.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryEquippedView.kt @@ -146,6 +146,7 @@ class UIItemInventoryEquippedView( override fun dispose() { itemGrid.forEach { it.dispose() } + equipPosIcon.dispose() } override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean { diff --git a/src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt b/src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt new file mode 100644 index 000000000..189f375fd --- /dev/null +++ b/src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt @@ -0,0 +1,139 @@ +package net.torvald.terrarum.tests + +import com.badlogic.gdx.ApplicationAdapter +import com.badlogic.gdx.Gdx +import com.badlogic.gdx.backends.lwjgl.LwjglApplication +import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration +import com.badlogic.gdx.graphics.OrthographicCamera +import com.badlogic.gdx.graphics.Pixmap +import com.badlogic.gdx.graphics.Texture +import com.badlogic.gdx.graphics.g2d.SpriteBatch +import com.badlogic.gdx.graphics.glutils.ShaderProgram +import com.sudoplay.joise.Joise +import com.sudoplay.joise.module.ModuleAutoCorrect +import com.sudoplay.joise.module.ModuleBasisFunction +import com.sudoplay.joise.module.ModuleFractal +import com.sudoplay.joise.module.ModuleScaleDomain +import net.torvald.random.HQRNG +import net.torvald.terrarum.gameworld.fmod +import net.torvald.terrarum.inUse +import kotlin.math.cos +import kotlin.math.sin + +const val WIDTH = 1536 +const val HEIGHT = 512 +const val TWO_PI = Math.PI * 2 + +/** + * Created by minjaesong on 2019-07-23. + */ +class WorldgenNoiseSandbox : ApplicationAdapter() { + + private lateinit var batch: SpriteBatch + private lateinit var camera: OrthographicCamera + + private lateinit var testTex: Pixmap + private lateinit var tempTex: Texture + + private lateinit var joise: Joise + + override fun create() { + batch = SpriteBatch() + camera = OrthographicCamera(WIDTH.toFloat(), HEIGHT.toFloat()) + camera.setToOrtho(false) // some elements are pre-flipped, while some are not. The statement itself is absolutely necessary to make edge of the screen as the origin + camera.update() + batch.projectionMatrix = camera.combined + Gdx.gl20.glViewport(0, 0, WIDTH, HEIGHT) + + testTex = Pixmap(WIDTH, HEIGHT, Pixmap.Format.RGBA8888) + tempTex = Texture(1, 1, Pixmap.Format.RGBA8888) + + joise = generateNoise() + renderNoise() + + println("Init done") + } + + override fun render() { + // draw using pixmap + batch.inUse { + tempTex.dispose() + tempTex = Texture(testTex) + batch.draw(tempTex, 0f, 0f) + } + } + + private val RNG = HQRNG() + private var seed = RNG.nextLong() + + private fun generateNoise(): Joise { + //val biome = ModuleBasisFunction() + //biome.setType(ModuleBasisFunction.BasisType.SIMPLEX) + + // simplex AND fractal for more noisy edges, mmmm..! + val fractal = ModuleFractal() + fractal.setType(ModuleFractal.FractalType.MULTI) + fractal.setAllSourceBasisTypes(ModuleBasisFunction.BasisType.SIMPLEX) + fractal.setNumOctaves(4) + fractal.setFrequency(1.0) + + val autocorrect = ModuleAutoCorrect() + autocorrect.setSource(fractal) + autocorrect.setRange(0.0, 1.0) + + val scale = ModuleScaleDomain() + scale.setSource(autocorrect) + scale.setScaleX(0.3) + scale.setScaleY(0.3) + scale.setScaleZ(0.3) + + val last = scale + + return Joise(last) + } + + // with this method, only TWO distinct (not bland) biomes are possible. CLUT order is important here. + private val biomeColors = intArrayOf( + //0x2288ccff.toInt(), // ísland + 0x229944ff.toInt(), // woodlands + 0x77bb77ff.toInt(), // shrubland + 0x88bb66ff.toInt(), // plains + 0x888888ff.toInt() // rockyland + ) + + private fun renderNoise() { + // render noisemap to pixmap + for (y in 0 until HEIGHT) { + for (x in 0 until WIDTH) { + val sampleDensity = 48.0 / 2 // 48.0: magic number from old code + val sampleTheta = (x.toDouble() / WIDTH) * TWO_PI + val sampleOffset = (WIDTH / sampleDensity) / 8.0 + val sampleX = sin(sampleTheta) * sampleOffset + sampleOffset // plus sampleOffset to make only + val sampleZ = cos(sampleTheta) * sampleOffset + sampleOffset // positive points are to be sampled + val sampleY = y / sampleDensity + val noise: Float = joise.get(sampleX, sampleY, sampleZ).toFloat() + + val control = noise.times(biomeColors.size).minus(0.00001f).toInt().fmod(biomeColors.size) + + testTex.setColor(biomeColors[control]) + //testTex.setColor(RNG.nextFloat(), RNG.nextFloat(), RNG.nextFloat(), 1f) + testTex.drawPixel(x, y) + } + } + } +} + +fun main(args: Array) { + ShaderProgram.pedantic = false + + val appConfig = LwjglApplicationConfiguration() + appConfig.vSyncEnabled = false + appConfig.resizable = false + appConfig.width = WIDTH + appConfig.height = HEIGHT + appConfig.backgroundFPS = 10 + appConfig.foregroundFPS = 10 + appConfig.forceExit = false + + LwjglApplication(WorldgenNoiseSandbox(), appConfig) +} \ No newline at end of file diff --git a/work_files/graphics/sprites/fixtures/workbench.psd b/work_files/graphics/sprites/fixtures/workbench.psd new file mode 100644 index 000000000..43c077c44 --- /dev/null +++ b/work_files/graphics/sprites/fixtures/workbench.psd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9645573f52a38d76fc2efbed1c09b240fdfd7a2d205204349e5f5c160e429abd +size 23980 diff --git a/work_files/graphics/terrain/terrain_mask_type02.psd b/work_files/graphics/terrain/terrain_mask_type02.psd index 7719b02fa..23e5a8379 100644 --- a/work_files/graphics/terrain/terrain_mask_type02.psd +++ b/work_files/graphics/terrain/terrain_mask_type02.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:240aa3d56744701d9a3112fae7fa21b83bc946eb3d078df7a6819f589afad81a -size 620735 +oid sha256:6baeb2e93110a57a0db89562a909ae6b54229b3026387318c355f5b526ee87fd +size 540748