Beispiel #1
0
        private static void GlobalUpdateSelection(object sender, SelectionChangedEventArgs e)
        {
            ObjectInspector target = null;

            foreach (ObjectSelection.Category cat in ObjectSelection.EnumerateCategories(e.AffectedCategories))
            {
                var objViews =
                    from v in ObjectInspectorPlugin.Instance.ObjViews
                    where v.AcceptsSelection(e.Current)
                    select new {
                        View = v,
                        Empty = v.EmptySelection,
                        PerfectFit = v.EmptySelection || (cat & v.DisplayedCategory) != ObjectSelection.Category.None,
                        TypeShare = ObjectSelection.GetTypeShareLevel(e.Current.Exclusive(cat), v.DisplayedSelection),
                        NumSameCatViews = ObjectInspectorPlugin.Instance.ObjViews.Count(o => o.AcceptsSelection(e.Current) && o.DisplayedCategory == v.DisplayedCategory) };
                var sortedQuery =
                    from o in objViews
                    orderby o.PerfectFit descending, o.Empty ascending, o.NumSameCatViews descending, o.TypeShare ascending
                    select o;
                var targetItem = sortedQuery.FirstOrDefault();
                if (targetItem == null) return;
                target = targetItem.View;

                // If a mouse button is pressed, reschedule the selection for later - there might be a drag in progress
                if (Control.MouseButtons != System.Windows.Forms.MouseButtons.None)
                {
                    target.selSchedMouse = e.Current;
                    target.selSchedMouseCat = cat;
                    target.timerSelectSched.Enabled = true;
                }
                else
                {
                    target.UpdateSelection(e.Current, cat);
                }
            }

            //  Make sure disposed objects are deselected in non-target views (locked, etc.)
            foreach (ObjectInspector v in ObjectInspectorPlugin.Instance.ObjViews)
            {
                if (v.EmptySelection) continue;
                if (v == target) continue;

                var disposedObj = e.Removed.OfType<IManageableObject>().Where(o => o.Disposed);
                if (disposedObj.Any())
                {
                    ObjectSelection disposedSel = new ObjectSelection(disposedObj);
                    v.UpdateSelection(v.DisplayedSelection - disposedSel, v.DisplayedCategory);
                }
            }
        }
        private void EditorForm_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (sender == this) return;
            if ((e.AffectedCategories & ObjectSelection.Category.Resource) == ObjectSelection.Category.None) return;
            if (e.SameObjects) return;

            foreach (Resource r in e.Removed.Resources)	this.SelectNode(this.NodeFromPath(r.Path), false);
            foreach (Resource r in e.Added.Resources)
            {
                if (!this.SelectNode(this.NodeFromPath(r.Path)))
                    this.ScheduleSelect(r.Path);
            }
        }
        private void EditorForm_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.SameObjects) return;
            if (!e.AffectedCategories.HasFlag(ObjectSelection.Category.GameObjCmp) &&
                !e.AffectedCategories.HasFlag(ObjectSelection.Category.Other))
                return;

            // Collider selection changed
            if ((e.AffectedCategories & ObjectSelection.Category.GameObjCmp) != ObjectSelection.Category.None)
            {
                RigidBody newBody = this.QuerySelectedCollider();
                if (newBody != this.selectedBody)
                    this.LeaveCursorState();

                DualityEditorApp.Deselect(this, ObjectSelection.Category.Other);
                this.selectedBody = newBody;
            }
            // Other selection changed
            if ((e.AffectedCategories & ObjectSelection.Category.Other) != ObjectSelection.Category.None)
            {
                if (e.Current.OfType<ShapeInfo>().Any())
                    this.allObjSel = e.Current.OfType<ShapeInfo>().Select(s => SelShape.Create(s) as SelObj).ToList();
                else
                    this.allObjSel = new List<SelObj>();

                // Update indirect object selection
                this.indirectObjSel.Clear();
                // Update (parent-free) action object selection
                this.actionObjSel = this.allObjSel.ToList();
            }

            this.InvalidateSelectionStats();
            this.UpdateToolbar();
            this.Invalidate();
        }
Beispiel #4
0
        private void DualityEditorApp_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (sender == this) return;
            if ((e.AffectedCategories & ObjectSelection.Category.GameObjCmp) == ObjectSelection.Category.None) return;
            if (e.SameObjects) return;

            IEnumerable<NodeBase> removedObjQuery;
            removedObjQuery = e.Removed.GameObjects.Select(o => this.FindNode(o));
            removedObjQuery = removedObjQuery.Concat(e.Removed.Components.Select(o => this.FindNode(o)));

            IEnumerable<NodeBase> addedObjQuery;
            addedObjQuery = e.Added.GameObjects.Select(o => this.FindNode(o));
            addedObjQuery = addedObjQuery.Concat(e.Added.Components.Select(o => this.FindNode(o)));

            this.SelectNodes(removedObjQuery, false);
            this.SelectNodes(addedObjQuery, true);
        }
        private void EditorForm_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if ((e.AffectedCategories & ObjectSelection.Category.GameObjCmp) == ObjectSelection.Category.None)
            {
                ClearContextMenu();
                return;
            }
            if (e.SameObjects) return;

            // Update object selection
            this.allObjSel = e.Current.GameObjects.Select(g => new SceneEditorSelGameObj(g) as ObjectEditorSelObj).ToList();

            // Update indirect object selection
            {
                var selectedGameObj = e.Current.GameObjects;
                var indirectViaCmpQuery = e.Current.Components.GameObject();
                var indirectViaChildQuery = selectedGameObj.ChildrenDeep();
                var indirectQuery = indirectViaCmpQuery.Concat(indirectViaChildQuery).Except(selectedGameObj).Distinct();
                this.indirectObjSel = indirectQuery.Select(g => new SceneEditorSelGameObj(g) as ObjectEditorSelObj).ToList();
            }

            // Update (parent-free) action object selection
            {
                // Remove removed objects
                foreach (ObjectEditorSelObj s in e.Removed.GameObjects.Select(g => new SceneEditorSelGameObj(g) as ObjectEditorSelObj)) this.actionObjSel.Remove(s);
                // Remove objects whichs parents are now added
                this.actionObjSel.RemoveAll(s => e.Added.GameObjects.Any(o => this.IsAffectedByParent(s.ActualObject as GameObject, o)));
                // Add objects whichs parents are not located in the current selection
                var addedParentFreeGameObj = e.Added.GameObjects.Where(o => !this.allObjSel.Any(s => this.IsAffectedByParent(o, s.ActualObject as GameObject)));
                this.actionObjSel.AddRange(addedParentFreeGameObj.Select(g => new SceneEditorSelGameObj(g) as ObjectEditorSelObj).Where(s => s.HasTransform));
            }

            this.InvalidateSelectionStats();
            this.UpdateAction();
            this.Invalidate();
        }
        private void DualityEditorApp_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if ((e.AffectedCategories & ObjectSelection.Category.GameObjCmp) == ObjectSelection.Category.None)
            {
                ClearContextMenu();
                return;
            }
            if (e.SameObjects) return;

            this.ApplyEditorSelection(e.Current);
        }