PC-20230316NUNE\Administrator 77d44ee300 update
2023-10-23 18:56:01 +08:00

112 lines
3.5 KiB
TypeScript

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://192.168.0.127:8080/websocket";
}
}
// 重写帧同步
class JNGSyncFrame extends JNSyncFrame{
//更新
protected onUpdate(): JNFrameInfo {
let info = super.onUpdate();
if(info){
//更新状态机
BehaviorManager.getInstance().tick(this.dt);
}
return info;
}
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>{
onSyncUpdate(dt: number,frame:JNFrameInfo, input?: T) { }
protected getSync(): JNSyncFrame {
return app.sync
}
}
//重写Sync Proto Base
export abstract class JNGSyncProtoBase<T> extends JNSyncFrameProtoComponent<T>{
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://192.168.0.127:8080",
}), //请求
battle : GBattleModeManager.getIns(), //战斗
}