Esempio n. 1
0
        public VisualScriptEditorViewModel(IVisualScriptViewModelService visualScriptViewModelService, VisualScriptViewModel visualScript) : base(visualScript)
        {
            // Create the service needed to manage observable view models
            ViewModelService = new GraphViewModelService(Session.AssetNodeContainer);

            // Update the service provider of this view model to contains the ObservableViewModelService we created.
            ServiceProvider = new ViewModelServiceProvider(ServiceProvider, ViewModelService.Yield());

            VisualScriptViewModelService = visualScriptViewModelService;

            blockTemplateDescriptionCollection = new Lazy <BlockTemplateDescriptionCollectionViewModel>(() => new BlockTemplateDescriptionCollectionViewModel(this));

            AddNewPropertyCommand           = new AnonymousCommand(ServiceProvider, AddNewProperty);
            RemoveSelectedPropertiesCommand = new AnonymousCommand(ServiceProvider, RemoveSelectedProperties);

            //ShowAddBlockDialogCommand = new AnonymousTaskCommand(ServiceProvider, ShowAddBlockDialog);

            AddNewMethodCommand         = new AnonymousCommand(ServiceProvider, AddNewMethod);
            RemoveSelectedMethodCommand = new AnonymousCommand(ServiceProvider, RemoveSelectedFunction);

            var rootNode = Session.AssetNodeContainer.GetNode(visualScript.Asset);

            baseTypeNodeBinding = new MemberGraphNodeBinding <string>(rootNode[nameof(VisualScriptAsset.BaseType)], nameof(BaseType), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService);
            propertiesNode      = rootNode[nameof(VisualScriptAsset.Properties)];
        }
Esempio n. 2
0
        public GraphicsCompositorCameraSlotsViewModel([NotNull] GraphicsCompositorEditorViewModel editor, SceneCameraSlot cameraSlot) : base(editor)
        {
            CameraSlot     = cameraSlot;
            cameraSlotNode = editor.Session.AssetNodeContainer.GetOrCreateNode(cameraSlot);

            nameNodeBinding = new MemberGraphNodeBinding <string>(cameraSlotNode[nameof(CameraSlot.Name)], nameof(Name), OnPropertyChanging, OnPropertyChanged, editor.UndoRedoService);
        }
Esempio n. 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SpriteInfoViewModel"/> class.
        /// </summary>
        /// <param name="editor">The <see cref="SpriteSheetEditorViewModel"/> containing this image.</param>
        /// <param name="sprite">The <see cref="SpriteInfo"/> represented by this view model.</param>
        public SpriteInfoViewModel(SpriteSheetEditorViewModel editor, SpriteInfo sprite) : base(editor.SafeArgument(nameof(editor)).ServiceProvider)
        {
            Editor      = editor;
            Id          = new AbsoluteId(editor.Asset.Id, Guid.NewGuid());
            this.sprite = sprite;
            Index       = -1;

            // Retrieve nodes
            var spriteNode = editor.Asset.Session.AssetNodeContainer.GetOrCreateNode(sprite);
            var nameNode   = spriteNode[nameof(SpriteInfo.Name)];
            // TODO: dispose this!
            var sourceNode = spriteNode[nameof(SpriteInfo.Source)];

            sourceNode.ValueChanged += SourceValueChanged;
            var textureRegionNode = spriteNode[nameof(SpriteInfo.TextureRegion)];

            // Create bindings
            nameNodeBinding   = new MemberGraphNodeBinding <string>(nameNode, nameof(Name), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService);
            sourceNodeBinding = new MemberGraphNodeBinding <UFile>(sourceNode, nameof(Source), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService);

            UpdateSourceFileWatcher();

            // Initialize view models and commands
            SpriteBorders    = new SpriteBordersViewModel(this, spriteNode);
            SpriteCenter     = new SpriteCenterViewModel(this, spriteNode);
            TextureRegion    = new TextureRegionViewModel(this, textureRegionNode);
            EditImageCommand = new AnonymousTaskCommand(ServiceProvider, EditImage);
            ExploreCommand   = new AnonymousTaskCommand(ServiceProvider, Explore);
        }
Esempio n. 4
0
        public EntityViewModel([NotNull] EntityHierarchyEditorViewModel editor, [NotNull] EntityHierarchyViewModel asset, [NotNull] EntityDesign entityDesign)
            : base(editor, asset, GetOrCreateChildPartDesigns((EntityHierarchyAssetBase)asset.Asset, entityDesign), entityDesign.Entity)
        {
            if (entityDesign.Entity == null)
            {
                throw new ArgumentException(@"entity must contain a non-null asset entity.", nameof(entityDesign));
            }

            EntityDesign = entityDesign;

            var assetNode = Editor.NodeContainer.GetOrCreateNode(entityDesign.Entity);

            nameNodeBinding       = new MemberGraphNodeBinding <string>(assetNode[nameof(Entity.Name)], nameof(Name), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService);
            componentsNodeBinding = new ObjectGraphNodeBinding <EntityComponentCollection>(assetNode[nameof(Entity.Components)].Target, nameof(Components), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService, false);

            modelComponent     = new ModelComponentViewModel(ServiceProvider, this);
            particleComponent  = new ParticleSystemComponentViewModel(ServiceProvider, this);
            cameraComponent    = new CameraComponentViewModel(ServiceProvider, this);
            transformationNode = Editor.NodeContainer.GetNode(AssetSideEntity.Transform)[nameof(TransformComponent.Children)].Target;
            transformationNode.ItemChanging += TransformChildrenChanging;
            transformationNode.ItemChanged  += TransformChildrenChanged;
            RenameCommand        = new AnonymousCommand(ServiceProvider, () => IsEditing = true);
            FocusOnEntityCommand = new AnonymousCommand(ServiceProvider, FocusOnEntity);

            UpdateSourcePrefab();
            var basePrefabNode = Editor.NodeContainer.GetNode(EntityDesign)[nameof(EntityDesign.Base)];

            basePrefabNode.ValueChanged += BasePrefabChanged;
        }
Esempio n. 5
0
        public RenderStageViewModel([NotNull] GraphicsCompositorEditorViewModel editor, RenderStage renderStage) : base(editor)
        {
            RenderStage     = renderStage;
            renderStageNode = editor.Session.AssetNodeContainer.GetOrCreateNode(renderStage);

            nameNodeBinding       = new MemberGraphNodeBinding <string>(renderStageNode[nameof(RenderStage.Name)], nameof(Name), OnPropertyChanging, OnPropertyChanged, editor.UndoRedoService);
            effectSlotNodeBinding = new MemberGraphNodeBinding <string>(renderStageNode[nameof(RenderStage.EffectSlotName)], nameof(EffectSlotName), OnPropertyChanging, OnPropertyChanged, editor.UndoRedoService);
        }
Esempio n. 6
0
        public UIElementFromLibrary(IViewModelServiceProvider serviceProvider, UILibraryViewModel library, Guid id)
            : base(serviceProvider)
        {
            this.library = library;
            Id           = id;

            var node = library.Session.AssetNodeContainer.GetNode(library.Asset)[nameof(UILibraryAsset.PublicUIElements)];

            nameBinding = new MemberGraphNodeBinding <Dictionary <Guid, string> >(node, nameof(Name), OnPropertyChanging, OnPropertyChanged, library.UndoRedoService);
        }
        public SpriteBordersViewModel(SpriteInfoViewModel sprite, IObjectNode spriteNode)
            : base(sprite)
        {
            textureRegionNode = spriteNode[nameof(SpriteInfo.TextureRegion)];
            textureRegionNode.ValueChanged += OnTextureRegionValueChanged;

            var spriteBordersNode = spriteNode[nameof(SpriteInfo.Borders)];

            borderBinding = new MemberGraphNodeBinding <Vector4>(spriteBordersNode, nameof(Borders), OnPropertyChanging, OnPropertyChanged, UndoRedoService);

            DependentProperties.Add(nameof(Borders), new[] { nameof(ActualBorders) });
            DependentProperties.Add(nameof(ScaleFactor), new[] { nameof(ActualBorders) });
        }
        public VisualScriptMethodViewModel(VisualScriptViewModel visualScript, Method method) : base(visualScript.ServiceProvider)
        {
            this.visualScript = visualScript;
            this.method       = method;
            var methodNode = visualScript.Session.AssetNodeContainer.GetOrCreateNode(method);

            blocksContent     = methodNode[nameof(method.Blocks)].Target;
            linksContent      = methodNode[nameof(method.Links)].Target;
            parametersContent = methodNode[nameof(method.Parameters)].Target;

            // Create bindings
            accessibilityNodeBinding   = new MemberGraphNodeBinding <Accessibility>(methodNode[nameof(method.Accessibility)], nameof(Accessibility), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService);
            virtualModifierNodeBinding = new MemberGraphNodeBinding <VirtualModifier>(methodNode[nameof(method.VirtualModifier)], nameof(VirtualModifier), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService);
            isStaticNodeBinding        = new MemberGraphNodeBinding <bool>(methodNode[nameof(method.IsStatic)], nameof(IsStatic), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService);
            nameNodeBinding            = new MemberGraphNodeBinding <string>(methodNode[nameof(method.Name)], nameof(Name), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService);
            returnTypeNodeBinding      = new MemberGraphNodeBinding <string>(methodNode[nameof(method.ReturnType)], nameof(ReturnType), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService);
        }
Esempio n. 9
0
        public SpriteCenterViewModel(SpriteInfoViewModel sprite, IObjectNode spriteNode)
            : base(sprite)
        {
            var spriteCenterNode = spriteNode[nameof(SpriteInfo.Center)];

            spriteCenterNodeBinding = new MemberGraphNodeBinding <Vector2>(spriteCenterNode, nameof(Center), OnPropertyChanging, OnPropertyChanged, UndoRedoService);
            var centerFromMiddleNode = spriteNode[nameof(SpriteInfo.CenterFromMiddle)];

            centerFromMiddleBinding = new MemberGraphNodeBinding <bool>(centerFromMiddleNode, nameof(CenterFromMiddle), OnPropertyChanging, OnPropertyChanged, UndoRedoService);

            var textureRegionNode = spriteNode[nameof(SpriteInfo.TextureRegion)];

            textureRegionBinding = new MemberGraphNodeBinding <Rectangle>(textureRegionNode, nameof(ActualCenter), OnPropertyChanging, OnPropertyChanged, UndoRedoService);

            DependentProperties.Add(nameof(Center), new[] { nameof(ActualCenter) });
            DependentProperties.Add(nameof(CenterFromMiddle), new[] { nameof(ActualCenter) });
            DependentProperties.Add(nameof(ScaleFactor), new[] { nameof(ActualCenter) });
        }
Esempio n. 10
0
        public SpriteSheetEditorViewModel([NotNull] SpriteSheetViewModel spriteSheet)
            : base(spriteSheet)
        {
            Viewport = new ViewportViewModel(ServiceProvider);

            // Commands
            DisplaySpriteSheetPropertiesCommand = new AnonymousCommand(ServiceProvider, DisplaySpriteSheetProperties);
            RemoveImageCommand              = new AnonymousCommand(ServiceProvider, RemoveSelectedImages);
            SelectNextSpriteCommand         = new AnonymousCommand <int>(ServiceProvider, SelectNextSprite);
            MoveImageCommand                = new AnonymousCommand <int>(ServiceProvider, MoveImage);
            AddNewImageCommand              = new AnonymousCommand(ServiceProvider, AddNewImage);
            UseWholeImageCommand            = new AnonymousCommand(ServiceProvider, UseWholeImage);
            FocusOnRegionCommand            = new AnonymousCommand(ServiceProvider, FocusOnRegion);
            DuplicateSelectedImagesCommand  = new AnonymousCommand(ServiceProvider, DuplicateSelectedImages);
            CopyImageCommand                = new AnonymousCommand(ServiceProvider, CopyImages, CanCopyImages);
            PasteImageCommand               = new AnonymousCommand(ServiceProvider, PasteImages, () => pasteMonitor.Get(CanPasteImages));
            FindSpriteRegionCommand         = new AnonymousCommand <WindowsPoint>(ServiceProvider, FindSpriteRegion);
            ToggleSelectionHighlightCommand = new AnonymousCommand(ServiceProvider, () => SelectionHighlightEnabled = !SelectionHighlightEnabled);
            ToggleToolModeCommand           = new AnonymousCommand <SpriteSheetEditorToolMode>(ServiceProvider, ToggleToolMode);
            ToggleUseMagicWandCommand       = new AnonymousCommand(ServiceProvider, () => ToggleToolMode(SpriteSheetEditorToolMode.MagicWand));

            SelectedSprites = new ObservableList <object>();
            SelectedSprites.CollectionChanged += SelectedImagesCollectionChanged;
            ServiceProvider.Get <SelectionService>().RegisterSelectionScope(id => Sprites.FirstOrDefault(x => x.Id == id), obj => (obj as SpriteInfoViewModel)?.Id, SelectedSprites);
            sprites = new ObservableList <SpriteInfoViewModel>(Asset.Asset.Sprites.Select((x, i) => new SpriteInfoViewModel(this, x)
            {
                Index = i
            }));
            Sprites.CollectionChanged += ImageCollectionChanged;
            DependentProperties.Add(nameof(ToolMode), new[] { nameof(UsingPixelTool) });
            magicWandUseTransparency = !Asset.Asset.ColorKeyEnabled;

            var rootNode = Session.AssetNodeContainer.GetNode(spriteSheet.Asset);

            spritesNode                = rootNode[nameof(SpriteSheetAsset.Sprites)].Target;
            colorKeyNodeBinding        = new MemberGraphNodeBinding <Color>(rootNode[nameof(SpriteSheetAsset.ColorKeyColor)], nameof(ColorKey), OnPropertyChanging, OnPropertyChanged, UndoRedoService);
            colorKeyEnabledNodeBinding = new MemberGraphNodeBinding <bool>(rootNode[nameof(SpriteSheetAsset.ColorKeyEnabled)], nameof(ColorKeyEnabled), OnPropertyChanging, OnPropertyChanged, UndoRedoService);
            typeNodeBinding            = new MemberGraphNodeBinding <SpriteSheetType>(rootNode[nameof(SpriteSheetAsset.Type)], nameof(Type), OnPropertyChanging, OnPropertyChanged, UndoRedoService);

            // TODO: dispose this
            spritesNode.ItemChanged += SpritesContentChanged;
        }
Esempio n. 11
0
        protected KeyFrameControlPointViewModel([NotNull] CurveViewModelBase curve, [NotNull] IMemberNode keyNode, [NotNull] IMemberNode valueNode, [NotNull] IMemberNode tangentTypeNode)
            : base(curve)
        {
            if (keyNode == null)
            {
                throw new ArgumentNullException(nameof(keyNode));
            }
            if (valueNode == null)
            {
                throw new ArgumentNullException(nameof(valueNode));
            }
            if (tangentTypeNode == null)
            {
                throw new ArgumentNullException(nameof(tangentTypeNode));
            }

            keyBinding         = CreateBinding <float>(keyNode, nameof(Key));
            ValueBinding       = CreateBinding <TValue>(valueNode, nameof(Value));
            tangentTypeBinding = CreateBinding <AnimationKeyTangentType>(tangentTypeNode, nameof(TangentType));
        }
Esempio n. 12
0
        protected UIElementViewModel([NotNull] UIEditorBaseViewModel editor, [NotNull] UIBaseViewModel asset, [NotNull] UIElementDesign elementDesign, [CanBeNull] IEnumerable <UIElementDesign> children)
            : base(editor, asset, children)
        {
            AssetSideUIElement = elementDesign.UIElement;
            ElementType        = AssetSideUIElement.GetType();
            UIElementDesign    = elementDesign;
            var assetNode = editor.NodeContainer.GetOrCreateNode(elementDesign.UIElement);

            nameNodeBinding = new MemberGraphNodeBinding <string>(assetNode[nameof(UIElement.Name)], nameof(Name), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService);

            propagator = new GameEditorChangePropagator <UIElementDesign, UIElement, UIElementViewModel>(Editor, this, elementDesign.UIElement);

            PanelCommand  = new AnonymousCommand <PanelCommandMode>(ServiceProvider, PanelCommandImpl);
            RenameCommand = new AnonymousCommand(ServiceProvider, () => IsEditing = true);

            UpdateSourceLibrary();
            var basePrefabNode = Editor.NodeContainer.GetNode(UIElementDesign)[nameof(UIElementDesign.Base)];

            basePrefabNode.ValueChanged += BaseElementChanged;
        }
Esempio n. 13
0
        public SceneRootViewModel([NotNull] SceneEditorViewModel editor, [NotNull] SceneViewModel scene, AsyncLock loadMutex)
            : base(editor, scene, "Scene root")
        {
            this.loadMutex = loadMutex;
            sceneId        = Guid.NewGuid();

            foreach (var childScene in scene.Children)
            {
                var child = new SceneRootViewModel(editor, childScene, loadMutex)
                {
                    Parent = this
                };
                childScenes.Add(child);
            }
            AddItems(ChildScenes);
            scene.Children.CollectionChanged += SceneChildrenCollectionChanged;

            var offsetNode = Editor.NodeContainer.GetNode(scene.Asset)[nameof(scene.Asset.Offset)];

            offsetNodeBinding = new MemberGraphNodeBinding <Vector3>(offsetNode, nameof(Offset), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService);

            LoadSettings().Forget();
        }