public FramePresenter AddNewFrame(string name, int height, int width)
        {
            //We want to place the new frame last, so we need to use the currently-last
            //frame's properties to set the new one's BitmapOffset
            var lastFrame = this.Frames[this.Frames.Count - 1];

            //Build the new frame.
            SkaaFrame sf = new SkaaFrame();

            sf.IndexedBitmap = new IndexedBitmap(new Bitmap(width, height)
            {
                Palette = this.PalettePresenter.GameObject
            });
            sf.Name = name;

            //Note: We just use the bitmap's height & width, which essentially assumes there are no transparent pixels.
            //This is just a quick cheat, rather than calling GetSprBytes() to get the real offset based on RLE data.
            sf.BitmapOffset = lastFrame.BitmapOffset + (lastFrame.Bitmap.Height * lastFrame.Bitmap.Width);

            //Build the new FramePresenter. This takes care of setting up fp's properties for us.
            FramePresenter fp = new FramePresenter(sf);

            AddNewFrameDataRow(fp);


            //Update this and SkaaSprite's Frames
            this.Frames.Add(fp);
            this.GameObject.Frames.Add(sf);

            //Ensures RecalculateFrameOffsets will get the real offset for us later
            this.BitmapHasChanges = true;

            return(fp);
        }
Ejemplo n.º 2
0
        protected override void AddNewFrameDataRow(FramePresenter fr)
        {
            //Create a new DataRow for the new frame
            var dr = this.DataView.Table.NewRow();

            dr.BeginEdit();
            dr[SkaaGameDataLib.Util.DataRowExtensions.ResIdxFrameNameColumn]   = fr.Name;
            dr[SkaaGameDataLib.Util.DataRowExtensions.ResIdxFrameOffsetColumn] = fr.BitmapOffset;
            dr.EndEdit();
            this.DataView.Table.Rows.Add(dr);
        }
        /// <summary>
        /// Creates a <see cref="FramePresenter"/> for every <see cref="SkaaFrame"/> in the <see cref="SkaaSprite"/>
        /// referenced by <see cref="PresenterBase{T}.GameObject"/>. Calling this more than once on the same object
        /// will result in new <see cref="FramePresenter"/> objects being generated, which come with new <see cref="Guid"/>
        /// values.
        /// </summary>
        protected void BuildFramePresenters()
        {
            this.Frames = new TrulyObservableCollection <IFrame>();

            foreach (SkaaFrame f in this.GameObject.Frames)
            {
                var fp = new FramePresenter(f);
                this.Frames.Add(fp);
                fp.PropertyChanged += FramePresenter_PropertyChanged;
            }

            this.ActiveFrame = this.Frames[0];
        }
Ejemplo n.º 4
0
        protected override void AddNewFrameDataRow(FramePresenter fr)
        {
            //todo: Need data for the other SFRAME columns
            throw new NotImplementedException();

            //Create a new DataRow for the new frame
            var dr = this.DataView.Table.NewRow();

            dr.BeginEdit();
            dr[SkaaGameDataLib.Util.DataRowExtensions.SprFrameNameColumn]   = fr.Name;
            dr[SkaaGameDataLib.Util.DataRowExtensions.SprFrameOffsetColumn] = fr.BitmapOffset;
            dr.EndEdit();
            this.DataView.Table.Rows.Add(dr);
        }
 protected abstract void AddNewFrameDataRow(FramePresenter fr);