UI_Skin.ts 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. import { _decorator, Component, Node } from 'cc';
  2. import { GameUILayers, gui } from 'db://assets/core/ui/ui';
  3. import ui_base from 'db://assets/core/ui/ui_base';
  4. import { ModuleDef } from 'db://assets/Script/ModuleDef';
  5. import { Layout_Skin } from './Layout_Skin';
  6. import { ch } from 'db://assets/ch/ch';
  7. import { UI_Main } from '../main/UI_Main';
  8. import { Role } from '../../game/tui/role/Role';
  9. import { LvData } from '../../game/LvData/LvData';
  10. import { ani_ui } from '../../game/animation_utils';
  11. import ch_audio from 'db://assets/ch/audio/audio';
  12. import { audioManager } from '../../Audio/AudioManager';
  13. const { ccclass, property } = _decorator;
  14. @ccclass('UI_Skin')
  15. export class UI_Skin extends ui_base {
  16. constructor() {
  17. super(ModuleDef.GAME, 'ui/UI_Skin/skinDlg', GameUILayers.HUD, Layout_Skin);
  18. }
  19. private stoneButtons: Node[] = [];
  20. private roleButtons: Node[] = [];
  21. private blockButtons: Node[] = [];
  22. protected onCreated() {
  23. ani_ui(this.node);
  24. const layout = this.getLayout<Layout_Skin>();
  25. //人物
  26. this.roleButtons = [
  27. layout.roleBtn1,
  28. layout.roleBtn2,
  29. layout.roleBtn3,
  30. layout.roleBtn4
  31. ];
  32. //石头
  33. this.stoneButtons = [
  34. layout.stoneBtn1,
  35. layout.stoneBtn2,
  36. layout.stoneBtn3,
  37. layout.stoneBtn4
  38. ];
  39. //方块
  40. this.blockButtons = [
  41. layout.blcokBtn1,
  42. layout.blcokBtn2,
  43. layout.blcokBtn3,
  44. layout.blcokBtn4
  45. ];
  46. this.onButtonEvent(layout.offBtn, () => {
  47. gui.close(UI_Skin);
  48. });
  49. this.onButtonEvent(layout.RS, () => {
  50. audioManager.playOneShot('sound/click_Btn');
  51. layout.roleSkin.active = true
  52. layout.blockBtn.active = false
  53. layout.stoneSkin.active = false
  54. });
  55. this.onButtonEvent(layout.SK, () => {
  56. audioManager.playOneShot('sound/click_Btn');
  57. layout.stoneSkin.active = true
  58. layout.roleSkin.active = false
  59. layout.blockBtn.active = false
  60. });
  61. this.onButtonEvent(layout.BS, () => {
  62. audioManager.playOneShot('sound/click_Btn');
  63. layout.blockBtn.active = true
  64. layout.roleSkin.active = false
  65. layout.stoneSkin.active = false
  66. });
  67. // 绑定事件
  68. this.onButtonEvent(layout.stoneBtn1, () => handleStoneButton(layout.stoneBtn1, 1, this.stoneButtons));
  69. this.onButtonEvent(layout.stoneBtn2, () => handleStoneButton(layout.stoneBtn2, 2, this.stoneButtons));
  70. this.onButtonEvent(layout.stoneBtn3, () => handleStoneButton(layout.stoneBtn3, 3, this.stoneButtons));
  71. this.onButtonEvent(layout.stoneBtn4, () => handleStoneButton(layout.stoneBtn4, 4, this.stoneButtons));
  72. // 统一
  73. const handleStoneButton = async (button: Node, skinId: number,
  74. buttons: Node[]) => {
  75. const seven = button.getChildByName('7');
  76. const yes = button.getChildByName('yes');
  77. if (!seven.active) {
  78. // 皮肤已解锁,直接选择
  79. this.stoneButtons.forEach(btn => {
  80. btn.getChildByName('yes').active = false;
  81. });
  82. yes.active = true;
  83. LvData.instance.stpf = skinId;
  84. console.log('石头皮肤' + LvData.instance.stpf)
  85. return;
  86. }
  87. if (seven.active) {
  88. // 皮肤未解锁,观看广告解锁
  89. const res = await chsdk.playRewardAd(`获得stone${skinId}皮肤`);
  90. if (res) {
  91. LvData.instance.unlockStoneSkin(skinId);
  92. // 解锁皮肤并选择
  93. this.stoneButtons.forEach(btn => {
  94. btn.getChildByName('yes').active = false;
  95. });
  96. seven.active = false;
  97. yes.active = true;
  98. LvData.instance.stpf = skinId;
  99. console.log('石头皮肤解锁并选择' + LvData.instance.stpf)
  100. }
  101. }
  102. };
  103. // 绑定事件
  104. this.onButtonEvent(layout.roleBtn1, () => handleRoleButton(layout.roleBtn1, 1, this.roleButtons));
  105. this.onButtonEvent(layout.roleBtn2, () => handleRoleButton(layout.roleBtn2, 2, this.roleButtons));
  106. this.onButtonEvent(layout.roleBtn3, () => handleRoleButton(layout.roleBtn3, 3, this.roleButtons));
  107. this.onButtonEvent(layout.roleBtn4, () => handleRoleButton(layout.roleBtn4, 4, this.roleButtons));
  108. // 统一
  109. const handleRoleButton = async (button: Node, skinId: number,
  110. buttons: Node[]) => {
  111. const seven = button.getChildByName('7');
  112. const yes = button.getChildByName('yes');
  113. if (!seven.active) {
  114. // 确保只选中一个
  115. this.roleButtons.forEach(btn => {
  116. btn.getChildByName('yes').active = false;
  117. });
  118. yes.active = true;
  119. LvData.instance.rwpf = skinId;
  120. console.log('人物皮肤' + LvData.instance.rwpf);
  121. return;
  122. }
  123. if (seven.active) {
  124. const res = await chsdk.playRewardAd(`获得role${skinId}皮肤`);
  125. if (res) {
  126. LvData.instance.unlockRoleSkin(skinId);
  127. // 先关闭所有yes
  128. this.roleButtons.forEach(btn => {
  129. btn.getChildByName('yes').active = false;
  130. });
  131. // 再开启当前yes
  132. seven.active = false;
  133. yes.active = true;
  134. LvData.instance.rwpf = skinId;
  135. console.log('人物皮肤解锁并选择' + LvData.instance.rwpf);
  136. }
  137. }
  138. };
  139. // 绑定事件
  140. this.onButtonEvent(layout.blcokBtn1, () => handleBlcokButton(layout.blcokBtn1, 1, this.blockButtons));
  141. this.onButtonEvent(layout.blcokBtn2, () => handleBlcokButton(layout.blcokBtn2, 2, this.blockButtons));
  142. this.onButtonEvent(layout.blcokBtn3, () => handleBlcokButton(layout.blcokBtn3, 3, this.blockButtons));
  143. this.onButtonEvent(layout.blcokBtn4, () => handleBlcokButton(layout.blcokBtn4, 4, this.blockButtons));
  144. // 统一
  145. const handleBlcokButton = async (button: Node, skinId: number,
  146. buttons: Node[]) => {
  147. const seven = button.getChildByName('7');
  148. const yes = button.getChildByName('yes');
  149. if (!seven.active) {
  150. // 确保只选中一个
  151. this.blockButtons.forEach(btn => {
  152. btn.getChildByName('yes').active = false;
  153. });
  154. yes.active = true;
  155. LvData.instance.fkpf = skinId;
  156. console.log('方块皮肤' + LvData.instance.fkpf);
  157. return;
  158. }
  159. if (seven.active) {
  160. const res = await chsdk.playRewardAd(`获得block${skinId}皮肤`);
  161. if (res) {
  162. LvData.instance.unlockBlockSkin(skinId);
  163. // 先关闭所有yes
  164. this.blockButtons.forEach(btn => {
  165. btn.getChildByName('yes').active = false;
  166. });
  167. // 再开启当前yes
  168. seven.active = false;
  169. yes.active = true;
  170. LvData.instance.fkpf = skinId;
  171. console.log('方块皮肤解锁并选择' + LvData.instance.fkpf);
  172. }
  173. }
  174. };
  175. this.initSkinButtons();
  176. }
  177. private initSkinButtons() {
  178. // 初始化石头按钮
  179. this.stoneButtons.forEach((btn, index) => {
  180. const skinId = index + 1;
  181. const isSelected = skinId === LvData.instance.stpf;
  182. // 使用新的方法检查皮肤是否已解锁
  183. const isUnlocked = LvData.instance.isStoneSkinUnlocked(skinId);
  184. btn.getChildByName('yes').active = isSelected;
  185. btn.getChildByName('7').active = !isUnlocked;
  186. });
  187. // 初始化角色按钮
  188. this.roleButtons.forEach((btn, index) => {
  189. const skinId = index + 1;
  190. const isSelected = skinId === LvData.instance.rwpf;
  191. // 使用新的方法检查皮肤是否已解锁
  192. const isUnlocked = LvData.instance.isRoleSkinUnlocked(skinId);
  193. btn.getChildByName('yes').active = isSelected;
  194. btn.getChildByName('7').active = !isUnlocked;
  195. });
  196. // 初始化方块按钮
  197. this.blockButtons.forEach((btn, index) => {
  198. const skinId = index + 1;
  199. const isSelected = skinId === LvData.instance.fkpf;
  200. // 使用新的方法检查皮肤是否已解锁
  201. const isUnlocked = LvData.instance.isBlockSkinUnlocked(skinId);
  202. btn.getChildByName('yes').active = isSelected;
  203. btn.getChildByName('7').active = !isUnlocked;
  204. });
  205. }
  206. }