import { BattleTeamId, FightType } from "../../data/const/TypeConst"; import GameDataCenter from "../../data/GameDataCenter"; import UEBase from "../../frameWork/compment/UEBase"; import { eg } from "../../frameWork/eg"; import { ActionType, fightLogOne, FightStart } from "../../shared/fight/PtlFightTest"; import AssetMgr from "../../utils/AssetMgr"; import { BattleGridConstant } from "./BattleGridConstant"; import UEBattleRole from "./UEBattleRole"; const { ccclass, property } = cc._decorator; @ccclass export default class UEBattleView extends UEBase { @property(cc.Prefab) rolePrefab: cc.Prefab = null; @property(cc.Prefab) subHpPrefab: cc.Prefab = null; @property(cc.Prefab) cellPrefab: cc.Prefab = null!; @property(cc.Node) roleContent: cc.Node = null; @property(cc.Node) hpLayer: cc.Node = null @property(cc.Node) cellLayer: cc.Node = null; fightStart: FightStart; fightLogList: { //战斗日志列表 //回合ID:单回合内战斗日志 [huihe: string]: fightLogOne[]; }; static readonly BundleKey: string = "battle"; static readonly PrefabUrl: string = "UEBattleView"; static readonly CLS: string = "UEBattleView"; type: FightType; huihe: number; curIndex: number; static s_ins: UEBattleView; TxtRound: cc.Label; static getInstance() { return this.s_ins } Init() { UEBattleView.s_ins = this; // this.fightStart = { // "from": "pve", // "seed": 29576, // "teams": { // "10": { // "fid": "106364", // "zhanwei": 0, // "level": 0, // }, // "20": { // "fid": "1022", // "zhanwei": 0, // "level": 0, // } // } // }; // this.fightLogList = { // "win": 1, // "log": { // "1": [{ // "aType": ActionType.round, // "atker": { // "fid": "", // "iid": "", // "hp": 0, // "nuqi": 0, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 943267, // "nuqi": 0, // "buff": [], // "effect": [ // [ // "huifu", // 2100 // ] // ], // "status": 0 // }], // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 707156, // "nuqi": 0, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 707156, // "nuqi": 1819, // "buff": [], // "effect": [ // [ // "xixue", // 11400 // ] // ], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 883267, // "nuqi": 659, // "buff": [ // [ // "jiyun", // 1 // ] // ], // "effect": [ // [ // "hp", -60000 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 707156, // "nuqi": 1819, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 883267, // "nuqi": 659, // "buff": [ // [ // "jiyun", // 1 // ] // ], // "effect": [ // [ // "jiyun", // 1 // ] // ], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 883267, // "nuqi": 659, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // } // ], // "2": [{ // "aType": ActionType.round, // "atker": { // "fid": "", // "iid": "", // "hp": 0, // "nuqi": 0, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 885367, // "nuqi": 659, // "buff": [], // "effect": [ // [ // "huifu", // 2100 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 707156, // "nuqi": 1819, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 707156, // "nuqi": 3733, // "buff": [], // "effect": [ // [ // "xixue", // 22121 // ] // ], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 768942, // "nuqi": 1355, // "buff": [], // "effect": [ // [ // "baoji", -116425 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 707156, // "nuqi": 3733, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 768942, // "nuqi": 1355, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 768942, // "nuqi": 3227, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [{ // "fid": "1022", // "iid": "20", // "hp": 605306, // "nuqi": 4474, // "buff": [], // "effect": [ // [ // "hp", -101850 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 832958, // "nuqi": 3227, // "buff": [], // "effect": [ // [ // "huifu", // 64016 // ] // ], // "status": 0 // }, // "target": [{ // "fid": "1022", // "iid": "20", // "hp": 507489, // "nuqi": 4474, // "buff": [], // "effect": [ // [ // "lianji", -97817 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 832958, // "nuqi": 3227, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // } // ], // "3": [{ // "aType": ActionType.round, // "atker": { // "fid": "", // "iid": "", // "hp": 0, // "nuqi": 0, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 835058, // "nuqi": 3227, // "buff": [], // "effect": [ // [ // "huifu", // 2100 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 507489, // "nuqi": 4474, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 518778, // "nuqi": 6374, // "buff": [], // "effect": [ // [ // "xixue", // 11289 // ] // ], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 775646, // "nuqi": 3916, // "buff": [], // "effect": [ // [ // "hp", -59412 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 518778, // "nuqi": 6374, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 775646, // "nuqi": 3916, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 775646, // "nuqi": 5767, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [{ // "fid": "1022", // "iid": "20", // "hp": 415919, // "nuqi": 7039, // "buff": [], // "effect": [ // [ // "hp", -102859 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 775646, // "nuqi": 5767, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // } // ], // "4": [{ // "aType": ActionType.round, // "atker": { // "fid": "", // "iid": "", // "hp": 0, // "nuqi": 0, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 777746, // "nuqi": 5767, // "buff": [], // "effect": [ // [ // "huifu", // 2100 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 415919, // "nuqi": 7039, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 427319, // "nuqi": 8850, // "buff": [], // "effect": [ // [ // "xixue", // 11400 // ] // ], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 717746, // "nuqi": 6414, // "buff": [], // "effect": [ // [ // "hp", -60000 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 427319, // "nuqi": 8850, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 717746, // "nuqi": 6414, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 717746, // "nuqi": 8377, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [{ // "fid": "1022", // "iid": "20", // "hp": 323452, // "nuqi": 9529, // "buff": [], // "effect": [ // [ // "hp", -103867 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 781762, // "nuqi": 8377, // "buff": [], // "effect": [ // [ // "huifu", // 64016 // ] // ], // "status": 0 // }, // "target": [{ // "fid": "1022", // "iid": "20", // "hp": 222610, // "nuqi": 9529, // "buff": [], // "effect": [ // [ // "lianji", -100842 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 781762, // "nuqi": 8377, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // } // ], // "5": [{ // "aType": ActionType.round, // "atker": { // "fid": "", // "iid": "", // "hp": 0, // "nuqi": 0, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 783862, // "nuqi": 8377, // "buff": [], // "effect": [ // [ // "huifu", // 2100 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 222610, // "nuqi": 9529, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 233675, // "nuqi": 11455, // "buff": [], // "effect": [ // [ // "xixue", // 11065 // ] // ], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 725626, // "nuqi": 9055, // "buff": [], // "effect": [ // [ // "hp", -58236 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 233675, // "nuqi": 11455, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 725626, // "nuqi": 9055, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 725626, // "nuqi": 10940, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [{ // "fid": "1022", // "iid": "20", // "hp": 129808, // "nuqi": 12088, // "buff": [], // "effect": [ // [ // "hp", -103867 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 725626, // "nuqi": 10940, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // } // ], // "6": [{ // "aType": ActionType.round, // "atker": { // "fid": "", // "iid": "", // "hp": 0, // "nuqi": 0, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 727726, // "nuqi": 10940, // "buff": [], // "effect": [ // [ // "huifu", // 2100 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 129808, // "nuqi": 12088, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 140761, // "nuqi": 13934, // "buff": [], // "effect": [ // [ // "xixue", // 10953 // ] // ], // "status": 0 // }, // "target": [{ // "fid": "106364", // "iid": "10", // "hp": 670079, // "nuqi": 11638, // "buff": [], // "effect": [ // [ // "hp", -57647 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "1022", // "iid": "20", // "hp": 140761, // "nuqi": 13934, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.buff, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 670079, // "nuqi": 11638, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.skill, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 670079, // "nuqi": 0, // "buff": [], // "effect": [ // [ // "huifu", // 35855 // ] // ], // "status": 0 // }, // "target": [] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 705934, // "nuqi": 1813, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [{ // "fid": "1022", // "iid": "20", // "hp": 37902, // "nuqi": 14627, // "buff": [], // "effect": [ // [ // "hp", -102859 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.atk, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 779552, // "nuqi": 1813, // "buff": [], // "effect": [ // [ // "huifu", // 73618 // ] // ], // "status": 0 // }, // "target": [{ // "fid": "1022", // "iid": "20", // "hp": 0, // "nuqi": 14627, // "buff": [], // "effect": [ // [ // "lianji", -216709 // ] // ], // "status": 0 // }] // }, // { // "aType": ActionType.over, // "atker": { // "fid": "106364", // "iid": "10", // "hp": 779552, // "nuqi": 1813, // "buff": [], // "effect": [], // "status": 0 // }, // "target": [] // } // ] // } // } this.TxtRound = this.node.getChildByName("ImgDi").getChildByName("TxtRound").getComponent(cc.Label); this.initEvent(); this.LoadCell(); } initEvent(): void { } //关闭界面 onDisable(): void { this.node.destroy(); } /** 加载地图数据 */ private LoadCell() { for (let i = 0; i < BattleGridConstant.COL; i++) { for (let j = 0; j < BattleGridConstant.ROW; j++) { this.CreateCell(i, j); } } } /** 创建格子 */ private CreateCell(i: number, j: number) { let cell = cc.instantiate(this.cellPrefab); this.cellLayer.addChild(cell); cell.width = BattleGridConstant.CELL_WIDTH; cell.height = BattleGridConstant.CELL_HEIGHT; let pos = this.GetPosByIdx(i, j); cell.setPosition(pos); cell.name = `${(i + 1) * 10 + (j + 1)}`; cell.getChildByName("txtIndex").getComponent(cc.Label).string = `${(i + 1) * 10 + (j + 1)}`; return cell; } /** 根据索引获取实际像素坐标 */ private GetPosByIdx(i: number, j: number): cc.Vec3 { const startX = -(BattleGridConstant.ROW * BattleGridConstant.CELL_WIDTH) / 2; const startY = (BattleGridConstant.COL * BattleGridConstant.CELL_HEIGHT) / 2; return cc.v3( startX + j * BattleGridConstant.CELL_WIDTH + BattleGridConstant.CELL_WIDTH / 2, startY - i * BattleGridConstant.CELL_HEIGHT - BattleGridConstant.CELL_HEIGHT / 2 ) } /** 获取扣血飘字表现层 */ GetHpLayer() { return this.hpLayer; } /** 获取扣血飘字预制体 */ GetSubHpPrefab() { return this.subHpPrefab; } //开始战斗 async onStartFight() { GameDataCenter.battle.SendTestFight(async ()=>{ eg.poolManager.GetPool("subHPPool").clear(); await this.produceRole(); this.huihe = 1; this.curIndex = 0; this.fightStart = GameDataCenter.battle.fightInfo?.fightStart; this.fightLogList = GameDataCenter.battle.fightInfo?.log; this.playLog(); }) } async produceRole() { let role1 = this.fightStart.teams[BattleTeamId.role1] let role2 = this.fightStart.teams[BattleTeamId.role2] let roleZhanwei1: string = "61" let roleZhanwei2: string = "66" let fightType: FightType = this.type; let roleNode1 = AssetMgr.instantiate(this.cellLayer, this.rolePrefab); roleNode1.getComponent(UEBattleRole).setRole(this.cellLayer.getChildByName(roleZhanwei1).position, role1, fightType); roleNode1.scaleX = 1; GameDataCenter.battle.addRole(role1?.fid, roleNode1.getComponent(UEBattleRole)); let roleNode2 = AssetMgr.instantiate(this.cellLayer, this.rolePrefab); roleNode2.getComponent(UEBattleRole).setRole(this.cellLayer.getChildByName(roleZhanwei2).position, role2, fightType); roleNode2.scaleX = -1; GameDataCenter.battle.addRole(role2?.fid, roleNode2.getComponent(UEBattleRole)); } //播放战斗日志 playLog() { this.TxtRound.string = "第" + this.huihe + "回合"; let curLog = this.fightLogList.log[this.huihe][this.curIndex]; // console.error("curLog:", curLog) let actionType: ActionType = curLog.aType; switch (actionType) { case ActionType.round: case ActionType.buff: this.nextLog(); break; case ActionType.atk: this.playAtk(curLog); break; // case ActionType.skill: // this.playAtk(curLog); // break; case ActionType.over: this.nextLog(); break; default: break; } } //播放下一条日志 nextLog() { this.curIndex++; if (this.fightLogList.log[this.huihe][this.curIndex] == null) { this.huihe++; if (this.fightLogList.log[this.huihe] != null) { this.curIndex = 0; this.playLog(); } else { this.scheduleOnce(() => { console.log("战斗结束"); }, 1); } } else { this.playLog(); } } playAtk(curLog: fightLogOne) { let atker = GameDataCenter.battle.battleRoleList[curLog.atker.iid]; let target0 = curLog.target.length > 0 ? GameDataCenter.battle.battleRoleList[curLog.target[0].iid] : Object.values(GameDataCenter.battle.battleRoleList)[0] //没有target 默认取一个防错 let delay = 0.5; let hitX = 150; //近战偏移量 cc.tween(atker.node) .delay(0.15 / GameDataCenter.battle.realBattleSpeed) .to(delay / GameDataCenter.battle.realBattleSpeed, { x: atker.posX < 0 ? target0.node.x - hitX : target0.node.x + hitX }) .call(() => { if (curLog.atker.iid == "1022") { atker.playAni("atk", false); } else { atker.playAni("atk1", false); } // GameDataCenter.audio.playEffect(atker.atkAudio); }) .delay((delay + 0.3) / GameDataCenter.battle.realBattleSpeed) .call(() => { //飘血 let effectList = curLog.target?.[0]?.effect; for (let i = 0; i < effectList?.length; i++) { let effect = effectList[i]; console.log("effect:", effect); target0.ShowSubHp(effect); } }) .delay(0.1 / GameDataCenter.battle.realBattleSpeed) .call(() => { //显示特效以及连击等特殊效果 }) .delay(0.1 / GameDataCenter.battle.realBattleSpeed) .call(() => { if (curLog.atker.iid != "1022") { atker.playAni("walk", true); } // GameDataCenter.audio.playEffect(atker.atkAudio); }) .to(delay / GameDataCenter.battle.realBattleSpeed, { x: atker.posX })//回到初始位置 .call(() => { if (curLog.atker.iid != "1022") { atker.playAni("stand", true); } let atkerEffectList = curLog.atker?.effect; for (let i = 0; i < atkerEffectList?.length; i++) { let effect = atkerEffectList[i]; console.log("atkerEffect:", effect); atker.ShowSubHp(effect); } // GameDataCenter.audio.playEffect(atker.atkAudio); }) .delay(0.3 / GameDataCenter.battle.realBattleSpeed) .call(() => { this.nextLog(); }) .start(); } }