using System.Collections.Generic; using Game.Input; using Game.JNGFrame.Logic; using Game.JNGFrame.Logic.Entity; using Game.JNGFrame.View; using Game.JNGState.Logic.Data; using Game.Logic.System; using Game.Logic.System.Logic; using Game.Logic.System.Usual; using JNGame.Sync.Entity; using JNGame.Sync.State; using JNGame.Sync.System; using JNGame.Sync.System.Data; using JNGame.Network.Action; namespace AppGame.Sync { /// /// 状态同步[服务器] /// public class JNGStateServerSystem : JNSStateServerService { protected List Inputs = new(); public override SLogicSystem[] NewLogicSystems() { return new SLogicSystem[] { //基础数据 new DInputSystem(), //游戏输入 new DDataSystem(), //游戏数据 //逻辑层 new DMapSystem(), //游戏地图 new DWorldSystem(), //游戏逻辑 new DPlayerSystem(), //玩家逻辑 new DBossSystem(), //Boss逻辑 }; } public override SDataSystemBase[] NewDataSystems() { return new SDataSystemBase[] { new EDNodeDataSystem(SStateDataEnum.ServerClient), //游戏数据 new EDPlayerDataSystem(SStateDataEnum.ServerClient), //游戏数据 }; } public override SViewSystem[] NewViewSystems() { return new SViewSystem[] { //视图层 new DViewSystem(), //游戏视图 }; } public override JNContexts CreateContexts() { return new EDContexts(); } protected override void OnRunSimulate() { //插入未处理输入 foreach (var input in Inputs) { GetSystem().Enqueue(input); } Inputs.Clear(); base.OnRunSimulate(); //发送输入 OnSendInput(); } /// /// 发送输入 (正常服务器是不需要发送输入的 这里用于测试) /// protected void OnSendInput() { var inputs = GetSystem().Dequeue(); if (inputs.Inputs.Count > 0) { //发送帧数据给服务端 App.Business.Send((int)NActionEnum.NSyncFrameInput,inputs); } } /// /// 添加输入 /// public void AddInput(JNFrameInfo info) { foreach (var input in info.Messages) { Inputs.Add(input); } } } }