WeaveItem.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. cc.Class({
  2. extends: cc.Component,
  3. properties: {
  4. m_CardNodeTB: [cc.Node],
  5. m_CardNodeLR: [cc.Node],
  6. },
  7. // LIFE-CYCLE CALLBACKS:
  8. ctor: function () {
  9. this.m_CardArray = new Array();
  10. this.m_cbCardData = new Array();
  11. },
  12. onLoad() {
  13. },
  14. BuildCard: function (state, cardPrefab) {
  15. // 定义一个变量node,用于存储手牌节点
  16. var node;
  17. // 定义一个变量offsetY,用于存储y轴偏移量,默认为0
  18. var offsetY = 0;
  19. // 设置当前手牌状态为传入的state参数
  20. this.m_HandState = state;
  21. // 根据state参数判断手牌的方向,并设置相应的节点和y轴偏移量
  22. if (state == GameDef.HAND_TOP || // 如果手牌在顶部
  23. state == GameDef.HAND_BOTTOM) { // 或者手牌在底部
  24. node = this.m_CardNodeTB; // 使用m_CardNodeTB节点
  25. } else if (state == GameDef.HAND_LEFT) { // 如果手牌在左侧
  26. node = this.m_CardNodeLR; // 使用m_CardNodeLR节点
  27. offsetY = -10; // 设置y轴偏移量为-10
  28. } else if (state == GameDef.HAND_RIGHT) { // 如果手牌在右侧
  29. node = this.m_CardNodeLR; // 使用m_CardNodeLR节点
  30. offsetY = 10; // 设置y轴偏移量为10
  31. }
  32. // 遍历node数组,为每个位置创建手牌实例
  33. for (var i = 0; i < node.length; i++) {
  34. // 实例化手牌预制体,并存储在m_CardArray数组中
  35. this.m_CardArray[i] = cc.instantiate(cardPrefab);
  36. // 将手牌实例作为子节点添加到对应的手牌方向节点中
  37. node[i].addChild(this.m_CardArray[i]);
  38. // 根据手牌方向调整手牌实例的y轴位置
  39. this.m_CardArray[i].y += offsetY;
  40. // 获取手牌实例的CardItem组件
  41. this.m_CardArray[i] = this.m_CardArray[i].getComponent('CardItem');
  42. // 设置手牌实例的状态为显示状态
  43. this.m_CardArray[i].SetState(GameDef.HAND_STATE_SHOW);
  44. }
  45. },
  46. SortCardData: function (cbCardData, wCardCount) {
  47. for (var i = 0; i < wCardCount; ++i) {
  48. for (var j = i + 1; j < wCardCount; ++j) {
  49. if (cbCardData[i] > cbCardData[j]) {
  50. var tmp = cbCardData[i];
  51. cbCardData[i] = cbCardData[j];
  52. cbCardData[j] = tmp;
  53. }
  54. }
  55. }
  56. },
  57. SetCardItemColor: function () {
  58. for (var i = 0; i < this.m_CardArray.length; i++) {
  59. this.m_CardArray[i].SetProvideType(GameDef.ITEM_PROVIDE_COLOR);
  60. }
  61. },
  62. SetWeaveData: function (cbCardData, wCardCount) {
  63. this.m_wCardCount = wCardCount;
  64. for (var i = this.m_wCardCount; i < this.m_CardArray.length; i++) {
  65. this.m_CardArray[i].node.active = false;
  66. }
  67. this.SortCardData(cbCardData, wCardCount)
  68. for (var i = 0; i < wCardCount; ++i) {
  69. if (i < wCardCount) {
  70. this.m_cbCardData[i] = cbCardData[i];
  71. }
  72. else {
  73. this.m_cbCardData[i] = 0;
  74. }
  75. this.m_CardArray[i].node.active = true;
  76. this.m_CardArray[i].SetCardData(this.m_cbCardData[i]);
  77. this.m_CardArray[i].SetState(GameDef.HAND_STATE_SHOW);
  78. }
  79. },
  80. SetWeaveNumber: function (cbExtraCount) {
  81. if (cbExtraCount == null) return;
  82. for (var i = 0; i < 4; i++) {
  83. if (cbExtraCount[i] != null && cbExtraCount[i] > 0) {
  84. this.m_CardArray[i].SetNumber(cbExtraCount[i]);
  85. }
  86. }
  87. },
  88. SetWeaveState: function (arg, bEnd) {
  89. if (typeof arg == 'object') {
  90. this.__setWeaveStateObj(arg, bEnd);
  91. }
  92. else {
  93. this.__setWeaveState(arg);
  94. }
  95. },
  96. __setWeaveStateObj: function (obj, bEnd) {
  97. var WeaveState = GameDef.GANG_THREE_SHOW;
  98. var cbCardData = obj.cbCenterCard;
  99. var wWeaveKind = obj.wWeaveKind;
  100. var cbWeaveCardCount = GameDef.g_GameLogic.GetWeaveCard(wWeaveKind, cbCardData, obj.cbCardData);
  101. if (cbWeaveCardCount == 4 && !obj.cbPublicCard) {
  102. WeaveState = GameDef.GAME_THREE_BACK_SELF;
  103. var wProViewID = GameDef.g_GameEngine.SwitchViewChairID(obj.wProvideUser);
  104. var wSelfID = GameDef.g_GameEngine.SwitchViewChairID(GameDef.g_GameEngine.GetMeChairID());
  105. if( this.m_HandState == wProViewID && this.m_HandState == wSelfID ){
  106. WeaveState = GameDef.GAME_THREE_BACK_SELF;
  107. }
  108. else{
  109. WeaveState = GameDef.GAME_THREE_BACK;
  110. }
  111. }
  112. if (obj.cbExtraCount != null) {
  113. for (var i = 0; i < 4; i++) {
  114. if (obj.cbExtraCount[i] > 0) {
  115. this.m_CardArray[i].SetNumber(obj.cbExtraCount[i]);
  116. }
  117. }
  118. }
  119. this.__setWeaveState(WeaveState);
  120. if (obj.wProvideUser != null &&
  121. obj.wProvideUser != INVALD_CHAIR &&
  122. (obj.wProvideUser != GameDef.g_GameEngine.GetMeChairID() || this.m_HandState != GameDef.HAND_BOTTOM || bEnd)) {
  123. var wProViewID = GameDef.g_GameEngine.SwitchViewChairID(obj.wProvideUser);
  124. if (wWeaveKind == GameDef.WIK_LEFT || wWeaveKind == GameDef.WIK_PENG) {
  125. this.m_CardArray[0].SetProvide(wProViewID);
  126. }
  127. if (wWeaveKind == GameDef.WIK_RIGHT) {
  128. this.m_CardArray[2].SetProvide(wProViewID);
  129. }
  130. if (wWeaveKind == GameDef.WIK_CENTER) {
  131. this.m_CardArray[1].SetProvide(wProViewID);
  132. }
  133. if (wWeaveKind == GameDef.WIK_CAI_ZFB) {
  134. this.m_CardArray[cbCardData - 0x35].SetProvide(wProViewID);
  135. }
  136. if (wWeaveKind == GameDef.WIK_GANG) {
  137. this.m_CardArray[3].SetProvide(wProViewID);
  138. }
  139. }
  140. },
  141. __setWeaveState: function (state) {
  142. //普通杠牌,1张牌摞起来,全部显示
  143. if (state == GameDef.GANG_THREE_SHOW) {
  144. for (var i = 0; i < 4; i++) {
  145. this.m_CardArray[i].SetState(GameDef.HAND_STATE_SHOW);
  146. }
  147. }
  148. else if (state == GameDef.GAME_THREE_BACK) {
  149. for (var i = 0; i < 4; i++) {
  150. this.m_CardArray[i].SetState(GameDef.HAND_STATE_SHOW_BACK);
  151. }
  152. }
  153. else if (state == GameDef.GAME_THREE_BACK_SELF) {
  154. for (var i = 0; i < 4; i++) {
  155. this.m_CardArray[i].SetState(GameDef.HAND_STATE_SHOW_BACK);
  156. }
  157. this.m_CardArray[3].SetState(GameDef.HAND_STATE_SHOW);
  158. }
  159. },
  160. // update (dt) {},
  161. });