Просмотр исходного кода

add event handlers for okey_game_info, okey_turn_timeout and okey_next_turn

Roman Dayneko 11 лет назад
Родитель
Сommit
4ad272a72f
1 измененных файлов с 55 добавлено и 5 удалено
  1. 55 5
      apps/face/src/index.erl

+ 55 - 5
apps/face/src/index.erl

@@ -41,9 +41,13 @@ main() -> #dtl{file="index", bindings=[{title,<<"N2O">>},{body,body()}]}.
 
 body() ->
     [ #panel{ id=history },
+
+      #label{ id = player1, body = "Player 1", style = "color=black;"}, #label{ id = player2, body = "Player 2", style = "color=black;"},
+      #label{ id = player3, body = "Player 3", style = "color=black;"}, #label{ id = player4, body = "Player 4", style = "color=black;"},
+      #br{},
       #button{ id = attach, body = <<"Attach">>, postback = attach},
       #button{ id = join, body = <<"Join">>, postback = join},
-      #dropdown{ id=ddtake, value="0", postback=combo, source=[ddtake], 
+      #dropdown{ id=ddtake, value="0", postback=combo, source=[ddtake],
                  options = 
                      [
                       #option { label= <<"0">>, value= <<"0">> },
@@ -91,8 +95,54 @@ event({server, {game_event, _, okey_tile_discarded, Args}}) ->
     put(game_okey_tiles, TilesList),
     redraw_tiles(TilesList);
 event({server, {game_event, _, okey_tile_taken, Args}}) ->
-    {_, {_, C, V}} = lists:keyfind(revealed, 1, Args),
-    TilesList = [{erlang:list_to_binary([erlang:integer_to_list(C), " ", erlang:integer_to_list(V)]), {C, V}} | get(game_okey_tiles)],
-    put(game_okey_tiles, TilesList),
-    redraw_tiles(TilesList);
+        case lists:keyfind(revealed, 1, Args) of
+            {_, {_, C, V}} ->
+                TilesList = [{erlang:list_to_binary([erlang:integer_to_list(C), " ", erlang:integer_to_list(V)]), {C, V}} | get(game_okey_tiles)],
+                put(game_okey_tiles, TilesList),
+                redraw_tiles(TilesList);
+            _ ->
+                ok
+        end;
+event({server,{game_event, Game, okey_turn_timeout, Args}}) ->
+    wf:info("okey_turn_timeout ~p", [Args]),
+    {_, TileTaken} = lists:keyfind(tile_taken, 1, Args),
+    event({server, {game_event, Game, okey_tile_taken, [{revealed, TileTaken}]}}),
+    {_, TileDiscarded} = lists:keyfind(tile_discarded, 1, Args),
+    event({server, {game_event, Game, okey_tile_taken, [{tile, TileDiscarded}]}});
+event({server, {game_event, _, okey_game_info, Args}}) ->
+    wf:info("okay_game_info ~p", [Args]),
+    {_, PlayersInfo} = lists:keyfind(players, 1, Args),
+    wf:info("pi ~p", [PlayersInfo]),
+    Players = 
+        lists:zipwith(
+          fun(ListId, {PlayerId, PlayerLabel}) ->
+                  {ListId, PlayerId, PlayerLabel}
+          end,
+          [player1, player2, player3, player4],
+          lists:map(
+            fun
+                (#'PlayerInfo'{id = Id, robot = true} = P) ->
+                    wf:info("pp ~p", [P]),
+                    {Id, <<Id/binary, <<" R ">>/binary>>};
+                (#'PlayerInfo'{id = Id, robot = false} = P) ->
+                    wf:info("pr ~p", [P]),
+                    {Id, <<Id/binary, <<" M ">>/binary>>}
+            end,
+            PlayersInfo
+           )
+         ),
+    wf:info("players ~p", [Players]),
+    put(okey_players, Players),
+    [wf:update(LabelId, [#label{id = LabelId, body = PlayerLabel}]) || {LabelId, _, PlayerLabel}  <- Players];
+event({server,{game_event, _, okey_next_turn, Args}}) ->
+    {player, PlayerId} = lists:keyfind(player, 1, Args),
+    {LabelId, _, _} = lists:keyfind(PlayerId, 2, get(okey_players)),
+    case get(okey_turn_mark) of
+        undefined ->
+            ok;
+        OldLabelId -> 
+            wf:wire("document.querySelector('#" ++ erlang:atom_to_list(OldLabelId) ++ "').style.color = \"black\";")
+    end,
+    wf:wire("document.querySelector('#" ++ erlang:atom_to_list(LabelId) ++ "').style.color = \"red\";"),
+    put(okey_turn_mark, LabelId);
 event(Event)  -> wf:info("Event: ~p", [Event]).