refactor: make choices object, move out style

this should allow to write 'isBeating' function over choices.
and maybe move to enums
This commit is contained in:
efim 2023-07-02 05:26:23 +00:00
parent 54af09d356
commit 02a5f41800
2 changed files with 61 additions and 30 deletions

View File

@ -86,9 +86,9 @@
--translation: 50%;
position: absolute;
"
th:style="| --diameter: ${choiceBadgeData.c.diameter};
--bg-dark: ${choiceBadgeData.c.bgDark};
--bg-bright: ${choiceBadgeData.c.bgBright};
th:style="| --diameter: ${choiceBadgeData.s.diameter};
--bg-dark: ${choiceBadgeData.s.bgDark};
--bg-bright: ${choiceBadgeData.s.bgBright};
${choiceBadgeData.p.toStyle}; |"
>
<div

View File

@ -23,14 +23,13 @@ position: absolute;
}
}
sealed trait Choice {
def diameter: String
def bgDark: String
def bgBright: String
def name: String
def iconPath: String
}
object Choice {
// yeah, maybe better to do in outer html div
final case class Styling(
var diameter: String,
var bgDark: String,
var bgBright: String
)
object Styling {
val scissorsDark = "hsl(39, 89%, 49%)"
val scissorsBright = "hsl(40, 84%, 53%)"
val paperDark = "hsl(230, 89%, 62%)"
@ -38,48 +37,71 @@ position: absolute;
val rockDark = "hsl(349, 71%, 52%)"
val rockBright = "hsl(349, 70%, 56%)"
case class Paper(
def paperStyling(
diameter: String,
bgDark: String = paperDark,
bgBright: String = paperBright
) extends Choice {
def name: String = "paper"
def iconPath: String = "public/images/icon-paper.svg"
}
case class Scissors(
) = Styling(diameter, bgDark, bgBright)
def scissorsStyling(
diameter: String,
bgDark: String = scissorsDark,
bgBright: String = scissorsBright
) extends Choice {
def name: String = "scissors"
def iconPath: String = "public/images/icon-scissors.svg"
}
case class Rock(
) = Styling(diameter, bgDark, bgBright)
def rockStyling(
diameter: String,
bgDark: String = rockDark,
bgBright: String = rockBright
) extends Choice {
) = Styling(diameter, bgDark, bgBright)
}
sealed trait Choice {
def name: String
def iconPath: String
}
object Choice {
case object Paper extends Choice {
def name: String = "paper"
def iconPath: String = "public/images/icon-paper.svg"
}
case object Scissors extends Choice {
def name: String = "scissors"
def iconPath: String = "public/images/icon-scissors.svg"
}
case object Rock extends Choice {
def name: String = "rock"
def iconPath: String = "public/images/icon-rock.svg"
}
}
/** this will be Data Transfer Object, because Thymeleaf wants var and i want
* vals and enums
*/
final case class ChoiceBadge(
var s: Styling,
var c: Choice,
var p: Positioning
)
val choiceSelectionItems = {
List(
ChoiceBadge(Choice.Paper("8rem"), Positioning.Absolute("6rem", "6rem")),
ChoiceBadge(
Choice.Scissors("8rem"),
Styling.paperStyling("8rem"),
Choice.Paper,
Positioning.Absolute("6rem", "6rem")
),
ChoiceBadge(
Styling.scissorsStyling("8rem"),
Choice.Scissors,
Positioning.Absolute("6rem", "17rem")
),
ChoiceBadge(Choice.Rock("8rem"), Positioning.Absolute("15rem", "11.5rem"))
ChoiceBadge(
Styling.rockStyling("8rem"),
Choice.Rock,
Positioning.Absolute("15rem", "11.5rem")
)
)
}
@ -87,5 +109,14 @@ position: absolute;
var playersChoice: ChoiceBadge,
var houseChoice: Option[ChoiceBadge],
var gameEnded: Boolean
)
) {
def isPlayerVictorious(): Option[Boolean] = {
houseChoice.map(houseSelectedChoice => {
val player = playersChoice.c
val house = houseSelectedChoice.c
false
})
}
}
}