SF.FloatWriter CreateWriter(SFA.SmartBase smart, SFA.SmartDataRefBase.RefType type, int multiIndex = -1) { var r = new SF.FloatWriter(); SetupFloatRef(r, smart, type, multiIndex); return(r); }
void SetupFloatRef(object r, SFA.SmartBase smart, SFA.SmartDataRefBase.RefType type, int multiIndex) { var b = BindingFlags.Instance | BindingFlags.NonPublic; r.GetType().GetFieldPrivate(SmartDataRefPropertyDrawer.refPropNames[type], b).SetValue(r, smart); try { // Will throw for FloatMulti but doesn't matter r.GetType().GetFieldPrivate("_refType", b).SetValue(r, type); } catch {} if (multiIndex >= 0) { r.GetType().GetField("_multiIndex", b).SetValue(r, multiIndex); } r.GetType().GetFieldPrivate("_onUpdate", b).SetValue(r, new SmartFloat.Data.FloatVar.FloatEvent()); if (r is ISerializationCallbackReceiver) { ((ISerializationCallbackReceiver)r).OnAfterDeserialize(); } (r as SmartData.Abstract.SmartRefBase).unityEventOnReceive = true; }