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