| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- import { _decorator, Component, Node, Prefab, instantiate, v3, tween, Widget } from 'cc';
- import { DataSystem } from '../core/data/DataSystem';
- import { GM } from '../launch/GM';
- import { BattleData } from './BattleData';
- import { LeaderSkillNode } from './LeaderSkillNode';
- import { LeaderSkillShow } from './LeaderSkillShow';
- import { Monster } from './Monster';
- import { TakeAWalk, WalkDirection } from './TakeAWalk';
- const { ccclass, property } = _decorator;
- @ccclass('LeaderSkill')
- export class LeaderSkill extends Component {
- @property({ type: Node, tooltip: "特效层级" }) layer: Node;
- @property({ type: Node, tooltip: "阻挡墙层级" }) wallLayer: Node;
- @property({ type: Node, tooltip: "战斗层" }) battleNode: Node;
- @property({ type: Node, tooltip: "背景层" }) bgNode: Node;
- @property({ type: Node, tooltip: "2倍背景层" }) d_bgNode: Node;
- @property({ type: [Prefab], tooltip: "技能预制体" }) prefabs: Array<Prefab> = [];
- @property({ type: Prefab, tooltip: "展示预制体" }) showPrefab: Prefab;
- @property({ type: Node, tooltip: "统帅特写层" }) leaderShow: Node;
- update() {
- DataSystem.watch(BattleData, "useLeaderSkill") && this.show();
- }
- public show(): void {
- tween(this.battleNode).to(0.2, { scale: v3(2, 2, 1) }).call(() => {
- this.bgNode.active = !(this.d_bgNode.active = true);
- }).start();
- let node = instantiate(this.showPrefab);
- node.setParent(this.leaderShow);
- node.getComponent(LeaderSkillShow).setData(DataSystem.getData(BattleData).useLeaderSkill.id, DataSystem.getData(BattleData).heros.get(5).id, this.useLeaderSkill.bind(this));
- }
- public async useLeaderSkill() {
- this.battleNode.setScale(v3(1, 1, 1));
- this.bgNode.active = !(this.d_bgNode.active = false);
- // GM.addBattleLog(`使用统帅技能:` + JSON.stringify(DataSystem.getData(BattleData).useLeaderSkill));
- switch (DataSystem.getData(BattleData).useLeaderSkill.id) {
- case 1: case 2:
- let tempMonsterArray = DataSystem.getData(BattleData)._monsters.concat();
- for (let i = 0; i < tempMonsterArray.length; i++) {
- await this.createPrefabs(DataSystem.getData(BattleData).useLeaderSkill.id, DataSystem.getData(BattleData).useLeaderSkill.lv, tempMonsterArray[i]);
- }
- break;
- case 3:
- let monster = DataSystem.getData(BattleData)._monsters.sort((a, b) => {
- if (a.getComponent(TakeAWalk).totleWalkFarme > b.getComponent(TakeAWalk).totleWalkFarme) {
- return -1;
- }
- return 1;
- })
- this.createPrefabs(DataSystem.getData(BattleData).useLeaderSkill.id, DataSystem.getData(BattleData).useLeaderSkill.lv, monster[0]);
- break;
- }
- }
- private createPrefabs(id: number, lv: number, monster: Monster) {
- return new Promise<any>(async (resolve: (data: any) => void) => {
- if (monster) {
- let node = instantiate(this.prefabs[id - 1]);
- if (id < 3) {
- node.setRotationFromEuler(v3(0, 0, 45));
- node.setPosition(v3(monster.node.position.x + Math.cos(45) * 300, monster.node.position.y + Math.sin(45) + 300, 0));
- }
- node.setParent(id == 3 && monster.getComponent(TakeAWalk).direction == WalkDirection.up ? this.wallLayer : this.layer);
- node.getComponent(LeaderSkillNode).setData(id, lv, monster);
- }
- this.scheduleOnce(() => {
- resolve(null);
- }, 0.1);
- });
- }
- }
|