diff --git a/JisolGameCocos/assets/script/WorldCanvas.ts b/JisolGameCocos/assets/script/WorldCanvas.ts index 9e0a9ff0..8f12b792 100644 --- a/JisolGameCocos/assets/script/WorldCanvas.ts +++ b/JisolGameCocos/assets/script/WorldCanvas.ts @@ -17,7 +17,7 @@ export class WorldCanvas extends Component { @property([Prefab]) prefabs:Prefab[] = []; - index:number = 0; + index:number = 1; async onLoad(){ diff --git a/JisolGameCocos/assets/script/battle/base/fsm/Default/GFSMDefault.ts b/JisolGameCocos/assets/script/battle/base/fsm/Default/GFSMDefault.ts index 9d46e902..b73bcbb8 100644 --- a/JisolGameCocos/assets/script/battle/base/fsm/Default/GFSMDefault.ts +++ b/JisolGameCocos/assets/script/battle/base/fsm/Default/GFSMDefault.ts @@ -189,6 +189,11 @@ export default class GFSMDefault extends GFSMBase{ } + //获取 寻找敌人状态 + getSeekEnemyProcessEnum(){ + return ProcessEnum.SeekEnemy; + } + } diff --git a/JisolGameCocos/assets/script/battle/modes/GOnHookMode.ts b/JisolGameCocos/assets/script/battle/modes/GOnHookMode.ts index 22d154c2..ec777eb0 100644 --- a/JisolGameCocos/assets/script/battle/modes/GOnHookMode.ts +++ b/JisolGameCocos/assets/script/battle/modes/GOnHookMode.ts @@ -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; } + } } diff --git a/JisolGameCocos/assets/script/battle/modes/OnHook/GFSMOnHookMode.ts b/JisolGameCocos/assets/script/battle/modes/OnHook/GFSMOnHookMode.ts new file mode 100644 index 00000000..253542c9 --- /dev/null +++ b/JisolGameCocos/assets/script/battle/modes/OnHook/GFSMOnHookMode.ts @@ -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} = { + + } + +} + +