mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 12:21:52 +09:00
smelting sand to make glass
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
/**
|
||||
|
||||
@@ -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) }
|
||||
|
||||
@@ -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!")
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user