Ejemplo n.º 1
0
        /// <summary>
        /// Add a new texture or return the existing one
        /// </summary>
        public PAImage AddImage(PAFrame frame, PALayer layer)
        {
            var image = FindImage(frame, layer);

            if (null != image)
            {
                return(image);
            }

            var texture = new Texture2D(width, height, TextureFormat.RGBA32, false);

            texture.filterMode = FilterMode.Point;
            texture.Clear(Color.clear);
            texture.Apply();

            image = new PAImage
            {
                frame   = frame,
                layer   = layer,
                texture = texture
            };

            images.Add(image);

            return(image);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Render the given frame into a new texture
        /// </summary>
        public Texture2D RenderFrame(PAFrame frame)
        {
            var renderTarget = new Texture2D(width, height, TextureFormat.RGBA32, false);

            renderTarget.filterMode = FilterMode.Point;
            RenderFrame(frame, renderTarget);
            renderTarget.Apply();
            return(renderTarget);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Return the frame that is next in the frame sequence for the animation
        /// </summary>
        public PAFrame FindNextFrame(PAFrame prevFrame, bool loop = true)
        {
            var frame = frames.Where(f => f.animation == prevFrame.animation && f.order == prevFrame.order + 1).FirstOrDefault();

            if (null == frame && loop)
            {
                frame = frames.Where(f => f.animation == prevFrame.animation).OrderBy(f => f.order).FirstOrDefault();
            }

            return(frame);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Add a new frame to the given animation
        /// </summary>
        public PAFrame AddFrame(PAAnimation animation)
        {
            var frame = new PAFrame(this)
            {
                id        = System.Guid.NewGuid().ToString(),
                animation = animation,
                order     = frames.Count
            };

            frames.Add(frame);
            return(frame);
        }
Ejemplo n.º 5
0
        public PAFrameItem(PAFrame frame)
        {
            Frame      = frame;
            Frame.Item = this;

            AddToClassList("frame");

            _preview = new Image {
                image = frame.Render()
            };
            Add(_preview);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Render the given frame into the given texture
        /// </summary>
        public void RenderFrame(PAFrame frame, Texture2D renderTarget)
        {
            renderTarget.Clear(Color.clear);

            foreach (var image in images.Where(t => t.frame == frame).OrderBy(t => t.layer.order))
            {
                if (image.layer.visible && image.texture != null)
                {
                    renderTarget.Blend(image.texture, image.layer.opacity);
                }
            }

            renderTarget.Apply();
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Remove a frame from the file
        /// </summary>
        public void DeleteFrame(PAFrame remove)
        {
            // Remove all textures that reference the frame
            images = images.Where(t => t.frame != remove).ToList();

            // Adjust the order for all frames after the frame being removed
            foreach (var frame in frames)
            {
                if (frame.order > remove.order)
                {
                    frame.order--;
                }
            }

            // Remove the frame from the list
            frames.Remove(remove);
        }
Ejemplo n.º 8
0
 /// <summary>
 /// Find the texture for the given frame and layer
 /// </summary>
 /// <returns></returns>
 public PAImage FindImage(PAFrame frame, PALayer layer) =>
 images.Where(t => t.frame == frame && t.layer == layer).FirstOrDefault();
Ejemplo n.º 9
0
        /// <summary>
        /// Load a pixel edtior file from the given filename
        /// </summary>
        public static PAFile Load(string filename)
        {
            var file = new PAFile {
                name = Path.GetFileNameWithoutExtension(filename)
            };

            using (var reader = new BinaryReader(File.OpenRead(filename)))
            {
                file.version = reader.ReadInt32();
                file.width   = reader.ReadInt32();
                file.height  = reader.ReadInt32();

                var textureSize = 4 * file.width * file.height;

                // Read the layers
                var layerCount = reader.ReadInt32();
                for (var layerIndex = 0; layerIndex < layerCount; layerIndex++)
                {
                    var layer = new PALayer(file);
                    layer.id      = reader.ReadString();
                    layer.name    = reader.ReadString();
                    layer.opacity = reader.ReadSingle();
                    layer.order   = reader.ReadInt32();
                    layer.visible = reader.ReadBoolean();
                    file.layers.Add(layer);
                }

                // Read the animations
                var animationCount = reader.ReadInt32();
                for (var animationIndex = 0; animationIndex < animationCount; animationIndex++)
                {
                    var animation = new PAAnimation();
                    animation.id   = reader.ReadString();
                    animation.name = reader.ReadString();

                    if (file.version < 3)
                    {
                        animation.fps = 10;
                    }
                    else
                    {
                        animation.fps = reader.ReadInt32();
                    }

                    file.animations.Add(animation);
                }

                // Read the frames
                var frameCount = reader.ReadInt32();
                for (var frameIndex = 0; frameIndex < frameCount; frameIndex++)
                {
                    var frame = new PAFrame(file);
                    frame.id        = reader.ReadString();
                    frame.animation = file.FindAnimation(reader.ReadString());
                    frame.order     = reader.ReadInt32();
                    file.frames.Add(frame);
                }

                // Read the textures
                var imageCount = reader.ReadInt32();
                for (var imageIndex = 0; imageIndex < imageCount; imageIndex++)
                {
                    var image = new PAImage();
                    image.frame = file.FindFrame(reader.ReadString());
                    image.layer = file.FindLayer(reader.ReadString());

                    if (reader.ReadBoolean())
                    {
                        image.texture = new Texture2D(file.width, file.height, TextureFormat.RGBA32, false);
                        image.texture.LoadRawTextureData(reader.ReadBytes(textureSize));
                        image.texture.filterMode = FilterMode.Point;
                        image.texture.Apply();
                    }

                    file.images.Add(image);
                }
            }

            return(file);
        }
Ejemplo n.º 10
0
 public void RefreshPreview(PAFrame frame)
 {
     _preview.image = frame.File.FindImage(frame, Layer)?.texture;
     _preview.MarkDirtyRepaint();
 }