mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-18 06:24:06 +09:00
112 lines
3.5 KiB
Kotlin
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")
|
|
}
|
|
} |