- 规范化DBuff的枚举命名,修正属性对应关系 - 统一DBuff与Attrs的双向映射,通过TransformBuffs函数处理转换 - 移除旧的getAttrFieldFromDebuff方法,改用更灵活的映射数组 - 更新Attrs枚举,增加被易伤、防护盾等新属性 - 重新调整AttrsType映射,保证属性类型一致性 refactor(hero): 重构Hero和Monster初始化属性及buff系统 - Hero初始化时完善基础属性赋值,新增基础移动速度与攻击距离 - Hero使用initAttrs替代initBuffsDebuffs,重构buff/debuff初始化流程 - Monster初始化简化,统一按Hero写法初始化基础属性和Attrs - 实现buff/debuff属性智能覆盖与叠加时长的改进逻辑 - 属性计算改用统一逻辑,支持数值型和百分比型准确计算 - 增加属性值范围限制,确保部分属性在合理区间内 refactor(heroViewComp): 优化buff/debuff管理及状态判断 - 统一buff和debuff的持久与临时管理字典及更新方法 - 优化临时buff/debuff的更新时间处理,自动触发属性重新计算 - 提供isStun和isFrost接口简化眩晕、冰冻状态判断 - 规范注释及代码格式,提升可读性和维护性 refactor(skillConComp): 优化眩晕与冰冻状态判断逻辑 - 移除遍历判断,改用HeroViewComp的isStun和isFrost方法 - 简化技能冷却更新逻辑,提升性能 chore(heroSet): 添加AttrSet枚举定义属性最大值限制 docs(rogueConfig): 更新说明文档中的属性枚举定义说明 - 将属性增强枚举由BuffAttr修改为Attrs,以保持一致性
78 lines
2.7 KiB
TypeScript
78 lines
2.7 KiB
TypeScript
import { instantiate, Node, Prefab, v3, Vec3 } from "cc";
|
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
|
import { Attrs, SkillSet } from "../common/config/SkillSet";
|
|
import { oops } from "db://oops-framework/core/Oops";
|
|
import { smc } from "../common/SingletonModuleComp";
|
|
import { FacSet } from "../common/config/BoxSet";
|
|
import { HType } from "../common/config/heroSet";
|
|
import { SkillViewCom } from "./SkillViewCom";
|
|
import { HeroViewComp } from "../hero/HeroViewComp";
|
|
|
|
/** SkillCon 模块 */
|
|
@ecs.register(`SkillEnt`)
|
|
export class SkillEnt extends ecs.Entity {
|
|
|
|
load(startPos: Vec3, parent: Node, uuid: number, targetPos: any[], caster:HeroViewComp=null,dmg:number=0) {
|
|
const config = SkillSet[uuid];
|
|
if (!config) {
|
|
console.error("[Skill] 技能配置不存在:", uuid);
|
|
return;
|
|
}
|
|
// 检查施法者
|
|
if (!caster) {
|
|
console.error("[Skill] 施法者为空");
|
|
return;
|
|
}
|
|
// 加载预制体
|
|
const path = `game/skill/atk/${config.sp_name}`;
|
|
const prefab:Prefab = oops.res.get(path, Prefab);
|
|
if (!prefab) {
|
|
console.error("[Skill] 预制体加载失败:", path);
|
|
return;
|
|
}
|
|
// console.log("load skill startPos",startPos)
|
|
const node: Node = instantiate(prefab);
|
|
console.log("load skill node",node)
|
|
node.parent = parent;
|
|
// 设置节点属性
|
|
node.setPosition(startPos);
|
|
if(caster.fac==FacSet.MON){
|
|
node.scale=v3(node.scale.x*-1,1,1)
|
|
}else{
|
|
if(caster.type==HType.warrior){
|
|
if(caster.node.scale.x<0){
|
|
node.scale=v3(node.scale.x*-1,node.scale.y,1)
|
|
}
|
|
}
|
|
}
|
|
// 添加技能组件
|
|
const SComp = node.getComponent(SkillViewCom); // 初始化技能参数
|
|
// 只设置必要的运行时属性,配置信息通过 SkillSet[uuid] 访问
|
|
// 核心标识
|
|
SComp.s_uuid= uuid
|
|
SComp.cName=caster.hero_name
|
|
SComp.scale= caster.node.scale.x
|
|
// 位置和施法者信息
|
|
SComp.startPos= startPos
|
|
SComp.targetPos= targetPos
|
|
SComp.group= caster.box_group
|
|
SComp.fac= caster.fac,
|
|
// 技能数值
|
|
SComp.Attrs= caster.Attrs
|
|
SComp.caster= caster,
|
|
this.add(SComp);
|
|
}
|
|
|
|
/** 实始添加的数据层组件 */
|
|
protected init() {
|
|
// this.addComponents<ecs.Comp>();
|
|
}
|
|
|
|
/** 模块资源释放 */
|
|
destroy() {
|
|
// 注: 自定义释放逻辑,视图层实现 ecs.IComp 接口的 ecs 组件需要手动释放
|
|
this.remove(SkillViewCom);
|
|
super.destroy();
|
|
}
|
|
}
|