This commit is contained in:
dgflash
2022-02-07 16:43:15 +08:00
parent a6cd4920c5
commit 511c1c6c14
15 changed files with 133 additions and 82 deletions

View File

@@ -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": ""
},

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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());
}
}

View File

@@ -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 {

View 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);
}
}
}

View File

@@ -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": {}

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -17,10 +17,21 @@ import { RoleViewComp } from "./RoleViewComp";
const { ccclass, property, requireComponent, disallowMultiple } = _decorator;
@ccclass("RoleViewAnimatorComp")
/**
* SPINE动画控制
*
*
* 1
* 2
* 3
*
*
* 1ECS实体上
*/
@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);
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "100ad653-22a4-4126-a34b-732f35f8de1b",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -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() {