mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-06-26 03:14:47 +00:00
模式状态机
This commit is contained in:
parent
ca5fa0cc92
commit
2eca21dab1
@ -17,7 +17,7 @@ export class WorldCanvas extends Component {
|
||||
@property([Prefab])
|
||||
prefabs:Prefab[] = [];
|
||||
|
||||
index:number = 0;
|
||||
index:number = 1;
|
||||
|
||||
async onLoad(){
|
||||
|
||||
|
@ -189,6 +189,11 @@ export default class GFSMDefault extends GFSMBase{
|
||||
|
||||
}
|
||||
|
||||
//获取 寻找敌人状态
|
||||
getSeekEnemyProcessEnum(){
|
||||
return ProcessEnum.SeekEnemy;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -15,8 +15,16 @@ import JNFrameTime from "../../../../extensions/ngame/assets/ngame/sync/frame/ga
|
||||
import { TableGMap } from "../../../resources/config/ts/TableGMap";
|
||||
import { app } from "../../App";
|
||||
import { v3 } from "cc";
|
||||
import { v2 } from "cc";
|
||||
import GFSMOnHookMode from "./OnHook/GFSMOnHookMode";
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
//挂机模式状态
|
||||
export enum GOnHookModeState{
|
||||
GoTarget,//前往目标
|
||||
Attack, //攻击
|
||||
AttackEnd, //攻击结束
|
||||
}
|
||||
|
||||
//角色
|
||||
export enum GOnHookModePlayerEnum{
|
||||
@ -71,11 +79,23 @@ export default class GOnHookMode extends GBaseMode<{}>{
|
||||
//敌方宠物
|
||||
enemyRoles: GRoleDefault[] = [];
|
||||
|
||||
offsetX:number = 0;
|
||||
|
||||
//地图信息
|
||||
mapInfo:TableGMap;
|
||||
|
||||
//每一波怪的距离
|
||||
everyX:number = 1000;
|
||||
|
||||
//下一波怪的对战位置X
|
||||
_nextFightX:number = 0;
|
||||
get nextFightX(){return this._nextFightX}
|
||||
set nextFightX(value:number){
|
||||
//修改玩家阵法位置
|
||||
this.playerInfo.tactical.setOffset(this.playerPos.clone().add(v2(value,0)))
|
||||
this._nextFightX = value;
|
||||
}
|
||||
|
||||
fsm:GFSMOnHookMode;
|
||||
|
||||
onSyncInitSuccess():void{
|
||||
|
||||
//初始化战斗
|
||||
@ -85,6 +105,9 @@ export default class GOnHookMode extends GBaseMode<{}>{
|
||||
let camreaPos = this.camera.node.worldPosition;
|
||||
this.camera.node.worldPosition = v3(0,100,camreaPos.z)
|
||||
|
||||
//初始化状态机
|
||||
this.fsm = new GFSMOnHookMode(this);
|
||||
|
||||
//初始化地图
|
||||
this.mapInfo = TableGMap.getConfig(60001);
|
||||
this.map1.init(app.battleRes.maps[60001][0],1);
|
||||
@ -99,12 +122,38 @@ export default class GOnHookMode extends GBaseMode<{}>{
|
||||
|
||||
//生成玩家
|
||||
this.playerInfo.roles.forEach((info,index) => this.onGenRole(GOnHookModePlayerEnum.PLAYER,index + 1,info))
|
||||
//生成敌人
|
||||
this.onResetGenerateEnemy();
|
||||
|
||||
JNFrameTime.getInstance().setTimeout(() => {
|
||||
//下一波怪
|
||||
this.onNextTarget();
|
||||
})
|
||||
// //生成敌人
|
||||
// this.onResetGenerateEnemy();
|
||||
|
||||
}
|
||||
|
||||
onSyncUpdate(dt: number,frame:JNFrameInfo, input?: {}){
|
||||
super.onSyncUpdate(dt,frame,input);
|
||||
this.onUpdateCamera(dt);
|
||||
this.fsm.onUpdate(dt,frame);
|
||||
}
|
||||
|
||||
//更新相机逻辑
|
||||
onUpdateCamera(dt:number){
|
||||
|
||||
//如果没有敌人相机永远锁定最前面的宠物
|
||||
if(!this.isHaveEnemy()){
|
||||
|
||||
//获取冲到最前面的宠物
|
||||
let roles = this.getOnesRole(GOnHookModePlayerEnum.PLAYER);
|
||||
let frontRole = roles.sort((role1,role2) => role2.v2World.x - role1.v2World.x)[0];
|
||||
if(!frontRole) return;
|
||||
|
||||
//设置相机 位置
|
||||
let cameraWorld = this.camera.node.worldPosition.clone();
|
||||
this.camera.node.worldPosition = cameraWorld.lerp(v3(frontRole.v2World.x,cameraWorld.y,cameraWorld.z),(dt / 1000));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -144,6 +193,12 @@ export default class GOnHookMode extends GBaseMode<{}>{
|
||||
if(type == GOnHookModePlayerEnum.ENEMY) return this.enemyRoles;
|
||||
}
|
||||
|
||||
//获取存活的宠物
|
||||
getOnesRoleAlive(type: GOnHookModePlayerEnum):GRoleDefault[]{
|
||||
if(type == GOnHookModePlayerEnum.PLAYER) return this.playerRoles.filter(role => !!role.get());
|
||||
if(type == GOnHookModePlayerEnum.ENEMY) return this.enemyRoles.filter(role => !!role.get());
|
||||
}
|
||||
|
||||
//获取敌人
|
||||
getEnumy(player:GRoleDefault,type:GOnHookModePlayerEnum):GRoleDefault{
|
||||
|
||||
@ -152,13 +207,13 @@ export default class GOnHookMode extends GBaseMode<{}>{
|
||||
if(type == GOnHookModePlayerEnum.ENEMY) enumyOnes = GOnHookModePlayerEnum.PLAYER
|
||||
|
||||
//获取敌人
|
||||
let roles = this.getOnesRole(enumyOnes);
|
||||
let roles = this.getOnesRoleAlive(enumyOnes);
|
||||
|
||||
//返回敌人
|
||||
//获取我在第几排
|
||||
let playerXY = player.tactical.getXY(player.tacticalIndex);
|
||||
//通过排数获取最近的敌人
|
||||
let sort = roles.filter(role => !!role.get()).sort((enumy1,enumy2) => {
|
||||
let sort = roles.sort((enumy1,enumy2) => {
|
||||
let enumy1XY = enumy1.tactical.getXY(enumy1.tacticalIndex);
|
||||
let enumy2XY = enumy2.tactical.getXY(enumy2.tacticalIndex);
|
||||
return Math.abs((playerXY.y * 1000) - (enumy1XY.y * 1000)) + Math.abs((playerXY.x - enumy1XY.x)) -
|
||||
@ -181,11 +236,27 @@ export default class GOnHookMode extends GBaseMode<{}>{
|
||||
if(role.isValid)
|
||||
role.node.destroy()
|
||||
},3000)
|
||||
//如果没有敌人则生成敌人
|
||||
if(this.getOnesRole(GOnHookModePlayerEnum.ENEMY).filter(role => !!role.get()).length <= 0){
|
||||
//生成敌人
|
||||
this.onResetGenerateEnemy();
|
||||
// //如果没有敌人则生成敌人
|
||||
// if(this.getOnesRole(GOnHookModePlayerEnum.ENEMY).filter(role => !!role.get()).length <= 0){
|
||||
// //生成敌人
|
||||
// this.onResetGenerateEnemy();
|
||||
// }
|
||||
}
|
||||
|
||||
//是否有怪物
|
||||
isHaveEnemy(){
|
||||
return this.getOnesRoleAlive(GOnHookModePlayerEnum.ENEMY).filter(role => !!role.get()).length > 0;
|
||||
}
|
||||
|
||||
//前往下一个目标
|
||||
onNextTarget(){
|
||||
|
||||
//如果没有敌人则前往
|
||||
if(!this.isHaveEnemy()){
|
||||
//下一个目标点
|
||||
this.nextFightX = this.nextFightX + this.everyX;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,28 @@
|
||||
import GFSMBase, { GFSMProcessInfo } from "../../base/fsm/GFSMBase";
|
||||
import GOnHookMode from "../GOnHookMode";
|
||||
|
||||
//流程枚举
|
||||
enum ProcessEnum {
|
||||
SeekEnemy = 0, //寻找敌人(场上没有敌人 或者敌人都击杀完)
|
||||
GenNextFight = 1, //下一个战斗位置
|
||||
LeaveFight = 2, //前往战斗
|
||||
GenEnemy = 3, //生成敌人
|
||||
Fight = 4, //战斗
|
||||
}
|
||||
|
||||
//无限模式的状态类
|
||||
export default class GFSMOnHookMode extends GFSMBase{
|
||||
mode:GOnHookMode;
|
||||
|
||||
constructor(mode:GOnHookMode){
|
||||
super();
|
||||
this.mode = mode;
|
||||
}
|
||||
|
||||
process:{[key:number]:GFSMProcessInfo} = {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user