public FoundSyncVar(ModuleDefinition module, FoundNetworkBehaviour behaviour, FieldDefinition fieldDefinition, int dirtyIndex) { Module = module; Behaviour = behaviour; FieldDefinition = fieldDefinition; DirtyIndex = dirtyIndex; }
public void ProcessSyncVars(TypeDefinition td, IWeaverLogger logger) { behaviour = new FoundNetworkBehaviour(module, td); // the mapping of dirtybits to sync-vars is implicit in the order of the fields here. this order is recorded in m_replacementProperties. // start assigning syncvars at the place the base class stopped, if any // get numbers of syncvars in parent class, it will be added to syncvars in this class for total behaviour.GetSyncVarCountFromBase(); // find syncvars // use ToArray to create copy, ProcessSyncVar might add new fields foreach (FieldDefinition fd in td.Fields.ToArray()) { // try/catch for each field, and log once // we dont want to spam multiple logs for a single field try { if (IsValidSyncVar(fd)) { FoundSyncVar syncVar = behaviour.AddSyncVar(fd); ProcessSyncVar(syncVar); syncVar.HasProcessed = true; } } catch (ValueSerializerException e) { logger.Error(e.Message, fd); } catch (SyncVarException e) { logger.Error(e); } catch (SerializeFunctionException e) { // use field as member referecne logger.Error(e.Message, fd); } } behaviour.SetSyncVarCount(); GenerateSerialization(); GenerateDeserialization(); }