game_tavla.hrl 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. -type 'Color'() :: integer(). %% 'black' or 'red'
  2. -type 'Position'() :: integer(). %% 'black' or 'red'
  3. %%%%%%%%%%%%%%%%%%%%%%%
  4. %% Events data types
  5. %%%%%%%%%%%%%%%%%%%%%%%
  6. %%-record('TavlaPlace', { count :: integer } ).
  7. -record('TavlaAtomicMoveServer',
  8. {from :: 'Position'(),
  9. to :: 'Position'(),
  10. hits :: boolean(),
  11. pips :: integer()
  12. }).
  13. -record(tavla_checkers,
  14. {color :: integer(),
  15. number :: integer()
  16. }).
  17. -record(tavla_tour_record, {
  18. player_id :: 'PlayerId'(),
  19. place :: integer(),
  20. score :: integer(),
  21. status :: atom() | binary() %% active | eliminated
  22. }).
  23. -record('TavlaPlayerScore', {
  24. player_id :: 'PlayerId'(),
  25. %% reason :: atom(),
  26. winner = <<"none">> :: binary(),
  27. score_delta :: integer(),
  28. score :: integer()
  29. }).
  30. -record('TavlaSeriesResult', {
  31. player_id :: 'PlayerId'(),
  32. place :: integer(),
  33. winner = <<"none">> :: binary(),
  34. score :: integer()
  35. }).
  36. -record('PlayerTavlaStats', {
  37. playerId, %% : int
  38. playerName, %% : String;
  39. level, %% : int; Number
  40. levelName, %% : String;
  41. badges, %% : Array; Array of int between [1; 5],
  42. skill, %% : int;
  43. score, %% : int;
  44. totalWins, %% : int;
  45. totalLose, %% : int;
  46. totalDisconnects, %% : int;
  47. overalSuccessRatio, %% : Number;
  48. averagePlayDuration %% : Number;
  49. }).
  50. -record(tavla_color_info, {
  51. name :: any(),
  52. color :: integer()
  53. }).
  54. %% -record(tavla_board, {
  55. %% id :: integer(),
  56. %% name :: any(),
  57. %% players :: list(#'PlayerInfo'{}),
  58. %% main = false :: boolean()
  59. %% }).
  60. -record('TavlaGameResults', {
  61. %% game_id :: integer(),
  62. players :: list(#'TavlaPlayerScore'{})
  63. }).
  64. %%%%%%%%%%%%%%%%%%%%%%%%%%
  65. %%%% EVENTS %%%%%
  66. %%%%%%%%%%%%%%%%%%%%%%%%%%
  67. -record(tavla_game_info, {
  68. table_id :: integer(),
  69. %% game_type :: atom(), %% TODO: Remove
  70. table_name :: binary(),
  71. game_mode = undefined :: atom(),
  72. sets :: null | integer(), %% total number of sets
  73. set_no :: null | integer(), %% number of current set
  74. tables_num :: integer(),
  75. %% current_round :: integer(), %% TODO: Remove
  76. rounds :: integer(),
  77. players :: list(#'PlayerInfo'{}),
  78. speed :: atom(), %% [slow, normal, fast, blitz]
  79. turn_timeout :: integer(), %% timeout value for player turn
  80. %% challenge_timeout :: integer(), %% TODO: Remove, timeout value for challenge
  81. ready_timeout :: integer(), %% timeout value for ready msg
  82. %% timeout :: integer(), %% TODO: Remove
  83. mul_factor :: pos_integer(),
  84. slang_flag :: boolean(),
  85. observer_flag :: boolean(),
  86. pause_enabled = true :: boolean(),
  87. social_actions_enabled = true :: boolean(),
  88. tournament_type = standalone :: atom(), %% standalone | elimination | pointing | lucky
  89. series_confirmation_mode = yes_exit :: yes_exit | no_exit | no
  90. }).
  91. -record(tavla_player_ready, {
  92. table_id :: integer(),
  93. player :: 'PlayerId'()
  94. }).
  95. -record(tavla_game_started, {
  96. table_id :: integer(),
  97. board :: list(#tavla_checkers{} | null),
  98. %% another_boards :: list(#tavla_board{}),
  99. players :: list(#tavla_color_info{}), %% TODO: Rename to players_colors
  100. current_round :: integer(),
  101. round_timeout :: null | integer(),
  102. set_timeout :: null | integer(),
  103. do_first_move_competition_roll :: boolean()
  104. }).
  105. -record(tavla_game_player_state, {
  106. table_id :: integer(),
  107. board :: null | list(#tavla_checkers{} | null),
  108. dice :: list(null | integer()),
  109. players_colors :: list(#tavla_color_info{}),
  110. whos_move :: list(integer()), %% Color
  111. game_state :: initializing | first_move_competition | waiting_for_roll | waiting_for_move | finished,
  112. current_round :: integer(),
  113. next_turn_in :: integer() | infinity, %% milliseconds
  114. paused = false :: boolean(),
  115. round_timeout = null :: null | integer(),
  116. set_timeout = null :: null | integer()
  117. }).
  118. -record(tavla_won_first_move, {
  119. table_id :: integer(),
  120. color :: integer(),
  121. player :: 'PlayerId'(),
  122. dice :: list(integer()),
  123. reroll :: boolean()
  124. }).
  125. -record(tavla_next_turn, {
  126. table_id :: integer(),
  127. color :: integer(),
  128. player :: 'PlayerId'()
  129. }).
  130. -record(tavla_rolls, {
  131. table_id :: integer(),
  132. color :: integer(),
  133. player :: 'PlayerId'(),
  134. dices :: list(integer())
  135. }).
  136. -record(tavla_moves, {
  137. table_id :: integer(),
  138. color :: integer(),
  139. player :: 'PlayerId'(),
  140. from :: 'Position'(),
  141. to :: 'Position'(),
  142. hits = false :: boolean(),
  143. pips :: integer()
  144. }).
  145. -record(tavla_turn_timeout, {
  146. table_id :: integer(),
  147. color :: integer(),
  148. player :: 'PlayerId'(),
  149. dice :: null | list(integer()),
  150. moves :: null | list(#'TavlaAtomicMoveServer'{})
  151. }).
  152. %-record(tavla_vidoes, {
  153. % table_id :: integer(),
  154. % player :: 'PlayerId'()
  155. % }).
  156. %-record(tavla_accepts, {
  157. % table_id :: integer(),
  158. % player :: 'PlayerId'(),
  159. % accept :: boolean()
  160. % }).
  161. %-record(tavla_timeouts, {
  162. % table_id :: integer(),
  163. % player :: 'PlayerId'()
  164. % }).
  165. -record(tavla_series_ended, {
  166. table_id :: integer(),
  167. standings :: list(#'TavlaSeriesResult'{})
  168. }).
  169. -record(tavla_game_ended, {
  170. table_id :: integer(),
  171. reason :: binary(), %% "win", "round_timeout", "set_timeout"
  172. winner :: null | 'PlayerId'(),
  173. results :: #'TavlaGameResults'{}
  174. }).
  175. -record(tavla_tour_result, {
  176. table_id :: integer(),
  177. tour_num :: integer(),
  178. records :: list(#tavla_tour_record{})
  179. }).
  180. %%%%%%%%%%%%%%%%%%%%%%%%%%
  181. %%%% ACTION %%%%%
  182. %%%%%%%%%%%%%%%%%%%%%%%%%%
  183. -record(tavla_ready, {table_id :: integer()}).
  184. -record(tavla_roll, {table_id :: any()}).
  185. -record('TavlaAtomicMove', {from :: 'Position'(), to :: 'Position'() } ).
  186. -record(tavla_move, { table_id :: integer(), moves :: list(#'TavlaAtomicMove'{}), player :: 'PlayerId'() }).
  187. -record(tavla_skip, {table_id :: integer()}).
  188. -record(tavla_request, {table_id :: integer()}).
  189. -record(tavla_vido, {table_id :: integer()}).
  190. -record(tavla_vido_request, { table_id :: integer(),
  191. from :: 'PlayerId'(),
  192. to :: 'PlayerId'()
  193. }).
  194. -record(tavla_vido_answer, { table_id :: integer(),
  195. from :: 'PlayerId'(),
  196. to :: 'PlayerId'(),
  197. answer :: boolean()
  198. }).
  199. -record(tavla_ack, { table_id :: integer(),
  200. type :: atom(),
  201. from :: 'PlayerId'(),
  202. to :: 'PlayerId'(),
  203. answer :: boolean()}).
  204. -record(tavla_accepts_vido, { table_id :: integer(),
  205. accept :: boolean()
  206. }).
  207. -record(tavla_surrender, { table_id :: integer()}).
  208. -record(tavla_surrender_request, { table_id :: integer(),
  209. from :: 'PlayerId'(),
  210. to :: 'PlayerId'()
  211. }).
  212. -record(tavla_surrender_answer, { table_id :: integer(),
  213. from :: 'PlayerId'(),
  214. to :: 'PlayerId'(),
  215. answer :: boolean()
  216. }).
  217. -record(tavla_accept_timeout, { table_id :: integer(),
  218. accept = true:: boolean()
  219. }).
  220. %% -record('TavlaSetState', {
  221. %% round_cur,
  222. %% round_max,
  223. %% set_cur,
  224. %% set_max
  225. %% }).
  226. %% -record('TavlaTimeouts', {
  227. %% speed :: atom(), %% [slow, normal, fast, blitz]
  228. %% turn_timeout :: integer(), %% timeout value for player turn
  229. %% challenge_timeout :: integer(), %% timeout value for challenge
  230. %% ready_timeout :: integer(), %% timeout value for ready msg
  231. %% rematch_timeout :: integer() %% timeout value for general api #rematch{} msg
  232. %% }).