Task.ts 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. // Learn TypeScript:
  2. // - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
  3. // Learn Attribute:
  4. // - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
  5. // Learn life-cycle callbacks:
  6. // - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
  7. import GameM, { AUDIO_TYPE } from "../manager/GameM";
  8. import TaskItem from "../prefabs/TaskItem";
  9. import UiM, { PANEL_NAME } from "../manager/UiM";
  10. import Main from "../Main";
  11. import AdM from "../manager/AdM";
  12. import EffectNode from "./EffectNode";
  13. import { MONEY_TYPE } from "../datas/CommonData";
  14. import Gift from "./Gift";
  15. import PoolMgr, { NODEPOOLPREFABTYPE } from "../manager/PoolMgr";
  16. import DailyCashProAdd from "../prefabs/DailyCashProAdd";
  17. import { STORAGE_KEY } from "../datas/GlobalStorage";
  18. import Guide from "./Guide";
  19. import GuideMng from "../manager/GuideMng";
  20. import UIMng, { PanelType } from "../uiFrames/UIMng";
  21. import { RichData } from "../datas/RichData";
  22. import { GameController } from "../manager/GameController";
  23. import MyExtends from "../tools/MyExtends";
  24. import { Utils } from "../utils/Utils";
  25. const { ccclass, property } = cc._decorator;
  26. @ccclass
  27. export default class Task extends cc.Component {
  28. @property(cc.Node)
  29. dailySel: cc.Node = null;
  30. @property(cc.Node)
  31. achieveSel: cc.Node = null;
  32. @property(cc.Node)
  33. contentDaily: cc.Node = null;
  34. @property(cc.Node)
  35. contentAchieve: cc.Node = null;
  36. @property(cc.Node)
  37. scDaily: cc.Node = null;
  38. @property(cc.Node)
  39. scAchieve: cc.Node = null;
  40. @property(cc.Node)
  41. dailyRed: cc.Node = null;
  42. @property(cc.Node)
  43. achieveRed: cc.Node = null;
  44. @property(cc.Node)
  45. dailyAward: cc.Node = null;
  46. @property(cc.Sprite)
  47. proActive: cc.Sprite = null;
  48. @property(cc.Label)
  49. labActiveNum: cc.Label = null;
  50. @property(cc.Node)
  51. box: cc.Node = null;
  52. @property(cc.Label)
  53. labDice: cc.Label = null;
  54. @property(cc.Node)
  55. richBtn: cc.Node = null;
  56. // LIFE-CYCLE CALLBACKS:
  57. // onLoad () {}
  58. index = 0
  59. curActive = 0
  60. /** 活跃奖励配置 */
  61. awardCfg = null
  62. /** tween数组 */
  63. tweenArr = []
  64. /** 本次增加活跃值 */
  65. addPoint = 0
  66. private hasInit = false
  67. onLoad() {
  68. this.richBtn.active = RichData.Ins.richCfg.richmanopen == 1;
  69. }
  70. onEnable() {
  71. this.index = 0
  72. this.dailySel.active = true
  73. this.achieveSel.active = false
  74. this.scDaily.active = true
  75. this.scAchieve.active = false
  76. this.dailyAward.active = false
  77. this.freshState()
  78. if (GameM.commonData.taskGuide == 0) {
  79. GameM.commonData.taskGuide = 1
  80. GameM.globalStorage.setStorage(STORAGE_KEY.taskGuide, GameM.commonData.taskGuide)
  81. // UiM.Instance.guideNode.getComponent(Guide).showTask2()
  82. }
  83. //日常任务引导
  84. this.scheduleOnce(() => {
  85. GuideMng.Ins.CheckTaskGuide8()
  86. }, 0.6)
  87. this.freshDice()
  88. }
  89. onDisable() {
  90. AdM.createInter(8);
  91. this.unschedule(this.onProAdd)
  92. }
  93. freshState() {
  94. GameM.commonData.taskRedNum = 0
  95. GameM.commonData.dailyTaskRedNum = 0
  96. GameM.commonData.achieveTaskRedNum = 0
  97. if (this.hasInit) {
  98. let cfg = GameM.commonData.achieveCft
  99. let item
  100. let s
  101. let keys = Object.keys(GameM.commonData.achieveCft)
  102. for (var i = 0; i < keys.length; i++) {
  103. let finish = GameM.commonData.getAchieveGetData(Number(keys[i]))
  104. if (finish < cfg[keys[i]].length) {
  105. item = this.contentAchieve.getChildByName(keys[i])
  106. s = item.getComponent(TaskItem)
  107. s.init(1, Number(keys[i]), cfg[keys[i]][finish])
  108. s.updateSibling()
  109. }
  110. }
  111. cfg = GameM.commonData.taskCft
  112. keys = Object.keys(GameM.commonData.taskCft)
  113. for (var i = 0; i < keys.length; i++) {
  114. let finish = GameM.commonData.getDailyGetData(Number(keys[i]))
  115. if (finish < cfg[keys[i]].length) {
  116. item = this.contentDaily.getChildByName(keys[i])
  117. s = item.getComponent(TaskItem)
  118. s.init(0, Number(keys[i]), cfg[keys[i]][finish])
  119. s.updateSibling()
  120. }
  121. }
  122. this.freshActive()
  123. UiM.Instance.hallNode.getComponent(Main).checkTaskRed()
  124. }
  125. }
  126. async init() {
  127. //成就
  128. let keys = Object.keys(GameM.commonData.achieveCft)
  129. let cfg = GameM.commonData.achieveCft
  130. let pre = await Utils.loadResPromise('prefabs/TaskItem')
  131. let item
  132. let s
  133. for (var i = 0; i < keys.length; i++) {
  134. item = cc.instantiate(pre)
  135. item.name = keys[i]
  136. s = item.getComponent(TaskItem)
  137. let finish = GameM.commonData.getAchieveGetData(Number(keys[i]))
  138. if (finish < cfg[keys[i]].length) {
  139. s.init(1, Number(keys[i]), cfg[keys[i]][finish])
  140. this.contentAchieve.addChild(item)
  141. }
  142. }
  143. //每日任务
  144. cfg = GameM.commonData.taskCft
  145. keys = Object.keys(GameM.commonData.taskCft)
  146. //console.log("cfg:",cfg)
  147. //console.log("cfgkeys:",keys)
  148. for (var i = 0; i < keys.length; i++) {
  149. item = cc.instantiate(pre)
  150. item.name = keys[i]
  151. s = item.getComponent(TaskItem)
  152. let finish = GameM.commonData.getDailyGetData(Number(keys[i]))
  153. if (finish < cfg[keys[i]].length) {
  154. s.init(0, Number(keys[i]), cfg[keys[i]][finish])
  155. this.contentDaily.addChild(item)
  156. }
  157. else {
  158. s.init(0, Number(keys[i]), cfg[keys[i]][cfg[keys[i]].length - 1])
  159. this.contentDaily.addChild(item)
  160. }
  161. }
  162. this.freshActive()
  163. UiM.Instance.hallNode.getComponent(Main).checkTaskRed()
  164. this.hasInit = true
  165. }
  166. freshRed() {
  167. if (GameM.commonData.dailyTaskRedNum > 0) {
  168. this.dailyRed.active = true
  169. }
  170. else {
  171. this.dailyRed.active = false
  172. }
  173. if (GameM.commonData.achieveTaskRedNum > 0) {
  174. this.achieveRed.active = true
  175. }
  176. else {
  177. this.achieveRed.active = false
  178. }
  179. }
  180. start() {
  181. }
  182. async freshActive() {
  183. this.awardCfg = GameM.commonData.taskAwardCft
  184. this.labActiveNum.string = GameM.commonData.roleData.activeNum.toString()
  185. this.curActive = GameM.commonData.roleData.activeNum
  186. this.proActive.fillRange = GameM.commonData.roleData.activeNum / this.awardCfg[this.awardCfg.length - 1].point
  187. for (var i = 0; i < this.box.childrenCount; i++) {
  188. let b = this.box.getChildByName(`box${i + 1}`)
  189. b.getComponentInChildren(cc.Label).string = this.awardCfg[i].point.toString()
  190. // b.x = this.proActive.totalLength * this.awardCfg[i].point / this.awardCfg[this.awardCfg.length - 1].point
  191. let sp = b.getChildByName('iconCan').getComponent(cc.Sprite)
  192. let lab = b.getChildByName('labNum')
  193. let str = ''
  194. let qipao = b.getChildByName('qipao')
  195. let tip = qipao.getChildByName('labTip').getComponent(cc.Label)
  196. tip.string = this.awardCfg[i].tip
  197. if (this.awardCfg[i].type instanceof Array) {
  198. let curLevelCfg = null
  199. for (var j = 0; j < this.awardCfg[i].type.length; j++) {
  200. if (GameM.commonData.maxCarLevel <= this.awardCfg[i].type[j].level) {
  201. curLevelCfg = this.awardCfg[i].type[j]
  202. break
  203. }
  204. }
  205. //已领取汽车奖励不会再变
  206. if (GameM.commonData.roleData.activeGet[i] != 0) {
  207. str = 'carPic/side/side_' + GameM.commonData.roleData.activeGet[i]
  208. }
  209. else {
  210. str = 'carPic/side/side_' + curLevelCfg.min
  211. }
  212. sp.spriteFrame = null
  213. cc.loader.loadRes(str, cc.SpriteFrame, (err, assets) => {
  214. if (err) {
  215. cc.error(err);
  216. return;
  217. }
  218. sp.spriteFrame = assets;
  219. // sp.node.scale = 0.4
  220. })
  221. if (curLevelCfg.light == 1) {
  222. sp.node.color = cc.Color.WHITE
  223. }
  224. else {
  225. sp.node.color = cc.color(45, 45, 45, 255)
  226. }
  227. lab.getComponent(cc.Label).string = curLevelCfg.show
  228. }
  229. else {
  230. sp.node.scale = 1
  231. sp.node.color = cc.Color.WHITE
  232. let awardName = ''
  233. switch (this.awardCfg[i].type) {
  234. case MONEY_TYPE.speedCard:
  235. str = 'gift/iconJiasuka'
  236. awardName = '加速券'
  237. //sp.node.scale = 0.65
  238. sp.node.scale = 0.9
  239. break
  240. case MONEY_TYPE.turnTableCard:
  241. str = 'gift/iconZhuanpanka'
  242. sp.node.scale = 0.9
  243. awardName = '转盘卡'
  244. break
  245. case MONEY_TYPE.treasureCard:
  246. str = 'gift/iconDuobaoquan'
  247. awardName = '夺宝券'
  248. sp.node.scale = 0.9
  249. break
  250. case MONEY_TYPE.redMoney:
  251. str = 'gift/redMoney'
  252. awardName = '红包币'
  253. sp.node.scale = 0.9
  254. break
  255. }
  256. sp.spriteFrame = await Utils.loadResPromise(str, cc.SpriteFrame)
  257. lab.getComponent(cc.Label).string = `${awardName} * ${this.awardCfg[i].num}`
  258. }
  259. if (GameM.commonData.roleData.activeNum >= this.awardCfg[i].point) {
  260. if (GameM.commonData.roleData.activeGet[i] != 0) {
  261. b.getChildByName('iconGet').active = true
  262. lab.active = false
  263. if (this.tweenArr[i]) {
  264. this.tweenArr[i].stop()
  265. }
  266. sp.node.angle = 0
  267. }
  268. else {
  269. b.getChildByName('iconGet').active = false
  270. lab.active = true
  271. if (!this.tweenArr[i]) {
  272. let curScale = sp.node.scale
  273. let tween = cc.tween(sp.node)
  274. .to(0.2, { angle: 15, scale: curScale * 1.2 })
  275. .to(0.4, { angle: -15, scale: curScale * 1 })
  276. .to(0.4, { angle: 15, scale: curScale * 1.2 })
  277. .to(0.2, { angle: 0, scale: curScale * 1 })
  278. .delay(2)
  279. .union()
  280. .repeatForever()
  281. .start()
  282. this.tweenArr[i] = tween
  283. }
  284. GameM.commonData.taskRedNum++
  285. }
  286. }
  287. else {
  288. b.getChildByName('iconGet').active = false
  289. lab.active = true
  290. if (this.tweenArr[i]) {
  291. this.tweenArr[i].stop()
  292. }
  293. sp.node.angle = 0
  294. }
  295. }
  296. }
  297. clickGetBox(evt) {
  298. GameM.audioM.playEffect(AUDIO_TYPE.button)
  299. let qipao = evt.target.getChildByName('qipao')
  300. qipao.active = true
  301. this.scheduleOnce(() => {
  302. qipao.active = false
  303. }, 2)
  304. switch (evt.target.name) {
  305. case 'box1':
  306. this.getAwardByType(0, evt.target)
  307. break
  308. case 'box2':
  309. this.getAwardByType(1, evt.target)
  310. break
  311. case 'box3':
  312. this.getAwardByType(2, evt.target)
  313. break
  314. }
  315. }
  316. getAwardByType(index, target) {
  317. let curCfg = this.awardCfg[index]
  318. if (GameM.commonData.roleData.activeNum >= curCfg.point) {
  319. if (GameM.commonData.roleData.activeGet[index] == 0) {
  320. if (curCfg.type instanceof Array) {
  321. if (UiM.Instance.hallNode.getComponent(Main).getEmptySpace() == '') {
  322. EffectNode.instance.PlayTip("位置已满,请空出位置再领");
  323. return
  324. }
  325. let carlevel = 0
  326. let curLevelCfg = null
  327. for (var j = 0; j < curCfg.type.length; j++) {
  328. if (GameM.commonData.maxCarLevel <= curCfg.type[j].level) {
  329. curLevelCfg = curCfg.type[j]
  330. break
  331. }
  332. }
  333. if (curLevelCfg.light == 1) {
  334. carlevel = curLevelCfg.min
  335. }
  336. else {
  337. carlevel = Math.max(curLevelCfg.min, GameM.commonData.maxCarLevel - curLevelCfg.fix)
  338. }
  339. GameM.commonData.roleData.activeGet[index] = carlevel
  340. UiM.Instance.hallNode.getComponent(Main).getTaskAwardCar(carlevel)
  341. }
  342. else {
  343. GameM.commonData.roleData.activeGet[index] = 1
  344. UiM.Instance.giftNode.active = true
  345. UiM.Instance.giftNode.x = 0
  346. let gift = UiM.Instance.giftNode.getComponent(Gift)
  347. gift.init(curCfg.type, String(curCfg.num), null, false, 0)
  348. }
  349. AdM.onSendEvent(`TaskAward${index + 1}`, `活跃第${index + 1}档奖励领取`, 'TaskAward')
  350. target.getChildByName('iconGet').active = true
  351. target.getChildByName('labNum').active = false
  352. GameM.commonData.taskRedNum--
  353. if (this.tweenArr[index]) {
  354. this.tweenArr[index].stop()
  355. }
  356. GameM.commonData.updateRoleData()
  357. }
  358. else {
  359. EffectNode.instance.PlayTip('奖励已领取')
  360. }
  361. } else {
  362. EffectNode.instance.PlayTip('活力值不足')
  363. }
  364. }
  365. /** 增加活跃动画 */
  366. addActiveNum(num) {
  367. this.addPoint = num
  368. let addGold = PoolMgr.Inst.getPoolPrefab(NODEPOOLPREFABTYPE.DailyCashProAdd);
  369. addGold.getComponent(DailyCashProAdd).init(`+${this.addPoint}`);
  370. this.labActiveNum.node.addChild(addGold);
  371. if (this.curActive < GameM.commonData.roleData.activeNum) {
  372. this.schedule(this.onProAdd, 0.03)
  373. }
  374. }
  375. onProAdd() {
  376. if (this.curActive < GameM.commonData.roleData.activeNum) {
  377. this.curActive++
  378. this.labActiveNum.string = this.curActive.toString()
  379. this.proActive.fillRange = this.curActive / this.awardCfg[this.awardCfg.length - 1].point
  380. }
  381. else {
  382. this.unschedule(this.onProAdd)
  383. this.freshState()
  384. }
  385. }
  386. /** 刷新骰子个数 */
  387. freshDice() {
  388. this.labDice.string = RichData.Ins.diceTotalNum.toString()
  389. }
  390. /** 前去取经 */
  391. clickRichMan() {
  392. GameM.audioM.playEffect(AUDIO_TYPE.button)
  393. AdM.onSendEvent(`gotoRichMan`, `前往取经`, 'task')
  394. UIMng.Ins.AsyncGetPanel(PanelType.RichPanel, (panel) => {
  395. panel.OnEnter();
  396. });
  397. //UIMng.Ins.GetPanel(PanelType.RichPanel).OnEnter();
  398. this.node.active = false
  399. }
  400. clickDaily() {
  401. GameM.audioM.playEffect(AUDIO_TYPE.button)
  402. this.dailySel.active = true
  403. this.achieveSel.active = false
  404. this.scDaily.active = true
  405. this.dailyAward.active = true
  406. this.scAchieve.active = false
  407. this.index = 0
  408. }
  409. clickAchieve() {
  410. GameM.audioM.playEffect(AUDIO_TYPE.button)
  411. this.dailySel.active = false
  412. this.achieveSel.active = true
  413. this.scDaily.active = false
  414. this.dailyAward.active = false
  415. this.scAchieve.active = true
  416. this.index = 1
  417. }
  418. clickClose() {
  419. GameM.audioM.playEffect(AUDIO_TYPE.button)
  420. this.node.active = false
  421. }
  422. // update (dt) {}
  423. /**播放获取骰子动画*/
  424. PlayDiceEft() {
  425. //let eft = new cc.Node("eft");
  426. //let eftimg = eft.addComponent(cc.Sprite);
  427. //cc.loader.loadRes("xiyou/icon/reward30001" , cc.SpriteFrame, (error, assets) => {
  428. // if (error != null) {
  429. // return;
  430. // }
  431. // eftimg.spriteFrame = assets;
  432. //});
  433. //eft.parent = GameController.Ins.Canvas;
  434. let endPos = MyExtends.convetOtherNodeSpaceAR(this.labDice.node, GameController.Ins.Canvas);
  435. //eft.setPosition(startpos);
  436. //cc.tween(eft)
  437. // .to(0.5, { position: endPos })
  438. // .delay(0.3)
  439. // .call(() => {
  440. // eft.destroy();
  441. //
  442. // this.freshDice();
  443. // })
  444. // .start();
  445. EffectNode.instance.PlayCoinAnim(6, 6, cc.v2(0, -300), true, endPos);
  446. setTimeout(() => {
  447. this.labDice.node.runAction(cc.sequence(cc.scaleTo(0.15, 1.1), cc.scaleTo(0.15, 1)));
  448. this.freshDice();
  449. }, 1000);
  450. console.log("------------------PlayDiceEft");
  451. GameM.audioM.playEffect(AUDIO_TYPE.sutraitemfly);
  452. }
  453. }