重构继承关系

This commit is contained in:
DESKTOP-5RP3AKU\Jisol
2023-11-01 02:01:35 +08:00
parent e59c5640d7
commit 6ebed0b45e
43 changed files with 496 additions and 524 deletions

View File

@@ -2,7 +2,7 @@
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "fe4e5e9b-d1dc-4aaf-9fa8-d089fd6ca00a",
"uuid": "e6c9fc58-9fb5-4ae1-96b7-a857014d64c3",
"files": [],
"subMetas": {},
"userData": {

View File

@@ -1,7 +1,8 @@
import { Vec2 } from "cc";
import GRoleBase from "../../../role/GRoleBase";
import GFSMBase, { GFSMProcessEnum, GFSMProcessInfo, GFSMProcessMode } from "../../GFSMBase";
import { GRoleUtil } from "../../../../entity/GRole";
import GRoleBase from "../../role/GRoleBase";
import GFSMBase, { GFSMProcessEnum, GFSMProcessInfo, GFSMProcessMode } from "../GFSMBase";
import { GRoleUtil } from "../../../entity/GRole";
import GRoleDefault from "../../role/GRoleDefault";
//流程枚举
@@ -18,18 +19,17 @@ enum ProcessEnum {
ReleaseSkills = 4,
}
export default abstract class GFSMBattle extends GFSMBase{
export default class GFSMDefault extends GFSMBase{
protected _player:() => GRoleBase<{}>;
get player():GRoleBase<{}>{
if(this._player)
return this._player();
return null;
_player:() => GRoleDefault;
get player(): GRoleDefault {
return this._player();
}
//锁定的敌人
_enemy:() => GRoleBase<any>;
get enemy():GRoleBase<{}>{
_enemy:() => GRoleDefault;
get enemy():GRoleDefault{
if(this._enemy)
return this._enemy();
return null;
@@ -56,9 +56,9 @@ export default abstract class GFSMBattle extends GFSMBase{
to:[ProcessEnum.SeekEnemy,ProcessEnum.ReleaseSkills],//移动回阵型 释放技能
},
[ProcessEnum.MoveToTactical]:{
title:"移动回阵型",
title:"获取初始点",
mode:GFSMProcessMode.WaitExecute,
execute: this.onMoveToTacticalProcess.bind(this),
execute: this.onMoveToInitPosProcess.bind(this),
to:[ProcessEnum.SeekEnemy],//移动回阵型
},
[ProcessEnum.ReleaseSkills]:{
@@ -69,12 +69,16 @@ export default abstract class GFSMBattle extends GFSMBase{
}
}
constructor(player:GRoleBase<{}>){
constructor(player:GRoleDefault){
super();
this._player = GRoleUtil.get(player);
}
abstract onSeekEnemy():GRoleBase<any>;
//寻敌
onSeekEnemy(): GRoleDefault {
return this.player.onQueryEunmy();
}
//寻敌流程
onSeekEnemyProcess(dt:number):number{
@@ -126,7 +130,7 @@ export default abstract class GFSMBattle extends GFSMBase{
}
//移动回阵型
onMoveToTacticalProcess(dt:number){
onMoveToInitPosProcess(dt:number){
//播放移动
this.player.fsmAnim.isMove = true;

View File

@@ -2,7 +2,7 @@
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "559e87e4-5a3f-4cc2-873d-e0fb5b61375b",
"uuid": "37959c38-50cc-430a-b892-ef0e6df3f15d",
"files": [],
"subMetas": {},
"userData": {}

View File

@@ -0,0 +1,82 @@
import { GFSMAnimBase, GFSMProcessAnimInfo } from "../GFSMAnimBase";
//角色动画名称枚举
export enum GFSMBattleAminEnum {
Wait = "std", //等待
Walk = "walk", //移动
Attack = "atk", //攻击
Fly = "jifei", //击飞
}
//流程枚举
enum ProcessEnum {
//等待
Wait = 0,
//移动
Move = 1,
//攻击
Attack = 2,
//死亡
Die = 3,
}
//动画状态机基类
export class GFSMDefaultAnim extends GFSMAnimBase{
//是否攻击
isAttack:boolean = false;
//是否移动
isMove:boolean = false;
//是否死亡
isDie:boolean = false;
// 流程图
process: { [key: number]: GFSMProcessAnimInfo; } = {
[ProcessEnum.Wait]:{
title:"等待",
isLoop:true,
animName:GFSMBattleAminEnum.Wait,
mixs:[0.1,0.1],
to:[ProcessEnum.Move,ProcessEnum.Attack,ProcessEnum.Die],
ifTo:[
() => this.isMove, //前往移动
() => this.isAttack, //前往攻击
() => this.isDie,
],
},
[ProcessEnum.Move]:{
title:"移动",
animName:GFSMBattleAminEnum.Walk,
isLoop:true,
mixs:[0.1,0.1],
to:[ProcessEnum.Wait,ProcessEnum.Attack,ProcessEnum.Die],
ifTo:[
() => !this.isMove, //前往等待
() => this.isAttack, //前往攻击
() => this.isDie,
],
},
[ProcessEnum.Attack]:{
title:"攻击",
animName:GFSMBattleAminEnum.Attack,
isLoop:true,
mixs:[0.1,0.1],
to:[ProcessEnum.Wait,ProcessEnum.Move,ProcessEnum.Die],
ifTo:[
() => !this.isAttack, //前往等待
() => !this.isAttack && this.isMove, //前往移动
() => this.isDie,
],
},
[ProcessEnum.Die]:{
title:"死亡",
animName:GFSMBattleAminEnum.Fly,
isLoop:true,
mixs:[0.1,0.1],
}
}
}

View File

@@ -2,7 +2,7 @@
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "8c02bc4d-30d6-47fe-82ff-e5496d4dca8f",
"uuid": "1016ec33-b6d2-453d-9ee2-6ab7ba5bfb7a",
"files": [],
"subMetas": {},
"userData": {}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "66a8eb65-27e3-4c94-b098-211d582aa677",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "bcd244d3-5392-4926-94f1-3cd24ea2d5c2",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -1,8 +1,6 @@
import { sp } from "cc";
import GFSMBase, { GFSMProcessEnum, GFSMProcessInfo, GFSMProcessMode } from "../../GFSMBase";
import GRoleBase from "../../../role/GRoleBase";
import GRolePVPEntity from "../../../role/PVP/GRolePVPEntity";
import GObject from "../../../GObject";
import GFSMBase, { GFSMProcessEnum, GFSMProcessInfo, GFSMProcessMode } from "./GFSMBase";
import GObject from "../GObject";
//角色动画名称枚举
export enum GFSMBattleAminEnum {
@@ -26,29 +24,8 @@ export interface GFSMProcessAnimInfo extends GFSMProcessInfo{
ifTo?:(() => boolean)[];
}
//流程枚举
enum ProcessEnum {
//等待
Wait = 0,
//移动
Move = 1,
//攻击
Attack = 2,
//死亡
Die = 3,
}
//动画状态机基类
export class GFSMBattleAmin extends GFSMBase{
//是否攻击
isAttack:boolean = false;
//是否移动
isMove:boolean = false;
//是否死亡
isDie:boolean = false;
export abstract class GFSMAnimBase extends GFSMBase{
//轨道的索引
trackIndex:number;
@@ -59,10 +36,10 @@ export class GFSMBattleAmin extends GFSMBase{
events:{event:string,fun:Function}[] = [];
starts:{name:string,fun:Function}[] = [];
constructor(spine:sp.Skeleton,trackIndex?:number){
constructor(spine:sp.Skeleton,trackIndex:number = 0){
super();
this.spine = spine;
this.trackIndex = trackIndex || 0;
this.trackIndex = trackIndex;
//设置监听
this.spine.setEventListener(this.onEventListener.bind(this));
//因为SpineBUG所以不使用Spine监听 采用自己调用
@@ -110,50 +87,7 @@ export class GFSMBattleAmin extends GFSMBase{
}
// 流程图
process: { [key: number]: GFSMProcessAnimInfo; } = {
[ProcessEnum.Wait]:{
title:"等待",
isLoop:true,
animName:GFSMBattleAminEnum.Wait,
mixs:[0.1,0.1],
to:[ProcessEnum.Move,ProcessEnum.Attack,ProcessEnum.Die],
ifTo:[
() => this.isMove, //前往移动
() => this.isAttack, //前往攻击
() => this.isDie,
],
},
[ProcessEnum.Move]:{
title:"移动",
animName:GFSMBattleAminEnum.Walk,
isLoop:true,
mixs:[0.1,0.1],
to:[ProcessEnum.Wait,ProcessEnum.Attack,ProcessEnum.Die],
ifTo:[
() => !this.isMove, //前往等待
() => this.isAttack, //前往攻击
() => this.isDie,
],
},
[ProcessEnum.Attack]:{
title:"攻击",
animName:GFSMBattleAminEnum.Attack,
isLoop:true,
mixs:[0.1,0.1],
to:[ProcessEnum.Wait,ProcessEnum.Move,ProcessEnum.Die],
ifTo:[
() => !this.isAttack, //前往等待
() => !this.isAttack && this.isMove, //前往移动
() => this.isDie,
],
},
[ProcessEnum.Die]:{
title:"死亡",
animName:GFSMBattleAminEnum.Fly,
isLoop:true,
mixs:[0.1,0.1],
}
}
process: { [key: number]: GFSMProcessAnimInfo; } = {}
execute(process:GFSMProcessAnimInfo,dt:number){
process.ifTo = process.ifTo || [];
@@ -188,8 +122,7 @@ export class GFSMBattleAmin extends GFSMBase{
//播放动画
if(!info.track){
console.log(`播放动画-${this.spine.getComponent(GObject).nId}-`,info);
info.track = this.spine.setAnimation(this.trackIndex,info.animName,info.isLoop);
// this.onStartListener(info.track);
info.track = this.spine.setAnimation(this.trackIndex,info.animName,!!info.isLoop);
}
return to;

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "dda21a8f-93da-4421-a0d9-bda29817a6c9",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -1,25 +0,0 @@
import { GRoleUtil } from "../../../entity/GRole";
import GRoleBase from "../../role/GRoleBase";
import GRolePVPEntity from "../../role/PVP/GRolePVPEntity";
import GFSMBattle from "../base/GFSMBattle/GFSMBattle";
//PVP 状态机
export default class GFSMPVP extends GFSMBattle{
get player(): GRolePVPEntity {
return super.player as GRolePVPEntity;
}
constructor(player:GRolePVPEntity){
super(player);
this._player = GRoleUtil.get(player);
}
//寻敌
onSeekEnemy(): GRoleBase<any> {
return this.player.mode.getEnumy(this.player);
}
}

View File

@@ -1,6 +0,0 @@
import { GFSMBattleAmin } from "../base/GFSMBattle/GFSMBattleAmin";
export default class GFSMPVPAnim extends GFSMBattleAmin{
}

View File

@@ -1,12 +0,0 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "552fd09c-0320-46c9-ac7a-abe954b75093",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

View File

@@ -1,12 +0,0 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "05230b14-5c88-45fd-99c6-31b4b0513f45",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}