Esempio n. 1
0
 public void Unload()
 {
     if (_asset != null)
     {
         _asset = null;
     }
 }
Esempio n. 2
0
    public override void OnInspectorGUI()
    {
        bool             dirty        = false;
        UdonProgramAsset programAsset = (UdonProgramAsset)target;

        programAsset.RunProgramSourceEditor(null, ref dirty);
        if (dirty)
        {
            EditorUtility.SetDirty(target);
        }
    }
Esempio n. 3
0
        public ControlledBehaviourAttribute(Type T)
        {
            var assets = Resources.FindObjectsOfTypeAll(typeof(UdonSharpProgramAsset))
                         .Select(a => a as UdonSharpProgramAsset).ToArray();

            foreach (var asset in assets)
            {
                try {
                    if (asset != null && asset.sourceCsScript.GetClass() == T)
                    {
                        uB = asset;
                    }
                }
                catch {
                    // ignored
                }
            }
        }
Esempio n. 4
0
 public void LoadAsset(UdonGraphProgramAsset asset)
 {
     _asset = asset;
 }
Esempio n. 5
0
        public override void OnInspectorGUI()
        {
            t = (UTController)target;
            // Copy current values
            if (!copiedValues)
            {
                t.SyncBack();
                copiedValues = true;
            }

            // Header
            var customNameAttr = t.GetType().GetCustomAttributes(typeof(CustomNameAttribute))
                                 .Select(i => i as CustomNameAttribute).ToArray();
            var customName = customNameAttr.Length != 0 ? customNameAttr[0].name : t.GetType().Name.Replace("Controller", "");

            UTStyles.RenderHeader(customName);

            EditorGUI.BeginChangeCheck();
            serializedObject.Update();

            EditorGUILayout.HelpBox("Controllers are Deprecated since UdonToolkit v0.4.0 in favor of a more streamlined system", MessageType.Warning);
            if (GUILayout.Button("Learn more"))
            {
                Application.OpenURL("https://l.vrchat.sh/utV4Migrate");
            }

            // Extra pre-gui actions
            t.SetupController();

            // Auto UB Addition
            if (t.GetComponent <UdonBehaviour>() == null)
            {
                if (uB)
                {
                    var comp = t.gameObject.AddComponent <UdonBehaviour>();
                    comp.programSource = uB;
                }
                else
                {
                    var controlledBehAttr = t.GetType().GetCustomAttributes(typeof(ControlledBehaviourAttribute))
                                            .Select(i => i as ControlledBehaviourAttribute).ToArray();
                    if (controlledBehAttr.Any())
                    {
                        var comp = t.gameObject.AddComponent <UdonBehaviour>();
                        uB = controlledBehAttr[0].uB;
                        comp.programSource = uB;
                    }
                }
            }

            // Help Box
            var helpBoxAttr = t.GetType().GetCustomAttributes(typeof(HelpMessageAttribute))
                              .Select(i => i as HelpMessageAttribute).ToArray();

            if (helpBoxAttr.Any())
            {
                UTStyles.RenderNote(helpBoxAttr[0]?.helpMessage);
            }

            // Check prefabs
            if (PrefabUtility.IsPartOfAnyPrefab(t.gameObject))
            {
                EditorGUILayout.HelpBox(
                    "Udon doesn't play well with Prefabs. " +
                    "It is recommended to unpack your prefabs when modifying any values.\n" +
                    "Right click the prefab and choose \"Unpack Prefab\"", MessageType.Warning);
            }

            // Actual GUI
            DrawGUI(t);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(t, undoString);
                serializedObject.ApplyModifiedProperties();
                t.SyncValues();
            }

            // Sync Toggles
            UTStyles.RenderSectionHeader("Udon Sync");
            if (t.uB != null)
            {
                var uBo = new SerializedObject(t.uB);
                uBo.Update();
                EditorGUI.BeginChangeCheck();
                EditorGUILayout.PropertyField(uBo.FindProperty("SynchronizePosition"));
                var col = t.gameObject.GetComponent <Collider>();
                if (col != null)
                {
                    EditorGUILayout.PropertyField(uBo.FindProperty("AllowCollisionOwnershipTransfer"), new GUIContent("Collision Owner Transfer"));
                }
                if (EditorGUI.EndChangeCheck())
                {
                    uBo.ApplyModifiedProperties();
                }
            }

            // Extra Methods
            var methods = t.GetType().GetMethods().Where(i => i.GetCustomAttribute <ButtonAttribute>() != null)
                          .ToArray();
            var buttons = t.GetType().GetMethods().Select(i => i.GetCustomAttribute <ButtonAttribute>()).Where(i => i != null)
                          .ToArray();

            if (buttons.Any())
            {
                UTStyles.RenderSectionHeader("Methods");
                var rowBreak = Mathf.Max(1, Mathf.Min(3, buttons.Length - 1));
                var rowEndI  = -100;
                foreach (var(button, i) in buttons.WithIndex())
                {
                    if (i == rowEndI && i != buttons.Length - 1)
                    {
                        EditorGUILayout.EndHorizontal();
                    }
                    if (i % rowBreak == 0 && i != buttons.Length - 1)
                    {
                        EditorGUILayout.BeginHorizontal();
                        rowEndI = Math.Min(i + rowBreak, buttons.Length - 1);
                    }
                    EditorGUI.BeginDisabledGroup(!Application.isPlaying && !button.activeInEditMode);
                    if (GUILayout.Button(button.text))
                    {
                        t.Invoke(methods[i].Name, 0);
                    }
                    EditorGUI.EndDisabledGroup();
                    if (i == buttons.Length - 1 && rowEndI != -100)
                    {
                        EditorGUILayout.EndHorizontal();
                    }
                }
            }
            UTStyles.RenderSectionHeader("Manual Value Sync");
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("Copy to Udon"))
            {
                t.SyncValues();
            }

            if (GUILayout.Button("Copy from Udon"))
            {
                t.SyncBack();
            }
            EditorGUILayout.EndHorizontal();
        }