188 lines
6.5 KiB
TypeScript
188 lines
6.5 KiB
TypeScript
// Learn cc.Class:
|
|
// - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/class.html
|
|
// - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/class.html
|
|
// Learn Attribute:
|
|
// - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
|
|
// - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/reference/attributes.html
|
|
// Learn life-cycle callbacks:
|
|
// - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
|
|
|
|
import { SKillEffectData } from "message/SkillInfo";
|
|
import { PetHandler } from "../Handler/PetHandler";
|
|
import { Condition } from "./Condition";
|
|
import { Skill } from "./Skill";
|
|
import { CondDecideType, CondType, SkillEffectType, TriggerType } from "./SkillConst";
|
|
import { SkillParam, SkillTarget } from "./SkillParam";
|
|
import { Trigger } from "./Trigger";
|
|
import { TriggerCtrl } from "./TriggerCtrl";
|
|
|
|
let TriggerManager = {
|
|
_skillmap: new Map(),
|
|
|
|
_buffmap: new Map(),
|
|
|
|
_triggermap: new Map(),
|
|
|
|
_conditionmap: new Map(),
|
|
|
|
addSkillTrigger(skill_id: number, tg_type: TriggerType, tg_cond: CondType, tg_cond_decide: CondDecideType, tg_cond_v: number): TriggerCtrl {
|
|
let obj = this.getSkillTrigger(skill_id);
|
|
if (!obj) {
|
|
obj = this._newTrigger(skill_id, tg_type, tg_cond, tg_cond_decide, tg_cond_v);
|
|
this._skillmap.set(skill_id, obj);
|
|
}
|
|
return obj;
|
|
},
|
|
|
|
addBuffTrigger(buff_id: number, tg_type: TriggerType, tg_cond: CondType, tg_cond_decide: CondDecideType, tg_cond_v: number): TriggerCtrl {
|
|
let obj = this.getBuffTrigger(buff_id);
|
|
if (!obj) {
|
|
obj = this._newTrigger(buff_id, tg_type, tg_cond, tg_cond_decide, tg_cond_v);
|
|
this._buffmap.set(buff_id, obj);
|
|
}
|
|
return obj;
|
|
},
|
|
|
|
getSkillTrigger(skill_id: number): TriggerCtrl {
|
|
return this._skillmap.get(skill_id);
|
|
},
|
|
|
|
getBuffTrigger(buff_id: number): TriggerCtrl {
|
|
return this._buffmap.get(buff_id);
|
|
},
|
|
|
|
_newTrigger(id: number, tg_type: TriggerType, tg_cond: CondType, tg_cond_decide: CondDecideType, tg_cond_v: number): TriggerCtrl {
|
|
let tobj = this._triggermap.get(tg_type);
|
|
if (!tobj) {
|
|
tobj = new Trigger();
|
|
tobj.init(tg_type);
|
|
this._triggermap.set(tg_type, tobj);
|
|
}
|
|
|
|
let key = Number(tg_cond) + '|' + Number(tg_cond_decide) + '|' + tg_cond_v;
|
|
let cobj = this._conditionmap.get(key);
|
|
if (!cobj) {
|
|
cobj = new Condition();
|
|
cobj.init(tg_cond, tg_cond_decide, tg_cond_v);
|
|
this._conditionmap.set(key, cobj);
|
|
}
|
|
|
|
let obj = new TriggerCtrl();
|
|
obj.init(id, tobj, cobj);
|
|
|
|
return obj;
|
|
},
|
|
|
|
|
|
onTrigger(sender: Skill, param: SkillParam, target: SkillTarget): SkillTarget[] {
|
|
let effectid = sender._data.effect_typeid;
|
|
|
|
let effv = sender.getEffValue(param.edd_cnt, param.cardpoint);
|
|
|
|
let tgts;
|
|
if(target && effectid == SkillEffectType.ATTACK_BACK){
|
|
tgts = sender.getOppTargets(target);
|
|
}else{
|
|
tgts = sender.getTargets(param);
|
|
}
|
|
|
|
if(!tgts || tgts.length <= 0){
|
|
return null;
|
|
}
|
|
|
|
switch (effectid) {
|
|
case SkillEffectType.NONE:
|
|
tgts.forEach((item: SkillTarget) =>{
|
|
item.success(effectid, 0);
|
|
});
|
|
break;
|
|
case SkillEffectType.CARD_ADD:
|
|
case SkillEffectType.CARD_ADD_LIMIT:
|
|
case SkillEffectType.CARD_STEAL:
|
|
case SkillEffectType.CARD_CHG_EN:
|
|
case SkillEffectType.CARD_GETDIRECT:
|
|
case SkillEffectType.CARD_DROP:
|
|
tgts.forEach((item)=>{
|
|
sender.handleCard(effectid, effv, item);
|
|
});
|
|
break;
|
|
case SkillEffectType.POWER_ENHANCE:
|
|
case SkillEffectType.POWEREX_ENHANCE:
|
|
case SkillEffectType.HURT_POWER:
|
|
case SkillEffectType.HURT_ALL:
|
|
tgts.forEach((item)=>{
|
|
sender.handlePower(effectid, effv, item);
|
|
});
|
|
break;
|
|
case SkillEffectType.SUMMON_NPC:
|
|
case SkillEffectType.SUMMON_SKILL:
|
|
case SkillEffectType.SKILL_GET:
|
|
tgts.forEach((item)=>{
|
|
sender.summon(effectid, param, item);
|
|
});
|
|
break;
|
|
case SkillEffectType.TAUNT:
|
|
tgts.forEach((item)=>{
|
|
sender.taunt(item);
|
|
});
|
|
break;
|
|
case SkillEffectType.HURT_HP:
|
|
tgts.forEach((item)=>{
|
|
sender.handleHP(effv, item);
|
|
});
|
|
break;
|
|
case SkillEffectType.POWER_ADD_BUFF:
|
|
case SkillEffectType.BUFF_SHIELD:
|
|
tgts.forEach((item)=>{
|
|
sender.addBuff(effectid, effv, item);
|
|
});
|
|
break;
|
|
case SkillEffectType.HURT_REDUCE:
|
|
tgts.forEach((item)=>{
|
|
sender.reduceHurt(effv, item);
|
|
});
|
|
break;
|
|
case SkillEffectType.REBORN:
|
|
tgts.forEach((item)=>{
|
|
sender.reborn(item);
|
|
});
|
|
break;
|
|
case SkillEffectType.ENHANCE_MAGIC:
|
|
tgts.forEach((item)=>{
|
|
sender.enhanceMagic(effv, item);
|
|
});
|
|
break;
|
|
case SkillEffectType.SILENT:
|
|
tgts.forEach((item)=>{
|
|
sender.silent(effv, item);
|
|
});
|
|
break;
|
|
case SkillEffectType.ATTACK:
|
|
case SkillEffectType.ATTACK_BACK:
|
|
let atkback = effectid == SkillEffectType.ATTACK_BACK;
|
|
tgts.forEach((item)=>{
|
|
let obj = item.srcpet? item.srcpet: item.srcplayer;
|
|
// let ev = atkback? sender.getEffValue(0, 0, obj.bakTotalAP()): 0;
|
|
let ev = atkback? obj.bakTotalAP(): 0;
|
|
sender.attack(ev, item, param, atkback);
|
|
});
|
|
break;
|
|
case SkillEffectType.HP_STEAL_ENHANCE:
|
|
tgts.forEach((item)=>{
|
|
sender.handleHPS(effv, item);
|
|
});
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return tgts;
|
|
},
|
|
|
|
handleEffectParam(effectid: SkillEffectType, paramlst: any) {
|
|
return paramlst;
|
|
},
|
|
}
|
|
|
|
export default TriggerManager;
|