mirror of
https://gitee.com/dgflash/oops-framework.git
synced 2026-05-31 18:59:19 +08:00
.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user