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); }
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]; }
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);