Issue #6 resolved

Former-commit-id: 643ca0b3757f329107a7677fe3bf5f43ffac7639
Former-commit-id: caa5582abb797485e90b8c3e47a6307b177ff456
This commit is contained in:
Song Minjae
2016-12-28 18:17:48 +09:00
parent e253641471
commit a6bbf256f0
7 changed files with 108 additions and 75 deletions

View File

@@ -227,7 +227,7 @@ constructor(gamename: String) : StateBasedGame(gamename) {
//var hasController = false
var controller: org.lwjgl.input.Controller? = null
private set
val CONTROLLER_DEADZONE = 0.2f
val CONTROLLER_DEADZONE = 0.1f
/** Available CPU threads */
val THREADS = Runtime.getRuntime().availableProcessors()

View File

@@ -127,7 +127,7 @@ open class ActorHumanoid(birth: GameDate, death: GameDate? = null)
protected var isRightDown = false
protected var isJumpDown = false
protected val isGamer: Boolean
get() = this is Player // FIXME true iff composed by PlayableActorDelegate
get() = this == Terrarum.ingame.player
private val nullItem = object : InventoryItem() {
@@ -387,23 +387,15 @@ open class ActorHumanoid(birth: GameDate, death: GameDate? = null)
private fun walkHorizontal(left: Boolean, absAxisVal: Float) {
if ((!walledLeft && left) || (!walledRight && !left)) {
readonly_totalX =
absMax( // keyboard
if (absAxisVal == AXIS_KEYBOARD)
avAcceleration * applyVelo(walkCounterX) * (if (left) -1f else 1f)
else
0.0
,
// gamepad
if (absAxisVal != AXIS_KEYBOARD)
avAcceleration * (if (left) -1f else 1f) * absAxisVal
else
0.0
)
if (absAxisVal == AXIS_KEYBOARD)
avAcceleration * applyVelo(walkCounterX) * (if (left) -1f else 1f)
else
avAcceleration * (if (left) -1f else 1f) * absAxisVal
//applyForce(Vector2(readonly_totalX, 0.0))
walkX += readonly_totalX
walkX = readonly_totalX
walkX = walkX.bipolarClamp(avSpeedCap)
if (absAxisVal != AXIS_KEYBOARD)
walkX = walkX.plus(readonly_totalX).bipolarClamp(avSpeedCap * absAxisVal)
else
walkX = walkX.plus(readonly_totalX).bipolarClamp(avSpeedCap)
if (absAxisVal == AXIS_KEYBOARD) {
walkCounterX += 1
@@ -413,10 +405,7 @@ open class ActorHumanoid(birth: GameDate, death: GameDate? = null)
}
// Heading flag
if (left)
walkHeading = LEFT
else
walkHeading = RIGHT
walkHeading = if (left) LEFT else RIGHT
}
/**
@@ -427,21 +416,15 @@ open class ActorHumanoid(birth: GameDate, death: GameDate? = null)
*/
private fun walkVertical(up: Boolean, absAxisVal: Float) {
readonly_totalY =
absMax( // keyboard
if (absAxisVal == AXIS_KEYBOARD)
avAcceleration * applyVelo(walkCounterY) * (if (up) -1f else 1f)
else
0.0
,
// gamepad
if (absAxisVal != AXIS_KEYBOARD)
avAcceleration * (if (up) -1f else 1f) * absAxisVal
else
0.0
)
if (absAxisVal == AXIS_KEYBOARD)
avAcceleration * applyVelo(walkCounterY) * (if (up) -1f else 1f)
else
avAcceleration * (if (up) -1f else 1f) * absAxisVal
walkY += readonly_totalY
walkY = walkY.bipolarClamp(avSpeedCap)
if (absAxisVal != AXIS_KEYBOARD)
walkY = walkY.plus(readonly_totalY).bipolarClamp(avSpeedCap * absAxisVal)
else
walkY = walkY.plus(readonly_totalY).bipolarClamp(avSpeedCap)
if (absAxisVal == AXIS_KEYBOARD) {
walkCounterY += 1

View File

@@ -2,6 +2,7 @@ package net.torvald.terrarum.gameactors
import net.torvald.terrarum.gameactors.ActorHumanoid
import net.torvald.terrarum.gameactors.ai.AILuaAPI
import net.torvald.terrarum.gameactors.ai.scripts.EncapsulatedString
import net.torvald.terrarum.gameitem.EquipPosition
import net.torvald.terrarum.gameitem.InventoryItem
import org.luaj.vm2.*
@@ -18,7 +19,7 @@ import java.io.Reader
/**
* Created by minjaesong on 16-01-31.
*/
open class HumanoidNPC(val luaScript: String, born: GameDate) : ActorHumanoid(born), AIControlled, CanBeAnItem {
open class HumanoidNPC(luaScript: EncapsulatedString, born: GameDate) : ActorHumanoid(born), AIControlled, CanBeAnItem {
override val scriptPath: String = ""
@@ -34,7 +35,7 @@ open class HumanoidNPC(val luaScript: String, born: GameDate) : ActorHumanoid(bo
init {
aiLuaAPI = AILuaAPI(luag, this)
luaInstance = luag.load(luaScript)
luaInstance = luag.load(luaScript.getString(), luaScript.javaClass.simpleName)
luaInstance.call()
}
@@ -78,10 +79,7 @@ open class HumanoidNPC(val luaScript: String, born: GameDate) : ActorHumanoid(bo
super.update(gc, delta)
aiLuaAPI.update(delta)
//runCommand(luaScript)
luag.get("update").call(delta.toLuaValue())
//moveRight()
}
override fun moveLeft(amount: Float) { // hit the buttons on the controller box

View File

@@ -12,7 +12,7 @@ object PlayerBuilderCynthia {
operator fun invoke(): ActorWithBody {
//val p: Player = Player(GameDate(100, 143)) // random value thrown
val p: HumanoidNPC = HumanoidNPC(PokemonNPCAI(), GameDate(100, 143)) // random value thrown
val p: HumanoidNPC = HumanoidNPC(PokemonNPCAI, GameDate(100, 143)) // random value thrown
InjectCreatureRaw(p.actorValue, "CreatureHuman.json")
p.actorValue[AVKey.__PLAYER_QUICKBARSEL] = 0

View File

@@ -0,0 +1,9 @@
package net.torvald.terrarum.gameactors.ai.scripts
/**
* Created by SKYHi14 on 2016-12-28.
*/
abstract class EncapsulatedString {
abstract fun getString(): String
override fun toString() = getString()
}

View File

@@ -5,52 +5,63 @@ package net.torvald.terrarum.gameactors.ai.scripts
*
* Created by SKYHi14 on 2016-12-23.
*/
object PokemonNPCAI {
operator fun invoke(): String = """
object PokemonNPCAI : EncapsulatedString() {
override fun getString() = """
timeCounter = 0
countMax = 0
moveMode = math.random() >= 0.5 and "left" or "right"
currentMode = "turn"
function generateTurn()
return 4600 + 1250 * math.random()
local function generateCountMax()
function generateTurn()
return 4600 + 1250 * math.random()
end
function generateWalk()
return 568 + 342 * math.random()
end
return (currentMode == "move") and generateWalk() or generateTurn()
end
function generateWalk()
return 568 + 342 * math.random()
local function moveToDirection()
if moveMode == "left" then
ai.moveLeft(0.5)
elseif moveMode == "right" then
ai.moveRight(0.5)
end
end
local function toggleCurrentMode()
currentMode = (currentMode == "move") and "turn" or "move"
end
local function toggleMoveMode()
moveMode = (moveMode == "left") and "right" or "left"
end
countMax = generateTurn()
-------------------------------------------------------------------------------
countMax = generateCountMax()
function update(delta)
timeCounter = timeCounter + delta
if currentMode == "turn" then
-- wait
-- reset counter
if timeCounter >= countMax then
timeCounter = 0
currentMode = "move"
countMax = generateWalk()
moveMode = (moveMode == "left") and "right" or "left"
end
elseif currentMode == "move" then
-- move
if moveMode == "left" then
ai.moveLeft(0.5)
elseif moveMode == "right" then
ai.moveRight(0.5)
end
-- reset counter
if timeCounter >= countMax then
timeCounter = 0
currentMode = "turn"
countMax = generateTurn()
if currentMode == "move" then
moveToDirection()
end
if timeCounter >= countMax then
timeCounter = 0
toggleCurrentMode()
countMax = generateCountMax()
if currentMode == "turn" then
toggleMoveMode()
end
end
end
"""
}
}

View File

@@ -10,6 +10,7 @@ import net.torvald.terrarum.mapdrawer.MapDrawer
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.blendNormal
import net.torvald.terrarum.blendScreen
import net.torvald.terrarum.gameactors.ActorHumanoid
import org.newdawn.slick.Color
import org.newdawn.slick.GameContainer
import org.newdawn.slick.Graphics
@@ -80,9 +81,9 @@ class BasicDebugInfoWindow : UICanvas {
printLine(g, 1, "posX "
+ ccG
+ "${hitbox.pointedX.toString()}"
+ "${hitbox.pointedX}"
+ " ("
+ "${(hitbox.pointedX / MapDrawer.TILE_SIZE).toInt().toString()}"
+ "${(hitbox.pointedX / MapDrawer.TILE_SIZE).toInt()}"
+ ")")
printLine(g, 2, "posY "
+ ccG
@@ -143,6 +144,14 @@ class BasicDebugInfoWindow : UICanvas {
Terrarum.WIDTH - histogramW - 30,
Terrarum.HEIGHT - histogramH - 30
)
if (Terrarum.controller != null) {
drawGamepadAxis(g,
Terrarum.controller!!.getAxisValue(3),
Terrarum.controller!!.getAxisValue(2),
Terrarum.WIDTH - 135,
40
)
}
/**
* Top right
@@ -195,7 +204,7 @@ class BasicDebugInfoWindow : UICanvas {
val histogramMax = histogram.screen_tiles.toFloat()
g.color = uiColour
g.fillRect(x.toFloat(), y.toFloat(), w.plus(1).toFloat(), h.toFloat())
g.fillRect(x.toFloat(), y.toFloat(), w.plus(1), h)
g.color = Color.gray
g.drawString("0", x.toFloat(), y.toFloat() + h + 2)
g.drawString("255", x.toFloat() + w + 1 - 8*3, y.toFloat() + h + 2)
@@ -211,7 +220,7 @@ class BasicDebugInfoWindow : UICanvas {
}
}
val bar_x = x + (w / w.minus(1).toFloat()) * i.toFloat()
val bar_x = x + (w / w.minus(1f)) * i.toFloat()
val bar_h = FastMath.ceil(h / histogramMax * histogram_value.toFloat()).toFloat()
val bar_y = y + (h / histogramMax) - bar_h + h
val bar_w = 1f
@@ -223,6 +232,29 @@ class BasicDebugInfoWindow : UICanvas {
blendNormal()
}
private fun drawGamepadAxis(g: Graphics, axisX: Float, axisY: Float, uiX: Int, uiY: Int) {
val uiColour = Color(0xAA000000.toInt())
val w = 128f
val h = 128f
val halfW = w / 2f
val halfH = h / 2f
val pointDX = axisX * halfW
val pointDY = axisY * halfH
val padName = if (Terrarum.controller!!.name.isEmpty()) "Gamepad"
else Terrarum.controller!!.name
blendNormal()
g.color = uiColour
g.fillRect(uiX.toFloat(), uiY.toFloat(), w, h)
g.color = Color.white
g.drawLine(uiX + halfW, uiY + halfH, uiX + halfW + pointDX, uiY + halfH + pointDY)
g.color = Color.gray
g.drawString(padName, uiX + w / 2 - (padName.length) * 4, uiY.toFloat() + h + 2)
}
private fun line(i: Int): Float = i * 10f
private fun column(i: Int): Float = 300f * (i - 1)