private static UdonSharpBehaviour[] ConvertToUdonSharpComponents(UdonBehaviour[] behaviours, System.Type type, ProxySerializationPolicy proxySerializationPolicy) { if (behaviours.Length == 0) { return(new UdonSharpBehaviour[0]); } List <UdonSharpBehaviour> udonSharpBehaviours = new List <UdonSharpBehaviour>(); foreach (UdonBehaviour behaviour in behaviours) { UdonSharpBehaviour udonSharpBehaviour = ConvertToUdonSharpComponentIntnl(behaviour, type, proxySerializationPolicy); if (udonSharpBehaviour) { udonSharpBehaviours.Add(udonSharpBehaviour); } } return(udonSharpBehaviours.ToArray()); }
private static T[] ConvertToUdonSharpComponents <T>(UdonBehaviour[] behaviours, ProxySerializationPolicy proxySerializationPolicy) where T : UdonSharpBehaviour { if (behaviours.Length == 0) { return(new T[0]); } List <T> udonSharpBehaviours = new List <T>(); foreach (UdonBehaviour behaviour in behaviours) { UdonSharpBehaviour udonSharpBehaviour = ConvertToUdonSharpComponentIntnl(behaviour, typeof(T), proxySerializationPolicy); if (udonSharpBehaviour) { udonSharpBehaviours.Add((T)udonSharpBehaviour); } } return(udonSharpBehaviours.ToArray()); }
public static UdonSharpBehaviour FindProxyBehaviour(UdonBehaviour udonBehaviour, ProxySerializationPolicy proxySerializationPolicy) { if (_proxyBehaviourLookup.TryGetValue(udonBehaviour, out UdonSharpBehaviour proxyBehaviour)) { if (proxyBehaviour != null) { CopyUdonToProxy(proxyBehaviour, proxySerializationPolicy); SetIgnoreEvents(true); try { proxyBehaviour.enabled = false; } finally { SetIgnoreEvents(false); } return(proxyBehaviour); } else { _proxyBehaviourLookup.Remove(udonBehaviour); } } UdonSharpBehaviour[] behaviours = udonBehaviour.GetComponents <UdonSharpBehaviour>(); foreach (UdonSharpBehaviour udonSharpBehaviour in behaviours) { IUdonBehaviour backingBehaviour = GetBackingUdonBehaviour(udonSharpBehaviour); if (backingBehaviour != null && ReferenceEquals(backingBehaviour, udonBehaviour)) { _proxyBehaviourLookup.Add(udonBehaviour, udonSharpBehaviour); CopyUdonToProxy(udonSharpBehaviour, proxySerializationPolicy); SetIgnoreEvents(true); try { udonSharpBehaviour.enabled = false; } finally { SetIgnoreEvents(false); } return(udonSharpBehaviour); } } return(null); }
public static UdonSharpBehaviour GetProxyBehaviour(UdonBehaviour udonBehaviour, ProxySerializationPolicy proxySerializationPolicy) { if (udonBehaviour == null) { throw new System.ArgumentNullException("Source Udon Behaviour cannot be null"); } if (udonBehaviour.programSource == null) { throw new System.ArgumentNullException("Program source on UdonBehaviour cannot be null"); } UdonSharpProgramAsset udonSharpProgram = udonBehaviour.programSource as UdonSharpProgramAsset; if (udonSharpProgram == null) { throw new System.ArgumentException("UdonBehaviour must be using an UdonSharp program"); } UdonSharpBehaviour proxyBehaviour = FindProxyBehaviour(udonBehaviour, proxySerializationPolicy); if (proxyBehaviour) { return(proxyBehaviour); } // We've failed to find an existing proxy behaviour so we need to create one System.Type scriptType = udonSharpProgram.sourceCsScript.GetClass(); if (scriptType == null) { return(null); } SetIgnoreEvents(true); try { proxyBehaviour = (UdonSharpBehaviour)udonBehaviour.gameObject.AddComponent(scriptType); proxyBehaviour.hideFlags = HideFlags.DontSaveInBuild | #if !UDONSHARP_DEBUG HideFlags.HideInInspector | #endif HideFlags.DontSaveInEditor; proxyBehaviour.enabled = false; } finally { SetIgnoreEvents(false); } SetBackingUdonBehaviour(proxyBehaviour, udonBehaviour); _proxyBehaviourLookup.Add(udonBehaviour, proxyBehaviour); CopyUdonToProxy(proxyBehaviour, proxySerializationPolicy); return(proxyBehaviour); }
private static UdonSharpBehaviour ConvertToUdonSharpComponent(UdonBehaviour[] behaviours, System.Type type, ProxySerializationPolicy proxySerializationPolicy) { foreach (UdonBehaviour behaviour in behaviours) { UdonSharpBehaviour udonSharpBehaviour = ConvertToUdonSharpComponentIntnl(behaviour, type, proxySerializationPolicy); if (udonSharpBehaviour) { return(udonSharpBehaviour); } } return(null); }
private static T ConvertToUdonSharpComponent <T>(UdonBehaviour[] behaviours, ProxySerializationPolicy proxySerializationPolicy) where T : UdonSharpBehaviour { return((T)ConvertToUdonSharpComponent(behaviours, typeof(T), proxySerializationPolicy)); }
public static UdonSharpBehaviour[] GetUdonSharpComponentsInParent(this Component component, System.Type type, bool includeInactive, ProxySerializationPolicy proxySerializationPolicy) => ConvertToUdonSharpComponents(component.GetComponentsInParent <UdonBehaviour>(includeInactive), type, proxySerializationPolicy);
public static T[] GetUdonSharpComponentsInChildren <T>(this GameObject gameObject, bool includeInactive, ProxySerializationPolicy proxySerializationPolicy) where T : UdonSharpBehaviour => ConvertToUdonSharpComponents <T>(gameObject.GetComponentsInChildren <UdonBehaviour>(includeInactive), proxySerializationPolicy);
public static T[] GetUdonSharpComponentsInParent <T>(this Component component, bool includeInactive, ProxySerializationPolicy proxySerializationPolicy) where T : UdonSharpBehaviour => ConvertToUdonSharpComponents <T>(component.GetComponentsInParent <UdonBehaviour>(includeInactive), proxySerializationPolicy);
public static void ApplyProxyModifications(this UdonSharpBehaviour behaviour, ProxySerializationPolicy serializationPolicy) { UdonSharpEditorUtility.CopyProxyToUdon(behaviour, serializationPolicy); }
public static UdonSharpBehaviour GetUdonSharpComponentInParent(this Component component, System.Type type, ProxySerializationPolicy proxySerializationPolicy) => ConvertToUdonSharpComponent(component.GetComponentsInParent <UdonBehaviour>(), type, proxySerializationPolicy);
public static T GetUdonSharpComponentInParent <T>(this Component component, ProxySerializationPolicy proxySerializationPolicy) where T : UdonSharpBehaviour => ConvertToUdonSharpComponent <T>(component.GetComponentsInParent <UdonBehaviour>(), proxySerializationPolicy);
public static UdonSharpBehaviour[] GetUdonSharpComponentsInChildren(this GameObject gameObject, System.Type type, bool includeInactive, ProxySerializationPolicy proxySerializationPolicy) => ConvertToUdonSharpComponents(gameObject.GetComponentsInChildren <UdonBehaviour>(includeInactive), type, proxySerializationPolicy);
public static T GetUdonSharpComponent <T>(this GameObject gameObject, ProxySerializationPolicy proxySerializationPolicy) where T : UdonSharpBehaviour => ConvertToUdonSharpComponent <T>(gameObject.GetComponents <UdonBehaviour>(), proxySerializationPolicy);
private static UdonSharpBehaviour ConvertToUdonSharpComponentIntnl(UdonBehaviour behaviour, System.Type type, ProxySerializationPolicy proxySerializationPolicy) { if (behaviour == null) { return(null); } if (!UdonSharpEditorUtility.IsUdonSharpBehaviour(behaviour)) { return(null); } UdonSharpBehaviour udonSharpBehaviour = UdonSharpEditorUtility.GetProxyBehaviour(behaviour, ProxySerializationPolicy.NoSerialization); System.Type uSharpBehaviourType = udonSharpBehaviour.GetType(); if (udonSharpBehaviour && (uSharpBehaviourType == type || uSharpBehaviourType.IsSubclassOf(type))) { UdonSharpEditorUtility.CopyUdonToProxy(udonSharpBehaviour, proxySerializationPolicy); return(udonSharpBehaviour); } return(null); }
public static UdonSharpBehaviour GetUdonSharpComponent(this GameObject gameObject, System.Type type, ProxySerializationPolicy proxySerializationPolicy) => ConvertToUdonSharpComponent(gameObject.GetComponents <UdonBehaviour>(), type, proxySerializationPolicy);
public static void UpdateProxy(this UdonSharpBehaviour behaviour, ProxySerializationPolicy serializationPolicy) { UdonSharpEditorUtility.CopyUdonToProxy(behaviour, serializationPolicy); }