CardView.js 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851
  1. cc.Class({
  2. extends: cc.BaseClass,
  3. properties: {
  4. m_HandCardNode:[cc.Node],
  5. m_OperateNode:cc.Prefab,
  6. m_CardPrefab:[cc.Prefab],
  7. m_OutCardPos:[cc.Node],
  8. m_HuCard:[cc.Node],
  9. m_HuCardBG:[cc.Node],
  10. m_Atlas:cc.SpriteAtlas,
  11. m_CenterCtrlPrefab:cc.Prefab,
  12. },
  13. // LIFE-CYCLE CALLBACKS:
  14. ctor:function(){
  15. this.m_HandCard = new Array();
  16. this.m_Weave = new Array();
  17. this.m_OutCard = new Array();
  18. //流逝时间
  19. this.m_LastClickTime = 0;
  20. this.m_MoveCard = new Array();
  21. this.m_CardBackName=new Array();
  22. this.m_CardBackName=[
  23. "BackLeft",
  24. "BackRight",
  25. "BackTB",
  26. "ShowLR",
  27. "ShowTB",
  28. "StandBottom",
  29. "StandLeft",
  30. "StandRight",
  31. "StandTop",
  32. ];
  33. this.m_PlayDiscardIng = new Array();
  34. this.m_PlayNodeList = new Array();
  35. this.outcardTemp = new Array(4);
  36. this.m_HuCardData = new Array(4);
  37. this.m_HuCardItem = new Array(4);
  38. for(var i = 0; i < 4; i++)
  39. {
  40. this.m_HuCardData[i] = new Array();
  41. this.m_HuCardItem[i] = new Array();
  42. this.outcardTemp[i] = 100;
  43. }
  44. this.m_bInit = false;
  45. },
  46. onLoad:function ()
  47. {
  48. this.Init();
  49. },
  50. Init:function()
  51. {
  52. if(this.m_bInit == true) return;
  53. this.m_bInit = true;
  54. cc.director.getCollisionManager().enabled = true;
  55. //东南西北提示
  56. this.m_CenterViewCtrl = cc.instantiate(this.m_CenterCtrlPrefab);
  57. this.node.getChildByName('CenterCtrl').addChild(this.m_CenterViewCtrl);
  58. this.m_CenterViewCtrl = this.m_CenterViewCtrl.getComponent('CenterViewCtrl');
  59. this.m_DiscardCard = this.node.getChildByName('DiscardCardCtrl').getComponent('DiscardCardCtrl');
  60. this.m_TingTip = this.node.getChildByName('TingNode').getComponent('TingCtrl');
  61. //玩家手牌
  62. for (var i = 0; i < this.m_HandCardNode.length; i++) {
  63. this.m_HandCard[i] = this.m_HandCardNode[i].getComponent('CardControl');
  64. this.m_Weave[i] = this.m_HandCardNode[i].getComponent('WeaveControl');
  65. this.m_Weave[i].Init(this.m_HandCard[i].m_HandState);
  66. this.m_PlayDiscardIng[i] = false;
  67. this.m_HandCard[i].SetHook(this);
  68. }
  69. for(var i = 0; i < 4; i++) {
  70. this.m_MoveCard[i] = cc.instantiate(this.m_HandCard[i].m_CardItem);
  71. this.m_MoveCard[i].active = false;
  72. this.node.addChild(this.m_MoveCard[i]);
  73. this.m_MoveCard[i] = this.m_MoveCard[i].getComponent('CardItem');
  74. this.m_MoveCard[i].SetState(GameDef.HAND_STATE_SHOW);
  75. this.m_MoveCard[i].SetShadowShow(false);
  76. this.m_HandCard[i].m_MoveCard = this.m_MoveCard[i];
  77. }
  78. },
  79. //是否点击一下就出牌,true:点上牌就打出,false:抬起或落下
  80. setClickSendCard:function(click){
  81. this.m_HandCard[2].SetClickSendCard(click);
  82. },
  83. UpdateUserCount: function () {
  84. var nUserCount = GameDef.GetPlayerCount();
  85. this.m_ShowUserAction = new Array(4);
  86. this.m_GameUserCount = nUserCount;
  87. for (var i = 0; i < 4; i++) {
  88. this.m_ShowUserAction[i] = true;
  89. }
  90. if (nUserCount == 2) {
  91. this.m_ShowUserAction[1] = false;
  92. this.m_ShowUserAction[3] = false;
  93. } else {
  94. for(var i = 0; i < GameDef.GAME_PLAYER; ++ i) {
  95. var wViewID = GameDef.g_GameEngine.SwitchViewChairID(i);
  96. this.m_ShowUserAction[wViewID] = i < nUserCount;
  97. }
  98. }
  99. this.m_DiscardCard.setUserCount(nUserCount);
  100. },
  101. //重置游戏
  102. ResetView: function() {
  103. // 遍历手牌数组,重置每张手牌的视图,并关闭移动牌的节点,同时将出牌状态设置为未出牌
  104. for (var i = 0; i < this.m_HandCard.length; i++) {
  105. this.m_HandCard[i].ResetView(); // 重置当前手牌的视图状态
  106. this.m_MoveCard[i].node.active = false; // 隐藏移动牌的节点
  107. this.m_PlayDiscardIng[i] = false; // 设置当前手牌为未出牌状态
  108. }
  109. // 遍历组合牌数组,重置每组组合牌的数据
  110. for (var i = 0; i < this.m_Weave.length; i++) {
  111. this.m_Weave[i].ResetData(); // 重置当前组合牌的数据
  112. }
  113. // 重置弃牌堆的视图
  114. this.m_DiscardCard.Reset(); // 重置弃牌堆的视图状态
  115. // 清除胡牌指示的牌
  116. this.CleanHuCard(); // 清除胡牌指示牌的相关信息
  117. },
  118. // update (dt) {},
  119. SetCardData:function(viewID,cbCardData,cbCardCount,cbCurrentCard){
  120. if (this.m_ShowUserAction[viewID] == false ) return ;
  121. if((cbCardCount+1)%3==0){
  122. if( cbCardData != null ){
  123. var cbRemoveCard = new Array();
  124. cbRemoveCard[0] = cbCurrentCard;
  125. if(GameDef.g_GameLogic.RemoveCard4(cbCardData,cbCardCount,cbRemoveCard,1)){
  126. this.m_HandCard[viewID].SetCardData(cbCardData,cbCardCount-1);
  127. this.m_HandCard[viewID].SetCurrentCard(cbCurrentCard);
  128. }
  129. }else{
  130. this.m_HandCard[viewID].SetCardData(cbCardData,cbCardCount-1);
  131. this.m_HandCard[viewID].SetCurrentCard(0);
  132. }
  133. }else{
  134. this.m_HandCard[viewID].SetCardData(cbCardData,cbCardCount);
  135. }
  136. },
  137. //亮倒的牌
  138. SetLiangCardData:function(viewID,cbCardData,cbCardCount,cbCurrentCard)
  139. {
  140. if (this.m_ShowUserAction[viewID] == false ) return ;
  141. if((cbCardCount+1)%3==0)
  142. {
  143. if( cbCardData != null )
  144. {
  145. this.m_HandCard[viewID].SetLiangCardData(cbCardData,cbCardCount-1);
  146. this.m_HandCard[viewID].SetLiangCurrentCard(cbCurrentCard);
  147. }
  148. else
  149. {
  150. this.m_HandCard[viewID].SetLiangCardData(cbCardData,cbCardCount);
  151. this.m_HandCard[viewID].SetCurrentCard(0);
  152. }
  153. }
  154. else
  155. {
  156. this.m_HandCard[viewID].SetLiangCardData(cbCardData,cbCardCount);
  157. }
  158. },
  159. SetLockCardData:function(viewID,cbCardData,cbCardCount, cbLockCardData, cbLockCount,cbCurrentCard)
  160. {
  161. if (this.m_ShowUserAction[viewID] == false ) return ;
  162. if((cbCardCount+1)%3==0)
  163. {
  164. if( cbCardData != null )
  165. {
  166. var cbRemoveCard = new Array();
  167. cbRemoveCard[0] = cbCurrentCard;
  168. if(GameDef.g_GameLogic.RemoveCard4(cbCardData,cbCardCount,cbRemoveCard,1)){
  169. this.m_HandCard[viewID].SetLockCardData(cbCardData, cbCardCount, cbLockCardData, cbLockCount, false, true);
  170. this.m_HandCard[viewID].SetCurrentCard(cbCurrentCard);
  171. }
  172. }
  173. else
  174. {
  175. this.m_HandCard[viewID].SetLockCardData(cbCardData, cbCardCount, cbLockCardData, cbLockCount, false, true);
  176. this.m_HandCard[viewID].SetCurrentCard(0);
  177. }
  178. }
  179. else
  180. {
  181. this.m_HandCard[viewID].SetLockCardData(cbCardData, cbCardCount, cbLockCardData, cbLockCount, false);
  182. }
  183. },
  184. SetWeaveData:function(viewID,index,WeaveData,CardCount,Private){
  185. if (this.m_ShowUserAction[viewID] == false ) {
  186. return ;
  187. }
  188. this.m_Weave[viewID].SetWeaveData(index,WeaveData,CardCount);
  189. },
  190. SetWeaveState:function(viewID,index,Obj){
  191. if (this.m_ShowUserAction[viewID] == false ) {
  192. return ;
  193. }
  194. this.m_Weave[viewID].SetWeaveState(index,Obj);
  195. },
  196. SetDiscardCardDate:function(viewID,cbCardData,cbCardCount){
  197. if (this.m_ShowUserAction[viewID] == false ) {
  198. return ;
  199. }
  200. this.m_DiscardCard.SetCardData(viewID,cbCardData,cbCardCount);
  201. },
  202. StopDiscard:function(viewID,cbCenterCard){
  203. if (this.m_ShowUserAction[viewID] == false ) {
  204. return ;
  205. }
  206. var CardData = this.m_MoveCard[viewID].GetCardData();
  207. if( CardData == cbCenterCard && this.m_PlayDiscardIng[viewID])
  208. {
  209. this.m_MoveCard[viewID].node.stopAllActions();
  210. this.m_MoveCard[viewID].node.active = false;
  211. this.m_PlayDiscardIng[viewID] = false;
  212. }
  213. else{
  214. this.m_DiscardCard.RemoveDiscard(viewID);
  215. }
  216. },
  217. //展示牌移动到出牌位置
  218. PlayOutCardMoveToDiscard(viewID,CardData,callBack){
  219. console.log("展示牌移动到出牌位置")
  220. if (this.m_ShowUserAction[viewID] == false ) {
  221. return ;
  222. }
  223. this.m_PlayDiscardIng[viewID] = true;
  224. this.m_MoveCard[viewID].node.active = true;
  225. this.m_MoveCard[viewID].SetCardData(CardData);
  226. this.m_MoveCard[viewID].SetState(GameDef.HAND_STATE_SHOW);
  227. var StartPos = this.m_OutCardPos[viewID].getPosition();
  228. if( viewID != GameDef.HAND_BOTTOM ){
  229. this.m_MoveCard[viewID].node.scale = 2;
  230. }
  231. else{
  232. this.m_MoveCard[viewID].node.scale = 1;
  233. }
  234. this.m_MoveCard[viewID].node.setPosition(StartPos);
  235. var DiscardNode = this.m_DiscardCard.GetNextDiscardNode(viewID).node;
  236. var MoveTo = DiscardNode.convertToWorldSpaceAR(cc.v2(0,0));
  237. MoveTo = this.node.convertToNodeSpaceAR(MoveTo);
  238. var disScale = this.m_DiscardCard.GetScale(viewID);
  239. var sql = cc.sequence(
  240. cc.delayTime(0.5),
  241. cc.spawn(cc.moveTo(0.1,MoveTo),
  242. cc.scaleTo(0.1,disScale)),
  243. cc.delayTime(0.1),
  244. cc.callFunc(function(){
  245. this.m_PlayDiscardIng[viewID] = false;
  246. this.m_MoveCard[viewID].node.active = false;
  247. this.AddDiscard(viewID,CardData);
  248. GameDef.g_GameEngine.m_GameClientView.SetHuiPai(GameDef.m_cbMagicData);
  249. GameDef.g_GameEngine.m_GameClientView.ShockHuiPai();
  250. if( callBack != null )
  251. callBack();
  252. },this),
  253. );
  254. this.m_MoveCard[viewID].node.stopAllActions();
  255. this.m_MoveCard[viewID].node.runAction(sql);
  256. },
  257. AddPlayNode:function(viewID,Card){
  258. Obj = new Object();
  259. },
  260. //播放出牌动画
  261. PlayDiscard:function(viewID,CardIndex,cbOutCardData,cbCardData,CardCount,wTingOutCard, LiangCount, bLiang){
  262. console.log("播放出牌动画")
  263. if (this.m_ShowUserAction[viewID] == false ) {
  264. return ;
  265. }
  266. if(this.outcardTemp[viewID]==100||this.m_PlayDiscardIng[viewID]==false){
  267. this.outcardTemp[viewID]= cbOutCardData;
  268. }
  269. if( this.m_PlayDiscardIng[viewID] ){
  270. var DisCard = this.m_MoveCard[viewID].GetCardData();
  271. this.AddDiscard(viewID,this.outcardTemp[viewID],true);
  272. this.outcardTemp[viewID] = cbOutCardData;
  273. }
  274. this.m_PlayDiscardIng[viewID] = true;
  275. var StartNode;
  276. var DiscardNode = this.m_DiscardCard.GetNextDiscardNode(viewID).node;
  277. if( viewID != GameDef.HAND_BOTTOM ){
  278. StartNode = this.m_HandCard[viewID].GetCardNode(13);
  279. }
  280. else{
  281. StartNode = this.m_HandCard[viewID].GetCardNode(CardIndex);
  282. }
  283. StartNode = StartNode.node;
  284. var StartPos = StartNode.convertToWorldSpaceAR(cc.v2(0,0));
  285. var MoveTo1 = this.m_OutCardPos[viewID].getPosition();
  286. var MoveTo2 = DiscardNode.convertToWorldSpaceAR(cc.v2(0,0));
  287. StartPos = this.node.convertToNodeSpaceAR(StartPos);
  288. MoveTo2 = this.node.convertToNodeSpaceAR(MoveTo2);
  289. this.m_MoveCard[viewID].node.active = true;
  290. //this.m_MoveCard[viewID].SetState(GameDef.HAND_STATE_SHOW);
  291. this.m_MoveCard[viewID].SetCardData(cbOutCardData);
  292. if(wTingOutCard != null && wTingOutCard != 0)
  293. {
  294. this.m_MoveCard[viewID].SetState(GameDef.HAND_STATE_SHOW_BACK);
  295. }
  296. else
  297. {
  298. this.m_MoveCard[viewID].SetState(GameDef.HAND_STATE_SHOW);
  299. }
  300. //this.m_MoveCard[viewID].SetState(GameDef.HAND_STATE_SHOW);
  301. if( viewID != GameDef.HAND_BOTTOM ){
  302. this.m_MoveCard[viewID].node.scale = 2;
  303. }
  304. else{
  305. this.m_MoveCard[viewID].node.scale = 1;
  306. }
  307. this.m_MoveCard[viewID].node.setPosition(StartPos);
  308. var disScale = this.m_DiscardCard.GetScale(viewID);
  309. let outcard = cbOutCardData;
  310. var sql = cc.sequence(
  311. cc.callFunc(function(){
  312. this.m_PlayDiscardIng[viewID] = true;
  313. if( viewID == GameDef.HAND_BOTTOM )
  314. {
  315. //出牌后不显示遮罩
  316. if(GameDef.KIND_ID == 62007){
  317. this.m_MoveCard[viewID].SetState(GameDef.HAND_STATE_SHOW);
  318. if(bLiang == true)
  319. {
  320. this.m_HandCard[viewID].SetSelfLiangCardData(cbCardData, CardCount, wTingOutCard, LiangCount);
  321. }
  322. else
  323. {
  324. this.m_HandCard[viewID].SetCardData(cbCardData,wTingOutCard);
  325. }
  326. this.m_HandCard[viewID].SetCurrentCard(null);
  327. }
  328. else{
  329. if(GameDef.KIND_ID == 21063) GameDef.m_bHasQue = false;
  330. this.m_HandCard[viewID].SetCardData(cbCardData,CardCount);
  331. this.m_HandCard[viewID].SetCurrentCard(null);
  332. if(wTingOutCard != null && wTingOutCard !=0)
  333. {
  334. this.m_MoveCard[viewID].SetState(GameDef.HAND_STATE_SHOW_BACK);
  335. }
  336. else
  337. {
  338. this.m_MoveCard[viewID].SetState(GameDef.HAND_STATE_SHOW);
  339. }
  340. }
  341. //this.m_MoveCard[viewID].SetState(GameDef.HAND_STATE_SHOW);
  342. // this.m_HandCard[viewID].ResetPos();
  343. }
  344. },this),
  345. cc.moveTo(0.1,MoveTo1),
  346. cc.delayTime(0.5),
  347. cc.spawn(cc.moveTo(0.1,MoveTo2),
  348. cc.scaleTo(0.1,disScale)),
  349. cc.callFunc(function(){
  350. if(GameDef.KIND_ID == 62007)wTingOutCard = null;
  351. this.AddDiscard(viewID,outcard,true,wTingOutCard);
  352. this.m_PlayDiscardIng[viewID] = false;
  353. },this),
  354. );
  355. this.m_MoveCard[viewID].node.stopAllActions();
  356. this.m_MoveCard[viewID].node.runAction(sql);
  357. },
  358. AddDiscard:function(viewID,cbCardData,bShowArrow,wTingOutCard){
  359. if (this.m_ShowUserAction[viewID] == false ) {
  360. return ;
  361. }
  362. this.m_DiscardCard.AddDiscard(viewID,cbCardData,bShowArrow,wTingOutCard);
  363. this.m_MoveCard[viewID].node.active = false;
  364. },
  365. //播放买码动画
  366. PlayBuyCode:function(viewID,cbOutCardData)
  367. {
  368. this.m_MoveCard[viewID].node.active = true;
  369. this.m_MoveCard[viewID].SetState(GameDef.HAND_STATE_SHOW);
  370. this.m_MoveCard[viewID].SetLiangCardData(cbOutCardData);
  371. this.m_MoveCard[viewID].node.scale = 1;
  372. this.m_MoveCard[viewID].node.setPosition(cc.v2(-160,40));
  373. var sql = cc.sequence(
  374. cc.spawn(cc.moveTo(0.2,cc.v2(0,0)),
  375. cc.scaleTo(0.2,1)),
  376. cc.delayTime(0.8),
  377. cc.callFunc(function(){
  378. this.m_MoveCard[viewID].node.active = false;
  379. GameDef.g_GameEngine.m_GameEnd.cbBuyCodeData.splice(0,1);
  380. GameDef.g_GameEngine.m_GameEnd.cbBuyCodeCount--;
  381. GameDef.g_GameEngine.OnTimeIDI_PERFORM_BUYCODE();
  382. },this),
  383. );
  384. this.m_MoveCard[viewID].node.stopAllActions();
  385. this.m_MoveCard[viewID].node.runAction(sql);
  386. },
  387. RemoveDiscardCard:function(viewID){
  388. if (this.m_ShowUserAction[viewID] == false ) {
  389. return ;
  390. }
  391. this.m_DiscardCard.RemoveDiscard(viewID);
  392. },
  393. SetSelfCardData:function(cbCardData,cbCardCount,cbCurrentCard)
  394. {
  395. //检测手里是否有定缺的花色
  396. if(GameDef.KIND_ID == 21063 && (GameDef.g_GameEngine.m_dwRulesArr[0] & GameDef.GAME_RULE_SP_17) != 0 && (GameDef.g_GameEngine.m_dwServerRules & GameDef.GAME_RULE_RENSHU_2) == 0)
  397. {
  398. GameDef.m_bHasQue = false;
  399. var cbCurrColor = cbCurrentCard & GameDef.MASK_COLOR;
  400. if(cbCurrColor == GameDef.g_GameEngine.m_cbQueColor[0] || cbCurrColor == GameDef.g_GameEngine.m_cbQueColor[1])
  401. {
  402. GameDef.m_bHasQue = true;
  403. }
  404. if(GameDef.m_bHasQue == false)
  405. {
  406. for(var i = 0; i < cbCardCount; i++)
  407. {
  408. var cbColor = cbCardData[i] & GameDef.MASK_COLOR;
  409. if(cbColor == GameDef.g_GameEngine.m_cbQueColor[0] || cbColor == GameDef.g_GameEngine.m_cbQueColor[1])
  410. {
  411. GameDef.m_bHasQue = true;
  412. break;
  413. }
  414. }
  415. }
  416. }
  417. this.m_HandCard[2].SetCardData(cbCardData,cbCardCount);
  418. this.m_HandCard[2].SetCurrentCard(cbCurrentCard);
  419. },
  420. SetSelfLockCardData:function(cbCardData, cbCardCount, cbLockCardData, cbLockCount, cbCurrentCard)
  421. {
  422. this.m_HandCard[2].SetLockCardData(cbCardData,cbCardCount, cbLockCardData, cbLockCount);
  423. this.m_HandCard[2].SetCurrentCard(cbCurrentCard);
  424. },
  425. SetSelfCardIndex:function(cbCardIndex,CurCardData, bIsListen){
  426. //转换扑克
  427. var cbCardData = new Array();
  428. var cbCardCount=GameDef.g_GameLogic.SwitchToCardData2(cbCardIndex,cbCardData);
  429. //混牌放最前面
  430. if( cbCardData != null && cbCardCount > 0 )
  431. {
  432. if( GameDef.m_cbMagicData != null && GameDef.m_cbMagicData > 0 )
  433. {
  434. for (var i = 0; i < cbCardCount; i++)
  435. {
  436. if(cbCardData[i] == GameDef.m_cbMagicData)
  437. {
  438. cbCardData.splice(i,1);
  439. cbCardData.splice(0,0,GameDef.m_cbMagicData);
  440. }
  441. }
  442. }
  443. }
  444. //检测手里是否有定缺的花色
  445. if(GameDef.KIND_ID == 21063 && (GameDef.g_GameEngine.m_dwRulesArr[0] & GameDef.GAME_RULE_SP_17) != 0 && (GameDef.g_GameEngine.m_dwServerRules & GameDef.GAME_RULE_RENSHU_2) == 0)
  446. {
  447. GameDef.m_bHasQue = false;
  448. if(CurCardData != null && CurCardData != 0)
  449. {
  450. var cbCurrColor = CurCardData & GameDef.MASK_COLOR;
  451. if(cbCurrColor == GameDef.g_GameEngine.m_cbQueColor[0] || cbCurrColor == GameDef.g_GameEngine.m_cbQueColor[1])
  452. {
  453. GameDef.m_bHasQue = true;
  454. }
  455. }
  456. if(GameDef.m_bHasQue == false)
  457. {
  458. for(var i = 0; i < cbCardCount; i++)
  459. {
  460. var cbColor = cbCardData[i] & GameDef.MASK_COLOR;
  461. if(cbColor == GameDef.g_GameEngine.m_cbQueColor[0] || cbColor == GameDef.g_GameEngine.m_cbQueColor[1])
  462. {
  463. GameDef.m_bHasQue = true;
  464. break;
  465. }
  466. }
  467. }
  468. }
  469. if(CurCardData != null && CurCardData != 0 ){
  470. var cbRemoveCard = new Array();
  471. cbRemoveCard[0] = CurCardData;
  472. if(GameDef.g_GameLogic.RemoveCard4(cbCardData,cbCardCount,cbRemoveCard,1)){
  473. this.m_HandCard[2].SetCardData(cbCardData,cbCardCount-1, bIsListen);
  474. this.m_HandCard[2].SetCurrentCard(CurCardData, bIsListen);
  475. return ;
  476. }
  477. }
  478. if((cbCardCount+1)%3==0){
  479. this.m_HandCard[2].SetCardData(cbCardData,cbCardCount-1, bIsListen);
  480. this.m_HandCard[2].SetCurrentCard(cbCardData[cbCardCount-1], bIsListen);
  481. }else{
  482. this.m_HandCard[2].SetCardData(cbCardData,cbCardCount, bIsListen);
  483. }
  484. },
  485. SetSelfLiangCardIndex:function(cbCardIndex, CurCardData, cbLiangCard, wLiangCount, bIsListen, bLiang, cbCantOutCard){
  486. //转换扑克
  487. //cbCantOutCard 不能出的牌
  488. var cbCardData = new Array();
  489. var cbCardCount=GameDef.g_GameLogic.SwitchToCardData2(cbCardIndex,cbCardData);
  490. if(bLiang == true)
  491. {
  492. if(CurCardData != null && CurCardData != 0 )
  493. {
  494. var cbRemoveCard = new Array();
  495. cbRemoveCard[0] = CurCardData;
  496. if(GameDef.g_GameLogic.RemoveCard4(cbCardData,cbCardCount,cbRemoveCard,1))
  497. {
  498. this.m_HandCard[2].SetSelfLiangCardData(cbCardData, cbLiangCard, cbCardCount-1, wLiangCount, bIsListen);
  499. this.m_HandCard[2].SetLiangCurrentCard(CurCardData, bIsListen);
  500. return ;
  501. }
  502. }
  503. if((cbCardCount+1)%3==0)
  504. {
  505. this.m_HandCard[2].SetSelfLiangCardData(cbCardData, cbLiangCard,cbCardCount-1, wLiangCount, bIsListen);
  506. this.m_HandCard[2].SetLiangCurrentCard(cbCardData[cbCardCount-1], bIsListen);
  507. }
  508. else
  509. {
  510. this.m_HandCard[2].SetSelfLiangCardData(cbCardData, cbLiangCard,cbCardCount, wLiangCount, bIsListen);
  511. }
  512. }
  513. else
  514. {
  515. //不能出的牌 其余玩家除非亮倒否则不允许打听口牌,除非手中剩余的牌全是别人的听口牌。
  516. var bHasOut = false;
  517. if(bIsListen == false && cbCantOutCard != null)
  518. {
  519. for(var i = 0; i < cbCardCount; i++)
  520. {
  521. var bHas = false;
  522. for(var j = 0; j < 18; j++)
  523. {
  524. if(cbCantOutCard[j] == 0) break;
  525. if(cbCantOutCard[j] == cbCardData[i])
  526. {
  527. bHas = true;
  528. break;
  529. }
  530. }
  531. if(bHas == false)
  532. {
  533. bHasOut = true;
  534. break;
  535. }
  536. }
  537. }
  538. if(CurCardData != null && CurCardData != 0 )
  539. {
  540. var cbRemoveCard = new Array();
  541. cbRemoveCard[0] = CurCardData;
  542. if(GameDef.g_GameLogic.RemoveCard4(cbCardData,cbCardCount,cbRemoveCard,1))
  543. {
  544. this.m_HandCard[2].SetCardData(cbCardData,cbCardCount-1, bIsListen, cbCantOutCard, bHasOut);
  545. this.m_HandCard[2].SetCurrentCard(CurCardData, bIsListen, cbCantOutCard, bHasOut);
  546. return ;
  547. }
  548. }
  549. if((cbCardCount+1)%3==0)
  550. {
  551. this.m_HandCard[2].SetCardData(cbCardData,cbCardCount-1, bIsListen, cbCantOutCard, bHasOut);
  552. this.m_HandCard[2].SetCurrentCard(cbCardData[cbCardCount-1], bIsListen, cbCantOutCard, bHasOut);
  553. }
  554. else
  555. {
  556. this.m_HandCard[2].SetCardData(cbCardData,cbCardCount, bIsListen, cbCantOutCard, bHasOut);
  557. }
  558. }
  559. },
  560. SetSelfLockCardIndex:function(cbCardIndex, cbLockCardIndex, CurCardData, bIsListen)
  561. {
  562. //转换扑克
  563. var cbCardData = new Array();
  564. var cbCardCount=GameDef.g_GameLogic.SwitchToCardData2(cbCardIndex,cbCardData);
  565. var cbLockCardData = new Array();
  566. var cbLockCardCount=GameDef.g_GameLogic.SwitchToCardData2(cbLockCardIndex,cbLockCardData);
  567. if(CurCardData != null && CurCardData != 0 ){
  568. var cbRemoveCard = new Array();
  569. cbRemoveCard[0] = CurCardData;
  570. if(GameDef.g_GameLogic.RemoveCard4(cbCardData,cbCardCount,cbRemoveCard,1)){
  571. this.m_HandCard[2].SetLockCardData(cbCardData,cbCardCount, cbLockCardData, cbLockCardCount, bIsListen, true);
  572. this.m_HandCard[2].SetCurrentCard(CurCardData, bIsListen);
  573. return ;
  574. }
  575. }
  576. if((cbCardCount+1)%3==0){
  577. //这里有问题 扣的牌会放到出牌位
  578. this.m_HandCard[2].SetLockCardData(cbCardData,cbCardCount, cbLockCardData, cbLockCardCount, bIsListen, true);
  579. this.m_HandCard[2].SetCurrentCard(cbCardData[cbCardCount-1], bIsListen);
  580. }else{
  581. this.m_HandCard[2].SetLockCardData(cbCardData,cbCardCount, cbLockCardData, cbLockCardCount, bIsListen);
  582. }
  583. },
  584. SetCurrentCard:function(viewID,cbCurrentCard, bIsListen){
  585. if (this.m_ShowUserAction[viewID] == false ) return ;
  586. this.m_HandCard[viewID].SetCurrentCard(cbCurrentCard, bIsListen);
  587. },
  588. SetCurrentCard2:function(viewID,cbCurrentCard, bIsListen, cbCantOutCard){
  589. if (this.m_ShowUserAction[viewID] == false ) return ;
  590. this.m_HandCard[viewID].SetCurrentCard2(cbCurrentCard, bIsListen, cbCantOutCard);
  591. },
  592. GetHandCurrentCard:function(viewID){
  593. if (this.m_ShowUserAction[viewID] == false ) return ;
  594. return this.m_HandCard[viewID].m_CurrentCardData;
  595. },
  596. //是否可以弹起
  597. SetPositively:function(bPositively){
  598. this.m_HandCard[2].SetPositively(bPositively);
  599. },
  600. //
  601. GetPositively:function(){
  602. return this.m_HandCard[GameDef.MYSELF_VIEW_ID].GetPositively();
  603. },
  604. GetShootCard:function(){
  605. return this.m_HandCard[GameDef.MYSELF_VIEW_ID].GetShootCard();
  606. },
  607. //出牌提示
  608. SetDiscardTip(viewID){
  609. this.m_DiscardCard.ShowArrow(viewID);
  610. },
  611. SetCurrentUser:function(wCurrentUser){
  612. this.m_wCurrentUser=wCurrentUser;
  613. for (var i = 0; i < this.m_HandCard.length; i++) {
  614. this.m_HandCard[i].SetPositively(false);
  615. }
  616. if( wCurrentUser == GameDef.g_GameEngine.GetMeChairID()){
  617. this.m_HandCard[2].SetPositively(true);
  618. }
  619. this.m_CenterViewCtrl.setCurrectUser(wCurrentUser);
  620. if( wCurrentUser != INVALD_CHAIR ){
  621. var viewId = GameDef.g_GameEngine.SwitchViewChairID(wCurrentUser);
  622. GameDef.g_GameEngine.m_GameClientView.SetCurrentAction(viewId);
  623. }
  624. },
  625. SetControlInfo:function(bShow,WeaveInfo,cbCount){
  626. if((GameDef.KIND_ID == 62007)){
  627. if(!this.m_OperateCtrl){
  628. if(GameDef.OPERATE_CTRL) {
  629. this.ShowPrefabDLG(GameDef.OPERATE_CTRL,this.node,function(js){
  630. this.m_OperateCtrl = js;
  631. if(this.m_TbShow){
  632. //显示控制牌组
  633. if(this.m_OperateCtrl){
  634. this.m_OperateCtrl.node.active = true;
  635. this.m_OperateCtrl.SetWeaveInfo(this.m_TWeaveInfo,this.m_TcbCount);
  636. }
  637. }else{
  638. if(this.m_OperateCtrl){
  639. this.m_OperateCtrl.node.active = false;
  640. }
  641. }
  642. }.bind(this));
  643. } else {
  644. var OperateNode = cc.instantiate(this.m_OperateNode);
  645. this.node.addChild(OperateNode);
  646. OperateNode.active = false;
  647. this.m_OperateCtrl = OperateNode.getComponent('OperateCtrl');
  648. }
  649. }
  650. this.m_TbShow = bShow;
  651. this.m_TWeaveInfo = WeaveInfo;
  652. this.m_TcbCount = cbCount;
  653. }
  654. else{
  655. if(!this.m_OperateCtrl){
  656. var OperateNode = cc.instantiate(this.m_OperateNode);
  657. this.node.addChild(OperateNode);
  658. OperateNode.active = false;
  659. this.m_OperateCtrl = OperateNode.getComponent('OperateCtrl');
  660. }
  661. }
  662. if(bShow){
  663. //显示控制牌组
  664. this.m_OperateCtrl.node.active = true;
  665. this.m_OperateCtrl.SetWeaveInfo(WeaveInfo,cbCount);
  666. }else{
  667. this.m_OperateCtrl.node.active = false;
  668. }
  669. return;
  670. },
  671. SetCardItemState:function(viewID,state){
  672. if (this.m_ShowUserAction[viewID] == false ) return ;
  673. this.m_HandCard[viewID].SetCardItemState(state);
  674. },
  675. SetMakeMagicIndex:function(magic){
  676. this.m_cbMakeMagicIndex = magic;
  677. },
  678. SetMagicIndex:function(magic){
  679. this.m_cbMagicIndex = magic;
  680. for (var i = 0; i < 4; i++) {
  681. this.m_HandCard[i].SetMagicIndex(magic);
  682. }
  683. },
  684. ChangeCardBack:function(node,index){
  685. var children = node.children;
  686. for (var i = 0; i < children.length; ++i) {
  687. this.FindCardItem(children[i],index);
  688. }
  689. },
  690. FindCardItem:function(node,index){
  691. var cardNode = node.getComponent(cc.Sprite);
  692. if( cardNode != null){
  693. for (var i = 0; i < this.m_CardBackName.length; i++) {
  694. if( cardNode.node.name == this.m_CardBackName[i]){
  695. cardNode.spriteFrame = this.m_Atlas.getSpriteFrame(this.m_CardBackName[i]+index);
  696. break;
  697. }
  698. }
  699. }
  700. var children = node.children;
  701. for (var i = 0; i < children.length; ++i) {
  702. this.FindCardItem(children[i],index);
  703. }
  704. },
  705. ShowTingData:function(pData, bListen){
  706. this.m_TingTipData=pData;
  707. this.m_HandCard[2].ShowTingData(pData, bListen);
  708. },
  709. ShowTingTip:function(cbOutData){
  710. if(GameDef.g_GameEngine.m_SelectHuKou){
  711. this.m_TingTip.SetSelectTingTip(cbOutData,this.m_TingTipData);
  712. }else{
  713. this.m_TingTip.SetTingTip(cbOutData,this.m_TingTipData);
  714. }
  715. },
  716. ShowCheckTing:function(TingData)
  717. {
  718. this.m_TingTip.ShowTingTip(TingData);
  719. },
  720. HideTingCtrl:function()
  721. {
  722. this.m_TingTip.HideView();
  723. this.ShowTingData();
  724. },
  725. CleanHuCard:function()
  726. {
  727. for(var i = 0; i < 4; i++)
  728. {
  729. this.m_HuCardData[i] = new Array();
  730. this.m_HuCardItem[i] = new Array();
  731. this.m_HuCard[i].removeAllChildren();
  732. if(this.m_HuCardBG[i]) this.m_HuCardBG[i].active = false;
  733. }
  734. },
  735. AddHuCard:function(viewID, CardData, bZiMo, wProViewID)
  736. {
  737. if(viewID >= GameDef.GAME_PLAYER || CardData <= 0) return;
  738. if(this.m_HuCardBG[viewID]) this.m_HuCardBG[viewID].active = true;
  739. this.m_HuCardData[viewID].push(CardData);
  740. // for(var i = 0; i < this.m_HuCardItem[viewID].length; i++)
  741. // {
  742. // if(this.m_HuCardItem[viewID][i].GetCardData() == CardData)
  743. // {
  744. // this.m_HuCardItem[viewID][i].SetNumber(1);
  745. // return;
  746. // }
  747. // }
  748. var index = this.m_HuCardItem[viewID].length;
  749. var card = cc.instantiate(this.m_CardPrefab[viewID]);
  750. var posX = 0;
  751. var posY = 0;
  752. if(viewID == GameDef.HAND_TOP)
  753. {
  754. card.setScale(0.9);
  755. posX = index * card.width * -0.9;
  756. }
  757. else if(viewID == GameDef.HAND_LEFT)
  758. {
  759. posY = index * card.height*-1;
  760. }
  761. else if(viewID == GameDef.HAND_BOTTOM)
  762. {
  763. card.setScale(0.55);
  764. posX = index * card.width * 0.55;
  765. }
  766. else if(viewID == GameDef.HAND_RIGHT)
  767. {
  768. posY = index * card.height;
  769. card.zIndex = 9-index;
  770. }
  771. card.setPosition(posX,posY);
  772. this.m_HuCard[viewID].addChild(card);
  773. card = card.getComponent('CardItem');
  774. this.m_HuCardItem[viewID].push(card);
  775. card.SetCardData(CardData);
  776. if(wProViewID != INVALID_CHAIR)
  777. {
  778. card.SetProvide(wProViewID);
  779. }
  780. if(bZiMo && GameDef.g_GameEngine.m_ReplayMode == false)
  781. {
  782. card.SetState(GameDef.HAND_STATE_SHOW_BACK);
  783. }
  784. else
  785. {
  786. card.SetState(GameDef.HAND_STATE_SHOW);
  787. }
  788. card.SetShadowShow(false);
  789. this.ChangeCardBack(this.m_HuCard[viewID], 0);
  790. },
  791. });