mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 02:50:32 +00:00
Weaver SyncList code moved into SyncListProcessor
This commit is contained in:
parent
b9ec4a5dc5
commit
5ecb40f055
@ -72,6 +72,7 @@
|
||||
<Compile Include="Processors\NetworkBehaviourProcessor.cs" />
|
||||
<Compile Include="Processors\RpcProcessor.cs" />
|
||||
<Compile Include="Processors\SyncEventProcessor.cs" />
|
||||
<Compile Include="Processors\SyncListProcessor.cs" />
|
||||
<Compile Include="Processors\SyncObjectProcessor.cs" />
|
||||
<Compile Include="Processors\SyncVarProcessor.cs" />
|
||||
<Compile Include="Processors\TargetRpcProcessor.cs" />
|
||||
|
@ -266,7 +266,7 @@ void GenerateConstants()
|
||||
|
||||
foreach (FieldDefinition fd in m_SyncObjects)
|
||||
{
|
||||
GenerateSyncListInstanceInitializer(ctorWorker, fd);
|
||||
SyncListProcessor.GenerateSyncListInstanceInitializer(ctorWorker, fd);
|
||||
SyncObjectProcessor.GenerateSyncObjectInitializer(ctorWorker, fd);
|
||||
}
|
||||
|
||||
@ -283,33 +283,6 @@ void GenerateConstants()
|
||||
m_td.Attributes = m_td.Attributes & ~TypeAttributes.BeforeFieldInit;
|
||||
}
|
||||
|
||||
// generates 'syncListInt = new SyncListInt()' if user didn't do that yet
|
||||
void GenerateSyncListInstanceInitializer(ILProcessor ctorWorker, FieldDefinition fd)
|
||||
{
|
||||
// check the ctor's instructions for an Stfld op-code for this specific sync list field.
|
||||
foreach (var ins in ctorWorker.Body.Instructions)
|
||||
{
|
||||
if (ins.OpCode.Code == Code.Stfld)
|
||||
{
|
||||
var field = (FieldDefinition)ins.Operand;
|
||||
if (field.DeclaringType == fd.DeclaringType && field.Name == fd.Name)
|
||||
{
|
||||
// Already initialized by the user in the field definition, e.g:
|
||||
// public SyncListInt Foo = new SyncListInt();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Not initialized by the user in the field definition, e.g:
|
||||
// public SyncListInt Foo;
|
||||
var listCtor = Weaver.scriptDef.MainModule.ImportReference(fd.FieldType.Resolve().Methods.First<MethodDefinition>(x => x.Name == ".ctor" && !x.HasParameters));
|
||||
|
||||
ctorWorker.Append(ctorWorker.Create(OpCodes.Ldarg_0));
|
||||
ctorWorker.Append(ctorWorker.Create(OpCodes.Newobj, listCtor));
|
||||
ctorWorker.Append(ctorWorker.Create(OpCodes.Stfld, fd));
|
||||
}
|
||||
|
||||
/*
|
||||
// This generates code like:
|
||||
NetworkBehaviour.RegisterCommandDelegate(base.GetType(), "CmdThrust", new NetworkBehaviour.CmdDelegate(ShipControl.InvokeCmdCmdThrust));
|
||||
|
37
Mirror/Weaver/Processors/SyncListProcessor.cs
Normal file
37
Mirror/Weaver/Processors/SyncListProcessor.cs
Normal file
@ -0,0 +1,37 @@
|
||||
// SyncList code
|
||||
using System.Linq;
|
||||
using Mono.Cecil;
|
||||
using Mono.Cecil.Cil;
|
||||
|
||||
namespace Mirror.Weaver
|
||||
{
|
||||
public static class SyncListProcessor
|
||||
{
|
||||
// generates 'syncListInt = new SyncListInt()' if user didn't do that yet
|
||||
public static void GenerateSyncListInstanceInitializer(ILProcessor ctorWorker, FieldDefinition fd)
|
||||
{
|
||||
// check the ctor's instructions for an Stfld op-code for this specific sync list field.
|
||||
foreach (var ins in ctorWorker.Body.Instructions)
|
||||
{
|
||||
if (ins.OpCode.Code == Code.Stfld)
|
||||
{
|
||||
var field = (FieldDefinition)ins.Operand;
|
||||
if (field.DeclaringType == fd.DeclaringType && field.Name == fd.Name)
|
||||
{
|
||||
// Already initialized by the user in the field definition, e.g:
|
||||
// public SyncListInt Foo = new SyncListInt();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Not initialized by the user in the field definition, e.g:
|
||||
// public SyncListInt Foo;
|
||||
var listCtor = Weaver.scriptDef.MainModule.ImportReference(fd.FieldType.Resolve().Methods.First<MethodDefinition>(x => x.Name == ".ctor" && !x.HasParameters));
|
||||
|
||||
ctorWorker.Append(ctorWorker.Create(OpCodes.Ldarg_0));
|
||||
ctorWorker.Append(ctorWorker.Create(OpCodes.Newobj, listCtor));
|
||||
ctorWorker.Append(ctorWorker.Create(OpCodes.Stfld, fd));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user