app.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. function StartApp() { $.load(scope.CARD_SOURCE, PostLoad); }
  2. function fadeOut() { $(this).animate({ attributeName: "opacity", from: 1, to: 0, dur: .3}); }
  3. function fadeIn() { $(this).animate({ attributeName: "opacity", from: 0, to: 1, dur: .3}); }
  4. function addFadeOut() { $(this).on (document.createTouch ? "touchend" : "mouseup", fadeOut); }
  5. function removeFadeOut() { $(this).off(document.createTouch ? "touchend" : "mouseup", fadeOut); }
  6. function PostLoad()
  7. {
  8. rightFlag = !1;
  9. leftFlag = !1;
  10. window.deck = scope.deck;
  11. deck = window.deck;
  12. scope.user = document.user;
  13. centralCard = null,
  14. apiProvider = new scope.ApiProvider({
  15. url: scope.apiUrl,
  16. gameId: scope.gameId,
  17. sessionId: scope.defaultSessionId});
  18. createCentralCard(),
  19. deck.on("take", function(e) {
  20. e.detail.card.$el.off(document.createTouch ? "touchstart" : "mousedown", fadeIn)
  21. .off(document.createTouch ? "touchend" : "mouseup", fadeOut),
  22. centralCard.off("dragmove", removeFadeOut).off("dragstop", addFadeOut).off("revert", fadeOut),
  23. ~playersLeftHandsMap[scope.user].cards.indexOf(e.detail.card) && playersLeftHandsMap[scope.user].pop(),
  24. apiProvider.actionTake(e.detail.card);
  25. });
  26. $gosterme = $("#Gosterme"),
  27. ended = !0;
  28. apiProvider.on("okey_game_started", initOkeyScene);
  29. apiProvider.on("okey_game_player_state", initOkeyScene);
  30. playersPositions =
  31. [
  32. [ "Me", "Right", "Center", "Left" ],
  33. [ "Left", "Me", "Right", "Center" ],
  34. [ "Center", "Left", "Me", "Right" ],
  35. [ "Right", "Center", "Left", "Me" ]
  36. ];
  37. playersMap = {};
  38. playersRightHandsMap = {};
  39. playersLeftHandsMap = {};
  40. apiProvider.on("okey_game_info", function(e) {
  41. console.log(JSON.stringify(e));
  42. console.log("Scope.User");
  43. scope.user = document.user;
  44. if (!scope.started) {
  45. for (var playerInfo, players = e.detail.players, i = 0; i < players.length; i++)
  46. if (playerInfo = players[i].PlayerInfo, playerInfo[0] == scope.user)
  47. {
  48. playersPositions = playersPositions[i];
  49. break;
  50. }
  51. for (var playerInfo, i = 0, l = players.length; l > i; i++) {
  52. playerInfo = players[i].PlayerInfo, playersMap[playerInfo[0]] = playersMap[playerInfo[0]] || new scope.Player({
  53. position: playersPositions[i],
  54. name: [ playerInfo[2], playerInfo[3] ].join(" ")
  55. });
  56. var prevPlayer = i == players.length - 1 ? players[0] : players[i + 1];
  57. for (var prop in playersLeftHandsMap) playersLeftHandsMap[prop].clear();
  58. playersLeftHandsMap[prevPlayer.PlayerInfo[0]] = playersRightHandsMap[playerInfo[0]] = new scope.Hand("#" + [ "Player", playersPositions[i], "Hand" ].join("-")),
  59. "Me" == playersPositions[i] && playersRightHandsMap[playerInfo[0]].$el.droppable({
  60. accept: function() {
  61. return playerTurn && deck.length() > 14;
  62. },
  63. drop: function(target) {
  64. apiProvider.actionDiscard(target.owner);
  65. }
  66. });
  67. }
  68. scope.started = !0;
  69. }
  70. }),
  71. window.playersRightHandsMap = playersRightHandsMap;
  72. window.playersLeftHandsMap = playersLeftHandsMap;
  73. playerTurn = !1;
  74. apiProvider.on("online_number", function (e) {
  75. console.log("Online Number");
  76. });
  77. apiProvider.on("okey_next_turn", function(e) {
  78. for (var playerName in playersMap) playersMap[playerName].unselect();
  79. if (playersMap[e.detail.player].select(), e.detail.player == scope.user)
  80. {
  81. playerTurn = !0;
  82. var cards = playersLeftHandsMap[e.detail.player].cards;
  83. if (cards.length)
  84. {
  85. var card = cards[cards.length - 1];
  86. deck.$el.append(card.$el[0]), card.$el.attr({
  87. transform: "translate(16 -65)"
  88. }), card.dragHandler.enable(), card.on("dragstart", deck.select), card.on("dragmove", deck.track);
  89. }
  90. deck.length() < 15 ? (centralCard.dragHandler.enable(), centralCard.$el.on(document.createTouch ? "touchstart" : "mousedown", fadeIn).on(document.createTouch ? "touchend" : "mouseup", fadeOut),
  91. centralCard.on("dragmove", removeFadeOut).on("dragstop", addFadeOut).on("revert", fadeOut)) : (centralCard.dragHandler.disable(),
  92. centralCard.$el.off(document.createTouch ? "touchstart" : "mousedown", fadeIn).off(document.createTouch ? "touchend" : "mouseup", fadeOut));
  93. } else {
  94. playerTurn = !1,
  95. centralCard.dragHandler.disable(),
  96. centralCard.$el.off(document.createTouch ? "touchstart" : "mousedown", fadeIn).off(document.createTouch ? "touchend" : "mouseup", fadeOut);
  97. }
  98. });
  99. apiProvider.on("okey_tile_discarded", function(e) {
  100. if ("object" == typeof e.detail.tile) {
  101. var c = new scope.Card({
  102. color: scope.CARD_COLORS[e.detail.tile[1] - 1],
  103. value: e.detail.tile[2]
  104. });
  105. c.log();
  106. }
  107. e.detail.player == scope.user && deck.remove(e.detail.tile), playersRightHandsMap[e.detail.player].discard(e.detail.tile);
  108. });
  109. var $pile = $("#Center-Cards"),
  110. $fullPile = $pile.find("g").clone(),
  111. $wholeCards = $("#Stupid-Cards"),
  112. $fullWholeCards = $("#Stupid-Cards > g").clone();
  113. apiProvider.on("okey_tile_taken", function(e) {
  114. if ("object" == typeof e.detail.revealed) {
  115. var c = new scope.Card({
  116. color: scope.CARD_COLORS[e.detail.revealed[1] - 1],
  117. value: e.detail.revealed[2]
  118. });
  119. c.log();
  120. }
  121. if (e.detail.pile && !deck.justTaken && playersLeftHandsMap[e.detail.player].take(),
  122. 0 === e.detail.pile && e.detail.player == scope.user && (centralCard.color = scope.CARD_COLORS[e.detail.revealed[1] - 1],
  123. centralCard.value = e.detail.revealed[2], centralCard.render(), createCentralCard()),
  124. 0 === e.detail.pile)
  125. {
  126. var $topCard = $pile.find("g");
  127. if ($topCard.length > 1) $topCard.last().remove(); else {
  128. $topCard.last().remove(), $pile.append($fullPile);
  129. var $miniPile = $wholeCards.find("g");
  130. $miniPile.length ? $miniPile.first().remove() : $wholeCards.append($fullWholeCards);
  131. }
  132. }
  133. e.detail.player == scope.user && deck.insert(e.detail.revealed), centralCard.dragHandler.disable(),
  134. centralCard.$el.off(document.createTouch ? "touchstart" : "mousedown", fadeIn).off(document.createTouch ? "touchend" : "mouseup", fadeOut);
  135. var cards = playersLeftHandsMap[scope.user].cards;
  136. if (cards.length) {
  137. var card = cards[cards.length - 1];
  138. card.dragHandler.disable();
  139. }
  140. });
  141. apiProvider.on("okey_revealed", function(e) {
  142. ended = !0, alert(e.detail.player), deck.fill([]);
  143. for (var hand in playersLeftHandsMap) playersLeftHandsMap[hand].clear();
  144. for (var playerName in playersMap) playersMap[playerName].unselect();
  145. $gosterme.remove();
  146. });
  147. apiProvider.on("player_left", function(e) {
  148. var playerInfo = e.detail.replacement.PlayerInfo;
  149. playersMap[playerInfo[0]] = new scope.Player({
  150. position: playersMap[e.detail.player].position,
  151. name: [ playerInfo[2], playerInfo[3] ].join(" "),
  152. noSkin: !0
  153. }),
  154. delete playersMap[e.detail.player], playersRightHandsMap[playerInfo[0]] = playersRightHandsMap[e.detail.player],
  155. delete playersRightHandsMap[e.detail.player], playersLeftHandsMap[playerInfo[0]] = playersLeftHandsMap[e.detail.player],
  156. delete playersLeftHandsMap[e.detail.player];
  157. });
  158. $("#Pause").on("click", function() { apiProvider.pause(); });
  159. whoPausedGame=false,
  160. //$overlay = $("#overlay");
  161. // $overlay.on("click", function() { whoPausedGame == scope.user && apiProvider.pause(!0); });
  162. /*
  163. apiProvider.on("game_paused", function(e) {
  164. if (whoPausedGame = e.detail[3], "pause" == e.detail[2]) {
  165. $overlay.show();
  166. for (var player in playersMap) playersMap[player].timer.pause();
  167. var player = playersMap[e.detail[3]];
  168. $overlay.find("text").text(player.name + " paused the game");
  169. } else {
  170. $overlay.hide();
  171. for (var player in playersMap) playersMap[player].timer.resume();
  172. }
  173. });
  174. */
  175. $("#Table-Oval").droppable({
  176. accept: function(target) {
  177. return 1 === apiProvider.socket.readyState && deck.length() > 14 &&
  178. target.owner != centralCard && !ended && scope.Card.selected.length <= 1;
  179. },
  180. drop: function(target) {
  181. apiProvider.reveal(target.owner, deck.hand(target.owner));
  182. }
  183. });
  184. }
  185. function createCentralCard() {
  186. centralCard = new scope.Card();
  187. centralCard.$el.attr({opacity: 0, transform: "translate(298,-115)" })
  188. .on(document.createTouch ? "touchstart" : "mousedown", fadeIn)
  189. .on(document.createTouch ? "touchend" : "mouseup", fadeOut);
  190. centralCard.drag();
  191. centralCard.dragHandler.enable();
  192. centralCard.on("dragstart", deck.select).on("dragmove", removeFadeOut)
  193. .on("dragstop", addFadeOut)
  194. .on("dragmove", deck.track)
  195. .on("revert", fadeOut);
  196. deck.$el.append(centralCard.$el[0]);
  197. }
  198. function initOkeyScene(e)
  199. {
  200. if (ended = !1,
  201. deck.fill(e.detail.tiles),
  202. deck.render(),
  203. centralCard.dragHandler.disable(),
  204. centralCard.$el.off(document.createTouch ? "touchstart" : "mousedown", fadeIn)
  205. .off(document.createTouch ? "touchend" : "mouseup", fadeOut),
  206. e.detail.gosterme && "null" != e.detail.gosterme)
  207. {
  208. var gosterme = new scope.Card({
  209. color: scope.CARD_COLORS[e.detail.gosterme[1] - 1],
  210. value: e.detail.gosterme[2]
  211. });
  212. gosterme.$el.attr("transform", "translate(16 0)"),
  213. $gosterme.append(gosterme.$el);
  214. }
  215. var piles = e.detail.piles;
  216. if (piles && "null" != piles) for (var i = 0; i < piles.length, pile; i++)
  217. {
  218. pile = piles[i];
  219. for (var name in pile)
  220. for (var playerPile = pile[name],
  221. hand = playersLeftHandsMap[name],
  222. j = playerPile.length; j--; ) hand.discard(playerPile[j]);
  223. }
  224. e.detail.whos_move && "null" != e.detail.whos_move &&
  225. (e.detail.next_turn_in && "null" != e.detail.next_turn_in && playersMap[e.detail.whos_move].timer.from(e.detail.next_turn_in),
  226. e.detail.paused && (playersMap[e.detail.whos_move].timer.pause(), $overlay.show()),
  227. playersMap[e.detail.whos_move].select());
  228. }
  229. function SetupLeftMenu()
  230. {
  231. $("#Left-Menu").css("cursor", "pointer").on("click", function() {
  232. leftFlag ? ( $("#Tournaments").transform({ to: "10 575", from: "44 465" }),
  233. $("#Promos").transform({ to: "10 575", from: "122 538" }),
  234. leftFlag = !1
  235. ) : ( $("#Tournaments").transform({ from: "10 575", to: "44 465" }),
  236. $("#Promos").transform({ from: "10 575", to: "122 538" }),
  237. leftFlag = !0 );
  238. });
  239. }
  240. function SetupRightMenu()
  241. {
  242. $("#Right-Menu").css("cursor", "pointer").on("click", function() {
  243. rightFlag ? ( $("#Play").transform({to: "975 575", from: "946, 461"}),
  244. $("#Create").transform({to: "975 575",from: "864 526"}),
  245. rightFlag = !1
  246. ) : ( $("#Play").transform({from: "975 575",to: "946, 461"}),
  247. $("#Create").transform({from: "975 575",to: "864 526"}),
  248. rightFlag = !0 );
  249. });
  250. }