fixed problem with two concurrent players
This commit is contained in:
parent
f013e75b5c
commit
d9e95b2508
2 changed files with 42 additions and 18 deletions
|
@ -36,7 +36,6 @@ define(GameVM, SourceCode) ->
|
||||||
%% Command = a game command to run
|
%% Command = a game command to run
|
||||||
%% Args = arguments for the Command parameter
|
%% Args = arguments for the Command parameter
|
||||||
player_command(GameVM, Player, Command, Args) ->
|
player_command(GameVM, Player, Command, Args) ->
|
||||||
erlang:display(Command),
|
|
||||||
gen_server:cast(GameVM, {player_command, Player, Command, Args}).
|
gen_server:cast(GameVM, {player_command, Player, Command, Args}).
|
||||||
|
|
||||||
%% @private
|
%% @private
|
||||||
|
@ -118,23 +117,28 @@ intern_player_command(Table, Player, Command, _Args) ->
|
||||||
|
|
||||||
intern_add_player(Table, Player) ->
|
intern_add_player(Table, Player) ->
|
||||||
{ok, PlayerList} = ggs_table:get_player_list(Table),
|
{ok, PlayerList} = ggs_table:get_player_list(Table),
|
||||||
erlang:display(PlayerList),
|
|
||||||
case length(PlayerList) of
|
case length(PlayerList) of
|
||||||
1 ->
|
1 ->
|
||||||
erlang:display("P1: joining"),
|
erlang:display("A player joined");
|
||||||
ggs_db:setItem(Table, local_storage, Player, player1),
|
|
||||||
erlang:display(ggs_db:getItem(Table, local_storage, Player)),
|
|
||||||
ggs_db:setItem(Table, local_storage, player1_y, 50),
|
|
||||||
ggs_table:send_command(Table, Player, {"welcome", int2str(1)}),
|
|
||||||
ggs_table:notify_all_players(Table, {"player1_y", int2str(50)});
|
|
||||||
2 ->
|
2 ->
|
||||||
erlang:display("P2: joining"),
|
[First|_] = PlayerList,
|
||||||
ggs_db:setItem(Table, local_storage, Player, player2),
|
case First == Player of
|
||||||
erlang:display(ggs_db:getItem(Table, local_storage, Player)),
|
true ->
|
||||||
ggs_db:setItem(Table, local_storage, player2_y, 50),
|
erlang:display("P1: joining"),
|
||||||
ggs_table:send_command(Table, Player, {"welcome", int2str(2)}),
|
ggs_db:setItem(Table, local_storage, Player, player1),
|
||||||
ggs_table:send_command(Table, Player, {"player1_y", int2str(50)}),
|
erlang:display(ggs_db:getItem(Table, local_storage, Player)),
|
||||||
ggs_table:notify_all_players(Table, {"player2_y", int2str(50)});
|
ggs_db:setItem(Table, local_storage, player1_y, 50),
|
||||||
|
ggs_table:send_command(Table, Player, {"welcome", int2str(1)}),
|
||||||
|
ggs_table:notify_all_players(Table, {"player1_y", int2str(50)});
|
||||||
|
false ->
|
||||||
|
erlang:display("P2: joining"),
|
||||||
|
ggs_db:setItem(Table, local_storage, Player, player2),
|
||||||
|
erlang:display(ggs_db:getItem(Table, local_storage, Player)),
|
||||||
|
ggs_db:setItem(Table, local_storage, player2_y, 50),
|
||||||
|
ggs_table:send_command(Table, Player, {"welcome", int2str(2)}),
|
||||||
|
ggs_table:send_command(Table, Player, {"player1_y", int2str(50)}),
|
||||||
|
ggs_table:notify_all_players(Table, {"player2_y", int2str(50)})
|
||||||
|
end;
|
||||||
_Other ->
|
_Other ->
|
||||||
ggs_table:send_command(Table, Player, {"not_welcome", ""})
|
ggs_table:send_command(Table, Player, {"not_welcome", ""})
|
||||||
end.
|
end.
|
||||||
|
|
|
@ -27,13 +27,33 @@
|
||||||
start(Socket) ->
|
start(Socket) ->
|
||||||
gen_server:start(?MODULE, [Socket], []).
|
gen_server:start(?MODULE, [Socket], []).
|
||||||
|
|
||||||
|
join_table(Num) ->
|
||||||
|
case ggs_coordinator:join_table(integer_to_list(Num)) of
|
||||||
|
{ok, T} ->
|
||||||
|
io:format("Joining existing table: ~p~n", [T]),
|
||||||
|
T;
|
||||||
|
{error, no_such_table} ->
|
||||||
|
case ggs_coordinator:create_table({force, integer_to_list(Num)}) of
|
||||||
|
{ok, TBToken} -> ok
|
||||||
|
end,
|
||||||
|
case ggs_coordinator:join_table(integer_to_list(Num)) of
|
||||||
|
{ok, T} -> io:format("Creating new table: ~p~n", [T]),
|
||||||
|
T;
|
||||||
|
{error, E} -> erlang:display(E),
|
||||||
|
join_table(Num+1)
|
||||||
|
end;
|
||||||
|
{error, table_full} ->
|
||||||
|
erlang:display("Table full!"),
|
||||||
|
join_table(Num+1)
|
||||||
|
end.
|
||||||
|
|
||||||
init([Socket]) ->
|
init([Socket]) ->
|
||||||
{ok, Protocol} = ggs_protocol:start_link(),
|
{ok, Protocol} = ggs_protocol:start_link(),
|
||||||
{ok, Token} = ggs_coordinator:join_lobby(),
|
{ok, Token} = ggs_coordinator:join_lobby(),
|
||||||
|
|
||||||
erlang:port_connect(Socket, self()),
|
erlang:port_connect(Socket, self()),
|
||||||
|
|
||||||
Table = ggs_coordinator:join_table(),
|
Table = join_table(1),
|
||||||
State = #state{
|
State = #state{
|
||||||
token = Token,
|
token = Token,
|
||||||
socket = Socket,
|
socket = Socket,
|
||||||
|
@ -108,4 +128,4 @@ terminate(Reason, State) ->
|
||||||
% TODO: release Socket
|
% TODO: release Socket
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
code_change(_OldVsn, St, _Extra) -> {ok, St}.
|
code_change(_OldVsn, St, _Extra) -> {ok, St}.
|
Reference in a new issue