释放技能动画 设定在技能参数中+伤害系统建立
This commit is contained in:
@@ -4,12 +4,13 @@ import { HeroViewComp } from "../hero/HeroViewComp";
|
||||
import { HeroSkillsComp } from "./heroSkillsComp";
|
||||
import { SkillSet, TargetGroup, TargetType } from "../common/config/SkillSet";
|
||||
import { CdType } from "../common/config/SkillSet";
|
||||
import { DamageRequest, DamageType } from "../../game/damage/DamageComp";
|
||||
|
||||
|
||||
/** 技能系统 */
|
||||
@ecs.register('HeroSkillSystem')
|
||||
export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate {
|
||||
private updateInterval: number = 0.2; // 每0.1秒更新一次
|
||||
private updateInterval: number = 0.1; // 每0.1秒更新一次
|
||||
private accumulator: number = 0;
|
||||
|
||||
filter(): ecs.IMatcher {
|
||||
@@ -64,13 +65,10 @@ export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUp
|
||||
const comp = entity.get(HeroSkillsComp);
|
||||
switch(config.CdType){
|
||||
case CdType.SkillCD:
|
||||
console.log("技能计时器",comp.cooldowns.get(config.uuid as number) ?? 0,config.cd)
|
||||
return (comp.cooldowns.get(config.uuid as number) ?? 0) <= 0;
|
||||
case CdType.HeroCD:
|
||||
console.log("普攻计时器",view.at,view.cd)
|
||||
return view.at >= view.cd;
|
||||
case CdType.HeroPower:
|
||||
console.log("能量计时器",view.pw,view.pwm)
|
||||
return view.pw >= view.pwm;
|
||||
}
|
||||
}
|
||||
@@ -81,26 +79,23 @@ export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUp
|
||||
private castSkill(caster: ecs.Entity, skillId: number, config: typeof SkillSet[keyof typeof SkillSet]) {
|
||||
const view = caster.get(HeroViewComp);
|
||||
const comp = caster.get(HeroSkillsComp);
|
||||
console.log(view.hero_name+"施放技能",comp,view)
|
||||
console.log(view.hero_name+"施放技能",config.uuid,comp,view)
|
||||
|
||||
switch(config.CdType) {
|
||||
case CdType.SkillCD:
|
||||
view.as.max()
|
||||
console.log("重置技能计时器",view.as,config.cd)
|
||||
comp.cooldowns.set(skillId, config.cd); // 重置冷却时间
|
||||
break;
|
||||
case CdType.HeroCD:
|
||||
view.as.atk()
|
||||
console.log("重置普攻计时器",view.at,view.cd)
|
||||
view.at = view.at-view.cd; // 重置普攻计时器
|
||||
break;
|
||||
case CdType.HeroPower:
|
||||
view.as.max()
|
||||
console.log("重置能量计时器",view.pw,view.pwm)
|
||||
view.pw = view.pw-view.pwm;
|
||||
view.pw = view.pw-view.pwm; // 重置能量计时器
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
// 选择目标
|
||||
const targets = this.selectTargets(caster, config);
|
||||
// 应用技能效果
|
||||
@@ -205,24 +200,15 @@ export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUp
|
||||
|
||||
/** 应用技能效果 */
|
||||
private applySkillEffect(caster: ecs.Entity, target: ecs.Entity, config: typeof SkillSet[keyof typeof SkillSet]) {
|
||||
const casterView = caster.get(HeroViewComp);
|
||||
const targetView = target.get(HeroViewComp);
|
||||
// 创建伤害请求实体
|
||||
const damageEntity = new ecs.Entity();
|
||||
const req = damageEntity.add(DamageRequest);
|
||||
req.source = caster;
|
||||
req.target = target;
|
||||
req.baseValue = caster.get(HeroViewComp).ap * (config.ap / 100);
|
||||
|
||||
// 计算基础伤害
|
||||
const damage = casterView.ap * (config.ap / 100);
|
||||
|
||||
// 应用伤害/治疗
|
||||
if (config.ap > 0) {
|
||||
targetView.hp -= damage;
|
||||
}
|
||||
if (config.hp > 0) {
|
||||
targetView.hp += casterView.hp_max * (config.hp / 100);
|
||||
}
|
||||
|
||||
// 应用debuff
|
||||
if (config.debuff > 0) {
|
||||
this.applyDebuff(target, config);
|
||||
}
|
||||
// 播放技能特效
|
||||
caster.get(HeroViewComp).playSkillEffect(config.uuid);
|
||||
}
|
||||
|
||||
/** 应用负面状态 */
|
||||
|
||||
Reference in New Issue
Block a user