aboutsummaryrefslogtreecommitdiff
path: root/client/src/Client.elm
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/Client.elm')
-rw-r--r--client/src/Client.elm62
1 files changed, 58 insertions, 4 deletions
diff --git a/client/src/Client.elm b/client/src/Client.elm
index 442f089..e5afa74 100644
--- a/client/src/Client.elm
+++ b/client/src/Client.elm
@@ -2,7 +2,10 @@ port module Client exposing (main)
import Browser
import Html exposing (Html)
+import Html.Attributes
+import Html.Events
import Json.Decode
+import Json.Encode
import Messages exposing (GameView)
import Url exposing (Url)
@@ -13,6 +16,10 @@ type Msg
= Ignore
| Send
| WebSocketIn String
+ -- Name changes
+ | StartChangingName
+ | ChangeName String
+ | SubmitNewName
type Model
= Error String
@@ -21,6 +28,7 @@ type Model
}
| Game
{ view : GameView
+ , changingName : Maybe String
}
parseRoomId : Url -> Result String String
@@ -39,16 +47,38 @@ view model = case model of
[Html.text <| "Connecting to room " ++ state.roomId ++ "..."]
]
Game game ->
- [ Html.h1 [] [Html.text "Players"]
+ [ Html.h1 [] [Html.text "Opponents"]
, Html.ul [] <| List.map
(\p -> Html.li [] [Html.text p])
- game.view.players
- ]
+ game.view.opponents
+ , Html.h1 [] [Html.text "You"]
+ ] ++
+ (case game.changingName of
+ Nothing ->
+ [ Html.p []
+ [Html.text game.view.playerName]
+ , Html.button
+ [Html.Events.onClick StartChangingName]
+ [Html.text "change"]
+ ]
+ Just name ->
+ [ Html.input
+ [ Html.Attributes.value name
+ , Html.Events.onInput ChangeName
+ ]
+ []
+ , Html.button
+ [Html.Events.onClick SubmitNewName]
+ [Html.text "change"]
+ ])
subscriptions : Model -> Sub Msg
subscriptions model = webSocketIn WebSocketIn
+send : Messages.ClientMessage -> Cmd Msg
+send = webSocketOut << Json.Encode.encode 0 << Messages.jsonEncClientMessage
+
update : Msg -> Model -> (Model, Cmd Msg)
update msg model = case msg of
Ignore -> (model, Cmd.none)
@@ -60,7 +90,31 @@ update msg model = case msg of
Debug.log ("Welcome " ++ String.fromInt playerId) (model, Cmd.none)
Ok Messages.Bye -> Debug.log "Bye" (model, Cmd.none)
Ok (Messages.SyncGameView gameView) ->
- (Game {view = gameView}, Cmd.none)
+ case model of
+ Game game -> (Game {game | view = gameView}, Cmd.none)
+ _ ->
+ ( Game
+ { view = gameView
+ , changingName = Nothing
+ }
+ , Cmd.none
+ )
+
+ StartChangingName -> case model of
+ Game game ->
+ (Game {game | changingName = Just game.view.playerName}, Cmd.none)
+ _ -> (model, Cmd.none)
+ ChangeName name -> case model of
+ Game game -> (Game {game | changingName = Just name}, Cmd.none)
+ _ -> (model, Cmd.none)
+ SubmitNewName -> case model of
+ Game game ->
+ ( Game {game | changingName = Nothing}
+ , case game.changingName of
+ Nothing -> Cmd.none
+ Just name -> send <| Messages.ChangeName name
+ )
+ _ -> (model, Cmd.none)
main : Program () Model Msg
main = Browser.application