smelting sand to make glass

This commit is contained in:
minjaesong
2024-02-05 18:55:02 +09:00
parent 34bc9d45a0
commit 3d81d7870a
8 changed files with 49 additions and 34 deletions

View File

@@ -24,6 +24,7 @@ SAND;1;1;2400;0.0;0.0;36;0;36;0.0;sand
GRVL;1;1;2400;0.0;0.0;36;0;36;0.0;gravel
PLST;1;1;1400;0.0;0.0;36;0;16;0.5;TODO plastic (polyethylene)
GRSS;1;1;1400;0.0;0.0;36;0;10;0.0;dirt
GLAS;33;1000;2325;1.8;0.82;1.0;6;10;1.0;
AIIR;1;1;1;0.0;0.0;36;0;1;-0.2;air
NULL;1;1;1;0.0;0.0;36;0;1;0.5;air
1 idst tens impf dsty fmod endurance tcond reach rcs sondrefl comments
24 GRVL 1 1 2400 0.0 0.0 36 0 36 0.0 gravel
25 PLST 1 1 1400 0.0 0.0 36 0 16 0.5 TODO plastic (polyethylene)
26 GRSS 1 1 1400 0.0 0.0 36 0 10 0.0 dirt
27 GLAS 33 1000 2325 1.8 0.82 1.0 6 10 1.0
28 AIIR 1 1 1 0.0 0.0 36 0 1 -0.2 air
29 NULL 1 1 1 0.0 0.0 36 0 1 0.5 air
30 # idst: ID_STRING, ALL CAPS

View File

@@ -669,14 +669,14 @@ object ModMgr {
val loadedClassConstructor = loadedClass.getConstructor(ItemID::class.java)
val loadedClassInstance = loadedClassConstructor.newInstance(itemName)
ItemCodex[itemName] = loadedClassInstance as GameItem
ItemCodex.tags[itemName] = tags
ItemCodex[itemName]!!.tags.addAll(tags)
}
else {
val loadedClass = it.loadClass(className)
val loadedClassConstructor = loadedClass.getConstructor(ItemID::class.java)
val loadedClassInstance = loadedClassConstructor.newInstance(itemName)
ItemCodex[itemName] = loadedClassInstance as GameItem
ItemCodex.tags[itemName] = tags
ItemCodex[itemName]!!.tags.addAll(tags)
}
}
}

View File

@@ -177,6 +177,8 @@ class BlockCodex {
return blockProps[blockID]
}
fun filter(predicate: (BlockProp) -> Boolean) = blockProps.entries.filter { (_, prop) -> predicate(prop) }
private fun setProp(modname: String, key: Int, record: CSVRecord) {
val prop = BlockProp()
prop.nameKey = record.get("name")

View File

@@ -34,7 +34,7 @@ abstract class GameItem(val originalID: ItemID) : Comparable<GameItem>, Cloneabl
* If it burns for 80 seconds in the furnace, the calories value would be 80*60=4800, assuming tickrate of 60.
* Assuming one item weighs 10 kilograms, 1 game-calories is about 5 watt-hours.
*/
open var calories = 0.0
@Transient open var calories = 0.0
/**
* For items with COMBUSTIBLE tag only
@@ -42,9 +42,9 @@ abstract class GameItem(val originalID: ItemID) : Comparable<GameItem>, Cloneabl
* Lower=more smoky. How likely it would produce smokes when burned on a furnace. Smokiness = 0.25 means the furnace would
* emit smoke particle every 0.25 seconds.
*/
open var smokiness = Float.POSITIVE_INFINITY
@Transient open var smokiness = Float.POSITIVE_INFINITY
open var smeltingProduct: ItemID? = null
@Transient open var smeltingProduct: ItemID? = null
open var dynamicID: ItemID = originalID
/**

View File

@@ -32,7 +32,7 @@ class ItemCodex {
* Will return corresponding Actor if ID >= ACTORID_MIN
*/
@Transient val itemCodex = ItemTable()
@Transient var tags = HashMap<String, HashSet<String>>()
// @Transient var tags = HashMap<String, HashSet<String>>()
val dynamicItemInventory = ItemTable()
val dynamicToStaticTable = ItemRemapTable()
@@ -94,9 +94,18 @@ class ItemCodex {
/**
* Returns the item in the Codex. If the item is static, its clone will be returned (you are free to modify the returned item).
* However, if the item is dynamic, the item itself will be returned. Modifying the item will affect the game.
* However, if the item is dynamic, the item itself will be returned.
*
* The returned object is a clone of the original object. Modifying fields will NOT affect the game.
*/
operator fun get(code: ItemID?): GameItem? {
return get0(code)?.clone()
}
/**
* Same as `get` but the object is mutable.
*/
fun get0(code: ItemID?): GameItem? {
if (code == null) return null
if (code.startsWith("$PREFIX_DYNAMICITEM:"))
@@ -109,7 +118,7 @@ class ItemCodex {
//throw IllegalArgumentException("Attempted to get item data of actor that cannot be an item. ($a)")
}
else // generic item
return itemCodex[code]?.clone() // from CSV
return itemCodex[code] // from CSV
}
fun dynamicToStaticID(dynamicID: ItemID) = dynamicToStaticTable[dynamicID]!!
@@ -231,7 +240,7 @@ class ItemCodex {
fun hasItem(itemID: ItemID): Boolean = dynamicItemInventory.containsKey(itemID)
fun isEmpty(): Boolean = itemCodex.isEmpty()
fun hasTag(itemID: ItemID, s: String) = tags[itemID]?.contains(s) == true
fun hasTag(itemID: ItemID, s: String) = get(itemID)?.tags?.contains(s) == true
fun hasAnyTagOf(itemID: ItemID, vararg s: String) = s.any { hasTag(itemID, it) }
fun hasAnyTag(itemID: ItemID, s: Collection<String>) = s.any { hasTag(itemID, it) }
fun hasAnyTag(itemID: ItemID, s: Array<String>) = s.any { hasTag(itemID, it) }

View File

@@ -1,16 +1,8 @@
package net.torvald.terrarum.modulebasegame
import net.torvald.terrarum.*
import net.torvald.terrarum.App.IS_DEVELOPMENT_BUILD
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.blockproperties.BlockProp
import net.torvald.terrarum.blockproperties.OreProp
import net.torvald.terrarum.gameactors.ActorWithBody
import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.itemproperties.CraftingCodex
import net.torvald.terrarum.modulebasegame.gameitems.BlockBase
import net.torvald.terrarum.modulebasegame.imagefont.WatchFont
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
/**
* The entry point for the module "Basegame"
@@ -56,6 +48,12 @@ class EntryPoint : ModuleEntryPoint() {
}
}
// add smelting recipe for sands
BlockCodex.filter { it.hasTag("SAND") }.forEach { (itemID, _) ->
ItemCodex.get0(itemID)!!.tags.add("SMELTABLE")
ItemCodex.get0(itemID)!!.smeltingProduct = "basegame:148"
}
println("\n[Basegame.EntryPoint] Welcome back!")
}

View File

@@ -7,6 +7,7 @@ import net.torvald.gdx.graphics.Cvec
import net.torvald.random.HQRNG
import net.torvald.spriteanimation.SheetSpriteAnimation
import net.torvald.terrarum.*
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.gameactors.AVKey

View File

@@ -10,7 +10,7 @@ import net.torvald.terrarum.gameitems.ItemID
/**
* Created by minjaesong on 2023-10-11.
*/
open class OreItemBase(originalID: ItemID) : GameItem(originalID) {
open class OreItemBase(originalID: ItemID, private val registerToOreDict: Boolean = false) : GameItem(originalID) {
override var baseMass = 10.0
override var baseToolSize: Double? = null
override var inventoryCategory = Category.GENERIC
@@ -19,12 +19,15 @@ open class OreItemBase(originalID: ItemID) : GameItem(originalID) {
override var equipPosition = EquipPosition.HAND_GRIP
override fun effectOnPickup(actor: ActorWithBody) {
val playerCodex = (actor.actorValue.getAsString(AVKey.ORE_DICT) ?: "").split(',').filter { it.isNotBlank() }.toMutableList()
if (registerToOreDict) {
val playerCodex = (actor.actorValue.getAsString(AVKey.ORE_DICT) ?: "").split(',').filter { it.isNotBlank() }
.toMutableList()
if (playerCodex.binarySearch(originalID) < 0) {
playerCodex.add(originalID)
playerCodex.sort()
actor.actorValue[AVKey.ORE_DICT] = playerCodex.joinToString(",")
if (playerCodex.binarySearch(originalID) < 0) {
playerCodex.add(originalID)
playerCodex.sort()
actor.actorValue[AVKey.ORE_DICT] = playerCodex.joinToString(",")
}
}
}
}
@@ -86,9 +89,6 @@ class ItemLogsRosewood(originalID: ItemID) : OreItemBase(originalID) {
return BlockBase.blockStartPrimaryUse(actor, this, "basegame:75", delta)
}
}
class OreStick(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_WOOD_STICK"
override val materialId = "WOOD"
@@ -97,19 +97,22 @@ class OreStick(originalID: ItemID) : OreItemBase(originalID) {
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(0,6)
}
class OreCopper(originalID: ItemID) : OreItemBase(originalID) {
class OreCopper(originalID: ItemID) : OreItemBase(originalID, true) {
override var originalName = "ITEM_ORE_MALACHITE"
override var smeltingProduct: ItemID? = "item@basegame:112"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(1,6)
}
class OreIron(originalID: ItemID) : OreItemBase(originalID) {
class OreIron(originalID: ItemID) : OreItemBase(originalID, true) {
override var originalName = "ITEM_ORE_HAEMATITE"
override var smeltingProduct: ItemID? = "item@basegame:113"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(2,6)
}
class OreCoal(originalID: ItemID) : OreItemBase(originalID) {
class OreCoal(originalID: ItemID) : OreItemBase(originalID, true) {
override var originalName = "ITEM_ORE_COAL"
override var smeltingProduct: ItemID? = "item@basegame:114"
override var calories = 4800.0
@@ -117,39 +120,40 @@ class OreCoal(originalID: ItemID) : OreItemBase(originalID) {
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(3,6)
}
class OreZinc(originalID: ItemID) : OreItemBase(originalID) {
class OreZinc(originalID: ItemID) : OreItemBase(originalID, true) {
override var originalName = "ITEM_ORE_SPHALERITE"
override var smeltingProduct: ItemID? = "item@basegame:115"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(4,6)
}
class OreTin(originalID: ItemID) : OreItemBase(originalID) {
class OreTin(originalID: ItemID) : OreItemBase(originalID, true) {
override var originalName = "ITEM_ORE_CASSITERITE"
override var smeltingProduct: ItemID? = "item@basegame:116"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(5,6)
}
class OreGold(originalID: ItemID) : OreItemBase(originalID) {
class OreGold(originalID: ItemID) : OreItemBase(originalID, true) {
override var originalName = "ITEM_ORE_NATURAL_GOLD"
override var smeltingProduct: ItemID? = "item@basegame:117"
override val materialId: String = "AURM"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(6, 6)
}
class OreSilver(originalID: ItemID) : OreItemBase(originalID) {
class OreSilver(originalID: ItemID) : OreItemBase(originalID, true) {
override var originalName = "ITEM_ORE_NATURAL_SILVER"
override var smeltingProduct: ItemID? = "item@basegame:118"
override val materialId: String = "ARGN"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(7,6)
}
class OreLead(originalID: ItemID) : OreItemBase(originalID) {
class OreLead(originalID: ItemID) : OreItemBase(originalID, true) {
override var originalName = "ITEM_ORE_GALENA"
override var smeltingProduct: ItemID? = "item@basegame:119"
override val itemImage: TextureRegion
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(8,6)
}
class ItemCoalCoke(originalID: ItemID) : OreItemBase(originalID) {
override var originalName = "ITEM_COAL_COKE"
override var calories = 4800.0