- 删除未使用的ECS元文件和组件 - 修复技能视图和移动逻辑,添加调试日志 - 调整技能预制体配置和动画参数 - 简化技能加载和方向处理逻辑 - 新增技能6002并更新英雄配置 - 统一受击特效路径命名
99 lines
3.3 KiB
TypeScript
99 lines
3.3 KiB
TypeScript
import { instantiate, Node, Prefab, v3, Vec3 } from "cc";
|
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
|
import { Hero } from "../hero/Hero";
|
|
import { Monster } from "../hero/Mon";
|
|
import { ECSEntity } from "db://oops-framework/libs/ecs/ECSEntity";
|
|
import { SkillSet } from "../common/config/SkillSet";
|
|
import { oops } from "db://oops-framework/core/Oops";
|
|
import { AtkConCom } from "./AtkConCom";
|
|
import { HeroAttrsComp } from "../hero/HeroAttrsComp";
|
|
import { BoxSet, FacSet } from "../common/config/BoxSet";
|
|
import { HType } from "../common/config/heroSet";
|
|
import { SkillView } from "./SkillView";
|
|
import { SDataCom } from "./SDataCom";
|
|
import { Attrs } from "../common/config/HeroAttrs";
|
|
import { SMoveDataComp } from "../skill/SMoveComp";
|
|
import { HeroViewComp } from "../hero/HeroViewComp";
|
|
|
|
/** Skill 模块 */
|
|
@ecs.register(`Skill`)
|
|
export class Skill extends ecs.Entity {
|
|
/** ---------- 数据层 ---------- */
|
|
SDataCom!: SDataCom;
|
|
SMoveCom!: SMoveDataComp
|
|
|
|
/** ---------- 业务层 ---------- */
|
|
// SkillBll!: SkillBllComp;
|
|
|
|
/** ---------- 视图层 ---------- */
|
|
SView!: SkillView;
|
|
|
|
/** 实始添加的数据层组件 */
|
|
protected init() {
|
|
this.addComponents<SDataCom>(SDataCom);
|
|
this.addComponents<SMoveDataComp>(SMoveDataComp);
|
|
}
|
|
load(startPos: Vec3, parent: Node, s_uuid: number, targetPos: Vec3,
|
|
caster:HeroViewComp) {
|
|
const config = SkillSet[s_uuid];
|
|
|
|
if (!config) {
|
|
console.error("[Skill] 技能配置不存在:", s_uuid);
|
|
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.node.scale.x < 0){
|
|
node.setScale(v3(node.scale.x*-1,node.scale.y,1))
|
|
}
|
|
|
|
// 初始视图
|
|
const SView = node.getComponent(SkillView);
|
|
// 只设置必要的运行时属性,配置信息通过 SkillSet[uuid] 访问
|
|
// 核心标识
|
|
SView.s_uuid= s_uuid
|
|
SView.group= caster.box_group
|
|
|
|
this.add(SView);
|
|
// 初始化移动组件
|
|
const sMoveCom = this.get(SMoveDataComp);
|
|
sMoveCom.startPos=startPos
|
|
sMoveCom.targetPos=targetPos
|
|
sMoveCom.s_uuid=s_uuid
|
|
sMoveCom.scale=caster.node.scale.x < 0 ? -1 : 1
|
|
|
|
let casterAttrs=caster.ent.get(HeroAttrsComp).Attrs
|
|
// 初始化数据组件
|
|
const sDataCom = this.get(SDataCom);
|
|
sDataCom.group=caster.box_group
|
|
sDataCom.caster=caster
|
|
sDataCom.Attrs=casterAttrs
|
|
sDataCom.s_uuid=s_uuid
|
|
}
|
|
|
|
/** 模块资源释放 */
|
|
destroy() {
|
|
// 注: 自定义释放逻辑,视图层实现 ecs.IComp 接口的 ecs 组件需要手动释放
|
|
this.remove(SDataCom);
|
|
this.remove(SMoveDataComp)
|
|
this.remove(SkillView)
|
|
super.destroy();
|
|
|
|
}
|
|
}
|
|
|
|
|