From 9563e4b278ae0218a91b59174d32b4123fbe7ac4 Mon Sep 17 00:00:00 2001 From: MattNL Date: Fri, 13 Jan 2023 17:30:45 -0500 Subject: [PATCH] Added BehavioursEditor --- .../Forms/Editor/BehaviourEditor.Designer.cs | 318 ++++++++++++++++++ PCK-Studio/Forms/Editor/BehaviourEditor.cs | 216 ++++++++++++ PCK-Studio/Forms/Editor/BehaviourEditor.resx | 137 ++++++++ PCK-Studio/MainForm.cs | 10 +- PCK-Studio/PckStudio.csproj | 10 + 5 files changed, 690 insertions(+), 1 deletion(-) create mode 100644 PCK-Studio/Forms/Editor/BehaviourEditor.Designer.cs create mode 100644 PCK-Studio/Forms/Editor/BehaviourEditor.cs create mode 100644 PCK-Studio/Forms/Editor/BehaviourEditor.resx diff --git a/PCK-Studio/Forms/Editor/BehaviourEditor.Designer.cs b/PCK-Studio/Forms/Editor/BehaviourEditor.Designer.cs new file mode 100644 index 00000000..ab5e7ede --- /dev/null +++ b/PCK-Studio/Forms/Editor/BehaviourEditor.Designer.cs @@ -0,0 +1,318 @@ +namespace PckStudio.Forms.Editor +{ + partial class BehaviourEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BehaviourEditor)); + this.treeView1 = new System.Windows.Forms.TreeView(); + this.metroContextMenu1 = new MetroFramework.Controls.MetroContextMenu(this.components); + this.addToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addNewEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addNewPositionOverrideToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.renameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.flag1Checkbox = new MetroFramework.Controls.MetroCheckBox(); + this.flag2Checkbox = new MetroFramework.Controls.MetroCheckBox(); + this.zUpDown = new System.Windows.Forms.NumericUpDown(); + this.yUpDown = new System.Windows.Forms.NumericUpDown(); + this.zLabel = new MetroFramework.Controls.MetroLabel(); + this.yLabel = new MetroFramework.Controls.MetroLabel(); + this.xUpDown = new System.Windows.Forms.NumericUpDown(); + this.xLabel = new MetroFramework.Controls.MetroLabel(); + this.metroContextMenu1.SuspendLayout(); + this.menuStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.zUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.yUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xUpDown)).BeginInit(); + this.SuspendLayout(); + // + // treeView1 + // + this.treeView1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.treeView1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.treeView1.ContextMenuStrip = this.metroContextMenu1; + this.treeView1.ForeColor = System.Drawing.Color.White; + this.treeView1.Location = new System.Drawing.Point(20, 84); + this.treeView1.Margin = new System.Windows.Forms.Padding(0); + this.treeView1.Name = "treeView1"; + this.treeView1.Size = new System.Drawing.Size(128, 176); + this.treeView1.TabIndex = 13; + this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); + this.treeView1.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick); + this.treeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown); + this.treeView1.MouseHover += new System.EventHandler(this.treeView1_MouseHover); + // + // metroContextMenu1 + // + this.metroContextMenu1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.addToolStripMenuItem, + this.renameToolStripMenuItem, + this.removeToolStripMenuItem}); + this.metroContextMenu1.Name = "metroContextMenu1"; + this.metroContextMenu1.Size = new System.Drawing.Size(118, 70); + // + // addToolStripMenuItem + // + this.addToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.addNewEntryToolStripMenuItem, + this.addNewPositionOverrideToolStripMenuItem}); + this.addToolStripMenuItem.Name = "addToolStripMenuItem"; + this.addToolStripMenuItem.Size = new System.Drawing.Size(117, 22); + this.addToolStripMenuItem.Text = "Add"; + // + // addNewEntryToolStripMenuItem + // + this.addNewEntryToolStripMenuItem.Name = "addNewEntryToolStripMenuItem"; + this.addNewEntryToolStripMenuItem.Size = new System.Drawing.Size(217, 22); + this.addNewEntryToolStripMenuItem.Text = "Add New Entry"; + this.addNewEntryToolStripMenuItem.Click += new System.EventHandler(this.addNewEntryToolStripMenuItem_Click); + // + // addNewPositionOverrideToolStripMenuItem + // + this.addNewPositionOverrideToolStripMenuItem.Name = "addNewPositionOverrideToolStripMenuItem"; + this.addNewPositionOverrideToolStripMenuItem.Size = new System.Drawing.Size(217, 22); + this.addNewPositionOverrideToolStripMenuItem.Text = "Add New Position Override"; + this.addNewPositionOverrideToolStripMenuItem.Click += new System.EventHandler(this.addNewPositionOverrideToolStripMenuItem_Click); + // + // renameToolStripMenuItem + // + this.renameToolStripMenuItem.Name = "renameToolStripMenuItem"; + this.renameToolStripMenuItem.Size = new System.Drawing.Size(117, 22); + this.renameToolStripMenuItem.Text = "Rename"; + this.renameToolStripMenuItem.Click += new System.EventHandler(this.renameToolStripMenuItem_Click); + // + // removeToolStripMenuItem + // + this.removeToolStripMenuItem.Name = "removeToolStripMenuItem"; + this.removeToolStripMenuItem.Size = new System.Drawing.Size(117, 22); + this.removeToolStripMenuItem.Text = "Remove"; + this.removeToolStripMenuItem.Click += new System.EventHandler(this.removeToolStripMenuItem_Click); + // + // menuStrip + // + this.menuStrip.AutoSize = false; + this.menuStrip.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.helpToolStripMenuItem}); + this.menuStrip.Location = new System.Drawing.Point(20, 60); + this.menuStrip.Name = "menuStrip"; + this.menuStrip.Size = new System.Drawing.Size(274, 24); + this.menuStrip.TabIndex = 14; + this.menuStrip.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.saveToolStripMenuItem1}); + this.fileToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "File"; + // + // saveToolStripMenuItem1 + // + this.saveToolStripMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripMenuItem1.Image"))); + this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1"; + this.saveToolStripMenuItem1.Size = new System.Drawing.Size(180, 22); + this.saveToolStripMenuItem1.Text = "Save"; + this.saveToolStripMenuItem1.Click += new System.EventHandler(this.saveToolStripMenuItem1_Click); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "Help"; + // + // flag1Checkbox + // + this.flag1Checkbox.AutoSize = true; + this.flag1Checkbox.Enabled = false; + this.flag1Checkbox.Location = new System.Drawing.Point(174, 109); + this.flag1Checkbox.Name = "flag1Checkbox"; + this.flag1Checkbox.Size = new System.Drawing.Size(108, 15); + this.flag1Checkbox.TabIndex = 22; + this.flag1Checkbox.Text = "Unknown Flag 1"; + this.flag1Checkbox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.flag1Checkbox.UseSelectable = true; + this.flag1Checkbox.CheckedChanged += new System.EventHandler(this.flag1Checkbox_CheckedChanged); + // + // flag2Checkbox + // + this.flag2Checkbox.AutoSize = true; + this.flag2Checkbox.Enabled = false; + this.flag2Checkbox.Location = new System.Drawing.Point(174, 141); + this.flag2Checkbox.Name = "flag2Checkbox"; + this.flag2Checkbox.Size = new System.Drawing.Size(108, 15); + this.flag2Checkbox.TabIndex = 23; + this.flag2Checkbox.Text = "Unknown Flag 2"; + this.flag2Checkbox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.flag2Checkbox.UseSelectable = true; + this.flag2Checkbox.CheckedChanged += new System.EventHandler(this.flag2Checkbox_CheckedChanged); + // + // zUpDown + // + this.zUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17))))); + this.zUpDown.DecimalPlaces = 3; + this.zUpDown.Enabled = false; + this.zUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + this.zUpDown.Location = new System.Drawing.Point(207, 225); + this.zUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.zUpDown.Name = "zUpDown"; + this.zUpDown.Size = new System.Drawing.Size(75, 20); + this.zUpDown.TabIndex = 29; + this.zUpDown.ValueChanged += new System.EventHandler(this.zUpDown_ValueChanged); + // + // yUpDown + // + this.yUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17))))); + this.yUpDown.DecimalPlaces = 3; + this.yUpDown.Enabled = false; + this.yUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + this.yUpDown.Location = new System.Drawing.Point(207, 199); + this.yUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.yUpDown.Name = "yUpDown"; + this.yUpDown.Size = new System.Drawing.Size(75, 20); + this.yUpDown.TabIndex = 28; + this.yUpDown.ValueChanged += new System.EventHandler(this.yUpDown_ValueChanged); + // + // zLabel + // + this.zLabel.AutoSize = true; + this.zLabel.Location = new System.Drawing.Point(174, 225); + this.zLabel.Name = "zLabel"; + this.zLabel.Size = new System.Drawing.Size(20, 19); + this.zLabel.TabIndex = 25; + this.zLabel.Text = "Z:"; + this.zLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // yLabel + // + this.yLabel.AutoSize = true; + this.yLabel.Location = new System.Drawing.Point(175, 199); + this.yLabel.Name = "yLabel"; + this.yLabel.Size = new System.Drawing.Size(20, 19); + this.yLabel.TabIndex = 24; + this.yLabel.Text = "Y:"; + this.yLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // xUpDown + // + this.xUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17))))); + this.xUpDown.DecimalPlaces = 3; + this.xUpDown.Enabled = false; + this.xUpDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204))))); + this.xUpDown.Location = new System.Drawing.Point(207, 173); + this.xUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.xUpDown.Name = "xUpDown"; + this.xUpDown.Size = new System.Drawing.Size(75, 20); + this.xUpDown.TabIndex = 31; + this.xUpDown.ValueChanged += new System.EventHandler(this.xUpDown_ValueChanged); + // + // xLabel + // + this.xLabel.AutoSize = true; + this.xLabel.Location = new System.Drawing.Point(175, 173); + this.xLabel.Name = "xLabel"; + this.xLabel.Size = new System.Drawing.Size(20, 19); + this.xLabel.TabIndex = 30; + this.xLabel.Text = "X:"; + this.xLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // BehaviourEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(314, 280); + this.Controls.Add(this.xUpDown); + this.Controls.Add(this.xLabel); + this.Controls.Add(this.zUpDown); + this.Controls.Add(this.yUpDown); + this.Controls.Add(this.zLabel); + this.Controls.Add(this.yLabel); + this.Controls.Add(this.flag2Checkbox); + this.Controls.Add(this.flag1Checkbox); + this.Controls.Add(this.menuStrip); + this.Controls.Add(this.treeView1); + this.Name = "BehaviourEditor"; + this.Style = MetroFramework.MetroColorStyle.Silver; + this.Text = "Behaviour Editor"; + this.Theme = MetroFramework.MetroThemeStyle.Dark; + this.metroContextMenu1.ResumeLayout(false); + this.menuStrip.ResumeLayout(false); + this.menuStrip.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.zUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.yUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xUpDown)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TreeView treeView1; + private System.Windows.Forms.MenuStrip menuStrip; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private MetroFramework.Controls.MetroCheckBox flag1Checkbox; + private MetroFramework.Controls.MetroCheckBox flag2Checkbox; + private System.Windows.Forms.NumericUpDown zUpDown; + private System.Windows.Forms.NumericUpDown yUpDown; + private MetroFramework.Controls.MetroLabel zLabel; + private MetroFramework.Controls.MetroLabel yLabel; + private System.Windows.Forms.NumericUpDown xUpDown; + private MetroFramework.Controls.MetroLabel xLabel; + private MetroFramework.Controls.MetroContextMenu metroContextMenu1; + private System.Windows.Forms.ToolStripMenuItem addToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem addNewPositionOverrideToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem addNewEntryToolStripMenuItem; + } +} \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/BehaviourEditor.cs b/PCK-Studio/Forms/Editor/BehaviourEditor.cs new file mode 100644 index 00000000..70771d71 --- /dev/null +++ b/PCK-Studio/Forms/Editor/BehaviourEditor.cs @@ -0,0 +1,216 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Windows.Forms; +using MetroFramework.Forms; +using PckStudio.Classes.FileTypes; +using PckStudio.Classes.IO.Behaviour; + +namespace PckStudio.Forms.Editor +{ + public partial class BehaviourEditor : MetroForm + { + // Behaviours File Format research by Miku + private readonly PCKFile.FileData _file; + BehaviourFile behaviourFile; + bool _isLittleEndian = false; + + void SetUpTree() + { + treeView1.BeginUpdate(); + treeView1.Nodes.Clear(); + foreach (var entry in behaviourFile.entries) + { + TreeNode EntryNode = new TreeNode(entry.name); + EntryNode.Tag = entry; + + foreach (var posOverride in entry.overrides) + { + TreeNode OverrideNode = new TreeNode("Position Override"); + OverrideNode.Tag = posOverride; + EntryNode.Nodes.Add(OverrideNode); + } + + treeView1.Nodes.Add(EntryNode); + } + treeView1.EndUpdate(); + } + + public BehaviourEditor(PCKFile.FileData file) + { + InitializeComponent(); + _file = file; + + using (var stream = new MemoryStream(file.Data)) + { + behaviourFile = BehavioursReader.Read(stream); + } + + SetUpTree(); + } + + private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) + { + if (e.Node == null) return; + + bool enable = e.Node.Tag is BehaviourFile.RiderPositionOverride.PositionOverride && treeView1.SelectedNode != null; + flag1Checkbox.Enabled = enable; + flag2Checkbox.Enabled = enable; + xUpDown.Enabled = enable; + yUpDown.Enabled = enable; + zUpDown.Enabled = enable; + + if (e.Node.Tag is BehaviourFile.RiderPositionOverride.PositionOverride posOverride) + { + flag1Checkbox.Checked = posOverride._1; + flag2Checkbox.Checked = posOverride._2; + xUpDown.Value = (decimal)posOverride.x; + yUpDown.Value = (decimal)posOverride.y; + zUpDown.Value = (decimal)posOverride.z; + + renameToolStripMenuItem.Visible = false; + } + else renameToolStripMenuItem.Visible = true; + } + + private void removeToolStripMenuItem_Click(object sender, EventArgs e) + { + if (treeView1.SelectedNode == null) return; + + treeView1.SelectedNode.Remove(); + } + + private void flag1Checkbox_CheckedChanged(object sender, EventArgs e) + { + if (treeView1.SelectedNode.Tag is BehaviourFile.RiderPositionOverride.PositionOverride posOverride) + { + posOverride._1 = flag1Checkbox.Checked; + treeView1.SelectedNode.Tag = posOverride; + } + } + + private void flag2Checkbox_CheckedChanged(object sender, EventArgs e) + { + if (treeView1.SelectedNode.Tag is BehaviourFile.RiderPositionOverride.PositionOverride posOverride) + { + posOverride._2 = flag2Checkbox.Checked; + treeView1.SelectedNode.Tag = posOverride; + } + } + + private void xUpDown_ValueChanged(object sender, EventArgs e) + { + if (treeView1.SelectedNode.Tag is BehaviourFile.RiderPositionOverride.PositionOverride posOverride) + { + posOverride.x = (float)xUpDown.Value; + treeView1.SelectedNode.Tag = posOverride; + } + } + + private void yUpDown_ValueChanged(object sender, EventArgs e) + { + if (treeView1.SelectedNode.Tag is BehaviourFile.RiderPositionOverride.PositionOverride posOverride) + { + posOverride.y = (float)yUpDown.Value; + treeView1.SelectedNode.Tag = posOverride; + } + } + + private void zUpDown_ValueChanged(object sender, EventArgs e) + { + if (treeView1.SelectedNode.Tag is BehaviourFile.RiderPositionOverride.PositionOverride posOverride) + { + posOverride.z = (float)zUpDown.Value; + treeView1.SelectedNode.Tag = posOverride; + } + } + + private void renameToolStripMenuItem_Click(object sender, EventArgs e) + { + if (!(treeView1.SelectedNode.Tag is BehaviourFile.RiderPositionOverride entry)) return; + + using RenamePrompt diag = new RenamePrompt(entry.name); + if (diag.ShowDialog(this) == DialogResult.OK) + { + entry.name = diag.NewText; + treeView1.SelectedNode.Text = diag.NewText; + } + } + + private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) + { + flag1Checkbox.Enabled = false; + flag2Checkbox.Enabled = false; + xUpDown.Enabled = false; + yUpDown.Enabled = false; + zUpDown.Enabled = false; + } + + private void addNewPositionOverrideToolStripMenuItem_Click(object sender, EventArgs e) + { + if (treeView1.SelectedNode.Tag is BehaviourFile.RiderPositionOverride.PositionOverride) treeView1.SelectedNode = treeView1.SelectedNode.Parent; + + if (treeView1.SelectedNode.Tag is BehaviourFile.RiderPositionOverride entry) + { + TreeNode OverrideNode = new TreeNode("Position Override"); + OverrideNode.Tag = new BehaviourFile.RiderPositionOverride.PositionOverride(); + treeView1.SelectedNode.Nodes.Add(OverrideNode); + } + } + + private void addNewEntryToolStripMenuItem_Click(object sender, EventArgs e) + { + BehaviourFile.RiderPositionOverride NewOverride = new BehaviourFile.RiderPositionOverride("NewRiderOverride"); + + TreeNode NewOverrideNode = new TreeNode(NewOverride.name); + NewOverrideNode.Tag = NewOverride; + treeView1.Nodes.Add(NewOverrideNode); + + treeView1.SelectedNode = NewOverrideNode; + + addNewPositionOverrideToolStripMenuItem_Click(sender, e); // adds a Position Override to the new Override + } + + private void treeView1_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete) removeToolStripMenuItem_Click(sender, e); + } + + private void treeView1_MouseHover(object sender, EventArgs e) + { + addNewPositionOverrideToolStripMenuItem.Visible = treeView1.SelectedNode != null; + } + + private void saveToolStripMenuItem1_Click(object sender, EventArgs e) + { + using (var stream = new MemoryStream()) + { + behaviourFile = new BehaviourFile(); + + foreach (TreeNode node in treeView1.Nodes) + { + if(node.Tag is BehaviourFile.RiderPositionOverride entry) + { + entry.overrides.Clear(); + Console.WriteLine(); + foreach (TreeNode overrideNode in node.Nodes) + { + if(overrideNode.Tag is BehaviourFile.RiderPositionOverride.PositionOverride overrideEntry) + { + entry.overrides.Add(overrideEntry); + } + } + + behaviourFile.entries.Add(entry); + } + } + + BehavioursWriter.Write(stream, behaviourFile); + _file.SetData(stream.ToArray()); + } + DialogResult = DialogResult.OK; + } + } +} diff --git a/PCK-Studio/Forms/Editor/BehaviourEditor.resx b/PCK-Studio/Forms/Editor/BehaviourEditor.resx new file mode 100644 index 00000000..cbf74e02 --- /dev/null +++ b/PCK-Studio/Forms/Editor/BehaviourEditor.resx @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 125, 17 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADfSURBVDhPYxg8 + QLt++3yTGbf/Fm599P/Nh49wfPXxq/+rTt37f+Dak/8gOSBgAGEMANIMxGBFyAasPf/0v8GE8//z1t8C + y4HU4DIALIluwLpLL+HiMANAGKoNAWASCavv/n/57gPcgOvP3oENOXj7NViOoAFGU6791+k4ghWD5Aga + QCyGakMAkODcU89R/I8Ng9TgNADk14dPn/8/c+kqVgySgwUqVBsCwAx49urN/zsPHmPFIDmaGvAXJInN + 38gYasBfqDYE0K7dOn/Wvut/sfkdGYPUgJI9VNuAAwYGAGn6yvdevWgPAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 741d2cb1..0fe0f533 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -83,7 +83,7 @@ namespace PckStudio [PCKFile.FileData.FileType.GameRulesHeader] = HandleGameRuleFile, [PCKFile.FileData.FileType.SkinDataFile] = null, [PCKFile.FileData.FileType.ModelsFile] = HandleModelsFile, - [PCKFile.FileData.FileType.BehavioursFile] = null, + [PCKFile.FileData.FileType.BehavioursFile] = HandleBehavioursFile, [PCKFile.FileData.FileType.MaterialFile] = null, }; } @@ -451,6 +451,14 @@ namespace PckStudio //throw new NotImplementedException(); } + public void HandleBehavioursFile(PCKFile.FileData file) + { + using BehaviourEditor locedit = new BehaviourEditor(file); + if (locedit.ShowDialog(this) == DialogResult.OK) + saved = false; + //throw new NotImplementedException(); + } + private void selectNode(object sender, TreeViewEventArgs e) { ReloadMetaTreeView(); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index de59ee2d..ddd211c8 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -148,6 +148,7 @@ + @@ -234,6 +235,12 @@ TextPrompt.cs + + Form + + + BehaviourEditor.cs + Form @@ -459,6 +466,9 @@ TextPrompt.cs + + BehaviourEditor.cs + COLEditor.cs