finished incorporating messaging into the UI window and added another custom control to make updating the UI easier
This commit is contained in:
@@ -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!")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
38
FakeMon/src/fmon/battle/InfoWidget.fxml
Normal file
38
FakeMon/src/fmon/battle/InfoWidget.fxml
Normal 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>
|
||||
30
FakeMon/src/fmon/battle/InfoWidget.scala
Normal file
30
FakeMon/src/fmon/battle/InfoWidget.scala
Normal 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
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user