102 lines
3.3 KiB
TypeScript
Raw Normal View History

2023-10-23 18:56:01 +08:00
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() {
2023-10-25 02:31:51 +08:00
return "ws://localhost:8080/websocket";
2023-10-23 18:56:01 +08:00
}
}
// 重写帧同步
class JNGSyncFrame extends JNSyncFrame{
protected onResetValue(){
//重置状态机
BehaviorManager.deleteInstance();
super.onResetValue();
}
async onServerData(start?:number,end?:number): Promise<JNFrameInfos> {
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<T> extends JNSyncFrameComponent<T>{
2023-10-24 19:12:25 +08:00
onSyncLoad() { }
2023-10-23 18:56:01 +08:00
onSyncUpdate(dt: number,frame:JNFrameInfo, input?: T) { }
protected getSync(): JNSyncFrame {
return app.sync
}
}
//重写Sync Proto Base
export abstract class JNGSyncProtoBase<T> extends JNSyncFrameProtoComponent<T>{
2023-10-24 19:12:25 +08:00
onSyncLoad() { }
2023-10-23 18:56:01 +08:00
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({
2023-10-25 02:31:51 +08:00
baseURL: "http://localhost:8080",
2023-10-23 18:56:01 +08:00
}), //请求
battle : GBattleModeManager.getIns(), //战斗
}