|
|
|
@ -26,17 +26,21 @@ export class Boss extends Component { |
|
|
|
setMonster(monster: Monster) { |
|
|
|
setMonster(monster: Monster) { |
|
|
|
this.monster = monster; |
|
|
|
this.monster = monster; |
|
|
|
this.playWaitAnim(); |
|
|
|
this.playWaitAnim(); |
|
|
|
|
|
|
|
// 预热 Boss 投掷物,避免 useskillwave 触发时 getNode 同步未命中返回 null
|
|
|
|
|
|
|
|
void gg.res.ensurePrefab('bossWeapon1', 'prefab/武器/', GBundle.BattleGameWeapon); |
|
|
|
|
|
|
|
void gg.res.ensurePrefab('砖块爆炸', 'prefab/爆炸/', GBundle.BattleGameWeapon); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/**战斗警告时间开始 */ |
|
|
|
/**战斗警告时间开始 */ |
|
|
|
onBattleWarnTimeStart() { |
|
|
|
onBattleWarnTimeStart() { |
|
|
|
this.scheduleOnce(() => { |
|
|
|
this.scheduleOnce(() => { |
|
|
|
|
|
|
|
if (!this.monster?.Data?.useskillwave) return; |
|
|
|
let wNum = gg.game.CurentBattle.CurentWaveNum; |
|
|
|
let wNum = gg.game.CurentBattle.CurentWaveNum; |
|
|
|
if (this.monster.Data.useskillwave.includes(wNum)) { |
|
|
|
if (this.monster.Data.useskillwave.includes(wNum)) { |
|
|
|
this.playAttackAnim(() => { |
|
|
|
this.playAttackAnim(() => { |
|
|
|
this.playWaitAnim(); |
|
|
|
this.playWaitAnim(); |
|
|
|
}); |
|
|
|
}); |
|
|
|
this.atk(); |
|
|
|
void this.atk(); |
|
|
|
} |
|
|
|
} |
|
|
|
}, 4.8); |
|
|
|
}, 4.8); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -48,19 +52,44 @@ export class Boss extends Component { |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
atk() { |
|
|
|
async atk() { |
|
|
|
|
|
|
|
const battle = gg.game?.CurentBattle; |
|
|
|
|
|
|
|
if (!battle) return; |
|
|
|
|
|
|
|
const parent = |
|
|
|
|
|
|
|
battle.SkillController?.node?.isValid |
|
|
|
|
|
|
|
? battle.SkillController.node |
|
|
|
|
|
|
|
: battle.TetraMap?._gameRoot?.isValid |
|
|
|
|
|
|
|
? battle.TetraMap._gameRoot |
|
|
|
|
|
|
|
: null; |
|
|
|
|
|
|
|
if (!parent) { |
|
|
|
|
|
|
|
console.warn('[Boss.atk] SkillController / GameRoot 均不可用,跳过投掷'); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
let startPos = this.startPosNode ? this.startPosNode.worldPosition : this.node.worldPosition; |
|
|
|
let startPos = this.startPosNode ? this.startPosNode.worldPosition : this.node.worldPosition; |
|
|
|
let targetPos = this.getHighestBlockWorldPos(); |
|
|
|
let targetPos = this.getHighestBlockWorldPos(); |
|
|
|
let n = gg.res.getNode("prefab/武器/", "bossWeapon1", GBundle.BattleGameWeapon); |
|
|
|
let n = await gg.res.getNodeAsync('prefab/武器/', 'bossWeapon1', GBundle.BattleGameWeapon); |
|
|
|
n.setParent(gg.game.CurentBattle.SkillController.node, true); |
|
|
|
if (!n?.isValid) { |
|
|
|
|
|
|
|
console.warn('[Boss.atk] bossWeapon1 加载失败'); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
n.setParent(parent, true); |
|
|
|
n.worldPosition = startPos; |
|
|
|
n.worldPosition = startPos; |
|
|
|
let comp = n.getComponent(BossSkill); |
|
|
|
let comp = n.getComponent(BossSkill); |
|
|
|
|
|
|
|
if (!comp) { |
|
|
|
|
|
|
|
console.warn('[Boss.atk] bossWeapon1 缺少 BossSkill'); |
|
|
|
|
|
|
|
gg.res.putNode(n); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
comp.setData(this.monster, targetPos); |
|
|
|
comp.setData(this.monster, targetPos); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/**获取当前堆叠的方块中最高的那个方块的世界坐标 */ |
|
|
|
/**获取当前堆叠的方块中最高的那个方块的世界坐标 */ |
|
|
|
getHighestBlockWorldPos() { |
|
|
|
getHighestBlockWorldPos() { |
|
|
|
let nodes = gg.game.CurentBattle.TetraMap._tetrisTable.children; |
|
|
|
let nodes = gg.game.CurentBattle?.TetraMap?._tetrisTable?.children; |
|
|
|
|
|
|
|
if (!nodes?.length) { |
|
|
|
|
|
|
|
return this.startPosNode ? this.startPosNode.worldPosition.clone() : this.node.worldPosition.clone(); |
|
|
|
|
|
|
|
} |
|
|
|
let highestBlock = nodes.reduce((max, node) => { |
|
|
|
let highestBlock = nodes.reduce((max, node) => { |
|
|
|
return node.worldPosition.y > max.worldPosition.y ? node : max; |
|
|
|
return node.worldPosition.y > max.worldPosition.y ? node : max; |
|
|
|
}, nodes[0]); |
|
|
|
}, nodes[0]); |
|
|
|
@ -106,4 +135,3 @@ export class Boss extends Component { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|