diff --git a/assets/script/game/account/bll/AccountNetData.ts b/assets/script/game/account/bll/AccountNetData.ts index 5455851..0fb10dc 100644 --- a/assets/script/game/account/bll/AccountNetData.ts +++ b/assets/script/game/account/bll/AccountNetData.ts @@ -2,9 +2,10 @@ * @Author: dgflash * @Date: 2021-11-23 15:51:15 * @LastEditors: dgflash - * @LastEditTime: 2022-02-10 10:01:34 + * @LastEditTime: 2022-03-09 15:09:43 */ +import { v3 } from "cc"; import { Message } from "../../../core/common/event/MessageManager"; import { storage } from "../../../core/common/storage/SqlUtil"; import { ecs } from "../../../core/libs/ECS"; @@ -95,9 +96,7 @@ export class AccountNetDataSystem extends ecs.ComblockSystem implements ecs.IEnt VM.add(role.RoleBaseModel.vm, "RoleBase"); // 角色动画显示对象 - role.load(); - role.RoleView.node.parent = oops.gui.game; - role.RoleView.node.setPosition(0, -300, 0); + role.load(oops.gui.game, v3(0, -300, 0)); e.AccountModel.role = role; } diff --git a/assets/script/game/role/Role.ts b/assets/script/game/role/Role.ts index adf55d2..22189da 100644 --- a/assets/script/game/role/Role.ts +++ b/assets/script/game/role/Role.ts @@ -3,7 +3,7 @@ * @Author: dgflash * @Date: 2021-11-18 17:47:56 * @LastEditors: dgflash - * @LastEditTime: 2022-03-08 16:58:18 + * @LastEditTime: 2022-03-09 16:36:35 */ import { Node, Vec3 } from "cc"; import { ecs } from "../../core/libs/ECS"; @@ -31,18 +31,18 @@ import { RoleViewInfoComp } from "./view/RoleViewInfoComp"; export class Role extends ecs.Entity { // 数据层 RoleModel!: RoleModelComp; - RoleBaseModel!: RoleBaseModelComp; - RoleJobModel!: RoleJobModelComp; + RoleBaseModel!: RoleBaseModelComp; // 角色初始资质 + RoleJobModel!: RoleJobModelComp; RoleLevelModel!: RoleLevelModelComp; // 业务层 - RoleChangeJob!: RoleChangeJobComp; - RoleUpgrade!: RoleUpgradeComp; - RoleMoveTo!: MoveToComp; + RoleChangeJob!: RoleChangeJobComp; // 转职 + RoleUpgrade!: RoleUpgradeComp; // 升级 + RoleMoveTo!: MoveToComp; // 移动 // 视图层 - RoleView!: RoleViewComp; - RoleViewInfo!: RoleViewInfoComp; + RoleView!: RoleViewComp; // 动画 + RoleViewInfo!: RoleViewInfoComp; // 属性界面 protected init() { // 初始化实体常住 ECS 组件,定义实体特性 @@ -53,34 +53,6 @@ export class Role extends ecs.Entity { RoleLevelModelComp); } - destroy(): void { - // 如果该组件对象是由ecs系统外部创建的,则不可回收,需要用户自己手动进行回收。 - this.remove(RoleViewComp); - super.destroy(); - } - - /** 加载角色显示对象(cc.Component在创建后,添加到ECS框架中,使实体上任何一个ECS组件都可以通过 ECS API 获取到视图层对象 */ - load(): Node { - var node = ViewUtil.createPrefabNode("game/battle/role"); - var mv = node.getComponent(RoleViewComp)!; - this.add(mv); - mv.load(); - return node; - } - - /** 移动(ECS System处理逻辑,分享功能独立的业务代码) */ - move(target: Vec3) { - var move = this.add(MoveToComp); - move.target = target; - move.node = this.RoleView.node; - move.speed = 100; - } - - /** 攻击(DEMO没有战斗逻辑,所以只播放一个动画) */ - attack() { - this.RoleView.animator.setTrigger(RoleAnimatorType.Attack); - } - /** 转职(ECS System处理逻辑,分享功能独立的业务代码) */ changeJob(jobId: number) { var rcj = this.add(RoleChangeJobComp); @@ -92,6 +64,35 @@ export class Role extends ecs.Entity { var ru = this.add(RoleUpgradeComp); ru.lv = lv; } + + /** 移动(ECS System处理逻辑,分享功能独立的业务代码) */ + move(target: Vec3) { + var move = this.add(MoveToComp); + move.target = target; + move.node = this.RoleView.node; + move.speed = 100; + } + + destroy(): void { + // 如果该组件对象是由ecs系统外部创建的,则不可回收,需要用户自己手动进行回收。 + this.remove(RoleViewComp); + super.destroy(); + } + + /** 加载角色显示对象(cc.Component在创建后,添加到ECS框架中,使实体上任何一个ECS组件都可以通过 ECS API 获取到视图层对象 */ + load(parent: Node, pos: Vec3 = Vec3.ZERO) { + var node = ViewUtil.createPrefabNode("game/battle/role"); + var mv = node.getComponent(RoleViewComp)!; + this.add(mv); + + node.parent = parent; + node.setPosition(pos); + } + + /** 攻击(DEMO没有战斗逻辑,所以只播放一个动画) */ + attack() { + this.RoleView.animator.setTrigger(RoleAnimatorType.Attack); + } } export class EcsRoleSystem extends ecs.System { diff --git a/assets/script/game/role/model/RoleModelComp.ts b/assets/script/game/role/model/RoleModelComp.ts index 34bac04..31c96e2 100644 --- a/assets/script/game/role/model/RoleModelComp.ts +++ b/assets/script/game/role/model/RoleModelComp.ts @@ -2,7 +2,7 @@ * @Author: dgflash * @Date: 2021-11-18 15:56:01 * @LastEditors: dgflash - * @LastEditTime: 2022-02-10 10:05:30 + * @LastEditTime: 2022-03-09 15:02:39 */ import { ecs } from "../../../core/libs/ECS"; @@ -40,6 +40,9 @@ export class RoleModelComp extends ecs.Comp { this.vm.name = value; } + /** 动画名资源 */ + anim: string = "model1"; + /** 角色属性 */ attributes: RoleNumericMap = new RoleNumericMap(this.vm); diff --git a/assets/script/game/role/view/RoleViewComp.ts b/assets/script/game/role/view/RoleViewComp.ts index 129fecf..e3dc985 100644 --- a/assets/script/game/role/view/RoleViewComp.ts +++ b/assets/script/game/role/view/RoleViewComp.ts @@ -2,7 +2,7 @@ * @Author: dgflash * @Date: 2021-11-18 17:42:59 * @LastEditors: dgflash - * @LastEditTime: 2022-03-09 14:32:28 + * @LastEditTime: 2022-03-09 15:10:54 */ import { sp, _decorator } from "cc"; @@ -16,47 +16,43 @@ import { RoleViewLoader } from "./component/RoleViewLoader"; const { ccclass, property } = _decorator; -/** 角色显示组件 - 管理业务功能方法的定义与模块之间交互处理 */ +/** 角色显示组件 */ @ccclass('RoleViewComp') @ecs.register('RoleView', false) export class RoleViewComp extends CCComp { @property({ type: sp.Skeleton, tooltip: '角色动画' }) spine: sp.Skeleton = null!; - /** --- 演示视图层业务逻辑分离 --- */ - - /** 资源加载管理 */ + /** 角色动画资源管理 */ loader: RoleViewLoader = null!; - /** 动画状态机 */ + /** 角色动画规则管理 */ animator: RoleViewAnimator = null!; /** 角色控制器 */ controller: RoleViewController = null!; onLoad() { + var role = this.ent as Role; + + this.loader = this.node.addComponent(RoleViewLoader); + this.loader.load(role.RoleModel.anim); + + this.animator = this.spine.getComponent(RoleViewAnimator)!; + this.animator.role = role; + + this.controller = this.node.addComponent(RoleViewController); + this.controller.role = role; + this.on(RoleEvent.ChangeJob, this.onHandler, this); } - /** 全局事件处理器 - 模块之间解耦合 */ private onHandler(event: string, args: any) { switch (event) { case RoleEvent.ChangeJob: - // 切换职业动画 - 演示业务层通过事件控制视图层逻辑,避免两层代码直接偶合 this.animator.refresh(); break; } } - load() { - this.loader = this.node.addComponent(RoleViewLoader); - this.loader.load("model1"); - - this.animator = this.spine.getComponent(RoleViewAnimator)!; - this.animator.role = this.ent as Role; - - this.controller = this.node.addComponent(RoleViewController); - this.controller.role = this.ent as Role; - } - reset() { this.node.destroy(); }