Files
Terrarum/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt
Song Minjae 24de647284 inventory ui
icon in list


Former-commit-id: 7182dcda408d9710d77e25e357f3a67bdd42fff9
2017-03-22 23:58:18 +09:00

112 lines
3.5 KiB
Kotlin

package net.torvald.terrarum.gameactors
import net.torvald.terrarum.gameactors.ActorHumanoid
import net.torvald.terrarum.gameactors.ai.AILuaAPI
import net.torvald.terrarum.gameactors.ai.ActorAI
import net.torvald.terrarum.gameactors.ai.LuaAIWrapper
import net.torvald.terrarum.gameitem.InventoryItem
import org.luaj.vm2.*
import org.luaj.vm2.compiler.LuaC
import org.luaj.vm2.lib.*
import org.luaj.vm2.lib.jse.JseBaseLib
import org.luaj.vm2.lib.jse.JseMathLib
import org.luaj.vm2.lib.jse.JsePlatform
import org.newdawn.slick.GameContainer
import org.newdawn.slick.Input
import java.io.InputStreamReader
import java.io.Reader
/**
* @param ai AI class. Use LuaAIWrapper for Lua script
*
* Created by minjaesong on 16-01-31.
*/
open class HumanoidNPC(
override val ai: ActorAI, // it's there for written-in-Kotlin, "hard-wired" AIs
born: GameDate
) : ActorHumanoid(born), AIControlled, CanBeAnItem {
constructor(luaAi: LuaAIWrapper, born: GameDate) : this(luaAi as ActorAI, born) {
luaAi.attachActor(this)
}
companion object {
val DEFAULT_COLLISION_TYPE = ActorWithSprite.COLLISION_DYNAMIC
}
init {
collisionType = DEFAULT_COLLISION_TYPE
}
// we're having InventoryItem data so that this class could be somewhat universal
override var itemData: InventoryItem = object : InventoryItem() {
override var id = referenceID
override val isUnique: Boolean = true
override var baseMass: Double
get() = actorValue.getAsDouble(AVKey.BASEMASS)!!
set(value) { actorValue[AVKey.BASEMASS] = value }
override var baseToolSize: Double? = 0.0
override var scale: Double
get() = actorValue.getAsDouble(AVKey.SCALE)!!
set(value) {
actorValue[AVKey.SCALE] = value
}
override var category = "npc"
override val originalName: String = actorValue.getAsString(AVKey.NAME) ?: "NPC"
override fun secondaryUse(gc: GameContainer, delta: Int) {
// TODO place this Actor to the world
}
}
override fun getItemWeight(): Double {
return mass
}
override fun stopUpdateAndDraw() {
isUpdate = false
isVisible = false
}
override fun resumeUpdateAndDraw() {
isUpdate = true
isVisible = true
}
override fun update(gc: GameContainer, delta: Int) {
super.update(gc, delta)
ai.update(delta)
}
override fun moveLeft(amount: Float) { // hit the buttons on the controller box
axisX = -amount
}
override fun moveRight(amount: Float) { // hit the buttons on the controller box
axisX = amount
}
override fun moveUp(amount: Float) { // hit the buttons on the controller box
axisY = -amount
}
override fun moveDown(amount: Float) { // hit the buttons on the controller box
axisY = amount
}
override fun moveJump(amount: Float) { // hit the buttons on the controller box
isJumpDown = true
}
/** fly toward arbitrary angle WARNING: the map is looped! */
override fun moveTo(bearing: Double) {
// if your NPC should fly, override this
throw UnsupportedOperationException("Humans cannot fly :p")
}
/** fly toward arbitrary coord WARNING: the map is looped! */
override fun moveTo(toX: Double, toY: Double) {
// if your NPC should fly, override this
throw UnsupportedOperationException("Humans cannot fly :p")
}
}