mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-12 06:41:51 +09:00
208 lines
7.1 KiB
Kotlin
208 lines
7.1 KiB
Kotlin
package net.torvald.terrarum.debuggerapp
|
|
|
|
import net.torvald.terrarum.ActorValue
|
|
import net.torvald.terrarum.Terrarum
|
|
import net.torvald.terrarum.console.Echo
|
|
import net.torvald.terrarum.console.SetAV
|
|
import net.torvald.terrarum.gameactors.Actor
|
|
import net.torvald.terrarum.gameactors.ActorWithSprite
|
|
import net.torvald.terrarum.mapdrawer.FeaturesDrawer
|
|
import java.awt.BorderLayout
|
|
import java.awt.GridLayout
|
|
import java.awt.event.MouseAdapter
|
|
import java.awt.event.MouseEvent
|
|
import java.awt.event.MouseListener
|
|
import javax.swing.*
|
|
|
|
/**
|
|
* Created by minjaesong on 2016-12-29.
|
|
*/
|
|
class ActorValueTracker constructor() : JFrame() {
|
|
|
|
constructor(actor: Actor?) : this() {
|
|
setTrackingActor(actor)
|
|
}
|
|
|
|
private val avInfoArea = JTextArea()
|
|
private val avInfoScroller = JScrollPane(avInfoArea)
|
|
private val avPosArea = JTextArea()
|
|
private val avPosScroller = JScrollPane(avPosArea)
|
|
|
|
private var actor: ActorWithSprite? = null
|
|
private var actorValue: ActorValue? = null
|
|
|
|
private val modavInputKey = JTextField()
|
|
private val modavInputValue = JTextField()
|
|
|
|
private val buttonAddAV = JButton("Add/Mod")
|
|
private val buttonDelAV = JButton("Delete")
|
|
|
|
//private val selectedActorLabel = JLabel("Selected actor: ")
|
|
private val actorIDField = JTextField()
|
|
private val buttonChangeActor = JButton("Change")
|
|
|
|
init {
|
|
title = "Actor value tracker"
|
|
defaultCloseOperation = JFrame.DISPOSE_ON_CLOSE
|
|
|
|
val divPanel = JPanel()
|
|
divPanel.layout = BorderLayout(0, 2)
|
|
|
|
avInfoArea.highlighter = null // prevent text-drag-crash
|
|
avPosArea.highlighter = null // prevent text-drag-crash
|
|
|
|
avInfoScroller.horizontalScrollBarPolicy = JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
|
|
avPosScroller.horizontalScrollBarPolicy = JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
|
|
|
|
if (actor != null) {
|
|
actorIDField.text = "${actor!!.referenceID}"
|
|
}
|
|
|
|
// button listener for buttons
|
|
buttonAddAV.addMouseListener(object : MouseAdapter() {
|
|
override fun mousePressed(e: MouseEvent?) {
|
|
if (actor != null && modavInputKey.text.isNotBlank() && modavInputValue.text.isNotBlank()) {
|
|
SetAV.execute((
|
|
"setav;" +
|
|
"${actor!!.referenceID};" +
|
|
"${modavInputKey.text};" +
|
|
"${modavInputValue.text}"
|
|
).split(';').toTypedArray())
|
|
}
|
|
}
|
|
})
|
|
buttonDelAV.addMouseListener(object : MouseAdapter() {
|
|
override fun mousePressed(e: MouseEvent?) {
|
|
if (actorValue != null && modavInputKey.text.isNotBlank()) {
|
|
actorValue!!.remove(modavInputKey.text)
|
|
Echo("${SetAV.ccW}Removed ${SetAV.ccM}${modavInputKey.text} ${SetAV.ccW}of ${SetAV.ccY}${actor!!.referenceID}")
|
|
println("[ActorValueTracker] Removed ActorValue '${modavInputKey.text}' of $actor")
|
|
}
|
|
}
|
|
})
|
|
buttonChangeActor.addMouseListener(object : MouseAdapter() {
|
|
override fun mousePressed(e: MouseEvent?) {
|
|
if (actorIDField.text.toLowerCase() == "player") {
|
|
actor = Terrarum.ingame!!.player
|
|
actorValue = actor!!.actorValue
|
|
}
|
|
else if (actorIDField.text.isNotBlank()) {
|
|
actor = Terrarum.ingame!!.getActorByID(actorIDField.text.toInt()) as ActorWithSprite
|
|
actorValue = actor!!.actorValue
|
|
}
|
|
}
|
|
})
|
|
|
|
|
|
// panel elements
|
|
val actorNameBar = JPanel()
|
|
actorNameBar.layout = BorderLayout(2, 0)
|
|
actorNameBar.add(JLabel("RefID: "), BorderLayout.LINE_START)
|
|
actorNameBar.add(actorIDField, BorderLayout.CENTER)
|
|
actorNameBar.add(buttonChangeActor, BorderLayout.LINE_END)
|
|
|
|
val posAndAV = JPanel()
|
|
posAndAV.layout = BorderLayout()
|
|
posAndAV.add(avPosScroller, BorderLayout.PAGE_START)
|
|
posAndAV.add(avInfoScroller, BorderLayout.CENTER)
|
|
|
|
val toolbox = JPanel()
|
|
toolbox.layout = BorderLayout()
|
|
|
|
val toolpanel = JPanel()
|
|
toolpanel.layout = GridLayout(1, 0)
|
|
toolpanel.add(buttonAddAV)
|
|
toolpanel.add(buttonDelAV)
|
|
|
|
val modpanelLabels = JPanel()
|
|
modpanelLabels.layout = BorderLayout(4, 0)
|
|
modpanelLabels.add(JLabel("Key"), BorderLayout.PAGE_START)
|
|
modpanelLabels.add(JLabel("Value"), BorderLayout.CENTER)
|
|
|
|
val modpanelFields = JPanel()
|
|
modpanelFields.layout = BorderLayout(4, 2)
|
|
modpanelFields.add(modavInputKey, BorderLayout.PAGE_START)
|
|
modpanelFields.add(modavInputValue, BorderLayout.CENTER)
|
|
|
|
val modpanel = JPanel()
|
|
modpanel.layout = BorderLayout(4, 2)
|
|
modpanel.add(modpanelLabels, BorderLayout.LINE_START)
|
|
modpanel.add(modpanelFields, BorderLayout.CENTER)
|
|
modpanel.add(JLabel(
|
|
"<html>Messed-up type or careless delete will crash the game.<br>" +
|
|
"Prepend two underscores for boolean literals.</html>"
|
|
), BorderLayout.PAGE_END)
|
|
|
|
toolbox.add(toolpanel, BorderLayout.PAGE_START)
|
|
toolbox.add(modpanel, BorderLayout.CENTER)
|
|
|
|
divPanel.add(actorNameBar, BorderLayout.PAGE_START)
|
|
divPanel.add(posAndAV, BorderLayout.CENTER)
|
|
divPanel.add(toolbox, BorderLayout.PAGE_END)
|
|
|
|
|
|
this.add(divPanel)
|
|
this.setSize(300, 600)
|
|
this.isVisible = true
|
|
}
|
|
|
|
fun setTrackingActor(actor: Actor?) {
|
|
this.actorValue = actor?.actorValue
|
|
|
|
this.title = "AVTracker — $actor"
|
|
|
|
if (actor is ActorWithSprite) {
|
|
this.actor = actor
|
|
}
|
|
|
|
update()
|
|
}
|
|
|
|
fun update() {
|
|
val sb = StringBuilder()
|
|
|
|
if (actor != null) {
|
|
sb.append("toString: ${actor!!}\n")
|
|
sb.append("X: ${actor!!.hitbox.pointedX} (${(actor!!.hitbox.pointedX / FeaturesDrawer.TILE_SIZE).toInt()})\n")
|
|
sb.append("Y: ${actor!!.hitbox.pointedY} (${(actor!!.hitbox.pointedY / FeaturesDrawer.TILE_SIZE).toInt()})")
|
|
|
|
avPosArea.text = "$sb"
|
|
sb.setLength(0) // clear stringbuffer
|
|
}
|
|
|
|
if (actorValue != null) {
|
|
for (key in actorValue!!.keySet) {
|
|
val value = actorValue!![key.toString()]!!
|
|
val type = value.javaClass.simpleName
|
|
|
|
sb.append("$key = $value ($type)\n")
|
|
}
|
|
|
|
if (sb.isNotEmpty()) {
|
|
sb.deleteCharAt(sb.length - 1) // delete trailing \n
|
|
}
|
|
|
|
avInfoArea.text = "$sb"
|
|
}
|
|
else {
|
|
avInfoArea.text = ""
|
|
}
|
|
}
|
|
}
|
|
/*
|
|
|
|
+--------------------------------+
|
|
| Actor: [5333533 ] [Change] | LBL TFL BTN
|
|
+--------------------------------+
|
|
| X: 65532.655654747 (4095) | TAR
|
|
| Y: 3050.4935465 (190) |
|
|
| ... |
|
|
+--------------------------------+
|
|
| [ Add/Mod ] [ Delete ] | BTN BTN
|
|
+--------------------------------+
|
|
| Key [ ] | LBL TFL
|
|
| Value [ ] | LBL TFL
|
|
+--------------------------------+
|
|
|
|
|
|
*/ |