mirror of
https://gitee.com/dgflash/oops-framework.git
synced 2026-05-22 14:37:06 +08:00
.
This commit is contained in:
@@ -189,29 +189,6 @@
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "61JRCu+yBFXqyPTQa3ds3z"
|
||||
},
|
||||
{
|
||||
"__type__": "c91b7jt8ipKHaJ87Nnfd3u5",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 7
|
||||
},
|
||||
"AssetRawUrl": {
|
||||
"__uuid__": "6ee5f40e-b1b2-47a9-b428-4147a1bd955a",
|
||||
"__expectedType__": "cc.JsonAsset"
|
||||
},
|
||||
"PlayOnStart": true,
|
||||
"AutoUpdate": true,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "064F3CrXRFH5675vAKcM65"
|
||||
},
|
||||
{
|
||||
"__type__": "sp.Skeleton",
|
||||
"_name": "",
|
||||
@@ -222,7 +199,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
"__id__": 7
|
||||
},
|
||||
"_visFlags": 0,
|
||||
"_customMaterial": null,
|
||||
@@ -255,6 +232,29 @@
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "75PJPRcM5F2ai9GB8vX0Ni"
|
||||
},
|
||||
{
|
||||
"__type__": "100adZTIqRBJqNLcy81+N4b",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 3
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 9
|
||||
},
|
||||
"AssetRawUrl": {
|
||||
"__uuid__": "6ee5f40e-b1b2-47a9-b428-4147a1bd955a",
|
||||
"__expectedType__": "cc.JsonAsset"
|
||||
},
|
||||
"PlayOnStart": true,
|
||||
"AutoUpdate": true,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "908ZWdysNJzqq4N39wqa7Q"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": null,
|
||||
@@ -337,7 +337,7 @@
|
||||
"__id__": 17
|
||||
},
|
||||
"spine": {
|
||||
"__id__": 8
|
||||
"__id__": 6
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
@@ -82,7 +82,8 @@ export class AccountNetDataSystem extends ecs.ComblockSystem implements ecs.IEnt
|
||||
role.RoleBaseModel.physical = data.physical;
|
||||
|
||||
// 角色等级数据
|
||||
role.RoleLevelModel.lv = data.lv;
|
||||
// role.RoleLevelModel.lv = data.lv;
|
||||
role.upgrade(data.lv);
|
||||
|
||||
// 角色职业数据
|
||||
role.RoleJobModel.id = data.jobId;
|
||||
|
||||
@@ -16,7 +16,7 @@ export class MoveToComp extends ecs.Comp {
|
||||
node: Node = null!;
|
||||
/** 移动方向 */
|
||||
velocity: Vec3 = Vec3Util.zero;
|
||||
/** 移动速度 */
|
||||
/** 移动速度(每秒移动的像素距离) */
|
||||
speed: number = 0;
|
||||
/** 目标实体ECS编号、目标位置 */
|
||||
target: Vec3 | Node | null = null;
|
||||
|
||||
@@ -10,6 +10,7 @@ import { ecs } from "../../core/libs/ECS";
|
||||
import { ViewUtil } from "../../core/utils/ViewUtil";
|
||||
import { MoveToComp } from "../common/ecs/position/MoveTo";
|
||||
import { RoleChangeJobComp } from "./bll/RoleChangeJob";
|
||||
import { RoleUpgradeComp } from "./bll/RoleUpgrade";
|
||||
import { RoleBaseModelComp } from "./model/RoleBaseModelComp";
|
||||
import { RoleAnimatorType } from "./model/RoleEnum";
|
||||
import { RoleJobModelComp } from "./model/RoleJobModelComp";
|
||||
@@ -34,8 +35,9 @@ export class Role extends ecs.Entity {
|
||||
RoleJobModel!: RoleJobModelComp;
|
||||
RoleLevelModel!: RoleLevelModelComp;
|
||||
|
||||
// 玩法层
|
||||
// 业务层
|
||||
RoleChangeJob!: RoleChangeJobComp;
|
||||
RoleUpgrade!: RoleUpgradeComp;
|
||||
|
||||
// 视图层
|
||||
RoleView!: RoleViewComp;
|
||||
@@ -69,7 +71,7 @@ export class Role extends ecs.Entity {
|
||||
move.speed = 100;
|
||||
}
|
||||
|
||||
/** 攻击 */
|
||||
/** 攻击(DEMO没有战斗逻辑,所以只播放一个动画) */
|
||||
attack() {
|
||||
this.RoleView.animator.setTrigger(RoleAnimatorType.Attack);
|
||||
}
|
||||
@@ -80,8 +82,9 @@ export class Role extends ecs.Entity {
|
||||
rcj.jobId = jobId;
|
||||
}
|
||||
|
||||
/** 角色升级 */
|
||||
upgrade() {
|
||||
if (this.RoleLevelModel.lv < 100) this.RoleLevelModel.lv++;
|
||||
/** 角色升级(升级只修改数据,通过MVVM级件自动绑定等级变化后的界面角色生命属性刷新) */
|
||||
upgrade(lv: number = 0) {
|
||||
var ru = this.add(RoleUpgradeComp);
|
||||
ru.lv = lv;
|
||||
}
|
||||
}
|
||||
@@ -6,11 +6,13 @@
|
||||
*/
|
||||
import { ecs } from "../../../core/libs/ECS";
|
||||
import { RoleChangeJobSystem } from "./RoleChangeJob";
|
||||
import { RoleUpgradeSystem } from "./RoleUpgrade";
|
||||
|
||||
export class EcsRoleSystem extends ecs.System {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.add(new RoleChangeJobSystem());
|
||||
this.add(new RoleUpgradeSystem());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
import { ecs } from "../../../core/libs/ECS";
|
||||
import { RoleJobModelComp } from "../model/RoleJobModelComp";
|
||||
import { Role } from "../Role";
|
||||
|
||||
/**
|
||||
@@ -32,7 +33,7 @@ export class RoleChangeJobComp extends ecs.Comp {
|
||||
|
||||
export class RoleChangeJobSystem extends ecs.ComblockSystem implements ecs.IEntityEnterSystem {
|
||||
filter(): ecs.IMatcher {
|
||||
return ecs.allOf(RoleChangeJobComp);
|
||||
return ecs.allOf(RoleChangeJobComp, RoleJobModelComp);
|
||||
}
|
||||
|
||||
entityEnter(entities: Role[]): void {
|
||||
|
||||
47
assets/script/game/role/bll/RoleUpgrade.ts
Normal file
47
assets/script/game/role/bll/RoleUpgrade.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { ecs } from "../../../core/libs/ECS";
|
||||
import { RoleAttributeType } from "../model/RoleEnum";
|
||||
import { RoleLevelModelComp } from "../model/RoleLevelModelComp";
|
||||
import { Role } from "../Role";
|
||||
|
||||
/**
|
||||
* 角色升级
|
||||
*/
|
||||
@ecs.register('RoleUpgrade')
|
||||
export class RoleUpgradeComp extends ecs.Comp {
|
||||
/** 当前等级 */
|
||||
lv: number = 0;
|
||||
|
||||
reset() {
|
||||
this.lv = 0;
|
||||
}
|
||||
}
|
||||
|
||||
export class RoleUpgradeSystem extends ecs.ComblockSystem implements ecs.IEntityEnterSystem {
|
||||
filter(): ecs.IMatcher {
|
||||
return ecs.allOf(RoleUpgradeComp, RoleLevelModelComp);
|
||||
}
|
||||
|
||||
entityEnter(entities: Role[]): void {
|
||||
for (let e of entities) {
|
||||
let rm = e.RoleModel;
|
||||
let rlm = e.RoleLevelModel;
|
||||
let ru = e.RoleUpgrade;
|
||||
|
||||
if (ru.lv == 0)
|
||||
rlm.vm.lv++; // 提升一级
|
||||
else
|
||||
rlm.vm.lv = ru.lv; // 设置等级
|
||||
|
||||
// 当前等级配置
|
||||
rlm.rtluCurrent.init(rlm.vm.lv);
|
||||
// 等级附加属性
|
||||
rm.attributes.get(RoleAttributeType.hp).level = rlm.rtluCurrent.hp;
|
||||
|
||||
// 下个等级配置
|
||||
rlm.rtluNext.init(rlm.vm.lv + 1);
|
||||
rlm.vm.expNext = rlm.rtluNext.needexp;
|
||||
|
||||
e.remove(RoleUpgradeComp);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "c91b78ed-f22a-4a1d-a27c-ecd9df777bb9",
|
||||
"uuid": "7750b9a2-9bdc-408e-a020-aef84fe6c85e",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
@@ -63,7 +63,7 @@ export class RoleBaseModelComp extends ecs.Comp {
|
||||
this.agile = 0;
|
||||
|
||||
for (var key in this.vm) {
|
||||
delete this.vm[key];
|
||||
this.vm[key] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,8 +6,6 @@
|
||||
*/
|
||||
|
||||
import { ecs } from "../../../core/libs/ECS";
|
||||
import { RoleAttributeType } from "./RoleEnum";
|
||||
import { RoleModelComp } from "./RoleModelComp";
|
||||
import { RoleTableLevelUp } from "./RoleTableLevelUp";
|
||||
|
||||
/**
|
||||
@@ -23,46 +21,28 @@ import { RoleTableLevelUp } from "./RoleTableLevelUp";
|
||||
@ecs.register('RoleLevelModel')
|
||||
export class RoleLevelModelComp extends ecs.Comp {
|
||||
/** 提供 VM 组件使用的数据 */
|
||||
vm: any = {};
|
||||
vm: RoleLevelVM = new RoleLevelVM();
|
||||
/** 下个等级配置 */
|
||||
rtluNext: RoleTableLevelUp = new RoleTableLevelUp();
|
||||
/** 当前等级配置 */
|
||||
rtluCurrent: RoleTableLevelUp = new RoleTableLevelUp();
|
||||
|
||||
/** 当前等级已获取的经验值 */
|
||||
private _exp: number = 0;
|
||||
public get exp(): number {
|
||||
return this._exp;
|
||||
}
|
||||
public set exp(value: number) {
|
||||
this._exp = value;
|
||||
this.vm.exp = value;
|
||||
reset() {
|
||||
this.vm.reset();
|
||||
}
|
||||
}
|
||||
|
||||
private _lv: number = 0;
|
||||
/** 等级 */
|
||||
public get lv(): number {
|
||||
return this._lv;
|
||||
}
|
||||
public set lv(value: number) {
|
||||
this._lv = value;
|
||||
this.vm.lv = value;
|
||||
this.ent.get(RoleModelComp).attributes.get(RoleAttributeType.hp).level = this.rtlu.hp;
|
||||
}
|
||||
|
||||
private _rtlu: RoleTableLevelUp = null!;
|
||||
/** 升级后的变化属性 */
|
||||
get rtlu(): RoleTableLevelUp {
|
||||
if (this._rtlu == null)
|
||||
this._rtlu = new RoleTableLevelUp(this.lv);
|
||||
else if (this._rtlu.key != this.lv)
|
||||
this._rtlu.init(this.lv);
|
||||
return this._rtlu;
|
||||
}
|
||||
class RoleLevelVM {
|
||||
/** 当前等级 */
|
||||
lv: number = 0;
|
||||
/** 当前经验 */
|
||||
exp: number = 0;
|
||||
/** 下级经验 */
|
||||
expNext: number = 0;
|
||||
|
||||
reset() {
|
||||
this.lv = 0;
|
||||
this.exp = 0;
|
||||
this._rtlu = null!;
|
||||
|
||||
for (var key in this.vm) {
|
||||
delete this.vm[key];
|
||||
}
|
||||
this.expNext = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -48,7 +48,7 @@ export class RoleModelComp extends ecs.Comp {
|
||||
this.name = "";
|
||||
|
||||
for (var key in this.vm) {
|
||||
delete this.vm[key];
|
||||
this.vm[key] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,6 @@ import { JsonUtil } from "../../../core/utils/JsonUtil";
|
||||
export class RoleTableLevelUp {
|
||||
static TableName: string = "herolvup";
|
||||
|
||||
constructor(key: number) {
|
||||
this.init(key);
|
||||
}
|
||||
|
||||
/** 静态表中一条数据 */
|
||||
private data: any;
|
||||
|
||||
|
||||
@@ -17,10 +17,21 @@ import { RoleViewComp } from "./RoleViewComp";
|
||||
|
||||
const { ccclass, property, requireComponent, disallowMultiple } = _decorator;
|
||||
|
||||
@ccclass("RoleViewAnimatorComp")
|
||||
/**
|
||||
* 角色SPINE动画控制
|
||||
*
|
||||
* 实现功能
|
||||
* 1、控制动作变化
|
||||
* 2、控制武器变化
|
||||
* 3、控制脸的朝向
|
||||
*
|
||||
* 技术分析
|
||||
* 1、角色动画组件未绑定到ECS实体上,是因为角色显示对象上就有动画组件的引用,直接可通过角色显示对象获取到动画对象
|
||||
*/
|
||||
@ccclass("RoleViewAnimator")
|
||||
@disallowMultiple
|
||||
@requireComponent(sp.Skeleton)
|
||||
export class RoleViewAnimatorComp extends AnimatorSpine {
|
||||
export class RoleViewAnimator extends AnimatorSpine {
|
||||
/** 攻击行为完成 */
|
||||
onAttackComplete: Function = null!;
|
||||
/** 受击动作完成 */
|
||||
@@ -59,6 +70,7 @@ export class RoleViewAnimatorComp extends AnimatorSpine {
|
||||
|
||||
/** 当前动作换职业动画 */
|
||||
changeJob() {
|
||||
// 状态机状态值未变时,不会触发状态变化事件,所以这里直接触发状态变化事件来触发后续流程
|
||||
this.onStateChange(this._ac.curState, this._ac.curState);
|
||||
}
|
||||
|
||||
9
assets/script/game/role/view/RoleViewAnimator.ts.meta
Normal file
9
assets/script/game/role/view/RoleViewAnimator.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "100ad653-22a4-4126-a34b-732f35f8de1b",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ import { config } from "../../common/config/Config";
|
||||
import { CCComp } from "../../common/ecs/CCComp";
|
||||
import { RoleModelComp } from "../model/RoleModelComp";
|
||||
import { Role } from "../Role";
|
||||
import { RoleViewAnimatorComp } from "./RoleViewAnimatorComp";
|
||||
import { RoleViewAnimator } from "./RoleViewAnimator";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -25,11 +25,11 @@ export class RoleViewComp extends CCComp {
|
||||
spine: sp.Skeleton | null = null;
|
||||
|
||||
/** 动画状态机 */
|
||||
animator: RoleViewAnimatorComp = null!;
|
||||
animator: RoleViewAnimator = null!;
|
||||
|
||||
onLoad() {
|
||||
this.node.active = false;
|
||||
this.animator = this.spine!.getComponent(RoleViewAnimatorComp)!;
|
||||
this.animator = this.spine!.getComponent(RoleViewAnimator)!;
|
||||
}
|
||||
|
||||
load() {
|
||||
|
||||
Reference in New Issue
Block a user