示例#1
0
 public static IEnumerable <Transform> GetChildren(this HittTemplate template, Transform parent, bool emptyasnull = true)
 {
     for (int i = 0; i < parent.childCount; i++)
     {
         var n = parent.GetChild(i);
         var g = HittUtility.GetPrefabOf(n.gameObject) as GameObject;
         if (g && template.objectIndex.GetValue(g.name) != null)
         {
             yield return(n);
         }
         else if (template.empty == g)
         {
             yield return(emptyasnull ? null : n); // for empty
         }
     }
 }
示例#2
0
 public static HittItem GetItemOf(this HittTemplate template, GameObject g)
 {
     g = HittUtility.GetPrefabOf(g);
     return(g ? template.objectIndex.GetValue(g.name) : null);
 }
示例#3
0
    void ItemsGUI()
    {
        var ev = Event.current;
        var ms = ev.mousePosition;

        //if (activeItem >= 0)
        //{
        //    var e = template.items[activeItem];
        //    var ei = e ? e.GetComponent<HittItem>() : null;
        //    if (!ei)
        //    {
        //        EditorGUILayout.HelpBox("Selected item does not have HittItem.", MessageType.None);
        //    }
        //    else
        //    {
        //        EditorGUILayout.BeginHorizontal();
        //        EditorGUILayout.LabelField(e.name);
        //        bool exist = Array.IndexOf( template.items.con
        //       EditorGUI.BeginDisabledGroup()
        //        if (GUILayout.Button("+", GUILayout.Width(50)))
        //        {
        //            Undo.RecordObject(template, "Add new Entrance Template");
        //            ArrayUtility.Add(ref template.entrances, e.Clone());
        //        }

        //        if (GUILayout.Button("-", GUILayout.Width(50)) && template.entrances.Length > 1)
        //        {
        //            Undo.RecordObject(template, "Delete Entrance Template");
        //            ArrayUtility.RemoveAt(ref template.entrances, activeEntrance);
        //            activeEntrance--;
        //        }

        //        EditorGUILayout.EndHorizontal();
        //    }
        //}

        EditorGUILayout.BeginHorizontal();

        scroll = EditorGUILayout.BeginScrollView(scroll, GUILayout.ExpandHeight(true));
        Styles.MakeGrid(new Vector2(100, 100), template.items.Length, delegate(Rect r, int i)
        {
            var g = template.items[i];

            if ((r).Contains(ms + scroll))
            {
                if (ev.type == EventType.DragPerform || ev.type == EventType.DragUpdated)
                {
                    var obj = HittUtility.GetPrefabOf(DragAndDrop.objectReferences.FirstOrDefault() as GameObject);
                    if (obj && !g.prefab && !template.objectIndex.ContainsKey(obj.name))
                    {
                        DragAndDrop.visualMode = DragAndDropVisualMode.Link;
                        if (ev.type == EventType.DragPerform)
                        {
                            g.prefab = obj;
                            template.Populate();
                            DragAndDrop.AcceptDrag();
                        }
                        ev.Use();
                    }
                }
                if (ev.type == EventType.MouseDown)
                {
                    activeItem = i;
                    if (g.prefab)
                    {
                        if (ev.clickCount >= 2)
                        {
                            EditorGUIUtility.PingObject(g.prefab);
                        }
                        else
                        {
                            DragAndDrop.PrepareStartDrag();
                            DragAndDrop.objectReferences = new UnityEngine.Object[] { g.prefab };
                            DragAndDrop.visualMode       = DragAndDropVisualMode.Copy;
                            DragAndDrop.StartDrag("Prefab Out");
                        }
                    }
                }
            }

            if (ev.type == EventType.Repaint)
            {
                if (g.prefab)
                {
                    GUI.Label(r, new GUIContent(AssetPreview.GetAssetPreview(g.prefab), g.name), Styles.labelThumb);

                    if (activeItem == i)
                    {
                        var r2    = r;
                        r2.height = 8;
                        GUI.Box(r2, EditorGUIUtility.whiteTexture);
                    }

                    GUI.Label(r, g.name, Styles.labelThumbName);
                    if (g.key != KeyCode.None)
                    {
                        GUI.Label(r, g.key.ToString(), Styles.labelThumbKey);
                    }
                    if (g.port.tag == 0)
                    {
                        GUI.Label(r, "??", Styles.labelThumbQuestion);
                    }
                }
                else
                {
                    GUI.Box(r, Texture2D.whiteTexture);
                    GUI.Label(r, "+", Styles.labelStyles[2]);
                }
            }
        });

        EditorGUILayout.EndScrollView();
        if (GUILayoutUtility.GetLastRect().Contains(ms))
        {
            if (ev.type == EventType.DragPerform || ev.type == EventType.DragUpdated)
            {
                DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                if (ev.type == EventType.DragPerform)
                {
                    foreach (var o in DragAndDrop.objectReferences)
                    {
                        var g = HittUtility.GetPrefabOf(o as GameObject);
                        if (template.GetItemOf(g) == null)
                        {
                            var i = new HittItem();
                            i.AssignPrefab(g);
                            ArrayUtility.Add(ref template.items, i);
                        }
                    }
                    template.Populate();
                }
            }
        }
        EditorGUILayout.BeginVertical(GUILayout.Width(200), GUILayout.ExpandHeight(true));
        {
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("+"))
            {
                ArrayUtility.Add(ref template.items, new HittItem());
            }
            if (GUILayout.Button("-"))
            {
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Separator();
            if (activeItem >= 0)
            {
                var g = template.items[activeItem];
                g.name = EditorGUILayout.DelayedTextField(g.name);
                g.key  = (KeyCode)EditorGUILayout.EnumPopup(g.key);
                if (GUILayout.Button("Reset Gates"))
                {
                    g.port.tag  = 0;
                    g.entrances = new Entrance[] { };
                    SceneView.RepaintAll();
                }
                if (GUILayout.Button("Crop Gates"))
                {
                    var n = activeObject.GetComponentInChildren <MeshFilter>();
                    if (n && n.sharedMesh)
                    {
                        var b = n.sharedMesh.bounds;
                        g.port.position = b.ClosestPoint(g.port.position);
                        foreach (var e in g.entrances)
                        {
                            e.position = b.ClosestPoint(e.position);
                        }
                        SceneView.RepaintAll();
                    }
                }
            }
        }
        EditorGUILayout.EndVertical();

        EditorGUILayout.EndHorizontal();
    }