finished incorporating messaging into the UI window and added another custom control to make updating the UI easier

This commit is contained in:
James Daly
2019-06-14 22:15:58 -04:00
parent 0b52e91a3d
commit 38dbb7fa92
13 changed files with 131 additions and 193 deletions

View File

@@ -43,7 +43,7 @@ class BattleEngine(val player: Party, val enemy: Party)(implicit val reader: Sig
val replace = enemy.pollReplacement(player)
enemy.switchIn(replace)
} else {
println(s"${enemy.trainer} has lost!")
this ! Message(s"${enemy.trainer} has lost!")
}
}
}

View File

@@ -15,17 +15,12 @@ import fmon.stat._
import fmon.stat.Statistic._
class BattleUI extends SignalConsumer {
@FXML var usName: jfxsc.Label = _
@FXML var usLv: jfxsc.Label = _
@FXML var usHealth: jfxsc.Label = _
@FXML var usHealthBar: jfxsc.ProgressBar = _
@FXML var themName: jfxsc.Label = _
@FXML var themLv: jfxsc.Label = _
@FXML var themHealth: jfxsc.Label = _
@FXML var themHealthBar: jfxsc.ProgressBar = _
@FXML var buttonPane: javafx.scene.layout.VBox = _
@FXML var messages: jfxsc.TextArea = _
@FXML var playerMonController: InfoWidget = _
@FXML var enemyMonController: InfoWidget = _
private var engine: BattleEngine = _
def setEngine(engine: BattleEngine): Unit = {
@@ -35,19 +30,12 @@ class BattleUI extends SignalConsumer {
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.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.toDouble / enemy.maxhp
val buttons = player.base.moves.map(move => loadMoveButton(move))
buttonPane.children = buttons
playerMonController.update(player)
enemyMonController.update(enemy)
}
def onMove(move: Move): Unit = {

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ProgressBar?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?>
<GridPane prefHeight="59.0" prefWidth="200.0" style="-fx-background-color: lightgrey;" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fmon.battle.InfoWidget">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="139.0" minWidth="10.0" prefWidth="139.0" />
<ColumnConstraints halignment="RIGHT" hgrow="SOMETIMES" maxWidth="95.0" minWidth="10.0" prefWidth="61.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="37.0" minHeight="10.0" prefHeight="22.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="29.0" minHeight="10.0" prefHeight="18.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label fx:id="name" text="MonName">
<font>
<Font size="18.0" />
</font>
</Label>
<Label fx:id="status" text="Lv. 17" textAlignment="RIGHT" GridPane.columnIndex="1">
<font>
<Font size="14.0" />
</font>
</Label>
<ProgressBar fx:id="healthBar" prefHeight="24.0" prefWidth="200.0" progress="1.0" GridPane.columnSpan="2" GridPane.rowIndex="1" />
<Label fx:id="health" text="43/43" GridPane.rowIndex="2">
<font>
<Font size="14.0" />
</font>
</Label>
</children>
</GridPane>

View File

@@ -0,0 +1,30 @@
package fmon.battle
import javafx.fxml.FXML
import javafx.scene.{control => jfxsc}
import scalafx.Includes._
import scalafx.scene.control._
import fmon.stat.Monster
import fmon.stat._
class InfoWidget extends javafx.scene.layout.GridPane {
@FXML var name: jfxsc.Label = _
@FXML var status: jfxsc.Label = _
@FXML var health: jfxsc.Label = _
@FXML var healthBar: jfxsc.ProgressBar = _
def update(mon: Monster): Unit = {
name.text = mon.name
mon.status match {
case Some(s) => status.text = s.name
case None => status.text = s"Lv. ${mon.level}"
}
health.text = s"${mon.hp}/${mon.maxhp}"
val percent = mon.hp \\ mon.maxhp
healthBar.progress = percent.toDouble
// TODO : Change bar color
}
}

View File

@@ -1,21 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?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?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fmon.battle.BattleUI">
<children>
@@ -75,70 +69,14 @@
<Image url="@images/Darkness%20Slime.png" />
</image>
</ImageView>
<GridPane layoutX="14.0" layoutY="502.0" prefHeight="59.0" prefWidth="200.0" style="-fx-background-color: lightgrey;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="139.0" minWidth="10.0" prefWidth="139.0" />
<ColumnConstraints halignment="RIGHT" hgrow="SOMETIMES" maxWidth="95.0" minWidth="10.0" prefWidth="61.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="37.0" minHeight="10.0" prefHeight="22.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="29.0" minHeight="10.0" prefHeight="18.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label fx:id="usName" text="Batty">
<font>
<Font size="18.0" />
</font>
</Label>
<Label fx:id="usLv" text="Lv. 17" textAlignment="RIGHT" GridPane.columnIndex="1">
<font>
<Font size="14.0" />
</font>
</Label>
<ProgressBar fx:id="usHealthBar" prefHeight="24.0" prefWidth="200.0" progress="1.0" GridPane.columnSpan="2" GridPane.rowIndex="1" />
<Label fx:id="usHealth" text="43/43" GridPane.rowIndex="2">
<font>
<Font size="14.0" />
</font>
</Label>
</children>
</GridPane>
<GridPane layoutX="642.0" layoutY="14.0" prefHeight="59.0" prefWidth="200.0" style="-fx-background-color: lightgrey;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="137.0" minWidth="10.0" prefWidth="137.0" />
<ColumnConstraints halignment="RIGHT" hgrow="SOMETIMES" maxWidth="95.0" minWidth="10.0" prefWidth="63.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="37.0" minHeight="10.0" prefHeight="22.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="29.0" minHeight="10.0" prefHeight="18.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label fx:id="themName" text="Slime">
<font>
<Font size="18.0" />
</font>
</Label>
<Label fx:id="themLv" text="Lv. 17" textAlignment="RIGHT" GridPane.columnIndex="1">
<font>
<Font size="14.0" />
</font>
</Label>
<ProgressBar fx:id="themHealthBar" prefHeight="24.0" prefWidth="200.0" progress="1.0" GridPane.columnSpan="2" GridPane.rowIndex="1" />
<Label fx:id="themHealth" text="43/43" GridPane.rowIndex="2">
<font>
<Font size="14.0" />
</font>
</Label>
</children>
</GridPane>
<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" />
<fx:include fx:id="playerMon" source="InfoWidget.fxml" AnchorPane.bottomAnchor="20.0" AnchorPane.leftAnchor="20.0" />
<fx:include fx:id="enemyMon" source="InfoWidget.fxml" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="20.0" />
</children>
</AnchorPane>
</children>