mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-10 02:24:05 +09:00
pickaxe to drop ores when they were mined
This commit is contained in:
Binary file not shown.
@@ -12,3 +12,6 @@
|
|||||||
#"11";"item@basegame:138";"GEM,DIAMOND"
|
#"11";"item@basegame:138";"GEM,DIAMOND"
|
||||||
#"12";"item@basegame:139";"GEM,SIO2,AMETHYST"
|
#"12";"item@basegame:139";"GEM,SIO2,AMETHYST"
|
||||||
#"13";"item@basegame:140";"GEM,SIO2,QUARTZ"
|
#"13";"item@basegame:140";"GEM,SIO2,QUARTZ"
|
||||||
|
|
||||||
|
#"256";"macro@BASETILE";"GRASS"
|
||||||
|
#"257";"macro@BASETILE";"MOSS"
|
||||||
|
Can't render this file because it contains an unexpected character in line 3 and column 3.
|
@@ -7,6 +7,7 @@ import com.badlogic.gdx.utils.JsonValue
|
|||||||
import net.torvald.terrarum.App.*
|
import net.torvald.terrarum.App.*
|
||||||
import net.torvald.terrarum.App.setToGameConfig
|
import net.torvald.terrarum.App.setToGameConfig
|
||||||
import net.torvald.terrarum.blockproperties.BlockCodex
|
import net.torvald.terrarum.blockproperties.BlockCodex
|
||||||
|
import net.torvald.terrarum.blockproperties.OreCodex
|
||||||
import net.torvald.terrarum.blockproperties.WireCodex
|
import net.torvald.terrarum.blockproperties.WireCodex
|
||||||
import net.torvald.terrarum.gamecontroller.IME
|
import net.torvald.terrarum.gamecontroller.IME
|
||||||
import net.torvald.terrarum.gameitems.GameItem
|
import net.torvald.terrarum.gameitems.GameItem
|
||||||
@@ -491,6 +492,16 @@ object ModMgr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object GameOreLoader {
|
||||||
|
init {
|
||||||
|
Terrarum.oreCodex = OreCodex()
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic operator fun invoke(module: String) {
|
||||||
|
Terrarum.oreCodex.fromModule(module, "ores/ores.csv")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
object GameItemLoader {
|
object GameItemLoader {
|
||||||
const val itemPath = "items/"
|
const val itemPath = "items/"
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
|||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
||||||
import net.torvald.terrarum.blockproperties.BlockCodex
|
import net.torvald.terrarum.blockproperties.BlockCodex
|
||||||
import net.torvald.terrarum.blockproperties.FluidCodex
|
import net.torvald.terrarum.blockproperties.FluidCodex
|
||||||
|
import net.torvald.terrarum.blockproperties.OreCodex
|
||||||
import net.torvald.terrarum.blockproperties.WireCodex
|
import net.torvald.terrarum.blockproperties.WireCodex
|
||||||
import net.torvald.terrarum.gameactors.Actor
|
import net.torvald.terrarum.gameactors.Actor
|
||||||
import net.torvald.terrarum.gameactors.ActorID
|
import net.torvald.terrarum.gameactors.ActorID
|
||||||
@@ -78,6 +79,7 @@ object Terrarum : Disposable {
|
|||||||
var craftingCodex = CraftingCodex(); internal set
|
var craftingCodex = CraftingCodex(); internal set
|
||||||
var apocryphas = HashMap<String, Any>(); internal set
|
var apocryphas = HashMap<String, Any>(); internal set
|
||||||
var fluidCodex = FluidCodex(); internal set
|
var fluidCodex = FluidCodex(); internal set
|
||||||
|
var oreCodex = OreCodex(); internal set
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
@@ -765,6 +767,8 @@ val Apocryphas: HashMap<String, Any>
|
|||||||
get() = Terrarum.apocryphas
|
get() = Terrarum.apocryphas
|
||||||
val FluidCodex: FluidCodex
|
val FluidCodex: FluidCodex
|
||||||
get() = Terrarum.fluidCodex
|
get() = Terrarum.fluidCodex
|
||||||
|
val OreCodex: OreCodex
|
||||||
|
get() = Terrarum.oreCodex
|
||||||
|
|
||||||
class Codex : KVHashMap() {
|
class Codex : KVHashMap() {
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import net.torvald.gdx.graphics.Cvec
|
|||||||
import net.torvald.terrarum.App.printdbg
|
import net.torvald.terrarum.App.printdbg
|
||||||
import net.torvald.terrarum.ReferencingRanges.PREFIX_VIRTUALTILE
|
import net.torvald.terrarum.ReferencingRanges.PREFIX_VIRTUALTILE
|
||||||
import net.torvald.terrarum.gameitems.ItemID
|
import net.torvald.terrarum.gameitems.ItemID
|
||||||
|
import net.torvald.terrarum.gameitems.isWall
|
||||||
import net.torvald.terrarum.utils.CSVFetcher
|
import net.torvald.terrarum.utils.CSVFetcher
|
||||||
import net.torvald.util.SortedArrayList
|
import net.torvald.util.SortedArrayList
|
||||||
import org.apache.commons.csv.CSVRecord
|
import org.apache.commons.csv.CSVRecord
|
||||||
@@ -63,7 +64,7 @@ class BlockCodex {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun fromCSV(module: String, csvString: String) {
|
fun fromCSV(module: String, csvString: String) {
|
||||||
printdbg(this, "Building wire properties table for module $module")
|
printdbg(this, "Building block properties table for module $module")
|
||||||
|
|
||||||
val csvParser = org.apache.commons.csv.CSVParser.parse(
|
val csvParser = org.apache.commons.csv.CSVParser.parse(
|
||||||
csvString,
|
csvString,
|
||||||
@@ -144,7 +145,7 @@ class BlockCodex {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return if (blockID.startsWith("wall@"))
|
return if (blockID.isWall())
|
||||||
blockProps[blockID.substring(5)]!!
|
blockProps[blockID.substring(5)]!!
|
||||||
else
|
else
|
||||||
blockProps[blockID]!!
|
blockProps[blockID]!!
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package net.torvald.terrarum.blockproperties
|
package net.torvald.terrarum.blockproperties
|
||||||
|
|
||||||
|
import net.torvald.gdx.graphics.Cvec
|
||||||
import net.torvald.terrarum.gameitems.ItemID
|
import net.torvald.terrarum.gameitems.ItemID
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -29,3 +30,12 @@ class FluidCodex {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class FluidProp {
|
||||||
|
val opacity: Cvec = Cvec()
|
||||||
|
val lumCol: Cvec = Cvec()
|
||||||
|
var id: ItemID = ""
|
||||||
|
var nameKey: String = ""
|
||||||
|
}
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
package net.torvald.terrarum.blockproperties
|
|
||||||
|
|
||||||
import net.torvald.gdx.graphics.Cvec
|
|
||||||
import net.torvald.terrarum.gameitems.ItemID
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by minjaesong on 2023-10-09.
|
|
||||||
*/
|
|
||||||
class FluidProp {
|
|
||||||
|
|
||||||
val opacity: Cvec = Cvec()
|
|
||||||
val lumCol: Cvec = Cvec()
|
|
||||||
var id: ItemID = ""
|
|
||||||
var nameKey: String = ""
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
84
src/net/torvald/terrarum/blockproperties/OreCodex.kt
Normal file
84
src/net/torvald/terrarum/blockproperties/OreCodex.kt
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
package net.torvald.terrarum.blockproperties
|
||||||
|
|
||||||
|
import net.torvald.terrarum.App
|
||||||
|
import net.torvald.terrarum.gameitems.ItemID
|
||||||
|
import net.torvald.terrarum.utils.CSVFetcher
|
||||||
|
import org.apache.commons.csv.CSVRecord
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by minjaesong on 2023-10-11.
|
||||||
|
*/
|
||||||
|
class OreCodex {
|
||||||
|
|
||||||
|
@Transient val oreProps = HashMap<ItemID, OreProp>()
|
||||||
|
@Transient private val nullProp = OreProp()
|
||||||
|
|
||||||
|
internal constructor()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Later entry (possible from other modules) will replace older ones
|
||||||
|
*/
|
||||||
|
fun fromModule(module: String, path: String) {
|
||||||
|
App.printdbg(this, "Building ore properties table")
|
||||||
|
try {
|
||||||
|
register(module, CSVFetcher.readFromModule(module, path))
|
||||||
|
}
|
||||||
|
catch (e: IOException) { e.printStackTrace() }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun fromCSV(module: String, csvString: String) {
|
||||||
|
App.printdbg(this, "Building ore properties table for module $module")
|
||||||
|
|
||||||
|
val csvParser = org.apache.commons.csv.CSVParser.parse(
|
||||||
|
csvString,
|
||||||
|
CSVFetcher.terrarumCSVFormat
|
||||||
|
)
|
||||||
|
val csvRecordList = csvParser.records
|
||||||
|
csvParser.close()
|
||||||
|
|
||||||
|
register(module, csvRecordList)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun register(module: String, records: List<CSVRecord>) {
|
||||||
|
records.forEach {
|
||||||
|
setProp(module, it.intVal("id"), it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setProp(modname: String, key: Int, record: CSVRecord) {
|
||||||
|
val prop = OreProp()
|
||||||
|
prop.id = "ores@$modname:$key"
|
||||||
|
prop.tags = record.get("tags").split(',').map { it.trim() }.toHashSet()
|
||||||
|
prop.item = record.get("item").let { if (it == null) "" else if (it.contains(':')) it else "$modname:$it" }
|
||||||
|
|
||||||
|
oreProps[prop.id] = prop
|
||||||
|
|
||||||
|
App.printdbg(this, "Setting prop ${prop.id}")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getAll() = oreProps.values
|
||||||
|
|
||||||
|
operator fun get(oreID: ItemID?): OreProp {
|
||||||
|
if (oreID == null || oreID == Block.NULL) {
|
||||||
|
return nullProp
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return oreProps[oreID]!!
|
||||||
|
}
|
||||||
|
catch (e: NullPointerException) {
|
||||||
|
throw NullPointerException("Oreprop with id $oreID does not exist.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class OreProp {
|
||||||
|
var id: String = ""
|
||||||
|
var item: ItemID = ""
|
||||||
|
var tags = HashSet<String>()
|
||||||
|
|
||||||
|
fun hasTag(s: String) = tags.contains(s)
|
||||||
|
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import net.torvald.terrarum.*
|
|||||||
import net.torvald.terrarum.App.IS_DEVELOPMENT_BUILD
|
import net.torvald.terrarum.App.IS_DEVELOPMENT_BUILD
|
||||||
import net.torvald.terrarum.App.printdbg
|
import net.torvald.terrarum.App.printdbg
|
||||||
import net.torvald.terrarum.blockproperties.BlockProp
|
import net.torvald.terrarum.blockproperties.BlockProp
|
||||||
|
import net.torvald.terrarum.blockproperties.OreProp
|
||||||
import net.torvald.terrarum.gameactors.ActorWithBody
|
import net.torvald.terrarum.gameactors.ActorWithBody
|
||||||
import net.torvald.terrarum.gameitems.GameItem
|
import net.torvald.terrarum.gameitems.GameItem
|
||||||
import net.torvald.terrarum.itemproperties.CraftingCodex
|
import net.torvald.terrarum.itemproperties.CraftingCodex
|
||||||
@@ -39,6 +40,7 @@ class EntryPoint : ModuleEntryPoint() {
|
|||||||
ModMgr.GameMaterialLoader.invoke(moduleName)
|
ModMgr.GameMaterialLoader.invoke(moduleName)
|
||||||
ModMgr.GameItemLoader.invoke(moduleName)
|
ModMgr.GameItemLoader.invoke(moduleName)
|
||||||
ModMgr.GameBlockLoader.invoke(moduleName)
|
ModMgr.GameBlockLoader.invoke(moduleName)
|
||||||
|
ModMgr.GameOreLoader.invoke(moduleName)
|
||||||
ModMgr.GameLanguageLoader.invoke(moduleName)
|
ModMgr.GameLanguageLoader.invoke(moduleName)
|
||||||
ModMgr.GameCraftingRecipeLoader.invoke(moduleName)
|
ModMgr.GameCraftingRecipeLoader.invoke(moduleName)
|
||||||
|
|
||||||
@@ -60,7 +62,7 @@ class EntryPoint : ModuleEntryPoint() {
|
|||||||
printdbg(this, "recording item ID ")
|
printdbg(this, "recording item ID ")
|
||||||
|
|
||||||
// blocks.csvs are loaded by ModMgr beforehand
|
// blocks.csvs are loaded by ModMgr beforehand
|
||||||
// block items (blocks and walls are the same thing basically)
|
// register blocks as items
|
||||||
for (tile in BlockCodex.getAll()) {
|
for (tile in BlockCodex.getAll()) {
|
||||||
ItemCodex[tile.id] = makeNewItemObj(tile, false)
|
ItemCodex[tile.id] = makeNewItemObj(tile, false)
|
||||||
|
|
||||||
|
|||||||
@@ -14,16 +14,24 @@ open class OreItemBase(originalID: ItemID) : GameItem(originalID) {
|
|||||||
override var inventoryCategory = Category.GENERIC
|
override var inventoryCategory = Category.GENERIC
|
||||||
override val isDynamic = false
|
override val isDynamic = false
|
||||||
override val materialId = "OORE"
|
override val materialId = "OORE"
|
||||||
|
override var equipPosition = EquipPosition.HAND_GRIP
|
||||||
}
|
}
|
||||||
|
|
||||||
class OreTimber(originalID: ItemID) : OreItemBase(originalID) {
|
/* Wooden Log is a block */
|
||||||
override var originalName = "ITEM_WOODS"
|
class OreWood(originalID: ItemID) : OreItemBase(originalID) {
|
||||||
|
override var originalName = "ITEM_WOOD"
|
||||||
override val materialId = "WOOD"
|
override val materialId = "WOOD"
|
||||||
override val itemImage: TextureRegion
|
override val itemImage: TextureRegion
|
||||||
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(0,6)
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(0,6)
|
||||||
}
|
}
|
||||||
class OreCopper(originalID: ItemID) : OreItemBase(originalID) {
|
class OreStick(originalID: ItemID) : OreItemBase(originalID) {
|
||||||
override var originalName = "ITEM_ORE_MALACHITE"
|
override var originalName = "ITEM_WOOD_STICK"
|
||||||
|
override val materialId = "WOOD"
|
||||||
override val itemImage: TextureRegion
|
override val itemImage: TextureRegion
|
||||||
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(1,6)
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(1,6)
|
||||||
}
|
}
|
||||||
|
class OreCopper(originalID: ItemID) : OreItemBase(originalID) {
|
||||||
|
override var originalName = "ITEM_ORE_MALACHITE"
|
||||||
|
override val itemImage: TextureRegion
|
||||||
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(2,6)
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package net.torvald.terrarum.modulebasegame.gameitems
|
|||||||
|
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureRegion
|
import com.badlogic.gdx.graphics.g2d.TextureRegion
|
||||||
import net.torvald.terrarum.*
|
import net.torvald.terrarum.*
|
||||||
|
import net.torvald.terrarum.App.printdbg
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
||||||
import net.torvald.terrarum.blockproperties.Block
|
import net.torvald.terrarum.blockproperties.Block
|
||||||
@@ -74,13 +75,18 @@ object PickaxeCore {
|
|||||||
|
|
||||||
// filter passed, do the job
|
// filter passed, do the job
|
||||||
val swingDmgToFrameDmg = delta.toDouble() / actorvalue.getAsDouble(AVKey.ACTION_INTERVAL)!!
|
val swingDmgToFrameDmg = delta.toDouble() / actorvalue.getAsDouble(AVKey.ACTION_INTERVAL)!!
|
||||||
|
val (oreOnTile, _) = INGAME.world.getTileFromOre(x, y)
|
||||||
|
|
||||||
(INGAME.world).inflictTerrainDamage(
|
(INGAME.world).inflictTerrainDamage(
|
||||||
x, y,
|
x, y,
|
||||||
Calculate.pickaxePower(actor, item?.material) * swingDmgToFrameDmg
|
Calculate.pickaxePower(actor, item?.material) * swingDmgToFrameDmg
|
||||||
)?.let { tileBroken ->
|
)?.let { tileBroken ->
|
||||||
if (Math.random() < dropProbability) {
|
if (Math.random() < dropProbability) {
|
||||||
val drop = BlockCodex[tileBroken].drop
|
val drop = if (oreOnTile != Block.AIR)
|
||||||
|
OreCodex[oreOnTile].item
|
||||||
|
else
|
||||||
|
BlockCodex[tileBroken].drop
|
||||||
|
|
||||||
if (drop.isNotBlank()) {
|
if (drop.isNotBlank()) {
|
||||||
INGAME.queueActorAddition(DroppedItem(drop, (x + 0.5) * TILE_SIZED, (y + 1.0) * TILE_SIZED))
|
INGAME.queueActorAddition(DroppedItem(drop, (x + 0.5) * TILE_SIZED, (y + 1.0) * TILE_SIZED))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
|
|
||||||
in vec4 a_position;
|
in highp vec4 a_position;
|
||||||
in vec4 a_color;
|
in highp vec4 a_color;
|
||||||
in vec4 a_generic;
|
in highp vec4 a_generic;
|
||||||
in vec2 a_texCoord0;
|
in highp vec2 a_texCoord0;
|
||||||
|
|
||||||
uniform mat4 u_projTrans;
|
uniform mat4 u_projTrans;
|
||||||
|
|
||||||
out vec4 v_color;
|
out mediump vec4 v_color;
|
||||||
out vec2 v_texCoords;
|
out highp vec2 v_texCoords;
|
||||||
out vec4 v_generic;
|
out highp vec4 v_generic;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
v_color = a_color;
|
v_color = a_color;
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
|
|
||||||
in vec4 a_position;
|
in highp vec4 a_position;
|
||||||
in vec4 a_color;
|
in highp vec4 a_color;
|
||||||
in vec4 a_generic;
|
in highp vec4 a_generic;
|
||||||
in vec2 a_texCoord0;
|
in highp vec2 a_texCoord0;
|
||||||
|
|
||||||
uniform mat4 u_projTrans;
|
uniform mat4 u_projTrans;
|
||||||
|
|
||||||
out vec4 v_color;
|
out mediump vec4 v_color;
|
||||||
out vec2 v_texCoords;
|
out highp vec2 v_texCoords;
|
||||||
out vec4 v_generic;
|
out highp vec4 v_generic;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
v_color = a_color;
|
v_color = a_color;
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user