Updated the FrameEditor to have frame icons

This commit is contained in:
MattNL
2022-10-02 03:47:13 -04:00
parent a29ff36a03
commit a5385128c6
4 changed files with 163 additions and 143 deletions

View File

@@ -29,147 +29,148 @@ namespace PckStudio.Forms.Additional_Popups.Animation
/// </summary>
private void InitializeComponent()
{
this.SaveBtn = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.CancelBtn = new System.Windows.Forms.Button();
this.FrameIndexUpDown = new System.Windows.Forms.NumericUpDown();
this.FrameTimeUpDown = new System.Windows.Forms.NumericUpDown();
((System.ComponentModel.ISupportInitialize)(this.FrameIndexUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).BeginInit();
this.SuspendLayout();
//
// SaveBtn
//
this.SaveBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.SaveBtn.ForeColor = System.Drawing.Color.White;
this.SaveBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.SaveBtn.Location = new System.Drawing.Point(55, 111);
this.SaveBtn.Name = "SaveBtn";
this.SaveBtn.Size = new System.Drawing.Size(75, 23);
this.SaveBtn.TabIndex = 7;
this.SaveBtn.Text = "Save";
this.SaveBtn.UseVisualStyleBackColor = true;
this.SaveBtn.Click += new System.EventHandler(this.SaveBtn_Click);
//
// label2
//
this.label2.AutoSize = true;
this.label2.ForeColor = System.Drawing.Color.White;
this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.label2.Location = new System.Drawing.Point(9, 54);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(65, 13);
this.label2.TabIndex = 6;
this.label2.Text = "Frame Index";
//
// label1
//
this.label1.AutoSize = true;
this.label1.ForeColor = System.Drawing.Color.White;
this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.label1.Location = new System.Drawing.Point(9, 83);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(62, 13);
this.label1.TabIndex = 10;
this.label1.Text = "Frame Time";
//
// label3
//
this.label3.AutoSize = true;
this.label3.ForeColor = System.Drawing.Color.White;
this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.label3.Location = new System.Drawing.Point(47, 13);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(109, 13);
this.label3.TabIndex = 12;
this.label3.Text = "may/matt was here :3";
//
// CancelBtn
//
this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.CancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.CancelBtn.ForeColor = System.Drawing.Color.White;
this.CancelBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.CancelBtn.Location = new System.Drawing.Point(135, 111);
this.CancelBtn.Name = "CancelBtn";
this.CancelBtn.Size = new System.Drawing.Size(75, 23);
this.CancelBtn.TabIndex = 13;
this.CancelBtn.Text = "Cancel";
this.CancelBtn.UseVisualStyleBackColor = true;
this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click);
//
// FrameIndexUpDown
//
this.FrameIndexUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17)))));
this.FrameIndexUpDown.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.FrameIndexUpDown.ForeColor = System.Drawing.SystemColors.Window;
this.FrameIndexUpDown.Location = new System.Drawing.Point(77, 54);
this.FrameIndexUpDown.Maximum = new decimal(new int[] {
1,
0,
0,
0});
this.FrameIndexUpDown.Name = "FrameIndexUpDown";
this.FrameIndexUpDown.Size = new System.Drawing.Size(179, 20);
this.FrameIndexUpDown.TabIndex = 14;
this.FrameIndexUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// FrameTimeUpDown
//
this.FrameTimeUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17)))));
this.FrameTimeUpDown.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.FrameTimeUpDown.ForeColor = System.Drawing.SystemColors.Window;
this.FrameTimeUpDown.Location = new System.Drawing.Point(77, 81);
this.FrameTimeUpDown.Maximum = new decimal(new int[] {
this.components = new System.ComponentModel.Container();
this.SaveBtn = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.CancelBtn = new System.Windows.Forms.Button();
this.FrameTimeUpDown = new System.Windows.Forms.NumericUpDown();
this.FrameList = new System.Windows.Forms.TreeView();
this.TextureIcons = new System.Windows.Forms.ImageList(this.components);
((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).BeginInit();
this.SuspendLayout();
//
// SaveBtn
//
this.SaveBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.SaveBtn.ForeColor = System.Drawing.Color.White;
this.SaveBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.SaveBtn.Location = new System.Drawing.Point(12, 228);
this.SaveBtn.Name = "SaveBtn";
this.SaveBtn.Size = new System.Drawing.Size(75, 23);
this.SaveBtn.TabIndex = 7;
this.SaveBtn.Text = "Save";
this.SaveBtn.UseVisualStyleBackColor = true;
this.SaveBtn.Click += new System.EventHandler(this.SaveBtn_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.ForeColor = System.Drawing.Color.White;
this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.label1.Location = new System.Drawing.Point(19, 204);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(62, 13);
this.label1.TabIndex = 10;
this.label1.Text = "Frame Time";
//
// label3
//
this.label3.AutoSize = true;
this.label3.ForeColor = System.Drawing.Color.White;
this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.label3.Location = new System.Drawing.Point(14, 13);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(109, 13);
this.label3.TabIndex = 12;
this.label3.Text = "may/matt was here :3";
//
// CancelBtn
//
this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.CancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.CancelBtn.ForeColor = System.Drawing.Color.White;
this.CancelBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.CancelBtn.Location = new System.Drawing.Point(92, 228);
this.CancelBtn.Name = "CancelBtn";
this.CancelBtn.Size = new System.Drawing.Size(75, 23);
this.CancelBtn.TabIndex = 13;
this.CancelBtn.Text = "Cancel";
this.CancelBtn.UseVisualStyleBackColor = true;
this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click);
//
// FrameTimeUpDown
//
this.FrameTimeUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17)))));
this.FrameTimeUpDown.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.FrameTimeUpDown.ForeColor = System.Drawing.SystemColors.Window;
this.FrameTimeUpDown.Location = new System.Drawing.Point(87, 202);
this.FrameTimeUpDown.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.FrameTimeUpDown.Name = "FrameTimeUpDown";
this.FrameTimeUpDown.Size = new System.Drawing.Size(179, 20);
this.FrameTimeUpDown.TabIndex = 15;
this.FrameTimeUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// FrameEditor
//
this.AcceptButton = this.SaveBtn;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.CancelBtn;
this.ClientSize = new System.Drawing.Size(264, 140);
this.ControlBox = false;
this.Controls.Add(this.FrameTimeUpDown);
this.Controls.Add(this.FrameIndexUpDown);
this.Controls.Add(this.CancelBtn);
this.Controls.Add(this.label3);
this.Controls.Add(this.label1);
this.Controls.Add(this.SaveBtn);
this.Controls.Add(this.label2);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(266, 142);
this.Name = "FrameEditor";
this.Resizable = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Style = MetroFramework.MetroColorStyle.Silver;
this.Theme = MetroFramework.MetroThemeStyle.Dark;
((System.ComponentModel.ISupportInitialize)(this.FrameIndexUpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
this.FrameTimeUpDown.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.FrameTimeUpDown.Name = "FrameTimeUpDown";
this.FrameTimeUpDown.Size = new System.Drawing.Size(73, 20);
this.FrameTimeUpDown.TabIndex = 15;
this.FrameTimeUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.FrameTimeUpDown.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// FrameList
//
this.FrameList.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.FrameList.ForeColor = System.Drawing.SystemColors.Window;
this.FrameList.HideSelection = false;
this.FrameList.ImageIndex = 0;
this.FrameList.ImageList = this.TextureIcons;
this.FrameList.Location = new System.Drawing.Point(12, 37);
this.FrameList.Name = "FrameList";
this.FrameList.SelectedImageIndex = 0;
this.FrameList.ShowLines = false;
this.FrameList.ShowRootLines = false;
this.FrameList.Size = new System.Drawing.Size(155, 159);
this.FrameList.TabIndex = 1;
//
// TextureIcons
//
this.TextureIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
this.TextureIcons.ImageSize = new System.Drawing.Size(32, 32);
this.TextureIcons.TransparentColor = System.Drawing.Color.Transparent;
//
// FrameEditor
//
this.AcceptButton = this.SaveBtn;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.CancelBtn;
this.ClientSize = new System.Drawing.Size(178, 264);
this.ControlBox = false;
this.Controls.Add(this.FrameList);
this.Controls.Add(this.FrameTimeUpDown);
this.Controls.Add(this.CancelBtn);
this.Controls.Add(this.label3);
this.Controls.Add(this.label1);
this.Controls.Add(this.SaveBtn);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "FrameEditor";
this.Resizable = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Style = MetroFramework.MetroColorStyle.Silver;
this.Theme = MetroFramework.MetroThemeStyle.Dark;
((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button SaveBtn;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Button CancelBtn;
private System.Windows.Forms.NumericUpDown FrameIndexUpDown;
private System.Windows.Forms.NumericUpDown FrameTimeUpDown;
}
private System.Windows.Forms.TreeView FrameList;
public System.Windows.Forms.ImageList TextureIcons;
public System.Windows.Forms.Button SaveBtn;
}
}

View File

@@ -15,20 +15,30 @@ namespace PckStudio.Forms.Additional_Popups.Animation
{
public partial class FrameEditor : MetroForm
{
public int FrameTextureIndex => (int)FrameIndexUpDown.Value;
public int FrameTextureIndex => FrameList.SelectedNode.Index;
public int FrameTime => (int)FrameTimeUpDown.Value;
public FrameEditor(int indexLimit)
public FrameEditor(ImageList texList)
{
InitializeComponent();
label3.Text = "Frame must be within 0 and " + indexLimit + ".";
FrameIndexUpDown.Maximum = indexLimit;
FrameTimeUpDown.Minimum = 1;
label3.Text = "Select a frame and frame time:";
FrameList.ImageList = texList;
int index = 0;
foreach (Image frameTex in texList.Images)
{
TreeNode frame = new TreeNode($"Frame {index}", index, index);
FrameList.Nodes.Add(frame);
Console.WriteLine(index);
index++;
}
}
public FrameEditor(int frameTime, int frameTextureIndex, int indexLimit) : this(indexLimit)
public FrameEditor(int frameTime, int frameTextureIndex, ImageList texList) : this(texList)
{
FrameIndexUpDown.Value = frameTextureIndex;
FrameTimeUpDown.Value = frameTime;
FrameList.SelectedNode = FrameList.Nodes[frameTextureIndex];
FrameList.SelectedNode.EnsureVisible();
FrameTimeUpDown.Value = frameTime;
}
private void SaveBtn_Click(object sender, EventArgs e)

View File

@@ -117,4 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="TextureIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -143,6 +143,11 @@ namespace PckStudio.Forms.Editor
return frames;
}
public List<Image> GetFrameTextures()
{
return frameTextures;
}
public int GetFrameIndex(Image frameTexture)
{
_ = frameTexture ?? throw new ArgumentNullException(nameof(frameTexture));
@@ -276,7 +281,7 @@ namespace PckStudio.Forms.Editor
frameTreeView.Nodes.Clear();
// $"Frame: {i}, Frame Time: {Animation.MinimumFrameTime}"
TextureIcons.Images.Clear();
TextureIcons.Images.AddRange(currentAnimation.GetFrames().Select(f => f.Texture).ToArray());
TextureIcons.Images.AddRange(currentAnimation.GetFrameTextures().ToArray());
currentAnimation.GetFrames().ForEach(f => frameTreeView.Nodes.Add("", $"for {f.Ticks} frame" + (f.Ticks > 1 ? "s" : "" ), currentAnimation.GetFrameIndex(f.Texture), currentAnimation.GetFrameIndex(f.Texture)));
player.SelectFrame(currentAnimation, 0);
}
@@ -422,8 +427,8 @@ namespace PckStudio.Forms.Editor
private void treeView1_doubleClick(object sender, EventArgs e)
{
var frame = currentAnimation.GetFrame(frameTreeView.SelectedNode.Index);
using FrameEditor diag = new FrameEditor(frame.Ticks, currentAnimation.GetFrameIndex(frame.Texture), currentAnimation.FrameTextureCount-1);
if (diag.ShowDialog(this) == DialogResult.OK)
using FrameEditor diag = new FrameEditor(frame.Ticks, currentAnimation.GetFrameIndex(frame.Texture), TextureIcons);
if (diag.ShowDialog(this) == DialogResult.OK)
{
/* Found a bug here. When passing the frame variable, it would replace the first instance of that frame and time
* rather than the actual frame that was clicked. I've just switched to passing the index to fix this for now. -Matt
@@ -436,7 +441,8 @@ namespace PckStudio.Forms.Editor
private void addFrameToolStripMenuItem_Click(object sender, EventArgs e)
{
using FrameEditor diag = new FrameEditor(currentAnimation.FrameTextureCount-1);
using FrameEditor diag = new FrameEditor(TextureIcons);
diag.SaveBtn.Text = "Add";
if (diag.ShowDialog(this) == DialogResult.OK)
{
currentAnimation.AddFrame(diag.FrameTextureIndex, diag.FrameTime);