+肉鸽模式,接下来做boss 动画
This commit is contained in:
@@ -30,7 +30,7 @@ export class Monster extends ecs.Entity {
|
||||
}
|
||||
|
||||
/** 加载角色 */
|
||||
load(pos: Vec3 = Vec3.ZERO,scale:number = 1,uuid:number=1001,is_boss:boolean=false,is_call:boolean=false,lv:number=1) {
|
||||
load(pos: Vec3 = Vec3.ZERO,scale:number = 1,uuid:number=1001,is_boss:boolean=false,is_call:boolean=false,lv:number=1,rogueBuffData?: any[]) {
|
||||
scale=-1
|
||||
let box_group=BoxSet.MONSTER
|
||||
console.log("mon load",uuid)
|
||||
@@ -42,7 +42,7 @@ export class Monster extends ecs.Entity {
|
||||
node.parent = scene.entityLayer!.node!
|
||||
|
||||
node.setPosition(pos)
|
||||
this.hero_init(uuid,node,scale,box_group,is_boss,is_call,lv)
|
||||
this.hero_init(uuid,node,scale,box_group,is_boss,is_call,lv,rogueBuffData)
|
||||
oops.message.dispatchEvent("monster_load",this)
|
||||
|
||||
// 初始化移动参数
|
||||
@@ -51,7 +51,7 @@ export class Monster extends ecs.Entity {
|
||||
move.targetX = -800; // 左边界
|
||||
}
|
||||
|
||||
hero_init(uuid:number=1001,node:Node,scale:number=1,box_group=BoxSet.HERO,is_boss:boolean=false,is_call:boolean=false,lv:number=1) {
|
||||
hero_init(uuid:number=1001,node:Node,scale:number=1,box_group=BoxSet.HERO,is_boss:boolean=false,is_call:boolean=false,lv:number=1,rogueBuffData?: any[]) {
|
||||
var hv = node.getComponent(HeroViewComp)!;
|
||||
hv.hide_info()
|
||||
// console.log("hero_init",buff)
|
||||
@@ -86,50 +86,74 @@ export class Monster extends ecs.Entity {
|
||||
|
||||
hv.cd = hero.cd
|
||||
hv.atk_skill=hero.skills[0]
|
||||
|
||||
// 处理原有Buff
|
||||
hero.buff.forEach((buff:any)=>{
|
||||
switch(buff.buff_type){
|
||||
case BuffAttr.CRITICAL:
|
||||
hv.crit=buff.value
|
||||
break
|
||||
case BuffAttr.CRITICAL_DMG:
|
||||
hv.crit_d=buff.value
|
||||
break
|
||||
case BuffAttr.DODGE:
|
||||
hv.dod=buff.value
|
||||
break
|
||||
case BuffAttr.DODGE_NO:
|
||||
hv.dod_no=buff.value
|
||||
break
|
||||
case BuffAttr.CRITICAL_NO:
|
||||
hv.crit_no=buff.value
|
||||
break
|
||||
case BuffAttr.BURN_COUNT:
|
||||
hv.burn_count=buff.value
|
||||
break
|
||||
case BuffAttr.PUNCTURE:
|
||||
hv.puncture=buff.value
|
||||
break
|
||||
case BuffAttr.PUNCTURE_DMG:
|
||||
hv.puncture_damage=buff.value
|
||||
break
|
||||
case BuffAttr.WFUNY:
|
||||
hv.wfuny=buff.value
|
||||
break
|
||||
case BuffAttr.ATK_CD:
|
||||
hv.cd=hv.cd*(100-buff.value)/100
|
||||
break
|
||||
case BuffAttr.HP:
|
||||
hv.hp_max=hv.hp_max*(100+buff.value)/100
|
||||
break
|
||||
case BuffAttr.DEF:
|
||||
hv.def=buff.value
|
||||
break
|
||||
case BuffAttr.ATK:
|
||||
hv.ap=hv.ap*(100+buff.value)/100
|
||||
break
|
||||
}
|
||||
this.applyBuffToMonster(hv, buff);
|
||||
})
|
||||
|
||||
// 处理肉鸽模式的词条Buff
|
||||
if (rogueBuffData && rogueBuffData.length > 0) {
|
||||
console.log(`[Monster]: 怪物${hero.name}应用肉鸽词条:`, rogueBuffData);
|
||||
rogueBuffData.forEach((buff:any)=>{
|
||||
this.applyBuffToMonster(hv, buff);
|
||||
})
|
||||
}
|
||||
|
||||
// 重新计算最终HP(因为buff可能修改了hp_max)
|
||||
hv.hp = hv.hp_max;
|
||||
|
||||
this.add(hv);
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用Buff到怪物的通用方法
|
||||
*/
|
||||
private applyBuffToMonster(hv: any, buff: any) {
|
||||
switch(buff.buff_type){
|
||||
case BuffAttr.CRITICAL:
|
||||
hv.crit+=buff.value
|
||||
break
|
||||
case BuffAttr.CRITICAL_DMG:
|
||||
hv.crit_d+=buff.value
|
||||
break
|
||||
case BuffAttr.DODGE:
|
||||
hv.dod+=buff.value
|
||||
break
|
||||
case BuffAttr.DODGE_NO:
|
||||
hv.dod_no+=buff.value
|
||||
break
|
||||
case BuffAttr.CRITICAL_NO:
|
||||
hv.crit_no+=buff.value
|
||||
break
|
||||
case BuffAttr.BURN_COUNT:
|
||||
hv.burn_count+=buff.value
|
||||
break
|
||||
case BuffAttr.PUNCTURE:
|
||||
hv.puncture+=buff.value
|
||||
break
|
||||
case BuffAttr.PUNCTURE_DMG:
|
||||
hv.puncture_damage+=buff.value
|
||||
break
|
||||
case BuffAttr.WFUNY:
|
||||
hv.wfuny+=buff.value
|
||||
break
|
||||
case BuffAttr.ATK_CD:
|
||||
hv.cd=hv.cd*(100+buff.value)/100
|
||||
break
|
||||
case BuffAttr.HP:
|
||||
hv.hp_max=hv.hp_max*(100+buff.value)/100
|
||||
break
|
||||
case BuffAttr.DEF:
|
||||
hv.def+=buff.value
|
||||
break
|
||||
case BuffAttr.ATK:
|
||||
hv.ap=hv.ap*(100+buff.value)/100
|
||||
break
|
||||
case BuffAttr.FROST_RATIO:
|
||||
hv.frost_ratto+=buff.value
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user