Exemplo n.º 1
0
    public void DrawEntrance(Entrance e, HittItem item, bool solid = false)
    {
        GateTags gate;

        if (gateIndex.TryGetValue(e.tag, out gate))
        {
            gate.DrawWire(e.position, e.rotation, item == null ? item.center : e.position, solid);
        }
    }
Exemplo n.º 2
0
    public static GameObject Instantiate(this HittItem item)
    {
        if (!item.prefab)
        {
            return(null);
        }
        var p = PrefabUtility.InstantiatePrefab(item.prefab) as GameObject;

        p.name = item.name; // yep
        return(p);
    }
Exemplo n.º 3
0
    void SelectionChanged()
    {
        activeObject = Selection.activeGameObject;

        if (activeObject && template && PrefabUtility.GetPrefabType(activeObject) != PrefabType.Prefab)
        {
            active = template.GetItemOf(activeObject);

            root = activeObject.GetComponentInParent <Hitt>();

            if (active != null)
            {
                activeEntrance = Mathf.Clamp(activeEntrance, 0, active.entrances.Length);
            }
        }
        else
        {
            active = null;

            root = null;
        }
    }
Exemplo n.º 4
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();
    }