app.js 12 KB

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