释放技能动画 设定在技能参数中+伤害系统建立

This commit is contained in:
2025-02-03 10:45:06 +08:00
parent 89978ddbe8
commit cdb8261be9
17 changed files with 960 additions and 462 deletions

View File

@@ -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);
}
/** 应用负面状态 */