mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-09-27 10:46:17 +00:00
完美
This commit is contained in:
@@ -46,17 +46,21 @@ namespace JNGame.Sync.System.View
|
||||
|
||||
protected abstract KeyValue<Type, int> TClass { get; }
|
||||
protected Dictionary<Type, JNInputBase> TNewClass = new ();
|
||||
protected readonly Dictionary<int, JNInputBase> Inputs = new ();
|
||||
protected readonly Dictionary<int, JNInputBase> UIInputs = new ();
|
||||
protected readonly Dictionary<int, Dictionary<int,JNInputBase>> SInputs = new ();
|
||||
|
||||
protected Dictionary<int,JNFrameInput> frame = new();
|
||||
protected Dictionary<int,List<JNFrameInput>> frame = new();
|
||||
|
||||
/// <summary>
|
||||
/// 移入数据
|
||||
/// </summary>
|
||||
public void Enqueue(JNFrameInput input)
|
||||
{
|
||||
frame[input.NId] = input;
|
||||
if (!frame.ContainsKey(input.NId))
|
||||
{
|
||||
frame[input.NId] = new List<JNFrameInput>();
|
||||
}
|
||||
frame[input.NId].Add(input);
|
||||
}
|
||||
|
||||
protected JNInputSystem()
|
||||
@@ -130,11 +134,14 @@ namespace JNGame.Sync.System.View
|
||||
/// <returns></returns>
|
||||
public T Input<T>() where T : JNInputBase,new()
|
||||
{
|
||||
if (!(Inputs.TryGetValue(TClass.Key2Value(typeof(T)),out var input)))
|
||||
lock (UIInputs)
|
||||
{
|
||||
Inputs[TClass.Key2Value(typeof(T))] = input = new T();
|
||||
if (!(UIInputs.TryGetValue(TClass.Key2Value(typeof(T)),out var input)))
|
||||
{
|
||||
UIInputs[TClass.Key2Value(typeof(T))] = input = new T();
|
||||
}
|
||||
return (T)input;
|
||||
}
|
||||
return (T)input;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -143,17 +150,20 @@ namespace JNGame.Sync.System.View
|
||||
/// <returns></returns>
|
||||
public JNFrameInputs Dequeue()
|
||||
{
|
||||
JNFrameInputs inputs = new JNFrameInputs();
|
||||
foreach (var key in Inputs.Keys)
|
||||
lock (UIInputs)
|
||||
{
|
||||
var input = new JNFrameInput();
|
||||
var info = Inputs[key];
|
||||
input.NId = key;
|
||||
input.Input = ByteString.CopyFrom(info.Encoder());
|
||||
inputs.Inputs.Add(input);
|
||||
JNFrameInputs inputs = new JNFrameInputs();
|
||||
foreach (var key in UIInputs.Keys)
|
||||
{
|
||||
var input = new JNFrameInput();
|
||||
var info = UIInputs[key];
|
||||
input.NId = key;
|
||||
input.Input = ByteString.CopyFrom(info.Encoder());
|
||||
inputs.Inputs.Add(input);
|
||||
}
|
||||
UIInputs.Clear();
|
||||
return inputs;
|
||||
}
|
||||
Inputs.Clear();
|
||||
return inputs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -166,19 +176,19 @@ namespace JNGame.Sync.System.View
|
||||
//解析输入
|
||||
foreach (var kInput in frame)
|
||||
{
|
||||
var input = kInput.Value;
|
||||
var tClass = TClass.Value2Key(input.NId);
|
||||
|
||||
if (!(SInputs.TryGetValue(input.NId,out var inputs)))
|
||||
foreach (var input in kInput.Value)
|
||||
{
|
||||
SInputs.Add(input.NId, inputs = new Dictionary<int, JNInputBase>());
|
||||
var tClass = TClass.Value2Key(input.NId);
|
||||
|
||||
if (!(SInputs.TryGetValue(input.NId,out var inputs)))
|
||||
{
|
||||
SInputs.Add(input.NId, inputs = new Dictionary<int, JNInputBase>());
|
||||
}
|
||||
|
||||
inputs[input.ClientId] = TNewClass[tClass].Decoder(input.Input.ToByteArray()) as JNInputBase;
|
||||
}
|
||||
|
||||
inputs.Add(input.ClientId,TNewClass[tClass].Decoder(input.Input.ToByteArray()) as JNInputBase);
|
||||
|
||||
kInput.Value.Clear();
|
||||
}
|
||||
frame.Clear();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user