JisolGame/JNFrame2/Assets/Scripts/Samples/AppGame/Sync/JNGStateServerSystem.cs
DESKTOP-5RP3AKU\Jisol e77dd9e841 提交
2024-11-24 19:33:12 +08:00

109 lines
3.0 KiB
C#

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;
using Samples.AppGame;
namespace AppGame.Sync
{
/// <summary>
/// 状态同步[服务器]
/// </summary>
public class JNGStateServerSystem : JNSStateServerService
{
protected List<JNFrameInput> 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<DInputSystem>().Enqueue(input);
}
Inputs.Clear();
base.OnRunSimulate();
//发送输入
OnSendInput();
}
/// <summary>
/// 发送输入 (正常服务器是不需要发送输入的 这里用于测试)
/// </summary>
protected void OnSendInput()
{
var inputs = GetSystem<DInputSystem>().UIInputDequeue();
if (inputs.Inputs.Count > 0)
{
//发送帧数据给服务端
App.Business.Send((int)NActionEnum.NSyncFrameInput,inputs);
}
}
/// <summary>
/// 添加输入
/// </summary>
public void AddInput(JNFrameInfo info)
{
foreach (var input in info.Messages)
{
Inputs.Add(input);
}
}
}
}