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());
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 private static T ConvertToUdonSharpComponent <T>(UdonBehaviour[] behaviours, ProxySerializationPolicy proxySerializationPolicy) where T : UdonSharpBehaviour
 {
     return((T)ConvertToUdonSharpComponent(behaviours, typeof(T), proxySerializationPolicy));
 }
Ejemplo n.º 7
0
 public static UdonSharpBehaviour[] GetUdonSharpComponentsInParent(this Component component, System.Type type, bool includeInactive, ProxySerializationPolicy proxySerializationPolicy) =>
 ConvertToUdonSharpComponents(component.GetComponentsInParent <UdonBehaviour>(includeInactive), type, proxySerializationPolicy);
Ejemplo n.º 8
0
 public static T[] GetUdonSharpComponentsInChildren <T>(this GameObject gameObject, bool includeInactive, ProxySerializationPolicy proxySerializationPolicy) where T : UdonSharpBehaviour =>
 ConvertToUdonSharpComponents <T>(gameObject.GetComponentsInChildren <UdonBehaviour>(includeInactive), proxySerializationPolicy);
Ejemplo n.º 9
0
 public static T[] GetUdonSharpComponentsInParent <T>(this Component component, bool includeInactive, ProxySerializationPolicy proxySerializationPolicy) where T : UdonSharpBehaviour =>
 ConvertToUdonSharpComponents <T>(component.GetComponentsInParent <UdonBehaviour>(includeInactive), proxySerializationPolicy);
Ejemplo n.º 10
0
 public static void ApplyProxyModifications(this UdonSharpBehaviour behaviour, ProxySerializationPolicy serializationPolicy)
 {
     UdonSharpEditorUtility.CopyProxyToUdon(behaviour, serializationPolicy);
 }
Ejemplo n.º 11
0
 public static UdonSharpBehaviour GetUdonSharpComponentInParent(this Component component, System.Type type, ProxySerializationPolicy proxySerializationPolicy) =>
 ConvertToUdonSharpComponent(component.GetComponentsInParent <UdonBehaviour>(), type, proxySerializationPolicy);
Ejemplo n.º 12
0
 public static T GetUdonSharpComponentInParent <T>(this Component component, ProxySerializationPolicy proxySerializationPolicy) where T : UdonSharpBehaviour =>
 ConvertToUdonSharpComponent <T>(component.GetComponentsInParent <UdonBehaviour>(), proxySerializationPolicy);
Ejemplo n.º 13
0
 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);
Ejemplo n.º 15
0
        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);
Ejemplo n.º 17
0
 public static void UpdateProxy(this UdonSharpBehaviour behaviour, ProxySerializationPolicy serializationPolicy)
 {
     UdonSharpEditorUtility.CopyUdonToProxy(behaviour, serializationPolicy);
 }