Files
Terrarum/src/net/torvald/terrarum/modulebasegame/items/PickaxeGeneric.kt

72 lines
2.5 KiB
Kotlin

package net.torvald.terrarum.modulebasegame.items
import net.torvald.point.Point2d
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameactors.ActorWithPhysics
import net.torvald.terrarum.itemproperties.Calculate
import net.torvald.terrarum.itemproperties.GameItem
import net.torvald.terrarum.itemproperties.ItemID
import net.torvald.terrarum.itemproperties.Material
/**
* Created by minjaesong on 2017-07-17.
*/
class PickaxeGeneric(override val originalID: ItemID) : GameItem() {
override var dynamicID: ItemID = originalID
override val originalName = "PACKAGED_PICK"
override var baseMass = 10.0
override var baseToolSize: Double? = 10.0
override var stackable = true
override var maxDurability = 147
override var durability = maxDurability.toFloat()
override val equipPosition = 9
override var inventoryCategory = Category.TOOL
override val isUnique = false
override val isDynamic = true
override val material = Material(0,0,0,0,0,0,0,0,1,0.0)
init {
super.name = "Builtin Pickaxe"
}
override fun primaryUse(delta: Float): Boolean {
val mouseTileX = Terrarum.mouseTileX
val mouseTileY = Terrarum.mouseTileY
val mousePoint = Point2d(mouseTileX.toDouble(), mouseTileY.toDouble())
val actorvalue = Terrarum.ingame!!.player.actorValue
using = true
// linear search filter (check for intersection with tilewise mouse point and tilewise hitbox)
// return false if hitting actors
Terrarum.ingame!!.actorContainer.forEach({
if (it is ActorWithPhysics && it.tilewiseHitbox.intersects(mousePoint))
return false
})
// return false if here's no tile
if (Block.AIR == Terrarum.ingame!!.world.getTileFromTerrain(mouseTileX, mouseTileY))
return false
// filter passed, do the job
val swingDmgToFrameDmg = delta.toDouble() / actorvalue.getAsDouble(AVKey.ACTION_INTERVAL)!!
Terrarum.ingame!!.world.inflictTerrainDamage(
mouseTileX, mouseTileY,
Calculate.pickaxePower(Terrarum.ingame!!.player, material) * swingDmgToFrameDmg
)
return true
}
override fun endPrimaryUse(delta: Float): Boolean {
using = false
// reset action timer to zero
Terrarum.ingame!!.player.actorValue.set(AVKey.__ACTION_TIMER, 0.0)
return true
}
}