Connected the battle engine to the UI. Beginning to make messages appear in the UI
This commit is contained in:
@@ -2,11 +2,12 @@ package fmon.battle
|
||||
|
||||
import scala.util.Random
|
||||
|
||||
import fmon.battle.msg._
|
||||
import fmon.stat._
|
||||
import fmon.stat.Statistic._
|
||||
import fmon.util.Fraction
|
||||
|
||||
class BattleEngine(val player: Party, val enemy: Party)(implicit val rng: Random) {
|
||||
class BattleEngine(val player: Party, val enemy: Party)(implicit val reader: SignalConsumer, val rng: Random) extends SignalConsumer {
|
||||
|
||||
def play() = {
|
||||
println(player.lead.level)
|
||||
@@ -15,8 +16,6 @@ class BattleEngine(val player: Party, val enemy: Party)(implicit val rng: Random
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
def playTurn(): Unit = {
|
||||
val playerAction = player.pollAction(enemy)
|
||||
playTurn(playerAction)
|
||||
@@ -36,7 +35,7 @@ class BattleEngine(val player: Party, val enemy: Party)(implicit val rng: Random
|
||||
val replace = player.pollReplacement(enemy)
|
||||
player.switchIn(replace)
|
||||
} else {
|
||||
println(s"${player.trainer} has lost!")
|
||||
this ! Message(s"${player.trainer} has lost!")
|
||||
}
|
||||
}
|
||||
if (!enemy.lead.isAlive) {
|
||||
@@ -47,9 +46,6 @@ class BattleEngine(val player: Party, val enemy: Party)(implicit val rng: Random
|
||||
println(s"${enemy.trainer} has lost!")
|
||||
}
|
||||
}
|
||||
|
||||
println(s"${player.lead}(${player.lead.hp}/${player.lead(Hp)})")
|
||||
println(s"${enemy.lead}(${enemy.lead.hp}/${enemy.lead(Hp)})")
|
||||
}
|
||||
|
||||
def useMove(action: Action) = {
|
||||
@@ -62,4 +58,8 @@ class BattleEngine(val player: Party, val enemy: Party)(implicit val rng: Random
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def !(msg: Signal) = {
|
||||
reader ! msg
|
||||
}
|
||||
}
|
||||
@@ -10,10 +10,11 @@ import scalafx.scene.Parent
|
||||
import scalafx.scene.control._
|
||||
import scalafx.scene.layout._
|
||||
|
||||
import fmon.battle.msg._
|
||||
import fmon.stat._
|
||||
import fmon.stat.Statistic._
|
||||
|
||||
class BattleUI {
|
||||
class BattleUI extends SignalConsumer {
|
||||
@FXML var usName: jfxsc.Label = _
|
||||
@FXML var usLv: jfxsc.Label = _
|
||||
@FXML var usHealth: jfxsc.Label = _
|
||||
@@ -23,32 +24,50 @@ class BattleUI {
|
||||
@FXML var themHealth: jfxsc.Label = _
|
||||
@FXML var themHealthBar: jfxsc.ProgressBar = _
|
||||
@FXML var buttonPane: javafx.scene.layout.VBox = _
|
||||
@FXML var messages: jfxsc.TextArea = _
|
||||
|
||||
private var engine: BattleEngine = _
|
||||
|
||||
def setEngine(engine: BattleEngine): Unit = {
|
||||
this.engine = engine
|
||||
updateUI()
|
||||
}
|
||||
|
||||
def updateUI(): Unit = {
|
||||
val player = engine.player.lead
|
||||
usName.text = player.name
|
||||
usLv.text = s"Lv. ${player.level}"
|
||||
usHealth.text = s"${player.hp}/${player.maxhp}"
|
||||
usHealthBar.progress = player.hp / player.maxhp
|
||||
usHealthBar.progress = player.hp.toDouble / player.maxhp
|
||||
|
||||
val enemy = engine.enemy.lead
|
||||
themName.text = enemy.name
|
||||
themLv.text = s"Lv. ${enemy.level}"
|
||||
themHealth.text = s"${enemy.hp}/${enemy.maxhp}"
|
||||
themHealthBar.progress = enemy.hp / enemy.maxhp
|
||||
themHealthBar.progress = enemy.hp.toDouble / enemy.maxhp
|
||||
|
||||
val buttons = player.base.moves.map(move => loadMoveButton(move))
|
||||
buttonPane.children = buttons
|
||||
}
|
||||
|
||||
def onMove(move: Move): Unit = {
|
||||
val action = Action(engine.player.lead, move, engine.enemy.lead)
|
||||
engine.playTurn(action)
|
||||
updateUI()
|
||||
}
|
||||
|
||||
def !(msg: Signal): Unit = {
|
||||
msg match {
|
||||
case Message(text) => messages.text = s"${messages.text()}${text}\n"
|
||||
}
|
||||
}
|
||||
|
||||
private def loadMoveButton(move: Move): Button = {
|
||||
val fxmlLoader = new FXMLLoader(getClass.getResource("moveButton.fxml"))
|
||||
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory())
|
||||
val button = fxmlLoader.load[jfxsc.Button]()
|
||||
val controller = fxmlLoader.getController[MoveButton]()
|
||||
controller.setup(move)
|
||||
controller.setup(move, onMove)
|
||||
button
|
||||
}
|
||||
}
|
||||
@@ -13,15 +13,16 @@ class MoveButton {
|
||||
@FXML var moveName: jfxsc.Label = _
|
||||
@FXML var moveUses: jfxsc.Label = _
|
||||
private var move: Move = _
|
||||
private var callback: Move => Unit = _
|
||||
|
||||
def setup(mv: Move): Unit = {
|
||||
def setup(mv: Move, callback: Move => Unit): Unit = {
|
||||
move = mv
|
||||
moveName.text = mv.name
|
||||
moveUses.text = s"${move.pp}/${move.pp}"
|
||||
this.callback = callback
|
||||
}
|
||||
|
||||
def moveActivate(): Unit = {
|
||||
println("We should take a turn here")
|
||||
println(s"${moveBtn.width}")
|
||||
callback(move)
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@
|
||||
<?import javafx.scene.control.ProgressBar?>
|
||||
<?import javafx.scene.control.ScrollPane?>
|
||||
<?import javafx.scene.control.SeparatorMenuItem?>
|
||||
<?import javafx.scene.control.TextArea?>
|
||||
<?import javafx.scene.image.Image?>
|
||||
<?import javafx.scene.image.ImageView?>
|
||||
<?import javafx.scene.layout.AnchorPane?>
|
||||
@@ -132,11 +133,12 @@
|
||||
</Label>
|
||||
</children>
|
||||
</GridPane>
|
||||
<ScrollPane hbarPolicy="NEVER" layoutX="616.0" layoutY="344.0" prefHeight="200.0" prefWidth="200.0">
|
||||
<ScrollPane hbarPolicy="NEVER" layoutX="32.0" layoutY="29.0" prefHeight="200.0" prefWidth="200.0">
|
||||
<content>
|
||||
<VBox fx:id="buttonPane" />
|
||||
</content>
|
||||
</ScrollPane>
|
||||
<TextArea fx:id="messages" layoutX="440.0" layoutY="449.0" prefHeight="112.0" prefWidth="399.0" />
|
||||
</children>
|
||||
</AnchorPane>
|
||||
</children>
|
||||
|
||||
11
FakeMon/src/fmon/battle/msg/Message.scala
Normal file
11
FakeMon/src/fmon/battle/msg/Message.scala
Normal file
@@ -0,0 +1,11 @@
|
||||
package fmon.battle.msg
|
||||
|
||||
trait SignalConsumer {
|
||||
def !(msg: Signal): Unit
|
||||
}
|
||||
|
||||
trait Signal
|
||||
|
||||
case class Message(val text: String) extends Signal {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user