levelManager.ts 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690
  1. import { Component, instantiate, Node, Prefab, tween, Tween, Vec3 } from "cc";
  2. import { BaseLayer } from "../../common/BaseLayer";
  3. import { cocosUtil } from "../../utils/cocosUtil";
  4. import { utilTools } from "../../utils/utilTools";
  5. import { constants } from "../data/constants";
  6. import { localText } from "../data/localText";
  7. import { msgac } from "../data/msgac";
  8. import { RoleItem } from "../item/RoleItem";
  9. import { playerModel } from "../model/playerModel";
  10. import { audioManager } from "./audioManager";
  11. import { designManager } from "./designManager";
  12. import { eventManager } from "./eventManager";
  13. import { resManager } from "./resManager";
  14. import { sdkManager } from "./sdkManager";
  15. import { skillManager } from "./skillManager";
  16. export class levelManager {
  17. private static _instance: levelManager;
  18. private constructor() { }
  19. public static get instance(): levelManager {
  20. if (!this._instance) {
  21. this._instance = new levelManager();
  22. }
  23. return this._instance;
  24. }
  25. // 关卡内容节点
  26. levelContentLayer: Node;
  27. levelLayerComponent: Component;
  28. // {floor层数:floorLayer节点}
  29. floorLayerObj: any = {};
  30. // 玩家对象
  31. playerRoleItem: RoleItem;
  32. // 当前正在打的关卡id
  33. level: number = 0;
  34. // 当前关卡是否有BOSS
  35. levelBoss: boolean = false;
  36. // BOSS宝箱是否已拾取
  37. bossBoxHasGet: boolean = false;
  38. // 关卡是否已胜利,并且弹出狩猎成功界面
  39. isSuccess: boolean = false;
  40. // 是否是跳关胜利
  41. isSkip: boolean = false;
  42. // 普通关卡的数量
  43. levelMax: number = 20;
  44. // 特殊关卡id数组
  45. levelEspIdArr: number[] = [-1, -2, -3, -4];
  46. // 商店广告增加金币数量
  47. shopAdCoin: number = 500;
  48. // 开局神秘商店最小关卡
  49. shopSecretLevelMin: number = 2;
  50. // 观看广告直接加的战力值
  51. levelAdAtkAddVal: number = 10;
  52. // 金币广告界面增加金币数量
  53. adCoinNum: number = 500;
  54. // 装备武器id
  55. equipWeaponId: number = 0;
  56. // 装备衣服id
  57. equipDressId: number = 0;
  58. // 行动之前的位置
  59. playerLastPos: Vec3;
  60. playerLastGround: Node;
  61. // 防止重复点击
  62. canClickGoOn: boolean = true;
  63. onClickRoleItem(clickRoleNode: Node) {
  64. if (this.playerRoleItem.bodySkeleton.animation != constants.animations.standBy) {
  65. return;
  66. }
  67. let playerNode = this.playerRoleItem.node;
  68. let clickRoleItem = clickRoleNode.getComponent(RoleItem);
  69. if (clickRoleItem.isPlayer()) {
  70. return;
  71. }
  72. if (!this.canClickGoOn) {
  73. return;
  74. }
  75. clickRoleItem.closeHand();
  76. if (clickRoleItem.hasAd()) {
  77. sdkManager.instance.openAd((st: number) => {
  78. if (st != 1) {
  79. return;
  80. }
  81. clickRoleItem.hideAd();
  82. this.onClickRoleItem(clickRoleNode);
  83. });
  84. return;
  85. }
  86. this.canClickGoOn = false;
  87. let posTarget = cocosUtil.convertToNodeSpace(playerNode, clickRoleItem.getPlayerWorldPos(playerNode));
  88. if (!this.isNeedPlayerMove(clickRoleItem)) {
  89. // 不用移动过去
  90. this.moveToClickRoleEnd(clickRoleNode);
  91. return;
  92. }
  93. this.playerLastPos = playerNode.getPosition();
  94. this.playerLastGround = this.playerRoleItem.groundNode;
  95. if (this.playerRoleItem.groundNode == clickRoleItem.groundNode) {
  96. // 同一个地板
  97. if (playerNode.position.x == posTarget.x && playerNode.position.y == posTarget.y) {
  98. // 已在目标位置上
  99. this.moveToClickRoleEnd(clickRoleNode);
  100. } else {
  101. // 移动过去
  102. if (playerNode.getPosition().x <= posTarget.x) {
  103. this.playerRoleItem.setBodyScale(constants.playerBodyScale, constants.playerBodyScale);
  104. } else {
  105. this.playerRoleItem.setBodyScale(-constants.playerBodyScale, constants.playerBodyScale);
  106. }
  107. this.playerRoleItem.playAnimation(constants.animations.walk, true);
  108. let time = Math.abs(playerNode.getPosition().x - posTarget.x) / constants.playerWalkSpeed;
  109. tween(playerNode).to(time, {
  110. position: posTarget
  111. }).call(() => {
  112. this.moveToClickRoleEnd(clickRoleNode);
  113. }).start();
  114. }
  115. return;
  116. }
  117. // 不同地板,闪现过去
  118. this.playerRoleItem.startOpenPortal(() => {
  119. let bodyNode = this.playerRoleItem.bodyNode;
  120. Tween.stopAllByTarget(bodyNode);
  121. if (clickRoleItem.isBodyScalePositive()) {
  122. bodyNode.setScale(constants.playerBodyScale, constants.playerBodyScale);
  123. } else {
  124. bodyNode.setScale(-constants.playerBodyScale, constants.playerBodyScale);
  125. }
  126. playerNode.setPosition(posTarget);
  127. this.playerRoleItem.playerAppearFromPortal(() => {
  128. this.moveToClickRoleEnd(clickRoleNode);
  129. });
  130. });
  131. }
  132. moveToClickRoleEnd(clickRoleNode: Node) {
  133. let playerNode = this.playerRoleItem.node;
  134. let clickRoleItem = clickRoleNode.getComponent(RoleItem);
  135. if (this.isNeedPlayerMove(clickRoleItem)) {
  136. this.playerRoleItem.floor = clickRoleItem.floor;
  137. this.playerRoleItem.groundNode = clickRoleItem.groundNode;
  138. }
  139. this.playerRoleItem.playAnimation(constants.animations.standBy, true);
  140. if (clickRoleItem.isBodyScalePositive()) {
  141. this.playerRoleItem.setBodyScale(constants.playerBodyScale, constants.playerBodyScale);
  142. } else {
  143. this.playerRoleItem.setBodyScale(-constants.playerBodyScale, constants.playerBodyScale);
  144. }
  145. if (clickRoleItem.roleType == constants.roleItemTypes.monster) {
  146. let obj: any = {};
  147. obj.monsterRoleItem = clickRoleItem;
  148. eventManager.instance.send(msgac.startFight, obj);
  149. return;
  150. }
  151. if (this.isNeedPlayerMove(clickRoleItem)) {
  152. // 镜头跟随
  153. eventManager.instance.send(msgac.adjustPlayerInCenter);
  154. }
  155. if (clickRoleItem.roleType == constants.roleItemTypes.coinBox) {
  156. // 金币宝箱
  157. clickRoleItem.openBoxAward(() => {
  158. this.canClickGoOn = true;
  159. clickRoleNode.destroy();
  160. let info: any = {};
  161. info.name = constants.layers.AwardGetLayer.name;
  162. info.coin = clickRoleItem.coin;
  163. info.isBoss = clickRoleItem.isBoss;
  164. info.isBox = true;
  165. eventManager.instance.send(msgac.openLayer, info);
  166. });
  167. return;
  168. }
  169. if (clickRoleItem.roleType == constants.roleItemTypes.shop) {
  170. // 商店
  171. this.canClickGoOn = true;
  172. clickRoleNode.destroy();
  173. let info: any = {};
  174. info.name = constants.layers.ShopLayer.name;
  175. info.type = clickRoleItem.roleTypeP1;
  176. info.id = clickRoleItem.roleTypeP2;
  177. eventManager.instance.send(msgac.openLayer, info);
  178. return;
  179. }
  180. if (clickRoleItem.roleType == constants.roleItemTypes.arrow) {
  181. // 弓箭
  182. clickRoleItem.playAnimation(constants.animations.animation, false);
  183. clickRoleItem.shootArrows(() => {
  184. this.canClickGoOn = true;
  185. });
  186. return;
  187. }
  188. if (clickRoleItem.roleType == constants.roleItemTypes.atk) {
  189. // 战力倍增
  190. this.canClickGoOn = true;
  191. clickRoleNode.destroy();
  192. let atkAddVal = 0;
  193. switch (clickRoleItem.roleTypeP1) {
  194. case constants.atkChangeTypes.add:
  195. atkAddVal = clickRoleItem.atk;
  196. break;
  197. case constants.atkChangeTypes.multi:
  198. atkAddVal = (clickRoleItem.atk - 1) * this.playerRoleItem.atk;
  199. break;
  200. default:
  201. break;
  202. }
  203. if (atkAddVal > 0) {
  204. this.playerRoleItem.addAtk(atkAddVal);
  205. }
  206. return;
  207. }
  208. if (clickRoleItem.roleType == constants.roleItemTypes.equip) {
  209. // 增加战力
  210. this.canClickGoOn = true;
  211. clickRoleNode.destroy();
  212. this.playerRoleItem.addAtk(clickRoleItem.atk);
  213. this.addEquip(clickRoleItem.getEquipId());
  214. return;
  215. }
  216. if (clickRoleItem.roleType == constants.roleItemTypes.skill) {
  217. // 获得技能
  218. this.canClickGoOn = true;
  219. clickRoleNode.destroy();
  220. playerModel.instance.addSkillNumById(clickRoleItem.roleTypeP1, clickRoleItem.atk);
  221. let info: any = {};
  222. info.skillId = clickRoleItem.roleTypeP1;
  223. info.num = clickRoleItem.atk;
  224. info.pos = cocosUtil.convertToWorldSpace(clickRoleNode);
  225. eventManager.instance.send(msgac.skillAdd, info);
  226. return;
  227. }
  228. if (clickRoleItem.roleType == constants.roleItemTypes.dapao) {
  229. // 大炮
  230. clickRoleItem.playAnimation(constants.animations.attack, false);
  231. clickRoleItem.shootBullets(() => {
  232. this.canClickGoOn = true;
  233. });
  234. return;
  235. }
  236. if (clickRoleItem.roleType == constants.roleItemTypes.gunshi) {
  237. // 滚石
  238. clickRoleItem.playAnimation(constants.animations.animation, true);
  239. clickRoleItem.startGunShi(() => {
  240. this.canClickGoOn = true;
  241. });
  242. return;
  243. }
  244. this.canClickGoOn = true;
  245. eventManager.instance.send(msgac.showNotice, "未实现的功能");
  246. }
  247. // 添加受击特效
  248. addHitEffect(node: Node) {
  249. let obj: any = {};
  250. obj.pos = cocosUtil.convertToWorldSpace(node, true);
  251. eventManager.instance.send(msgac.showHitEffect, obj);
  252. }
  253. // 判断一下如果敌人全部阵亡,则弹出狩猎成功的界面,只会弹一次
  254. judgeLevelSuccess() {
  255. if (this.isSuccess) {
  256. return;
  257. }
  258. for (let i in this.floorLayerObj) {
  259. let floorLayer = this.floorLayerObj[i];
  260. let arr = this.getAllMonsterByFloorLayer(floorLayer);
  261. for (let j in arr) {
  262. let roleItem = arr[j];
  263. if (!roleItem.isDead()) {
  264. // 还有怪物存活,直接返回还未通关
  265. return;
  266. }
  267. }
  268. }
  269. if (this.levelBoss && !this.bossBoxHasGet) {
  270. // 还未拾取BOSS宝箱
  271. return;
  272. }
  273. this.isSuccess = true;
  274. let obj: any = {};
  275. obj.name = constants.layers.GameContinueLayer.name;
  276. obj.nextLayerName = constants.layers.LevelSuccessLayer.name;
  277. eventManager.instance.send(msgac.openLayer, obj);
  278. }
  279. // 刷新玩家形象
  280. refreshPlayerBody() {
  281. this.playerRoleItem.bodySkeleton.setSkin(this.getSkinName(this.equipWeaponId, this.equipDressId));
  282. }
  283. getSkinName(weaponId: number, dressId: number) {
  284. let skinName = "";
  285. if (dressId > 0) {
  286. let dressRow = designManager.instance.getRowById(constants.tableName.equip, dressId);
  287. skinName = dressRow.skin;
  288. } else {
  289. skinName = "r1";
  290. }
  291. if (weaponId > 0) {
  292. let weaponRow = designManager.instance.getRowById(constants.tableName.equip, weaponId);
  293. skinName += weaponRow.skin;
  294. } else {
  295. skinName += "w1";
  296. }
  297. return skinName;
  298. }
  299. // 释放技能
  300. useSkillId(id: number, skillEffectLayer: Node, cb?: Function) {
  301. let skill = playerModel.instance.getSkillById(id);
  302. let row = designManager.instance.getRowById(constants.tableName.skill, id);
  303. if (skill.num <= 0 || !row) {
  304. if (cb) {
  305. cb();
  306. }
  307. return;
  308. }
  309. // 减少怪物战力
  310. let targetArr = [];
  311. let range = 2;
  312. let floorStart = this.playerRoleItem.floor - range;
  313. if (floorStart < 1) {
  314. floorStart = 1;
  315. }
  316. let floorEnd = this.playerRoleItem.floor + range;
  317. for (let i = floorStart; i <= floorEnd; i++) {
  318. let floorLayer = this.floorLayerObj[i];
  319. if (!floorLayer) {
  320. continue;
  321. }
  322. let arr = this.getAllMonsterByFloorLayer(floorLayer);
  323. targetArr = targetArr.concat(arr);
  324. }
  325. if (targetArr.length <= 0) {
  326. if (cb) {
  327. cb();
  328. }
  329. eventManager.instance.send(msgac.showNotice, localText.textObj.noMonster);
  330. return;
  331. }
  332. // 播放音效
  333. audioManager.instance.playEffect(row.sound);
  334. playerModel.instance.subSkillNumById(id);
  335. let tmpArr = [];
  336. if (row.target > 0) {
  337. let num = row.target;
  338. while (num > 0) {
  339. num--;
  340. let index = Math.floor(Math.random() * targetArr.length);
  341. tmpArr.push(targetArr[index]);
  342. targetArr.splice(index, 1);
  343. if (targetArr.length <= 0) {
  344. break;
  345. }
  346. }
  347. } else {
  348. tmpArr = targetArr;
  349. }
  350. // 统计玩家需要增加的战力
  351. let roleAtkAdd = 0;
  352. for (let i in tmpArr) {
  353. let roleItem = tmpArr[i];
  354. let add = row.atk;
  355. if (row.atk > roleItem.atk) {
  356. add = roleItem.atk;
  357. }
  358. roleAtkAdd += add;
  359. // 不同技能特效,位置和受击时间点不一样
  360. let pos = cocosUtil.convertToWorldSpace(roleItem.node);
  361. let delay = 0;
  362. switch (row.body) {
  363. case "yunshi":
  364. delay = 0.5;
  365. pos.y += 40;
  366. break;
  367. case "ljf":
  368. pos.y += 10;
  369. break;
  370. case "sd":
  371. pos.y += 40;
  372. break;
  373. default:
  374. break;
  375. }
  376. this.levelLayerComponent.scheduleOnce(() => {
  377. if (roleAtkAdd > 0) {
  378. this.addAtk(roleAtkAdd);
  379. roleAtkAdd = 0;
  380. }
  381. roleItem.addAtk(-row.atk);
  382. // 受击动画
  383. roleItem.playAnimation(constants.animations.hit, false, () => {
  384. roleItem.playAnimation(constants.animations.standBy, true);
  385. });
  386. }, delay);
  387. // 显示技能特效
  388. skillManager.instance.showSkillEffect(id, pos, skillEffectLayer, cb);
  389. }
  390. }
  391. // 跳过当前关卡
  392. levelSkip() {
  393. // 所有怪物播放死亡动画
  394. this.isSkip = true;
  395. let chs = this.levelContentLayer.children;
  396. for (let i in chs) {
  397. let floorLayer = chs[i];
  398. let arr = this.getAllMonsterByFloorLayer(floorLayer);
  399. for (let j in arr) {
  400. let roleItem = arr[j];
  401. roleItem.showDeadEffect();
  402. }
  403. }
  404. }
  405. getAllMonsterByFloorLayer(floorLayer: Node) {
  406. let arr = [];
  407. let groundNodeArr = floorLayer.children;
  408. for (let i in groundNodeArr) {
  409. let groundNode = groundNodeArr[i];
  410. let roles = groundNode.children;
  411. for (let tmp in roles) {
  412. let roleNode = roles[tmp];
  413. let roleItem = roleNode.getComponent(RoleItem);
  414. if (!roleItem || roleItem.roleType != constants.roleItemTypes.monster) {
  415. continue;
  416. }
  417. if (roleItem.isDead()) {
  418. continue;
  419. }
  420. arr.push(roleItem);
  421. }
  422. }
  423. return arr;
  424. }
  425. isNeedPlayerMove(clickRoleItem: RoleItem) {
  426. if (clickRoleItem.roleType == constants.roleItemTypes.arrow
  427. || clickRoleItem.roleType == constants.roleItemTypes.dapao
  428. || clickRoleItem.roleType == constants.roleItemTypes.gunshi
  429. ) {
  430. // 弓箭,大炮,滚石 不用移动过去
  431. return false;
  432. }
  433. return true;
  434. }
  435. /**
  436. * 获得装备
  437. * 低等级不要覆盖掉高等级装备皮肤
  438. * @param id 装备id
  439. */
  440. addEquip(id: number) {
  441. let row = designManager.instance.getRowById(constants.tableName.equip, id);
  442. let nowLv = 0;
  443. if (row.type == constants.equipTypes.weapon) {
  444. if (this.equipWeaponId > 0) {
  445. nowLv = designManager.instance.getRowById(constants.tableName.equip, this.equipWeaponId).lv;
  446. }
  447. if (row.lv > nowLv) {
  448. this.equipWeaponId = id;
  449. // 玩家形象变化
  450. this.refreshPlayerBody();
  451. }
  452. } else if (row.type == constants.equipTypes.dress) {
  453. if (this.equipDressId > 0) {
  454. nowLv = designManager.instance.getRowById(constants.tableName.equip, this.equipDressId).lv;
  455. }
  456. if (row.lv > nowLv) {
  457. this.equipDressId = id;
  458. // 玩家形象变化
  459. this.refreshPlayerBody();
  460. }
  461. }
  462. }
  463. // 玩家战力增加
  464. addAtk(val: number) {
  465. this.playerRoleItem.addAtk(val);
  466. }
  467. // 通关后要处理的数据
  468. levelSuccess() {
  469. if (!this.isLevelEsp()) {
  470. playerModel.instance.setLevel(this.level + 1);
  471. this.loadLevelNext();
  472. }
  473. }
  474. // 计算下一关卡,特殊关卡不作处理
  475. loadLevelNext() {
  476. if (this.isLevelEsp()) {
  477. return -1;
  478. }
  479. let next = this.level + 1;
  480. if (next > this.levelMax) {
  481. // 超过最大关卡数量,随机之前的老关卡
  482. if (next % 10 == 0) {
  483. // boss关卡
  484. let num = Math.floor(this.levelMax / 10);
  485. let random = Math.floor(Math.random() * num) + 1;
  486. next = random * 10;
  487. } else {
  488. // 普通关卡
  489. let arr = [];
  490. for (let i = 1; i <= this.levelMax; i++) {
  491. if (i % 10 == 0) {
  492. continue;
  493. }
  494. arr.push(i);
  495. }
  496. next = utilTools.getRandomItemByArr(arr);
  497. }
  498. console.log("load random next level:" + next);
  499. }
  500. console.log("load next level:" + next);
  501. playerModel.instance.setLevelAct(next);
  502. this.loadLevel(next);
  503. return next;
  504. }
  505. // 是否是特殊关卡
  506. isLevelEsp() {
  507. if (this.level < 0) {
  508. return true;
  509. }
  510. return false;
  511. }
  512. // 是否已打到最大关卡
  513. isLevelMax() {
  514. if (playerModel.instance.getLevel() >= this.levelMax) {
  515. return true;
  516. }
  517. return false;
  518. }
  519. /**
  520. * 获取通关后奖励金币数量
  521. * 每10关为boss关卡,奖励比较多
  522. * 特殊关卡奖励另算
  523. */
  524. getLevelSuccessCoin() {
  525. if (this.isLevelEsp()) {
  526. return 1000;
  527. }
  528. if (this.level % 10 == 0) {
  529. return 500;
  530. }
  531. return 200;
  532. }
  533. playerBackLife() {
  534. if (this.playerLastPos) {
  535. this.playerRoleItem.node.setPosition(this.playerLastPos);
  536. }
  537. if (this.playerLastGround) {
  538. this.playerRoleItem.groundNode = this.playerLastGround;
  539. }
  540. eventManager.instance.send(msgac.adjustPlayerInCenter);
  541. this.playerRoleItem.dead = false;
  542. this.playerRoleItem.playerAppearFromPortal(() => {
  543. this.playerRoleItem.playAnimation(constants.animations.standBy, true);
  544. });
  545. }
  546. loadLevel(level: number, onProgress?: Function, onComplete?: Function) {
  547. if (level > 0) {
  548. // 常规关卡
  549. if (level > this.levelMax) {
  550. level = playerModel.instance.getLevelAct();
  551. }
  552. }
  553. let path = constants.bundles.common.dir.level + "/" + constants.level + level;
  554. console.log("load level data:" + level);
  555. resManager.instance.loadAsset(constants.bundles.common.name, path, Prefab, onProgress, onComplete);
  556. }
  557. initLevelLayer(level: number, node: Node, levelLayer: BaseLayer) {
  558. this.levelLayerComponent = levelLayer;
  559. this.level = level;
  560. this.playerRoleItem = null;
  561. this.levelContentLayer = node;
  562. this.equipWeaponId = playerModel.instance.getEquipWeaponId();
  563. this.equipDressId = playerModel.instance.getEquipDressId();
  564. this.playerLastGround = null;
  565. this.playerLastPos = null;
  566. this.floorLayerObj = {};
  567. this.levelBoss = false;
  568. this.bossBoxHasGet = false;
  569. this.isSuccess = false;
  570. this.canClickGoOn = true;
  571. this.isSkip = false;
  572. let floorArr = node.children;
  573. let length = floorArr.length;
  574. let floor = 0;
  575. for (let i = length - 1; i >= 0; i--) {
  576. floor++;
  577. let floorLayer = floorArr[i];
  578. let groundNodeArr = floorLayer.children;
  579. this.floorLayerObj[floor] = floorLayer;
  580. for (let j in groundNodeArr) {
  581. let groundNode = groundNodeArr[j];
  582. let roles = groundNode.children;
  583. for (let tmp in roles) {
  584. let roleNode = roles[tmp];
  585. let roleItem = roleNode.getComponent(RoleItem);
  586. if (!roleItem) {
  587. continue;
  588. }
  589. if (roleItem.isPlayer()) {
  590. // 玩家
  591. this.playerRoleItem = roleItem;
  592. this.playerRoleItem.roleTypeP1 = playerModel.instance.getRoleId();
  593. // 暂时不管表里的配置,初始战力以关卡配置为准
  594. // let roleRow = designManager.instance.getRowById(constants.tableName.role, playerModel.instance.getRoleId());
  595. // this.playerRoleItem.atk = roleRow.atk;
  596. // this.playerRoleItem.setAtkVal(roleRow.atk);
  597. }
  598. roleItem.init(groundNode, floor, levelLayer);
  599. if (roleItem.roleType == constants.roleItemTypes.monster && roleItem.isBoss) {
  600. this.levelBoss = true;
  601. }
  602. }
  603. }
  604. }
  605. }
  606. initRolePlayer(parent: Node) {
  607. let pos = cocosUtil.convertToWorldSpace(this.playerRoleItem.node);
  608. this.playerRoleItem.node.parent = parent;
  609. pos = cocosUtil.convertToNodeSpace(this.playerRoleItem.node, pos);
  610. this.playerRoleItem.node.setPosition(pos);
  611. this.playerRoleItem.setAtkVal();
  612. this.refreshPlayerBody();
  613. }
  614. }