PrizeFly.ts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import { _decorator, Component, Node, SpriteFrame, find, Sprite, Vec3, UITransform, EventHandler } from 'cc';
  2. import { DataSystem } from '../core/data/DataSystem';
  3. import { ResourceLoader } from '../core/resourceManager/ResourceLoader';
  4. import { Sound } from '../core/sound/Sound';
  5. import { WindowSystem } from '../core/ui/window/WindowSystem';
  6. import { Utils } from '../core/utils/Utils';
  7. import { UserData } from '../data/UserData';
  8. import { LevelBonusData } from '../levelBonus/LevelBonusData';
  9. import { UserInfo } from '../main/UserInfo';
  10. import { Trajectory } from './Trajectory';
  11. const { ccclass, property, requireComponent } = _decorator;
  12. @ccclass('PrizeFly')
  13. @requireComponent(ResourceLoader)
  14. export class PrizeFly extends Component {
  15. @property({ tooltip: "飞行动画结束回调", type: EventHandler }) public tweenBack: EventHandler;
  16. @property({ tooltip: "粮草飞行节点", type: Node }) private money: Node;
  17. @property({ tooltip: "元宝飞行节点", type: Node }) private diamond: Node;
  18. @property({ tooltip: "元宝飞行节点点将台元宝", type: Node }) private diamondRecruit: Node;
  19. @property({ tooltip: "元宝飞行节点抽卡页元宝", type: Node }) private diamondRecruitGeneral: Node;
  20. @property({ tooltip: "红包币飞行节点", type: Node }) private bonus: Node;
  21. @property({ tooltip: "关卡红包飞行节点", type: Node }) private redBox: Node;
  22. @property({ tooltip: "威望石飞行节点", type: Node }) private prestige: Node;
  23. @property({ tooltip: "音效节点", type: Sound }) private sound: Sound;
  24. private backTimes = 6;
  25. private prizeNum = 0;//奖品数目
  26. private prizeType = 0;//奖品类型
  27. start() {
  28. }
  29. //窗口打开回调
  30. public async setData(data: { type: number, num: number, position: Vec3, isWorldPos: boolean }) {
  31. this.prizeNum = data.num;
  32. this.prizeType = data.type;
  33. let targetNode: Node = null;
  34. let iconType = 0;
  35. switch (this.prizeType) {
  36. case 1://粮草
  37. iconType = 3;
  38. targetNode = this.money;
  39. // targetNode = find("Canvas/界面层/底部布局/底部按钮/训练");
  40. break;
  41. case 2://元宝
  42. iconType = 6;
  43. targetNode = this.diamond;
  44. // targetNode = find("Canvas/界面层/点将按钮/当前元宝信息/元宝图标");
  45. break;
  46. case 3://红包币
  47. iconType = 1;
  48. targetNode = this.bonus;
  49. // targetNode = find("Canvas/界面层/玩家信息/红包币框/红包图标");
  50. break;
  51. case 4://关卡红包
  52. iconType = 9;
  53. targetNode = this.redBox;
  54. break
  55. case 5://元宝飞行节点点将台元宝
  56. iconType = 6;
  57. targetNode = this.diamondRecruit;
  58. break
  59. case 6://元宝飞行节点抽卡页元宝
  60. iconType = 6;
  61. targetNode = this.diamondRecruitGeneral;
  62. break
  63. case 7://威望石飞行节点
  64. iconType = 8;
  65. targetNode = this.prestige;
  66. break
  67. default:
  68. WindowSystem.close(this.node);
  69. return;
  70. }
  71. let img = await this.getComponent(ResourceLoader).load<SpriteFrame>("image/icons/icon" + iconType + "/spriteFrame", SpriteFrame);
  72. this.prizeType == 4 && (this.backTimes = 1);
  73. for (let i = 0; i < this.backTimes; i++) {
  74. let node = new Node();
  75. //附加图片组件
  76. node.addComponent(Sprite);
  77. node.getComponent(Sprite).spriteFrame = img;
  78. node.addComponent(Trajectory);
  79. if (data.position) {
  80. data.isWorldPos ? node.worldPosition = this.node.getComponent(UITransform).convertToNodeSpaceAR(data.position) : node.setPosition(data.position);
  81. } else {
  82. node.setPosition(new Vec3(0, 105, 0));
  83. }
  84. let trajectory = node.getComponent(Trajectory);
  85. trajectory.startPoint = node.position;
  86. trajectory.ctrl1Point = new Vec3(Utils.random_both(80, -80) + node.position.x, Utils.random_both(0, -200) + node.position.y);
  87. trajectory.ctrl2Point = new Vec3(Utils.random_both(50, -50) + node.position.x, Utils.random_both(100, -100) + node.position.y);
  88. trajectory.endPoint = this.node.getComponent(UITransform).convertToNodeSpaceAR(targetNode.getWorldPosition());
  89. trajectory.backFn = this.tweenBack;
  90. this.node.addChild(node);
  91. }
  92. this.prizeType != 4 && this.sound.play();
  93. }
  94. public backFn() {
  95. this.backTimes--;
  96. if (!this.backTimes) {
  97. this.prizeType == 4 && this.sound.play(1);
  98. WindowSystem.close(this.node);
  99. }
  100. }
  101. onDestroy() {
  102. switch (this.prizeType) {
  103. case 1://粮草
  104. DataSystem.getData(UserData).money += this.prizeNum;
  105. break;
  106. case 2://元宝
  107. DataSystem.getData(UserData).diamond += this.prizeNum;
  108. break;
  109. case 3://红包币
  110. DataSystem.getData(UserData).bonus += this.prizeNum;
  111. break;
  112. case 4:
  113. DataSystem.getData(LevelBonusData).showSaveTimes += this.prizeNum;
  114. break;
  115. case 5://元宝
  116. DataSystem.getData(UserData).diamond += this.prizeNum;
  117. break;
  118. case 6://元宝
  119. DataSystem.getData(UserData).diamond += this.prizeNum;
  120. break;
  121. case 7://威望石
  122. DataSystem.getData(UserData).prestige += this.prizeNum;
  123. break;
  124. }
  125. }
  126. }