From 9f6e839211d500224491d76fd042d3c43b2c8db8 Mon Sep 17 00:00:00 2001 From: Mark Wunsch Date: Mon, 17 Oct 2016 15:36:12 -0400 Subject: [PATCH] Add basic recruitment logic for Player --- src/Gang.elm | 5 +++++ src/Model.elm | 16 ++++++++++++++++ src/Player.elm | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/src/Gang.elm b/src/Gang.elm index a76d606..cd0ea5b 100644 --- a/src/Gang.elm +++ b/src/Gang.elm @@ -27,6 +27,11 @@ get = Dict.get +add : Model -> Gang -> Gang +add model gang = + Dict.insert model.id model gang + + map : (Id -> Model -> Model) -> Gang -> Gang map = Dict.map diff --git a/src/Model.elm b/src/Model.elm index e4b01c4..bb8ff1d 100644 --- a/src/Model.elm +++ b/src/Model.elm @@ -149,6 +149,22 @@ init = } +cost : Model -> Int +cost model = + case model.fighterType of + Leader -> + 120 + + Ganger -> + 50 + + Heavy -> + 60 + + Juve -> + 25 + + generator : Generator Model generator = uuid diff --git a/src/Player.elm b/src/Player.elm index 8c0fb96..b3797b3 100644 --- a/src/Player.elm +++ b/src/Player.elm @@ -10,6 +10,7 @@ type alias Player = { gang : Gang , selection : Maybe Model.Id , movementIntention : Position + , credits : Int } @@ -18,6 +19,7 @@ init table = { gang = Gang.empty , selection = Nothing , movementIntention = Tabletop.center table + , credits = 1000 } @@ -44,3 +46,35 @@ deselectAll player = getSelectedGangMember : Player -> Maybe Model getSelectedGangMember player = player.selection `andThen` (flip Gang.get) player.gang + + +{-| From the rulebook: + +> You have 1000 Guilder credits to spend on recruiting and arming your + gang within the following guidelines. + ++ Minimum 3 Fighers: A gang must have at least three models. ++ Leader: your gang must have one leader. Not more. Not less! ++ Gangers: You can include as many gangers as you can afford. ++ Heavies: A gang can have up to two heavies but no more. ++ Juves: No more than half the gang can be made up of juves. ++ Knifes: All fighters are assumed to have a knife even if the model doesn't have one. + +-} +recruit : Model -> Player -> Maybe Player +recruit model player = + let + cost = + Model.cost model + + remainingCredits = + player.credits - cost + in + if remainingCredits >= 0 then + Just + { player + | credits = remainingCredits + , gang = Gang.add model player.gang + } + else + Nothing