card_svr/src/rooms/logic/skill/TriggerMan.ts

162 lines
5.6 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): SkillTarget[] {
let effectid = sender._data.effect_typeid;
let env = sender.getEnhanceValue(param);
let effv = sender.getEffValue(param.cardpoint);
let tgts = sender.getTargets(param);
if(!tgts || !tgts.length){
return null;
}
switch (effectid) {
case SkillEffectType.NONE:
return null;
case SkillEffectType.CARD_ADD:
case SkillEffectType.CARD_ADD_LIMIT:
case SkillEffectType.CARD_STEAL:
case SkillEffectType.CARD_CHG_EN:
case SkillEffectType.CARD_GETDIRECT:
tgts.forEach((item)=>{
sender.handleCard(effectid, effv + env, item);
});
break;
case SkillEffectType.POWER_ENHANCE:
case SkillEffectType.POWEREX_ENHANCE:
case SkillEffectType.HURT_POWER:
tgts.forEach((item)=>{
sender.handlePower(effectid, effv + env, item);
});
break;
case SkillEffectType.SUMMON_NPC:
case SkillEffectType.SUMMON_SKILL:
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 + env, item);
});
break;
case SkillEffectType.POWER_ADD_BUFF:
tgts.forEach((item)=>{
sender.addBuff(effectid, effv + env, item);
});
break;
case SkillEffectType.HURT_REDUCE:
tgts.forEach((item)=>{
sender.reduceHurt(effv + env, item);
});
break;
default:
break;
}
return tgts;
},
handleEffectParam(effectid: SkillEffectType, paramlst: any) {
return paramlst;
switch (effectid) {
case SkillEffectType.NONE:
case SkillEffectType.CARD_ADD:
case SkillEffectType.CARD_ADD_LIMIT:
case SkillEffectType.CARD_STEAL:
case SkillEffectType.CARD_CHG_EN:
case SkillEffectType.POWER_ENHANCE:
case SkillEffectType.POWEREX_ENHANCE:
case SkillEffectType.HURT_POWER:
case SkillEffectType.SUMMON_NPC:
case SkillEffectType.SUMMON_SKILL:
case SkillEffectType.TAUNT:
case SkillEffectType.HURT_HP:
case SkillEffectType.POWER_ADD_BUFF:
case SkillEffectType.HURT_REDUCE:
break;
}
},
}
export default TriggerManager;