import { BehaviorManager } from "../../extensions/Behavior Creator/runtime/main"; import JNSocket from "../../extensions/ngame/assets/ngame/network/JNSocket"; import { JNSyncAction } from "../../extensions/ngame/assets/ngame/sync/JNSyncAction"; import { JNSyncMessage } from "../../extensions/ngame/assets/ngame/sync/JNSyncMessage"; import JNSyncFrame, { JNFrameInfo, JNFrameInfos, JNFrameInputs } from "../../extensions/ngame/assets/ngame/sync/frame/JNSyncFrame"; import JNSyncFrameComponent from "../../extensions/ngame/assets/ngame/sync/frame/game/JNSyncFrameComponent"; import JNSyncFrameProtoComponent from "../../extensions/ngame/assets/ngame/sync/frame/game/JNSyncFrameProtoComponent"; import JNLayer, { JNLayerAnim, JNLayerInfo } from "../../extensions/ngame/assets/ngame/ui/JNLayer"; import JNLayerBase from "../../extensions/ngame/assets/ngame/ui/base/JNLayerBase"; import { EventDispatcher } from "../../extensions/ngame/assets/ngame/util/EventDispatcher"; import NGameMessage from "../../extensions/ngame/assets/ngame/util/NGameMessage"; import axios from "../../extensions/ngame/assets/plugins/axios.js"; import GBattleModeManager from "./battle/GBattleModeManager"; import { GLayer, UIConfig } from "./ui/UIConfig"; //重写UI class JNGLayer extends JNLayer{ layers: string[] = [GLayer.View]; views: { [key: string]: JNLayerInfo; } = UIConfig; } //重写Socket class JNGSocket extends JNSocket{ public url() { return "ws://localhost:8080/websocket"; } } // 重写帧同步 class JNGSyncFrame extends JNSyncFrame{ protected onResetValue(){ //重置状态机 BehaviorManager.deleteInstance(); super.onResetValue(); } async onServerData(start?:number,end?:number): Promise { return app.proto .getType(JNSyncMessage.JNFrameInfos) .decode( new Uint8Array( (await app.api.get("/sync/frame",{ responseType:'arraybuffer', params:{ start, end } })).data ) ) as any; } onSendInput(message: JNFrameInputs) { app.socket.Send(JNSyncAction.NSyncFrameInput,message,JNSyncMessage.JNFrameInputs); } } //重写UI Base export class JNGLayerBase extends JNLayerBase{ public close():void { console.log("close"); app.layer.CloseNode(this.node); } } //重写Sync Base export class JNGSyncBase extends JNSyncFrameComponent{ onSyncUpdate(dt: number,frame:JNFrameInfo, input?: T) { } protected getSync(): JNSyncFrame { return app.sync } } //重写Sync Proto Base export abstract class JNGSyncProtoBase extends JNSyncFrameProtoComponent{ onSyncUpdate(dt: number,frame:JNFrameInfo, input?: T) { } protected getSync(): JNSyncFrame { return app.sync } } export const app = { layer : new JNGLayer(), //UI socket : new JNGSocket(), //Socket sync : new JNGSyncFrame(), //同步 event : EventDispatcher.getIns(), //通知 proto : NGameMessage.getIns(), //消息 api : axios.create({ baseURL: "http://localhost:8080", }), //请求 battle : GBattleModeManager.getIns(), //战斗 }