diff --git a/assets/script/game/hero/Hero.ts b/assets/script/game/hero/Hero.ts index 69152d8b..45d2d439 100644 --- a/assets/script/game/hero/Hero.ts +++ b/assets/script/game/hero/Hero.ts @@ -1,4 +1,4 @@ -import { instantiate, Node, Prefab, Vec3 ,v3,resources,SpriteFrame,Sprite,SpriteAtlas, BoxCollider2D, tween, Tween} from "cc"; +import { instantiate, Node, Prefab, Vec3 ,v3,resources,SpriteFrame,Sprite,SpriteAtlas, BoxCollider2D, RigidBody2D, tween, Tween} from "cc"; import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops"; import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; import { smc } from "../common/SingletonModuleComp"; @@ -163,7 +163,10 @@ export class Hero extends ecs.Entity { const collider = node.getComponent(BoxCollider2D); if (collider) { collider.enabled = false; - collider.apply(); + } + const body = node.getComponent(RigidBody2D); + if (body) { + body.enabled = false; } const currentPos = node.getPosition(); const targetPos = v3(birthPos.x, birthPos.y, 0); diff --git a/assets/script/game/map/MissionHeroComp.ts b/assets/script/game/map/MissionHeroComp.ts index 1e2b59eb..8a29fc51 100644 --- a/assets/script/game/map/MissionHeroComp.ts +++ b/assets/script/game/map/MissionHeroComp.ts @@ -21,6 +21,8 @@ export class MissionHeroCompComp extends CCComp { Friend_is_dead:boolean=false current_hero_uuid:number=0 current_hero_num:number=-1 + merge_need_count:number=3 + merge_max_lv:number=3 is_merging:boolean=false heros:any=[] onLoad(){ @@ -62,9 +64,11 @@ export class MissionHeroCompComp extends CCComp { const uuid = Number(args?.uuid ?? 1001); const hero_lv = Math.max(1, Number(args?.hero_lv ?? 1)); this.addHero(uuid, hero_lv); + if (!this.canMergeLevel(hero_lv)) return; + const needCount = this.getMergeNeedCount(); const aliveHeroes = this.getAliveHeroes(); - const mergeHeroes = this.pickMergeHeroes(aliveHeroes, uuid, hero_lv, 3); - if (mergeHeroes.length === 3) { + const mergeHeroes = this.pickMergeHeroes(aliveHeroes, uuid, hero_lv, needCount); + if (mergeHeroes.length === needCount) { this.is_merging = true; try { const mergedLv = await this.mergeGroupHeroes(mergeHeroes, uuid, hero_lv); @@ -135,6 +139,14 @@ export class MissionHeroCompComp extends CCComp { return count; } + private getMergeNeedCount(): number { + return this.merge_need_count === 2 ? 2 : 3; + } + + private canMergeLevel(hero_lv: number): boolean { + return hero_lv < Math.max(1, this.merge_max_lv); + } + private mergeDestroyAtBirth(mergeHeroes: Hero[], spawnPos: Vec3): Promise { return new Promise((resolve) => { let doneCount = 0; @@ -194,21 +206,25 @@ export class MissionHeroCompComp extends CCComp { const spawnPos:Vec3 = v3(landingPos.x, landingPos.y + MissionHeroCompComp.HERO_DROP_HEIGHT, 0); await this.mergeDestroyAtBirth(mergeHeroes, spawnPos); await this.playMergeBoomFx(spawnPos); - return this.addMergedHero(uuid, hero_lv + 1, sumAp, sumHpMax); + return this.addMergedHero(uuid, Math.min(this.merge_max_lv, hero_lv + 1), sumAp, sumHpMax); } private async tryChainMerge(uuid: number, startLv: number) { let checkLv = Math.max(1, startLv); + const needCount = this.getMergeNeedCount(); let guard = 0; while (guard < 20) { guard += 1; - const aliveHeroes = this.getAliveHeroes(); - const sameCount = this.countMergeHeroes(aliveHeroes, uuid, checkLv); - if (sameCount < 3) { + if (!this.canMergeLevel(checkLv)) { break; } - const mergeHeroes = this.pickMergeHeroes(aliveHeroes, uuid, checkLv, 3); - if (mergeHeroes.length < 3) { + const aliveHeroes = this.getAliveHeroes(); + const sameCount = this.countMergeHeroes(aliveHeroes, uuid, checkLv); + if (sameCount < needCount) { + break; + } + const mergeHeroes = this.pickMergeHeroes(aliveHeroes, uuid, checkLv, needCount); + if (mergeHeroes.length < needCount) { break; } checkLv = await this.mergeGroupHeroes(mergeHeroes, uuid, checkLv);