This commit is contained in:
DESKTOP-5RP3AKU\Jisol
2024-09-13 04:06:25 +08:00
parent bf7b5b1160
commit ced7fdce74
72 changed files with 25000 additions and 8157 deletions

View File

@@ -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();
}
}