예제 #1
0
        private void MakeSpriteSheetFromSeparateImages(Bitmap[] images, bool addAnim)
        {
            var spriteSheetData = ResourcesManager.LoadSpriteSheetFromSeparateImages(images);

            var spriteSheet = new SpriteSheet(spriteSheetData.Texture)
            {
                Name = spriteSheetData.Name, Id = spriteSheetData.Id
            };


            _spriteSheets.Add(spriteSheet.Id, spriteSheet);

            ShowSpriteSheet(spriteSheet.Id);

            if (CurrentShownAnimation != null)
            {
                UnloadCurrentShownAnimation();
            }


            var eventArgs = new AppEventArgs
            {
                Type = EventType.AddedSpriteSheet,
                SpriteSheetModified = spriteSheet,
                AnimationModified   = null
            };

            MainWindow.UpdateBrowser(eventArgs);
            if (addAnim)
            {
                MakeAnimation();
            }
        }
예제 #2
0
        public void MakeAnimation(string name, float frameRate, bool loop, bool pingPong)
        {
            if (Guard.CheckNull(_currentShownSpriteSheet))
            {
                Messager.ShowMessage(Messager.Mode.Exception,
                                     "Before creating an animation please import a sprite sheet image clicking on button 'Import Spritesheet' on topbar");
                return;
            }

            Animation animation = new Animation(name, string.Format("{0}{1}",
                                                                    _currentShownSpriteSheet.Id,
                                                                    _animations.Count),
                                                _currentShownSpriteSheet.Id)
            {
                FrameRate = frameRate, Loop = loop, PingPong = pingPong
            };

            _animations.Add(animation.Id, animation);

            ShowAnimation(animation.Id);


            var eventArgs = new AppEventArgs
            {
                Type = EventType.AddedAnimation,
                AnimationModified   = animation,
                SpriteSheetModified = _currentShownSpriteSheet
            };

            MainWindow.UpdateBrowser(eventArgs);
        }
예제 #3
0
        public void DeleteBrowserNode()
        {
            if (Browser.Nodes.Count == 0)
            {
                return;
            }

            if (Browser.SelectedNode.Level == 0)
            {
                var spNode = Browser.SelectedNode;

                var spriteSheet = Application.GetSpriteSheet((string)spNode.Tag);

                var eventArgs = new AppEventArgs
                {
                    Type = EventType.RemovedSpriteSheet,
                    SpriteSheetModified = spriteSheet,
                    AnimationModified   = null
                };


                UpdateBrowser(eventArgs);


                Application.RemoveSpriteSheet((string)spNode.Tag);

                foreach (TreeNode animNode in spNode.Nodes)
                {
                    Application.RemoveAnimation((string)animNode.Tag);
                }
            }
            else
            {
                var animNode    = Browser.SelectedNode;
                var animation   = Application.GetAnimation((string)animNode.Tag);
                var spriteSheet = Application.GetSpriteSheet((string)animNode.Parent.Tag);


                var eventArgs = new AppEventArgs
                {
                    Type = EventType.RemovedAnimation,
                    SpriteSheetModified = spriteSheet,
                    AnimationModified   = animation
                };
                UpdateBrowser(eventArgs);

                Application.RemoveAnimation((string)animNode.Tag);

                if (Application.Animations.Count == 0)
                {
                    Application.MakeAnimation();
                }
            }
        }
예제 #4
0
        private void MakeSpriteSheet(string path, bool addAnim)
        {
            Bitmap imageBitmap = new Bitmap(path);


            var spriteSheetData = ResourcesManager.LoadSpriteSheetImage(path, imageBitmap);

            imageBitmap.Dispose();

            var spriteSheet = new SpriteSheet(spriteSheetData.Texture)
            {
                Name     = spriteSheetData.Name,
                Id       = spriteSheetData.Id,
                FullPath = spriteSheetData.FullPath
            };

            _spriteSheets.Add(spriteSheet.Id, spriteSheet);

            ShowSpriteSheet(spriteSheet.Id);

            if (CurrentShownAnimation != null)
            {
                UnloadCurrentShownAnimation();
            }


            var eventArgs = new AppEventArgs
            {
                Type = EventType.AddedSpriteSheet,
                SpriteSheetModified = spriteSheet,
                AnimationModified   = null
            };


            MainWindow.UpdateBrowser(eventArgs);

            if (addAnim)
            {
                MakeAnimation();
            }


            FoldersHistoryManager.WriteFolderPath(path);
        }
예제 #5
0
        public void UpdateBrowser(AppEventArgs args)
        {
            switch (args.Type)
            {
            case EventType.AddedSpriteSheet:
            {
                TreeNode spNode = new TreeNode
                {
                    Name = args.SpriteSheetModified.Id,
                    Text = args.SpriteSheetModified.Name,
                    Tag  = args.SpriteSheetModified.Id
                };

                spNode.ImageIndex         = 2;
                spNode.SelectedImageIndex = 3;
                Browser.Nodes.Add(spNode);
                Browser.SelectedNode = spNode;
            }
            break;

            case EventType.RemovedSpriteSheet:
            {
                var nodeToBeRemoved = Browser.Nodes[args.SpriteSheetModified.Id];
                var index           = nodeToBeRemoved.Index;
                if (index == Browser.Nodes.Count - 1)
                {
                    index -= 1;
                }
                Browser.Nodes.Remove(nodeToBeRemoved);
                Browser.SelectedNode = index >= 0 ? Browser.Nodes[index] : null;
            }
            break;

            case EventType.AddedAnimation:
            {
                TreeNode animNode = new TreeNode
                {
                    Name = args.AnimationModified.Id,
                    Text = args.AnimationModified.Name,
                    Tag  = args.AnimationModified.Id
                };


                animNode.ImageIndex         = 0;
                animNode.SelectedImageIndex = 1;
                Browser.Nodes[args.SpriteSheetModified.Id].Nodes.Add(animNode);
                Browser.SelectedNode = animNode;
            }
            break;

            case EventType.RemovedAnimation:
            {
                var parentNode      = Browser.Nodes[args.SpriteSheetModified.Id];
                var nodeToBeRemoved = parentNode.Nodes[args.AnimationModified.Id];
                var index           = nodeToBeRemoved.Index;
                if (index == parentNode.Nodes.Count - 1)
                {
                    index -= 1;
                }
                parentNode.Nodes.Remove(nodeToBeRemoved);
                Browser.SelectedNode = index >= 0 ? parentNode.Nodes[index] : parentNode;
            }
            break;

            case EventType.RenamedAnimation:
            {
                Browser.Nodes[args.AnimationModified.Id].Text = args.AnimationModified.Name;
                Browser.Nodes[args.AnimationModified.Id].Name = args.AnimationModified.Name;
            }
            break;
            }

            Browser.ExpandAll();
        }