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%; --translation: 50%;
position: absolute; position: absolute;
" "
th:style="| --diameter: ${choiceBadgeData.c.diameter}; th:style="| --diameter: ${choiceBadgeData.s.diameter};
--bg-dark: ${choiceBadgeData.c.bgDark}; --bg-dark: ${choiceBadgeData.s.bgDark};
--bg-bright: ${choiceBadgeData.c.bgBright}; --bg-bright: ${choiceBadgeData.s.bgBright};
${choiceBadgeData.p.toStyle}; |" ${choiceBadgeData.p.toStyle}; |"
> >
<div <div

View File

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