public void PatchProperty(TagIndexEntry tagInfo, TagPropertyPatch patch) { var propertyInfo = ResolvePropertyInfo(tagInfo, patch.PropertySelector); Logger.Log(propertyInfo.PropertyType.ToString() + " @ " + propertyInfo.RelativeOffset, Logger.Color.Magenta); WritePropertyValue(tagInfo, propertyInfo, patch); }
private void WritePropertyValue(TagIndexEntry tagInfo, ResolvedTagPropertyInfo info, TagPropertyPatch patch) { if (info.RelativeOffset < 0) { Debugger.Break(); } var propType = info.PropertyType; if (propType.IsGenericType) { propType = propType.GetGenericTypeDefinition(); } if (propType.IsEnum) { propType = propType.GetEnumUnderlyingType(); } if (this.DataWriters.TryGetValue(propType, out var writer)) { writer(this.mapToPatch, tagInfo.Offset.Value + info.RelativeOffset, patch.Value); } else { Console.WriteLine($"Writing '{info.PropertyType}' values is not configured, skipping"); } }