Esempio n. 1
0
        public MainWindow()
        {
            InitializeComponent();

            System.Drawing.Color       color      = Properties.Settings.Default.BackgroundColor;
            System.Windows.Media.Color colorMedia = System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B);
            colorDialog.SelectedColor = colorMedia;
            chkKeepData.IsChecked     = Properties.Settings.Default.KeepData;
            spriteWindow.ZoomLevel    = Properties.Settings.Default.ZoomLevel;
            spriteWindow.Playing      = Properties.Settings.Default.Playing;
            spriteWindow.SetBackgroundColor(colorMedia);

            if (spriteWindow.Playing)
            {
                btnPlay.Content = "Stop";
            }

            valZoom.Text = (spriteWindow.ZoomLevel * 100).ToString() + "%";

            spriteStrip = new SpriteStrip();
            sprite      = new Sprite(spriteStrip);
            spriteWindow.SpriteEdited = sprite;
        }
Esempio n. 2
0
        private bool LoadSpriteStrip(string fileName)
        {
            ignoreOriginChange = ignoreBoundingBoxChange = ignoreFrameSpeedChange = true;

            List <Bitmap> spriteFrames = new List <Bitmap>();
            FileInfo      fInfo        = new FileInfo(fileName);

            string fileNameNoExt = Path.GetFileNameWithoutExtension(fileName).Replace(' ', '_');
            string strip         = "";
            string spriteName    = "";
            int    frames        = 0;

            strip = "";
            if (fInfo.Name.LastIndexOf("strip") > -1)
            {
                spriteName = fileNameNoExt.Substring(0, fInfo.Name.LastIndexOf("strip"));
                spriteName = spriteName.Trim(new char[] { ' ', '-', '_', '.', ',' });

                strip = fInfo.Name.Substring(fInfo.Name.LastIndexOf("strip") + 5);
                bool isDigit = true;
                int  index   = 0;
                int  digit;
                while (isDigit == true)
                {
                    if (!int.TryParse(strip.Substring(index, 1), out digit))
                    {
                        isDigit = false;
                    }
                    else
                    {
                        index++;
                    }
                }
                strip = strip.Substring(0, index);
            }
            else
            {
                spriteName = fileNameNoExt;
            }

            // Set number of frames
            frames = 0;
            int.TryParse(strip, out frames);
            if (frames == 0)
            {
                frames = 1;
            }

            Bitmap         bm        = new Bitmap(fileName);
            FrameDimension dimension = new FrameDimension(bm.FrameDimensionsList[0]);
            Bitmap         bm_cropped;
            Rectangle      rect;
            int            w         = bm.Width / frames;
            int            h         = bm.Height;
            int            framesGif = bm.GetFrameCount(dimension);

            valWidth.Text  = w.ToString() + "px";
            valHeight.Text = h.ToString() + "px";

            if (bm.Width % frames == 0)
            {
                // Sprite frames
                // Animated GIF
                if (framesGif > 1 && frames <= 1)
                {
                    for (int i = 0; i < framesGif; i++)
                    {
                        bm.SelectActiveFrame(dimension, i);
                        bm_cropped = (Bitmap)bm.Clone();
                        spriteFrames.Add(bm_cropped);
                    }
                    frames = framesGif;
                }
                // Strips etc.
                else
                {
                    for (int i = 0; i < frames; i++)
                    {
                        rect       = new Rectangle(i * w, 0, w, h);
                        bm_cropped = (Bitmap)bm.Clone(rect, bm.PixelFormat);
                        spriteFrames.Add(bm_cropped);
                    }
                }

                spritePath         = fileName;
                valFrameCount.Text = frames.ToString();
            }
            else
            {
                return(false);
                //logMessage.Comment = "Width / frames mismatch!";
            }

            string configPath = Path.Combine(fInfo.DirectoryName, spriteName + ".xsprite");

            if (File.Exists(configPath))
            {
                spriteStrip = IO.LoadClassInstance <SpriteStrip>(configPath);
            }
            else
            {
                BoundingBox2D bbox   = new BoundingBox2D(spriteStrip.BoundingBox.Left, spriteStrip.BoundingBox.Top, spriteStrip.BoundingBox.Right, spriteStrip.BoundingBox.Bottom);
                Position2D    origin = new Position2D(spriteStrip.Origin.X, spriteStrip.Origin.Y);
                spriteStrip = new SpriteStrip();
                if (chkKeepData.IsChecked ?? true)
                {
                    spriteStrip.BoundingBox = bbox;
                    spriteStrip.Origin      = origin;
                }
                spriteStrip.Name        = spriteName;
                spriteStrip.FrameCount  = frames;
                spriteStrip.Size.Width  = w;
                spriteStrip.Size.Height = h;
                spriteStrip.ResetFrameSpeeds();
            }
            sprite.Strip = spriteStrip;
            spriteWindow.SpriteEdited = sprite;
            spriteWindow.SetSprite(spriteFrames);
            spriteWindow.ShowAnchor = -1;
            populateFrameSpeedList();
            populateAnchorList();
            updateGUI();

            ignoreOriginChange = ignoreBoundingBoxChange = ignoreFrameSpeedChange = false;

            return(true);
        }
Esempio n. 3
0
        public static void SaveSpriteStrip(SpriteStrip sprite, string fileName)
        {
            XmlElement elemParent, elem1, elem2;

            // Create an xml document
            XmlDocument doc = new XmlDocument();

            // Create the root element
            elemParent = doc.CreateElement("XnaContent");
            doc.AppendChild(elemParent);

            // Create the asset element
            elem1 = doc.CreateElement("Asset");
            elemParent.AppendChild(elem1);
            elem1.SetAttribute("Type", "GamePhase.Graphics.SpriteStrip");

            // Set elem1 as the parent element
            elemParent = elem1;

            // Name
            elemParent.AppendChild(doc.CreateElement("Name")).InnerText = sprite.Name;

            // Origin
            elem1 = doc.CreateElement("Origin");
            elem1.AppendChild(doc.CreateElement("X")).InnerText = sprite.Origin.X.ToString();
            elem1.AppendChild(doc.CreateElement("Y")).InnerText = sprite.Origin.Y.ToString();
            elemParent.AppendChild(elem1);

            // Bounding Box
            elem1 = doc.CreateElement("BoundingBox");
            elem1.AppendChild(doc.CreateElement("Left")).InnerText   = sprite.BoundingBox.Left.ToString();
            elem1.AppendChild(doc.CreateElement("Right")).InnerText  = sprite.BoundingBox.Right.ToString();
            elem1.AppendChild(doc.CreateElement("Top")).InnerText    = sprite.BoundingBox.Top.ToString();
            elem1.AppendChild(doc.CreateElement("Bottom")).InnerText = sprite.BoundingBox.Bottom.ToString();
            elemParent.AppendChild(elem1);

            // Size
            elem1 = doc.CreateElement("Size");
            elem1.AppendChild(doc.CreateElement("Width")).InnerText  = sprite.Size.Width.ToString();
            elem1.AppendChild(doc.CreateElement("Height")).InnerText = sprite.Size.Height.ToString();
            elemParent.AppendChild(elem1);

            // FrameCount
            elemParent.AppendChild(doc.CreateElement("FrameCount")).InnerText = sprite.FrameCount.ToString();

            // AnimationSpeed
            elemParent.AppendChild(doc.CreateElement("AnimationSpeed")).InnerText = sprite.AnimationSpeed.ToString();

            // FrameSpeeds
            elemParent.AppendChild(doc.CreateElement("FrameSpeeds")).InnerText = String.Join(" ", sprite.FrameSpeeds);

            // Anchors
            elem1 = doc.CreateElement("Anchors");
            elemParent.AppendChild(elem1);
            elemParent = elem1;
            foreach (SpriteAnchor anchor in sprite.Anchors)
            {
                elem1 = doc.CreateElement("Item");
                elemParent.AppendChild(elem1);
                elem1.AppendChild(doc.CreateElement("Name")).InnerText = anchor.Name;

                elem2 = doc.CreateElement("Frames");
                elem1.AppendChild(elem2);
                elem1 = elem2;
                // Frames
                foreach (SpriteAnchorFrame frame in anchor.Frames)
                {
                    elem2 = doc.CreateElement("Item");
                    elem1.AppendChild(elem2);
                    elem2.AppendChild(doc.CreateElement("X1")).InnerText     = frame.X1.ToString();
                    elem2.AppendChild(doc.CreateElement("Y1")).InnerText     = frame.Y1.ToString();
                    elem2.AppendChild(doc.CreateElement("X2")).InnerText     = frame.X2.ToString();
                    elem2.AppendChild(doc.CreateElement("Y2")).InnerText     = frame.Y2.ToString();
                    elem2.AppendChild(doc.CreateElement("Angle")).InnerText  = frame.Angle.ToString();
                    elem2.AppendChild(doc.CreateElement("Length")).InnerText = frame.Length.ToString();
                }
            }

            // Save the XML document
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.Encoding = Encoding.GetEncoding("utf-8");
            settings.Indent   = true;
            XmlWriter writer = XmlWriter.Create(fileName, settings);

            doc.Save(writer);
        }