public NetSyncOptions(string name, float lerpSpeed = 1, int accuracy = 2, float jumpThreshold = 0, bool initOnly = false) { Name = name; NetSyncMemberAttribute = new NetSyncMemberAttribute(lerpSpeed, accuracy, jumpThreshold, initOnly); }
private void ExtractNetworkMemberInfos(Type type) { componentTypeId++; componentTypeToIdMap.Add(type, componentTypeId); idToComponentTypeMap.Add(componentTypeId, type); int numberOfMembers = 0; List <NetworkMemberInfo> networkMemberInfos = new List <NetworkMemberInfo>(); MemberInfo[] memberInfos = type.GetMembers().OrderBy((x) => x.Name).Where(memberInfo => memberInfo.IsDefined(typeof(NetSyncMemberAttribute), false)).ToArray(); for (int i = 0; i < memberInfos.Length; i++) { MemberInfo memberInfo = memberInfos[i]; Type networkMemberInfoType = typeof(NetworkMemberInfo <,>); Type mainMemberInfoTypeType = memberInfo.MemberType == MemberTypes.Field ? (memberInfo as FieldInfo).FieldType : (memberInfo as PropertyInfo).PropertyType; Type mainMemberInfoGenericType = networkMemberInfoType.MakeGenericType(type, mainMemberInfoTypeType); NetSyncMemberAttribute netSyncMemberAttribute = memberInfo.GetCustomAttribute <NetSyncMemberAttribute>(false); NetworkMemberInfo mainMemberInfo = (NetworkMemberInfo)Activator.CreateInstance(mainMemberInfoGenericType, memberInfo, netSyncMemberAttribute); NetSyncSubMemberAttribute[] netSyncSubMemberAttributes = memberInfo.GetCustomAttributes <NetSyncSubMemberAttribute>(false).ToArray(); numberOfMembers += netSyncSubMemberAttributes.Length; foreach (NetSyncSubMemberAttribute NetSyncSubMemberAttribute in netSyncSubMemberAttributes) { if (!NetSyncSubMemberAttribute.OverriddenValues) { NetSyncSubMemberAttribute.SetValuesFrom(netSyncMemberAttribute); } Type subType = memberInfo.MemberType == MemberTypes.Field ? (memberInfo as FieldInfo).FieldType : (memberInfo as PropertyInfo).PropertyType; bool found = false; IEnumerable <MemberInfo> subMemberInfos = subType.GetMembers().OrderBy(x => x.Name); foreach (MemberInfo subMemberInfo in subMemberInfos) { if (subMemberInfo.Name.Equals(NetSyncSubMemberAttribute.MemberName)) { Type networkSubMemberInfoType = typeof(NetworkMemberInfo <, ,>); Type mainSubMemberInfoTypeType = subMemberInfo.MemberType == MemberTypes.Field ? (subMemberInfo as FieldInfo).FieldType : (subMemberInfo as PropertyInfo).PropertyType; Type subMemberInfoGenericType = networkSubMemberInfoType.MakeGenericType(type, subType, mainSubMemberInfoTypeType); networkMemberInfos.Add((NetworkMemberInfo)Activator.CreateInstance(subMemberInfoGenericType, subMemberInfo, mainMemberInfo, NetSyncSubMemberAttribute)); found = true; break; } } if (!found) { throw new MissingMemberException(NetSyncSubMemberAttribute.MemberName); } } if (netSyncSubMemberAttributes.Length == 0) { numberOfMembers++; networkMemberInfos.Add(mainMemberInfo); } } cashedNetworkMemberInfo.Add(type, networkMemberInfos.ToArray()); componentTypeMemberCount.Add(type, numberOfMembers); }