123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526 |
- import { find, instantiate, macro, Node, ScrollView, sp, Sprite, tween, Tween, UITransform, v2, _decorator } from 'cc';
- import { BaseLayer } from '../../common/BaseLayer';
- import { cocosUtil } from '../../utils/cocosUtil';
- import { utilTools } from '../../utils/utilTools';
- import { constants } from '../data/constants';
- import { msgac } from '../data/msgac';
- import { ItemLayer } from '../item/ItemLayer';
- import { designManager } from '../manager/designManager';
- import { eventManager } from '../manager/eventManager';
- import { iconManager } from '../manager/iconManager';
- import { levelManager } from '../manager/levelManager';
- import { sdkManager } from '../manager/sdkManager';
- import { playerModel } from '../model/playerModel';
- import { FlutterEffect } from './effect/FlutterEffect';
- import { ReelEffect } from './effect/ReelEffect';
- import { FightLayer } from './FightLayer';
- const { ccclass, property } = _decorator;
- @ccclass('LevelLayer')
- export class LevelLayer extends BaseLayer {
- listScrollView: ScrollView;
- listContentLayer: Node;
- levelLayer: Node;
- playerLayer: Node;
- skillEffectLayer: Node;
- hitEffectLayer: Node;
- btnAdAtk: Node;
- btnSkip: Node;
- levelNode: Node;
- level: number;
- handNode: Node;
- skillLayer: Node;
- fightLayer: Node;
- cloundLayer1: Node;
- cloundLayer2: Node;
- onLoad() {
- super.onLoad();
- this.getNodeByPath("cloundLayer").addComponent(FlutterEffect);
- this.getNodeByPath("moutainLayer").addComponent(ReelEffect);
- this.cloundLayer1 = this.getNodeByPath("list/view/content/cloundLayer1");
- this.cloundLayer1.addComponent(FlutterEffect).speed = 70;
- this.cloundLayer2 = this.getNodeByPath("list/view/content/cloundLayer2");
- this.cloundLayer2.addComponent(FlutterEffect).speed = 80;
- this.levelNode = this.getNodeByPath("level/level");
- this.btnAdAtk = this.getNodeByPath("btnAdAtk");
- this.btnSkip = this.getNodeByPath("btns/btnSkip");
- this.listScrollView = this.getNodeByPath("list").getComponent(ScrollView);
- this.listContentLayer = this.getNodeByPath("list/view/content");
- this.levelLayer = this.getNodeByPath("list/view/content/levelLayer");
- this.playerLayer = this.getNodeByPath("list/view/content/playerLayer");
- this.skillEffectLayer = this.getNodeByPath("list/view/content/skillEffectLayer");
- this.hitEffectLayer = this.getNodeByPath("hitEffectLayer");
- this.hitEffectLayer.addComponent(ItemLayer);
- this.skillLayer = this.getNodeByPath("skillLayer");
- this.skillLayer.addComponent(ItemLayer);
- this.fightLayer = this.getNodeByPath("fightLayer");
- this.fightLayer.addComponent(FightLayer);
- this.fightLayer.active = false;
- this.level = this.obj.level;
- this.initUI();
- }
- onEnable() {
- this.addEventArr([
- msgac.levelRestart,
- msgac.lifeBack,
- msgac.adjustPlayerInCenter,
- msgac.levelNext,
- msgac.levelEspSuccess,
- msgac.skillLayerRefresh,
- msgac.judgeLevelSuccess,
- msgac.showHitEffect,
- msgac.startFight,
- msgac.fightEnd,
- msgac.skillAdd,
- msgac.LevelLayerClose,
- ]);
- }
- onDisable() {
- this.removeEventArr([
- msgac.levelRestart,
- msgac.lifeBack,
- msgac.adjustPlayerInCenter,
- msgac.levelNext,
- msgac.levelEspSuccess,
- msgac.skillLayerRefresh,
- msgac.judgeLevelSuccess,
- msgac.showHitEffect,
- msgac.startFight,
- msgac.fightEnd,
- msgac.skillAdd,
- msgac.LevelLayerClose,
- ]);
- }
- initUI() {
- this.initEffect();
- this.initSkillLayer();
- this.schedule(() => {
- let arr = this.skillLayer.children;
- for (let i in arr) {
- let node = arr[i];
- Tween.stopAllByTarget(node);
- node.setRotationFromEuler(0, 0, 0);
- }
- let pNode = utilTools.getRandomItemByArr(arr);
- cocosUtil.tweenShake(pNode, 0.1, 0, 0);
- }, 0.4 * 5, macro.REPEAT_FOREVER, 0);
- this.loadLevelLayer();
- }
- initSkillLayer() {
- let arr = designManager.instance.getTable(constants.tableName.skill);
- let tmpArr = [];
- for (let i in arr) {
- let row = arr[i];
- if (this.level % 2 == 0) {
- if (row.id == 1 || row.id == 3) {
- tmpArr.push(row);
- }
- continue;
- }
- if (row.id == 2 || row.id == 4) {
- tmpArr.push(row);
- }
- }
- arr = tmpArr;
- this.skillLayer.getComponent(ItemLayer).initUI(this, arr, this.refreshSkillItem.bind(this));
- }
- refreshSkillItem(itemUI: Node, row: any) {
- let numNode = find("num", itemUI);
- let adNode = find("ad", itemUI);
- let iconNode = find("icon", itemUI);
- let skill = playerModel.instance.getSkillById(row.id);
- iconManager.instance.setSprite(iconNode, row.icon);
- if (skill.num > 0) {
- numNode.active = true;
- adNode.active = false;
- this.setString(numNode, "x" + skill.num);
- } else {
- numNode.active = false;
- adNode.active = true;
- }
- }
- initLocaltext() {
- this.setString(this.levelNode, this.level);
- }
- initEffect() {
- cocosUtil.tweenShake(this.btnAdAtk);
- cocosUtil.tweenShake(this.btnSkip);
- }
- loadLevelLayer() {
- this.initLocaltext();
- this.cloundLayer1.active = false;
- this.cloundLayer2.active = false;
- sdkManager.instance.sendEventLevelStart(this.level);
- levelManager.instance.loadLevel(this.level, () => { }, (err, prefab) => {
- // 关卡UI生成
- for (let i in this.levelLayer.children) {
- this.levelLayer.children[i].destroy();
- }
- let node = instantiate(prefab);
- node.parent = this.levelLayer;
- cocosUtil.setPositionY(node, 0);
- // 设置视图滚动高度
- let listContentTf = this.listContentLayer.getComponent(UITransform);
- let levelTf = node.getComponent(UITransform);
- listContentTf.height = levelTf.height;
- // 从UI中初始化关卡数据
- levelManager.instance.initLevelLayer(this.level, node, this);
- // 初始化玩家
- for (let i in this.playerLayer.children) {
- this.playerLayer.children[i].destroy();
- }
- levelManager.instance.initRolePlayer(this.playerLayer);
- this.listScrollView.scrollToBottom(1);
- // 新手引导
- this.refreshHandLayer();
- // 随机云位置
- this.initCloundLayer();
- this.initSkillLayer();
- });
- if (this.level >= levelManager.instance.shopSecretLevelMin) {
- // 弹出神秘商店
- let obj: any = {};
- obj.type = constants.shopTypes.secret;
- this.openLayer(constants.layers.ShopLayer, obj);
- }
- }
- initCloundLayer() {
- this.cloundLayer1.active = true;
- this.cloundLayer2.active = true;
- let height = this.listContentLayer.getComponent(UITransform).height;
- let gap = 200;
- let maxY = height - gap;
- let minY = gap;
- let midY = (minY + maxY) * 0.5;
- let posY = utilTools.getFloatValue(midY, maxY);
- let clound = this.cloundLayer1.children[0];
- let pos = clound.getPosition();
- pos.y = -posY;
- clound.setPosition(pos);
- posY = utilTools.getFloatValue(minY, midY);
- clound = this.cloundLayer2.children[0];
- pos = clound.getPosition();
- pos.y = -posY;
- clound.setPosition(pos);
- }
- refreshHandLayer() {
- if (this.level != 1 || playerModel.instance.getHandShow()) {
- return;
- }
- if (this.handNode) {
- this.removeHandLayer();
- }
- let floorLayer = levelManager.instance.floorLayerObj[1];
- let firstMonster = floorLayer.children[0].children[0];
- cocosUtil.addHand(firstMonster, this.node, (handNode) => {
- // 根据实际情况再进行微调
- let pos = handNode.getPosition();
- pos.x += 40;
- pos.y -= 10;
- handNode.setPosition(pos);
- handNode["attachNode"] = firstMonster;
- this.handNode = handNode;
- });
- }
- removeHandLayer() {
- this.handNode.destroy();
- this.handNode = null;
- }
- levelRestartRet(data: any) {
- this.loadLevelLayer();
- }
- lifeBackRet(data: any) {
- levelManager.instance.playerBackLife();
- }
- adjustPlayerInCenterRet(data: any) {
- let playerNode = levelManager.instance.playerRoleItem.node;
- let pos = cocosUtil.convertToWorldSpace(playerNode);
- pos = cocosUtil.convertToNodeSpace(this.playerLayer, pos);
- let maxOffset = this.listScrollView.getMaxScrollOffset();
- let playerNodeTf = playerNode.getComponent(UITransform);
- let dy = Math.abs(pos.y) - playerNodeTf.height * (1 - playerNodeTf.anchorY);
- let offsetY = dy - this.listScrollView.node.getComponent(UITransform).height * 0.5;
- if (offsetY < 0) {
- offsetY = 0;
- }
- if (offsetY > maxOffset.y) {
- offsetY = maxOffset.y;
- }
- let offset = this.listScrollView.getScrollOffset();
- if (Math.abs(offset.y - offsetY) <= 50) {
- // 微量移动位置,就不跟随了
- return;
- }
- this.listScrollView.scrollToOffset(v2(0, offsetY), 0.6);
- }
- levelNextRet(data) {
- this.level = playerModel.instance.getLevel();
- this.loadLevelLayer();
- }
- levelEspSuccessRet(data) {
- this.closeLayer();
- let obj: any = {};
- obj.openLevelEspSelectLayer = true;
- this.openLayer(constants.layers.StartLayer, obj);
- };
- skillLayerRefreshRet(data) {
- this.skillLayer.getComponent(ItemLayer).refreshUI();
- }
- judgeLevelSuccessRet(data) {
- levelManager.instance.judgeLevelSuccess();
- }
- showHitEffectRet(data: any) {
- this.hitEffectLayer.getComponent(ItemLayer).addItem(data, this.refreshEffectItem.bind(this));
- }
- refreshEffectItem(itemUI: Node, data: any) {
- let skeleton = itemUI.getComponent(sp.Skeleton);
- skeleton.setAnimation(0, "hit1", false);
- itemUI.setPosition(cocosUtil.convertToNodeSpace(itemUI, data.pos));
- skeleton.setEndListener(() => {
- this.hitEffectLayer.getComponent(ItemLayer).removeItemUIByItemUI(itemUI);
- });
- }
- startFightRet(data: any) {
- this.fightLayer.active = true;
- this.fightLayer.getComponent(FightLayer).loadFightData(data);
- if (this.handNode) {
- this.handNode.active = false;
- }
- }
- fightEndRet(data: any) {
- if (this.handNode) {
- this.handNode.active = true;
- }
- if (!data.isWin) {
- data.name = constants.layers.GameContinueLayer.name;
- data.nextLayerName = constants.layers.FightFailLayer.name;
- eventManager.instance.send(msgac.openLayer, data);
- }
- }
- skillAddRet(data: any) {
- let node = new Node();
- node.addComponent(Sprite);
- let row = designManager.instance.getRowById(constants.tableName.skill, data.skillId);
- iconManager.instance.setSprite(node, row.icon);
- node.parent = this.node;
- let pos = cocosUtil.convertToNodeSpace(node, data.pos);
- node.setPosition(pos);
- node.getComponent(UITransform).width = 100;
- node.getComponent(UITransform).height = 100;
- let itemnUI = this.skillLayer.getComponent(ItemLayer).idItemUIObj[row.id];
- let posTarget = cocosUtil.convertToWorldSpace(itemnUI);
- posTarget = cocosUtil.convertToNodeSpace(node, posTarget);
- tween(node).to(0.5, {
- position: posTarget
- }).call(() => {
- node.destroy();
- this.skillLayer.getComponent(ItemLayer).refreshItemUIById(row.id);
- }).start();
- }
- LevelLayerCloseRet(data: any) {
- this.closeLayer();
- }
- process_event(event: any) {
- let ac = event.ac;
- let data = event.data;
- switch (ac) {
- case msgac.LevelLayerClose:
- this.LevelLayerCloseRet(data);
- break;
- case msgac.skillAdd:
- this.skillAddRet(data);
- break;
- case msgac.fightEnd:
- this.fightEndRet(data);
- break;
- case msgac.startFight:
- this.startFightRet(data);
- break;
- case msgac.showHitEffect:
- this.showHitEffectRet(data);
- break;
- case msgac.judgeLevelSuccess:
- this.judgeLevelSuccessRet(data);
- break;
- case msgac.skillLayerRefresh:
- this.skillLayerRefreshRet(data);
- break;
- case msgac.levelEspSuccess:
- this.levelEspSuccessRet(data);
- break;
- case msgac.levelNext:
- this.levelNextRet(data);
- break;
- case msgac.adjustPlayerInCenter:
- this.adjustPlayerInCenterRet(data);
- break;
- case msgac.lifeBack:
- this.lifeBackRet(data);
- break;
- case msgac.levelRestart:
- this.levelRestartRet(data);
- break;
- default:
- break;
- }
- }
- onButtonClick(node: Node, name: string) {
- if (name.length > 5 && name.substring(0, 5) == "role_") {
- this.onClickRoleItem(node);
- return;
- }
- switch (name) {
- case "skillItem":
- this.onClickSkillItem(node);
- break;
- case "btnAdAtk":
- this.onClickBtnAdAtk(node);
- break;
- case "btnReset":
- this.onClickBtnReset(node);
- break;
- case "btnBack":
- this.onClickBtnBack(node);
- break;
- case "btnSkip":
- this.onClickBtnSkip(node);
- break;
- default:
- break;
- }
- }
- onClickSkillItem(node) {
- if (this["skilling"]) {
- return;
- }
- let skill = playerModel.instance.getSkillById(node.item.id);
- if (skill.num <= 0) {
- let row = designManager.instance.getRowById(constants.tableName.skill, skill.id);
- sdkManager.instance.sendEvent("观看激励视频-获取" + row.name);
- sdkManager.instance.openAd((st: number) => {
- if (st != 1) {
- return;
- }
- playerModel.instance.addSkillNumById(skill.id);
- this.skillLayer.getComponent(ItemLayer).refreshItemUIByItem(node.item);
- sdkManager.instance.sendEvent("观看完激励视频-获取" + row.name);
- });
- return;
- }
- this["skilling"] = true;
- levelManager.instance.useSkillId(skill.id, this.skillEffectLayer, () => {
- delete this["skilling"];
- });
- this.skillLayer.getComponent(ItemLayer).refreshItemUIByItem(node.item);
- }
- onClickBtnAdAtk(node: Node) {
- sdkManager.instance.sendEvent("观看激励视频-增加10点攻击");
- sdkManager.instance.openAd((st: number) => {
- if (st != 1) {
- return;
- }
- levelManager.instance.addAtk(levelManager.instance.levelAdAtkAddVal);
- sdkManager.instance.sendEvent("观看完激励视频-增加10点攻击");
- });
- }
- onClickBtnSkip(node: Node) {
- sdkManager.instance.sendEvent("观看激励视频-跳关");
- sdkManager.instance.openAd((st: number) => {
- if (st != 1) {
- return;
- }
- levelManager.instance.levelSkip();
- sdkManager.instance.sendEvent("观看完激励视频-跳关");
- });
- }
- onClickBtnReset(node: Node) {
- this.loadLevelLayer();
- sdkManager.instance.addLevelCount();
- }
- onClickRoleItem(node: Node) {
- if (this.handNode && this.handNode["attachNode"] == node) {
- playerModel.instance.setHandShow(1);
- this.removeHandLayer();
- }
- levelManager.instance.onClickRoleItem(node);
- }
- onClickBtnBack(node: Node) {
- this.openLayer(constants.layers.StartLayer);
- this.closeLayer();
- }
- }
|