diff --git a/App.config b/App.config index 408ceae..45843ad 100644 --- a/App.config +++ b/App.config @@ -196,6 +196,9 @@ True + + Blue + \ No newline at end of file diff --git a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs index ebe8e6a..b101123 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs @@ -12,7 +12,9 @@ namespace CodeWalker.GameFiles public class YtypFile : PackedFile { - public RpfFileEntry FileEntry { get; set; } + public RpfFileEntry RpfFileEntry { get; set; } + public string FilePath { get; set; } + public string Name { get; set; } public Meta Meta { get; set; } public PsoFile Pso { get; set; } @@ -32,16 +34,21 @@ namespace CodeWalker.GameFiles public CCompositeEntityType[] CompositeEntityTypes { get; set; } + //fields used by the editor: + public bool HasChanged { get; set; } = false; + public List SaveWarnings = null; + public override string ToString() { - return (FileEntry != null) ? FileEntry.Name : string.Empty; + return (RpfFileEntry != null) ? RpfFileEntry.Name : string.Empty; } public void Load(byte[] data, RpfFileEntry entry) { - FileEntry = entry; + Name = entry.Name; + RpfFileEntry = entry; RpfResourceFileEntry resentry = entry as RpfResourceFileEntry; if (resentry == null) { @@ -219,6 +226,61 @@ namespace CodeWalker.GameFiles } + public void Load(byte[] data) //REFACTOR THIS WITH YMAP!! + { + //direct load from a raw, compressed ymap file (openIV-compatible format) + + RpfResourceFileEntry resentry = new RpfResourceFileEntry(); + + //hopefully this format has an RSC7 header... + uint rsc7 = BitConverter.ToUInt32(data, 0); + if (rsc7 == 0x37435352) //RSC7 header present! + { + int version = BitConverter.ToInt32(data, 4); + resentry.SystemFlags = BitConverter.ToUInt32(data, 8); + resentry.GraphicsFlags = BitConverter.ToUInt32(data, 12); + if (data.Length > 16) + { + int newlen = data.Length - 16; //trim the header from the data passed to the next step. + byte[] newdata = new byte[newlen]; + Buffer.BlockCopy(data, 16, newdata, 0, newlen); + data = newdata; + } + else + { + data = null; //shouldn't happen... empty.. + } + } + else + { + //direct load from file without the rpf header.. + //assume it's in resource meta format + resentry.SystemFlags = RpfResourceFileEntry.GetFlagsFromSize(data.Length, 0); + resentry.GraphicsFlags = RpfResourceFileEntry.GetFlagsFromSize(0, 2); //graphics type 2 for ymap + } + + var oldresentry = RpfFileEntry as RpfResourceFileEntry; + if (oldresentry != null) //update the existing entry with the new one + { + oldresentry.SystemFlags = resentry.SystemFlags; + oldresentry.GraphicsFlags = resentry.GraphicsFlags; + resentry.Name = oldresentry.Name; + resentry.NameHash = oldresentry.NameHash; + resentry.NameLower = oldresentry.NameLower; + resentry.ShortNameHash = oldresentry.ShortNameHash; + } + else + { + RpfFileEntry = resentry; //just stick it in there for later... + } + + data = ResourceBuilder.Decompress(data); + + + Load(data, resentry); + + //Loaded = true; + } } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 86114b2..b91dd8a 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -232,7 +232,7 @@ namespace CodeWalker.GameFiles var dlclistxml = RpfMan.GetFileXml(dlclistpath); DlcPaths.Clear(); - if (dlclistxml == null) + if ((dlclistxml == null) || (dlclistxml.DocumentElement == null)) { ErrorLog("InitDlcList: Couldn't load " + dlclistpath + "."); } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index b85e24a..e2ad841 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -77,7 +77,7 @@ namespace CodeWalker.GameFiles } public static string GetXml(YtypFile ytyp, out string filename) { - var fn = (ytyp?.FileEntry?.Name) ?? ""; + var fn = (ytyp?.RpfFileEntry?.Name) ?? ""; if (ytyp.Meta != null) { filename = fn + ".xml"; return GetXml(ytyp.Meta); } else if (ytyp.Pso != null) { filename = fn + ".pso.xml"; return PsoXml.GetXml(ytyp.Pso); } else if (ytyp.Rbf != null) { filename = fn + ".rbf.xml"; return RbfXml.GetXml(ytyp.Rbf); } diff --git a/CodeWalker.Core/Utils/Utils.cs b/CodeWalker.Core/Utils/Utils.cs index 891bc9f..35d94eb 100644 --- a/CodeWalker.Core/Utils/Utils.cs +++ b/CodeWalker.Core/Utils/Utils.cs @@ -194,4 +194,28 @@ namespace CodeWalker + + + public static class BitUtil + { + public static bool IsBitSet(uint value, int bit) + { + return (((value >> bit) & 1) > 0); + } + public static uint SetBit(uint value, int bit) + { + return (value | (1u << bit)); + } + public static uint ClearBit(uint value, int bit) + { + return (value & (~(1u << bit))); + } + public static uint UpdateBit(uint value, int bit, bool flag) + { + if (flag) return SetBit(value, bit); + else return ClearBit(value, bit); + } + } + + } diff --git a/CodeWalker.WinForms/CodeWalker.WinForms.csproj b/CodeWalker.WinForms/CodeWalker.WinForms.csproj index 3f82a77..73201d9 100644 --- a/CodeWalker.WinForms/CodeWalker.WinForms.csproj +++ b/CodeWalker.WinForms/CodeWalker.WinForms.csproj @@ -40,6 +40,12 @@ + + ..\packages\DockPanelSuite.3.0.4\lib\net40\WeifenLuo.WinFormsUI.Docking.dll + + + ..\packages\DockPanelSuite.ThemeVS2015.3.0.4\lib\net40\WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll + @@ -48,6 +54,9 @@ MenuStripFix.cs + + Form + Component @@ -99,6 +108,9 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdGYXN0Q29sb3JlZFRleHRCb3gsIFZlcnNpb249Mi4xNi4yMS4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWZiOGFhMTJiOTk0ZWY2MWIMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACJGYXN0Q29sb3JlZFRleHRCb3hOUy5TZXJ2aWNlQ29sb3JzBgAA + ACg8Q29sbGFwc2VNYXJrZXJGb3JlQ29sb3I+a19fQmFja2luZ0ZpZWxkKDxDb2xsYXBzZU1hcmtlckJh + Y2tDb2xvcj5rX19CYWNraW5nRmllbGQqPENvbGxhcHNlTWFya2VyQm9yZGVyQ29sb3I+a19fQmFja2lu + Z0ZpZWxkJjxFeHBhbmRNYXJrZXJGb3JlQ29sb3I+a19fQmFja2luZ0ZpZWxkJjxFeHBhbmRNYXJrZXJC + YWNrQ29sb3I+a19fQmFja2luZ0ZpZWxkKDxFeHBhbmRNYXJrZXJCb3JkZXJDb2xvcj5rX19CYWNraW5n + RmllbGQEBAQEBAQUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAA + ABRTeXN0ZW0uRHJhd2luZy5Db2xvcgMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAFFN5c3RlbS5E + cmF3aW5nLkNvbG9yAwAAABRTeXN0ZW0uRHJhd2luZy5Db2xvcgMAAAACAAAABfz///8UU3lzdGVtLkRy + YXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAACgAAAAAA + AAAAlgABAAH7/////P///woAAAAAAAAAAKQAAQAB+v////z///8KAAAAAAAAAACWAAEAAfn////8//// + CgAAAAAAAAAAjQABAAH4/////P///woAAAAAAAAAAKQAAQAB9/////z///8KAAAAAAAAAACWAAEACw== + + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + 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 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditProjectPanel.Designer.cs b/Project/Panels/EditProjectPanel.Designer.cs new file mode 100644 index 0000000..76c5954 --- /dev/null +++ b/Project/Panels/EditProjectPanel.Designer.cs @@ -0,0 +1,88 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditProjectPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditProjectPanel)); + this.ProjectNameTextBox = new System.Windows.Forms.TextBox(); + this.ProjectVersionLabel = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // ProjectNameTextBox + // + this.ProjectNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ProjectNameTextBox.Location = new System.Drawing.Point(95, 22); + this.ProjectNameTextBox.MinimumSize = new System.Drawing.Size(100, 0); + this.ProjectNameTextBox.Name = "ProjectNameTextBox"; + this.ProjectNameTextBox.Size = new System.Drawing.Size(328, 20); + this.ProjectNameTextBox.TabIndex = 4; + this.ProjectNameTextBox.TextChanged += new System.EventHandler(this.ProjectNameTextBox_TextChanged); + // + // ProjectVersionLabel + // + this.ProjectVersionLabel.AutoSize = true; + this.ProjectVersionLabel.Location = new System.Drawing.Point(32, 66); + this.ProjectVersionLabel.Name = "ProjectVersionLabel"; + this.ProjectVersionLabel.Size = new System.Drawing.Size(51, 13); + this.ProjectVersionLabel.TabIndex = 5; + this.ProjectVersionLabel.Text = "Version: -"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(32, 25); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(38, 13); + this.label1.TabIndex = 3; + this.label1.Text = "Name:"; + // + // EditProjectPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(540, 328); + this.Controls.Add(this.ProjectNameTextBox); + this.Controls.Add(this.ProjectVersionLabel); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditProjectPanel"; + this.Text = "Project Properties"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox ProjectNameTextBox; + private System.Windows.Forms.Label ProjectVersionLabel; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/Project/Panels/EditProjectPanel.cs b/Project/Panels/EditProjectPanel.cs new file mode 100644 index 0000000..5bbe015 --- /dev/null +++ b/Project/Panels/EditProjectPanel.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditProjectPanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public ProjectFile Project { get; set; } + + public EditProjectPanel(ProjectForm2 owner) + { + ProjectForm = owner; + InitializeComponent(); + } + + + public void SetProject(ProjectFile project) + { + Project = project; + Tag = project; + ProjectNameTextBox.Text = Project.Name; + UpdateFormTitle(); + } + + private void UpdateFormTitle() + { + Text = Project.Filename + (Project.HasChanged ? "*" : ""); + } + + private void ProjectNameTextBox_TextChanged(object sender, EventArgs e) + { + if (Project != null) + { + if (Project.Name != ProjectNameTextBox.Text) + { + Project.Name = ProjectNameTextBox.Text; + ProjectForm?.SetProjectHasChanged(true); + UpdateFormTitle(); + } + } + } + } +} diff --git a/Project/Panels/EditProjectPanel.resx b/Project/Panels/EditProjectPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditProjectPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditScenarioNodePanel.Designer.cs b/Project/Panels/EditScenarioNodePanel.Designer.cs new file mode 100644 index 0000000..ead9c5e --- /dev/null +++ b/Project/Panels/EditScenarioNodePanel.Designer.cs @@ -0,0 +1,2843 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditScenarioNodePanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditScenarioNodePanel)); + this.ScenarioTabControl = new System.Windows.Forms.TabControl(); + this.ScenarioPointTabPage = new System.Windows.Forms.TabPage(); + this.ScenarioPointOuterPanel = new System.Windows.Forms.Panel(); + this.ScenarioPointPanel = new System.Windows.Forms.Panel(); + this.ScenarioPointImapHashLabel = new System.Windows.Forms.Label(); + this.ScenarioPointImapTextBox = new System.Windows.Forms.TextBox(); + this.label110 = new System.Windows.Forms.Label(); + this.ScenarioPointGroupHashLabel = new System.Windows.Forms.Label(); + this.ScenarioPointGroupTextBox = new System.Windows.Forms.TextBox(); + this.label156 = new System.Windows.Forms.Label(); + this.ScenarioPointInteriorHashLabel = new System.Windows.Forms.Label(); + this.ScenarioPointFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); + this.label111 = new System.Windows.Forms.Label(); + this.ScenarioPointDirectionTextBox = new System.Windows.Forms.TextBox(); + this.label97 = new System.Windows.Forms.Label(); + this.ScenarioPointFlagsValueUpDown = new System.Windows.Forms.NumericUpDown(); + this.label109 = new System.Windows.Forms.Label(); + this.ScenarioPointGoToButton = new System.Windows.Forms.Button(); + this.ScenarioPointWaitTimeUpDown = new System.Windows.Forms.NumericUpDown(); + this.ScenarioPointPositionTextBox = new System.Windows.Forms.TextBox(); + this.label62 = new System.Windows.Forms.Label(); + this.label108 = new System.Windows.Forms.Label(); + this.ScenarioPointRadiusUpDown = new System.Windows.Forms.NumericUpDown(); + this.label107 = new System.Windows.Forms.Label(); + this.ScenarioPointSpOnlyFlagUpDown = new System.Windows.Forms.NumericUpDown(); + this.label106 = new System.Windows.Forms.Label(); + this.ScenarioPointProbabilityUpDown = new System.Windows.Forms.NumericUpDown(); + this.ScenarioPointInteriorTextBox = new System.Windows.Forms.TextBox(); + this.label102 = new System.Windows.Forms.Label(); + this.label101 = new System.Windows.Forms.Label(); + this.ScenarioPointTimeEndUpDown = new System.Windows.Forms.NumericUpDown(); + this.ScenarioPointTimeStartUpDown = new System.Windows.Forms.NumericUpDown(); + this.label100 = new System.Windows.Forms.Label(); + this.ScenarioPointModelSetComboBox = new System.Windows.Forms.ComboBox(); + this.label99 = new System.Windows.Forms.Label(); + this.ScenarioPointTypeComboBox = new System.Windows.Forms.ComboBox(); + this.label98 = new System.Windows.Forms.Label(); + this.ScenarioPointDeleteButton = new System.Windows.Forms.Button(); + this.ScenarioPointAddToProjectButton = new System.Windows.Forms.Button(); + this.ScenarioEntityTabPage = new System.Windows.Forms.TabPage(); + this.ScenarioEntityDeleteButton = new System.Windows.Forms.Button(); + this.ScenarioEntityPanel = new System.Windows.Forms.Panel(); + this.label160 = new System.Windows.Forms.Label(); + this.ScenarioEntityAddPointButton = new System.Windows.Forms.Button(); + this.label161 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointsListBox = new System.Windows.Forms.ListBox(); + this.ScenarioEntityInfoLabel = new System.Windows.Forms.Label(); + this.label114 = new System.Windows.Forms.Label(); + this.ScenarioEntityUnk2UpDown = new System.Windows.Forms.NumericUpDown(); + this.label113 = new System.Windows.Forms.Label(); + this.ScenarioEntityUnk1UpDown = new System.Windows.Forms.NumericUpDown(); + this.ScenarioEntityTypeHashLabel = new System.Windows.Forms.Label(); + this.ScenarioEntityTypeTextBox = new System.Windows.Forms.TextBox(); + this.label112 = new System.Windows.Forms.Label(); + this.ScenarioEntityGoToButton = new System.Windows.Forms.Button(); + this.ScenarioEntityPositionTextBox = new System.Windows.Forms.TextBox(); + this.label104 = new System.Windows.Forms.Label(); + this.ScenarioEntityAddToProjectButton = new System.Windows.Forms.Button(); + this.ScenarioEntityPointTabPage = new System.Windows.Forms.TabPage(); + this.ScenarioEntityPointDeleteButton = new System.Windows.Forms.Button(); + this.ScenarioEntityPointAddToProjectButton = new System.Windows.Forms.Button(); + this.ScenarioEntityPointPanel = new System.Windows.Forms.Panel(); + this.ScenarioEntityPointNameHashLabel = new System.Windows.Forms.Label(); + this.ScenarioEntityPointNameTextBox = new System.Windows.Forms.TextBox(); + this.ScenarioEntityPointFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); + this.label135 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointFlagsUpDown = new System.Windows.Forms.NumericUpDown(); + this.ScenarioEntityPointShortRangeCheckBox = new System.Windows.Forms.CheckBox(); + this.ScenarioEntityPointExtendedRangeCheckBox = new System.Windows.Forms.CheckBox(); + this.ScenarioEntityPointHighPriCheckBox = new System.Windows.Forms.CheckBox(); + this.label133 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointEndUpDown = new System.Windows.Forms.NumericUpDown(); + this.ScenarioEntityPointStartUpDown = new System.Windows.Forms.NumericUpDown(); + this.label134 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointRadiusTextBox = new System.Windows.Forms.TextBox(); + this.label132 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointTimeTillPedLeavesTextBox = new System.Windows.Forms.TextBox(); + this.label131 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointProbabilityTextBox = new System.Windows.Forms.TextBox(); + this.label130 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointAvailableInMpSpComboBox = new System.Windows.Forms.ComboBox(); + this.label129 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointRequiredImapHashLabel = new System.Windows.Forms.Label(); + this.ScenarioEntityPointRequiredImapTextBox = new System.Windows.Forms.TextBox(); + this.label128 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointInteriorHashLabel = new System.Windows.Forms.Label(); + this.ScenarioEntityPointInteriorTextBox = new System.Windows.Forms.TextBox(); + this.label126 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointGroupHashLabel = new System.Windows.Forms.Label(); + this.ScenarioEntityPointGroupTextBox = new System.Windows.Forms.TextBox(); + this.label124 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointPedTypeHashLabel = new System.Windows.Forms.Label(); + this.ScenarioEntityPointPedTypeTextBox = new System.Windows.Forms.TextBox(); + this.label122 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointSpawnTypeHashLabel = new System.Windows.Forms.Label(); + this.ScenarioEntityPointSpawnTypeTextBox = new System.Windows.Forms.TextBox(); + this.label120 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointRotationTextBox = new System.Windows.Forms.TextBox(); + this.label118 = new System.Windows.Forms.Label(); + this.ScenarioEntityPointGoToButton = new System.Windows.Forms.Button(); + this.ScenarioEntityPointPositionTextBox = new System.Windows.Forms.TextBox(); + this.label117 = new System.Windows.Forms.Label(); + this.label116 = new System.Windows.Forms.Label(); + this.ScenarioChainTabPage = new System.Windows.Forms.TabPage(); + this.ScenarioChainDeleteButton = new System.Windows.Forms.Button(); + this.ScenarioChainAddToProjectButton = new System.Windows.Forms.Button(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.ScenarioChainMoveEdgeDownButton = new System.Windows.Forms.Button(); + this.ScenarioChainMoveEdgeUpButton = new System.Windows.Forms.Button(); + this.label138 = new System.Windows.Forms.Label(); + this.ScenarioChainUnk1UpDown = new System.Windows.Forms.NumericUpDown(); + this.ScenarioChainRemoveEdgeButton = new System.Windows.Forms.Button(); + this.ScenarioChainAddEdgeButton = new System.Windows.Forms.Button(); + this.ScenarioChainEdgesListBox = new System.Windows.Forms.ListBox(); + this.ScenarioChainEdgeCountLabel = new System.Windows.Forms.Label(); + this.ScenarioChainEdgePanel = new System.Windows.Forms.Panel(); + this.ScenarioChainEdgeNavSpeedComboBox = new System.Windows.Forms.ComboBox(); + this.label137 = new System.Windows.Forms.Label(); + this.ScenarioChainEdgeNavModeComboBox = new System.Windows.Forms.ComboBox(); + this.label136 = new System.Windows.Forms.Label(); + this.ScenarioChainEdgeActionComboBox = new System.Windows.Forms.ComboBox(); + this.label127 = new System.Windows.Forms.Label(); + this.ScenarioChainEdgeNodeIndexToUpDown = new System.Windows.Forms.NumericUpDown(); + this.ScenarioChainEdgeNodeIndexFromUpDown = new System.Windows.Forms.NumericUpDown(); + this.label125 = new System.Windows.Forms.Label(); + this.label121 = new System.Windows.Forms.Label(); + this.ScenarioChainNodeTabPage = new System.Windows.Forms.TabPage(); + this.ScenarioChainNodePanel = new System.Windows.Forms.Panel(); + this.ScenarioChainNodeTypeComboBox = new System.Windows.Forms.ComboBox(); + this.ScenarioChainNodeIndexTextBox = new System.Windows.Forms.TextBox(); + this.label115 = new System.Windows.Forms.Label(); + this.ScenarioChainNodeLastCheckBox = new System.Windows.Forms.CheckBox(); + this.ScenarioChainNodeFirstCheckBox = new System.Windows.Forms.CheckBox(); + this.label123 = new System.Windows.Forms.Label(); + this.ScenarioChainNodeUnk1HashLabel = new System.Windows.Forms.Label(); + this.ScenarioChainNodeUnk1TextBox = new System.Windows.Forms.TextBox(); + this.label119 = new System.Windows.Forms.Label(); + this.ScenarioChainNodeGoToButton = new System.Windows.Forms.Button(); + this.ScenarioChainNodePositionTextBox = new System.Windows.Forms.TextBox(); + this.label105 = new System.Windows.Forms.Label(); + this.ScenarioChainNodeDeleteButton = new System.Windows.Forms.Button(); + this.ScenarioChainNodeAddToProjectButton = new System.Windows.Forms.Button(); + this.ScenarioClusterTabPage = new System.Windows.Forms.TabPage(); + this.ScenarioClusterDeleteButton = new System.Windows.Forms.Button(); + this.ScenarioClusterAddToProjectButton = new System.Windows.Forms.Button(); + this.ScenarioClusterPanel = new System.Windows.Forms.Panel(); + this.label159 = new System.Windows.Forms.Label(); + this.ScenarioClusterAddPointButton = new System.Windows.Forms.Button(); + this.label158 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointsListBox = new System.Windows.Forms.ListBox(); + this.ScenarioClusterRadiusTextBox = new System.Windows.Forms.TextBox(); + this.label157 = new System.Windows.Forms.Label(); + this.ScenarioClusterUnk2CheckBox = new System.Windows.Forms.CheckBox(); + this.ScenarioClusterUnk1TextBox = new System.Windows.Forms.TextBox(); + this.label140 = new System.Windows.Forms.Label(); + this.ScenarioClusterGoToButton = new System.Windows.Forms.Button(); + this.ScenarioClusterCenterTextBox = new System.Windows.Forms.TextBox(); + this.label139 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointTabPage = new System.Windows.Forms.TabPage(); + this.ScenarioClusterPointDeleteButton = new System.Windows.Forms.Button(); + this.ScenarioClusterPointAddToProjectButton = new System.Windows.Forms.Button(); + this.ScenarioClusterPointPanel = new System.Windows.Forms.Panel(); + this.ScenarioClusterPointImapHashLabel = new System.Windows.Forms.Label(); + this.ScenarioClusterPointImapTextBox = new System.Windows.Forms.TextBox(); + this.label143 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointGroupHashLabel = new System.Windows.Forms.Label(); + this.ScenarioClusterPointGroupTextBox = new System.Windows.Forms.TextBox(); + this.label141 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointInteriorHashLabel = new System.Windows.Forms.Label(); + this.ScenarioClusterPointFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); + this.label142 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointDirectionTextBox = new System.Windows.Forms.TextBox(); + this.label144 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointFlagsUpDown = new System.Windows.Forms.NumericUpDown(); + this.label145 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointGoToButton = new System.Windows.Forms.Button(); + this.ScenarioClusterPointWaitTimeUpDown = new System.Windows.Forms.NumericUpDown(); + this.ScenarioClusterPointPositionTextBox = new System.Windows.Forms.TextBox(); + this.label146 = new System.Windows.Forms.Label(); + this.label147 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointRadiusUpDown = new System.Windows.Forms.NumericUpDown(); + this.label148 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointSpOnlyFlagUpDown = new System.Windows.Forms.NumericUpDown(); + this.label149 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointProbabilityUpDown = new System.Windows.Forms.NumericUpDown(); + this.ScenarioClusterPointInteriorTextBox = new System.Windows.Forms.TextBox(); + this.label151 = new System.Windows.Forms.Label(); + this.label152 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointTimeEndUpDown = new System.Windows.Forms.NumericUpDown(); + this.ScenarioClusterPointTimeStartUpDown = new System.Windows.Forms.NumericUpDown(); + this.label153 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointModelSetComboBox = new System.Windows.Forms.ComboBox(); + this.label154 = new System.Windows.Forms.Label(); + this.ScenarioClusterPointTypeComboBox = new System.Windows.Forms.ComboBox(); + this.label155 = new System.Windows.Forms.Label(); + this.ScenarioTabControl.SuspendLayout(); + this.ScenarioPointTabPage.SuspendLayout(); + this.ScenarioPointOuterPanel.SuspendLayout(); + this.ScenarioPointPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointFlagsValueUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointWaitTimeUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointRadiusUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointSpOnlyFlagUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointProbabilityUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointTimeEndUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointTimeStartUpDown)).BeginInit(); + this.ScenarioEntityTabPage.SuspendLayout(); + this.ScenarioEntityPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityUnk2UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityUnk1UpDown)).BeginInit(); + this.ScenarioEntityPointTabPage.SuspendLayout(); + this.ScenarioEntityPointPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointFlagsUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointEndUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointStartUpDown)).BeginInit(); + this.ScenarioChainTabPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainUnk1UpDown)).BeginInit(); + this.ScenarioChainEdgePanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainEdgeNodeIndexToUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainEdgeNodeIndexFromUpDown)).BeginInit(); + this.ScenarioChainNodeTabPage.SuspendLayout(); + this.ScenarioChainNodePanel.SuspendLayout(); + this.ScenarioClusterTabPage.SuspendLayout(); + this.ScenarioClusterPanel.SuspendLayout(); + this.ScenarioClusterPointTabPage.SuspendLayout(); + this.ScenarioClusterPointPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointFlagsUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointWaitTimeUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointRadiusUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointSpOnlyFlagUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointProbabilityUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointTimeEndUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointTimeStartUpDown)).BeginInit(); + this.SuspendLayout(); + // + // ScenarioTabControl + // + this.ScenarioTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioTabControl.Controls.Add(this.ScenarioPointTabPage); + this.ScenarioTabControl.Controls.Add(this.ScenarioEntityTabPage); + this.ScenarioTabControl.Controls.Add(this.ScenarioEntityPointTabPage); + this.ScenarioTabControl.Controls.Add(this.ScenarioChainTabPage); + this.ScenarioTabControl.Controls.Add(this.ScenarioChainNodeTabPage); + this.ScenarioTabControl.Controls.Add(this.ScenarioClusterTabPage); + this.ScenarioTabControl.Controls.Add(this.ScenarioClusterPointTabPage); + this.ScenarioTabControl.Location = new System.Drawing.Point(2, 3); + this.ScenarioTabControl.Name = "ScenarioTabControl"; + this.ScenarioTabControl.SelectedIndex = 0; + this.ScenarioTabControl.Size = new System.Drawing.Size(559, 446); + this.ScenarioTabControl.TabIndex = 1; + // + // ScenarioPointTabPage + // + this.ScenarioPointTabPage.Controls.Add(this.ScenarioPointOuterPanel); + this.ScenarioPointTabPage.Location = new System.Drawing.Point(4, 22); + this.ScenarioPointTabPage.Name = "ScenarioPointTabPage"; + this.ScenarioPointTabPage.Padding = new System.Windows.Forms.Padding(3); + this.ScenarioPointTabPage.Size = new System.Drawing.Size(551, 420); + this.ScenarioPointTabPage.TabIndex = 1; + this.ScenarioPointTabPage.Text = "Point"; + this.ScenarioPointTabPage.UseVisualStyleBackColor = true; + // + // ScenarioPointOuterPanel + // + this.ScenarioPointOuterPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointOuterPanel.Controls.Add(this.ScenarioPointDeleteButton); + this.ScenarioPointOuterPanel.Controls.Add(this.ScenarioPointAddToProjectButton); + this.ScenarioPointOuterPanel.Controls.Add(this.ScenarioPointPanel); + this.ScenarioPointOuterPanel.Location = new System.Drawing.Point(0, 0); + this.ScenarioPointOuterPanel.Name = "ScenarioPointOuterPanel"; + this.ScenarioPointOuterPanel.Size = new System.Drawing.Size(551, 420); + this.ScenarioPointOuterPanel.TabIndex = 1; + // + // ScenarioPointPanel + // + this.ScenarioPointPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointImapHashLabel); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointImapTextBox); + this.ScenarioPointPanel.Controls.Add(this.label110); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointGroupHashLabel); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointGroupTextBox); + this.ScenarioPointPanel.Controls.Add(this.label156); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointInteriorHashLabel); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointFlagsCheckedListBox); + this.ScenarioPointPanel.Controls.Add(this.label111); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointDirectionTextBox); + this.ScenarioPointPanel.Controls.Add(this.label97); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointFlagsValueUpDown); + this.ScenarioPointPanel.Controls.Add(this.label109); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointGoToButton); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointWaitTimeUpDown); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointPositionTextBox); + this.ScenarioPointPanel.Controls.Add(this.label62); + this.ScenarioPointPanel.Controls.Add(this.label108); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointRadiusUpDown); + this.ScenarioPointPanel.Controls.Add(this.label107); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointSpOnlyFlagUpDown); + this.ScenarioPointPanel.Controls.Add(this.label106); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointProbabilityUpDown); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointInteriorTextBox); + this.ScenarioPointPanel.Controls.Add(this.label102); + this.ScenarioPointPanel.Controls.Add(this.label101); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointTimeEndUpDown); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointTimeStartUpDown); + this.ScenarioPointPanel.Controls.Add(this.label100); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointModelSetComboBox); + this.ScenarioPointPanel.Controls.Add(this.label99); + this.ScenarioPointPanel.Controls.Add(this.ScenarioPointTypeComboBox); + this.ScenarioPointPanel.Controls.Add(this.label98); + this.ScenarioPointPanel.Location = new System.Drawing.Point(0, 3); + this.ScenarioPointPanel.Name = "ScenarioPointPanel"; + this.ScenarioPointPanel.Size = new System.Drawing.Size(551, 414); + this.ScenarioPointPanel.TabIndex = 0; + // + // ScenarioPointImapHashLabel + // + this.ScenarioPointImapHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointImapHashLabel.AutoSize = true; + this.ScenarioPointImapHashLabel.Location = new System.Drawing.Point(382, 146); + this.ScenarioPointImapHashLabel.Name = "ScenarioPointImapHashLabel"; + this.ScenarioPointImapHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioPointImapHashLabel.TabIndex = 21; + this.ScenarioPointImapHashLabel.Text = "Hash: 0"; + // + // ScenarioPointImapTextBox + // + this.ScenarioPointImapTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointImapTextBox.Location = new System.Drawing.Point(73, 143); + this.ScenarioPointImapTextBox.Name = "ScenarioPointImapTextBox"; + this.ScenarioPointImapTextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioPointImapTextBox.TabIndex = 20; + this.ScenarioPointImapTextBox.TextChanged += new System.EventHandler(this.ScenarioPointImapTextBox_TextChanged); + // + // label110 + // + this.label110.AutoSize = true; + this.label110.Location = new System.Drawing.Point(34, 146); + this.label110.Name = "label110"; + this.label110.Size = new System.Drawing.Size(33, 13); + this.label110.TabIndex = 19; + this.label110.Text = "Imap:"; + // + // ScenarioPointGroupHashLabel + // + this.ScenarioPointGroupHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointGroupHashLabel.AutoSize = true; + this.ScenarioPointGroupHashLabel.Location = new System.Drawing.Point(382, 123); + this.ScenarioPointGroupHashLabel.Name = "ScenarioPointGroupHashLabel"; + this.ScenarioPointGroupHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioPointGroupHashLabel.TabIndex = 18; + this.ScenarioPointGroupHashLabel.Text = "Hash: 0"; + // + // ScenarioPointGroupTextBox + // + this.ScenarioPointGroupTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointGroupTextBox.Location = new System.Drawing.Point(73, 120); + this.ScenarioPointGroupTextBox.Name = "ScenarioPointGroupTextBox"; + this.ScenarioPointGroupTextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioPointGroupTextBox.TabIndex = 17; + this.ScenarioPointGroupTextBox.TextChanged += new System.EventHandler(this.ScenarioPointGroupTextBox_TextChanged); + // + // label156 + // + this.label156.AutoSize = true; + this.label156.Location = new System.Drawing.Point(28, 123); + this.label156.Name = "label156"; + this.label156.Size = new System.Drawing.Size(39, 13); + this.label156.TabIndex = 16; + this.label156.Text = "Group:"; + // + // ScenarioPointInteriorHashLabel + // + this.ScenarioPointInteriorHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointInteriorHashLabel.AutoSize = true; + this.ScenarioPointInteriorHashLabel.Location = new System.Drawing.Point(382, 100); + this.ScenarioPointInteriorHashLabel.Name = "ScenarioPointInteriorHashLabel"; + this.ScenarioPointInteriorHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioPointInteriorHashLabel.TabIndex = 15; + this.ScenarioPointInteriorHashLabel.Text = "Hash: 0"; + // + // ScenarioPointFlagsCheckedListBox + // + this.ScenarioPointFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointFlagsCheckedListBox.CheckOnClick = true; + this.ScenarioPointFlagsCheckedListBox.FormattingEnabled = true; + this.ScenarioPointFlagsCheckedListBox.Items.AddRange(new object[] { + "1 - IgnoreMaxInRange", + "2 - NoSpawn", + "4 - StationaryReactions", + "8 - Unk", + "16 - Unk", + "32 - ActivateVehicleSiren", + "64 - AggressiveVehicleDriving", + "128 - Unk", + "256 - Unk", + "512 - Unk", + "1024 - AerialVehiclePoint", + "2048 - TerritorialScenario", + "4096 - Unk", + "8192 - Unk", + "16384 - Unk", + "32768 - Unk", + "65536 - InWater", + "131072 - Unk", + "262144 - OpenDoor", + "524288 - PreciseUseTime", + "1048576 - Unk", + "2097152 - Unk", + "4194304 - ExtendedRange", + "8388608 - ShortRange", + "16777216 - HighPriority", + "33554432 - IgnoreLoitering", + "67108864 - UseSearchlight", + "134217728 - ResetNoCollisionOnCleanUp", + "268435456 - Unk", + "536870912 - Unk", + "1073741824 - IgnoreWeatherRestrictions"}); + this.ScenarioPointFlagsCheckedListBox.Location = new System.Drawing.Point(195, 167); + this.ScenarioPointFlagsCheckedListBox.Name = "ScenarioPointFlagsCheckedListBox"; + this.ScenarioPointFlagsCheckedListBox.Size = new System.Drawing.Size(255, 214); + this.ScenarioPointFlagsCheckedListBox.TabIndex = 36; + this.ScenarioPointFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ScenarioPointFlagsCheckedListBox_ItemCheck); + // + // label111 + // + this.label111.AutoSize = true; + this.label111.Location = new System.Drawing.Point(32, 325); + this.label111.Name = "label111"; + this.label111.Size = new System.Drawing.Size(35, 13); + this.label111.TabIndex = 34; + this.label111.Text = "Flags:"; + // + // ScenarioPointDirectionTextBox + // + this.ScenarioPointDirectionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointDirectionTextBox.Location = new System.Drawing.Point(73, 26); + this.ScenarioPointDirectionTextBox.Name = "ScenarioPointDirectionTextBox"; + this.ScenarioPointDirectionTextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioPointDirectionTextBox.TabIndex = 8; + this.ScenarioPointDirectionTextBox.TextChanged += new System.EventHandler(this.ScenarioPointDirectionTextBox_TextChanged); + // + // label97 + // + this.label97.AutoSize = true; + this.label97.Location = new System.Drawing.Point(15, 29); + this.label97.Name = "label97"; + this.label97.Size = new System.Drawing.Size(52, 13); + this.label97.TabIndex = 7; + this.label97.Text = "Direction:"; + // + // ScenarioPointFlagsValueUpDown + // + this.ScenarioPointFlagsValueUpDown.Location = new System.Drawing.Point(73, 323); + this.ScenarioPointFlagsValueUpDown.Maximum = new decimal(new int[] { + -1, + 0, + 0, + 0}); + this.ScenarioPointFlagsValueUpDown.Name = "ScenarioPointFlagsValueUpDown"; + this.ScenarioPointFlagsValueUpDown.Size = new System.Drawing.Size(116, 20); + this.ScenarioPointFlagsValueUpDown.TabIndex = 35; + this.ScenarioPointFlagsValueUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointFlagsValueUpDown_ValueChanged); + // + // label109 + // + this.label109.AutoSize = true; + this.label109.Location = new System.Drawing.Point(13, 299); + this.label109.Name = "label109"; + this.label109.Size = new System.Drawing.Size(54, 13); + this.label109.TabIndex = 32; + this.label109.Text = "Wait time:"; + // + // ScenarioPointGoToButton + // + this.ScenarioPointGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointGoToButton.Location = new System.Drawing.Point(382, 1); + this.ScenarioPointGoToButton.Name = "ScenarioPointGoToButton"; + this.ScenarioPointGoToButton.Size = new System.Drawing.Size(68, 23); + this.ScenarioPointGoToButton.TabIndex = 6; + this.ScenarioPointGoToButton.Text = "Go to"; + this.ScenarioPointGoToButton.UseVisualStyleBackColor = true; + this.ScenarioPointGoToButton.Click += new System.EventHandler(this.ScenarioPointGoToButton_Click); + // + // ScenarioPointWaitTimeUpDown + // + this.ScenarioPointWaitTimeUpDown.Location = new System.Drawing.Point(73, 297); + this.ScenarioPointWaitTimeUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScenarioPointWaitTimeUpDown.Name = "ScenarioPointWaitTimeUpDown"; + this.ScenarioPointWaitTimeUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioPointWaitTimeUpDown.TabIndex = 33; + this.ScenarioPointWaitTimeUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointWaitTimeUpDown_ValueChanged); + // + // ScenarioPointPositionTextBox + // + this.ScenarioPointPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointPositionTextBox.Location = new System.Drawing.Point(73, 3); + this.ScenarioPointPositionTextBox.Name = "ScenarioPointPositionTextBox"; + this.ScenarioPointPositionTextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioPointPositionTextBox.TabIndex = 5; + this.ScenarioPointPositionTextBox.TextChanged += new System.EventHandler(this.ScenarioPointPositionTextBox_TextChanged); + // + // label62 + // + this.label62.AutoSize = true; + this.label62.Location = new System.Drawing.Point(20, 6); + this.label62.Name = "label62"; + this.label62.Size = new System.Drawing.Size(47, 13); + this.label62.TabIndex = 4; + this.label62.Text = "Position:"; + // + // label108 + // + this.label108.AutoSize = true; + this.label108.Location = new System.Drawing.Point(24, 273); + this.label108.Name = "label108"; + this.label108.Size = new System.Drawing.Size(43, 13); + this.label108.TabIndex = 30; + this.label108.Text = "Radius:"; + // + // ScenarioPointRadiusUpDown + // + this.ScenarioPointRadiusUpDown.Location = new System.Drawing.Point(73, 271); + this.ScenarioPointRadiusUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScenarioPointRadiusUpDown.Name = "ScenarioPointRadiusUpDown"; + this.ScenarioPointRadiusUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioPointRadiusUpDown.TabIndex = 31; + this.ScenarioPointRadiusUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointRadiusUpDown_ValueChanged); + // + // label107 + // + this.label107.AutoSize = true; + this.label107.Location = new System.Drawing.Point(3, 247); + this.label107.Name = "label107"; + this.label107.Size = new System.Drawing.Size(64, 13); + this.label107.TabIndex = 28; + this.label107.Text = "SpOnly flag:"; + // + // ScenarioPointSpOnlyFlagUpDown + // + this.ScenarioPointSpOnlyFlagUpDown.Location = new System.Drawing.Point(73, 245); + this.ScenarioPointSpOnlyFlagUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScenarioPointSpOnlyFlagUpDown.Name = "ScenarioPointSpOnlyFlagUpDown"; + this.ScenarioPointSpOnlyFlagUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioPointSpOnlyFlagUpDown.TabIndex = 29; + this.ScenarioPointSpOnlyFlagUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointSpOnlyFlagUpDown_ValueChanged); + // + // label106 + // + this.label106.AutoSize = true; + this.label106.Location = new System.Drawing.Point(9, 221); + this.label106.Name = "label106"; + this.label106.Size = new System.Drawing.Size(58, 13); + this.label106.TabIndex = 26; + this.label106.Text = "Probability:"; + // + // ScenarioPointProbabilityUpDown + // + this.ScenarioPointProbabilityUpDown.Location = new System.Drawing.Point(73, 219); + this.ScenarioPointProbabilityUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScenarioPointProbabilityUpDown.Name = "ScenarioPointProbabilityUpDown"; + this.ScenarioPointProbabilityUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioPointProbabilityUpDown.TabIndex = 27; + this.ScenarioPointProbabilityUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointProbabilityUpDown_ValueChanged); + // + // ScenarioPointInteriorTextBox + // + this.ScenarioPointInteriorTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointInteriorTextBox.Location = new System.Drawing.Point(73, 97); + this.ScenarioPointInteriorTextBox.Name = "ScenarioPointInteriorTextBox"; + this.ScenarioPointInteriorTextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioPointInteriorTextBox.TabIndex = 14; + this.ScenarioPointInteriorTextBox.TextChanged += new System.EventHandler(this.ScenarioPointInteriorTextBox_TextChanged); + // + // label102 + // + this.label102.AutoSize = true; + this.label102.Location = new System.Drawing.Point(25, 100); + this.label102.Name = "label102"; + this.label102.Size = new System.Drawing.Size(42, 13); + this.label102.TabIndex = 13; + this.label102.Text = "Interior:"; + // + // label101 + // + this.label101.AutoSize = true; + this.label101.Location = new System.Drawing.Point(13, 195); + this.label101.Name = "label101"; + this.label101.Size = new System.Drawing.Size(54, 13); + this.label101.TabIndex = 24; + this.label101.Text = "Time end:"; + // + // ScenarioPointTimeEndUpDown + // + this.ScenarioPointTimeEndUpDown.Location = new System.Drawing.Point(73, 193); + this.ScenarioPointTimeEndUpDown.Maximum = new decimal(new int[] { + 24, + 0, + 0, + 0}); + this.ScenarioPointTimeEndUpDown.Name = "ScenarioPointTimeEndUpDown"; + this.ScenarioPointTimeEndUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioPointTimeEndUpDown.TabIndex = 25; + this.ScenarioPointTimeEndUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointTimeEndUpDown_ValueChanged); + // + // ScenarioPointTimeStartUpDown + // + this.ScenarioPointTimeStartUpDown.Location = new System.Drawing.Point(73, 167); + this.ScenarioPointTimeStartUpDown.Maximum = new decimal(new int[] { + 24, + 0, + 0, + 0}); + this.ScenarioPointTimeStartUpDown.Name = "ScenarioPointTimeStartUpDown"; + this.ScenarioPointTimeStartUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioPointTimeStartUpDown.TabIndex = 23; + this.ScenarioPointTimeStartUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointTimeStartUpDown_ValueChanged); + // + // label100 + // + this.label100.AutoSize = true; + this.label100.Location = new System.Drawing.Point(11, 169); + this.label100.Name = "label100"; + this.label100.Size = new System.Drawing.Size(56, 13); + this.label100.TabIndex = 22; + this.label100.Text = "Time start:"; + // + // ScenarioPointModelSetComboBox + // + this.ScenarioPointModelSetComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointModelSetComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioPointModelSetComboBox.FormattingEnabled = true; + this.ScenarioPointModelSetComboBox.Location = new System.Drawing.Point(73, 73); + this.ScenarioPointModelSetComboBox.Name = "ScenarioPointModelSetComboBox"; + this.ScenarioPointModelSetComboBox.Size = new System.Drawing.Size(377, 21); + this.ScenarioPointModelSetComboBox.TabIndex = 12; + this.ScenarioPointModelSetComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioPointModelSetComboBox_SelectedIndexChanged); + // + // label99 + // + this.label99.AutoSize = true; + this.label99.Location = new System.Drawing.Point(9, 76); + this.label99.Name = "label99"; + this.label99.Size = new System.Drawing.Size(58, 13); + this.label99.TabIndex = 11; + this.label99.Text = "Model Set:"; + // + // ScenarioPointTypeComboBox + // + this.ScenarioPointTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioPointTypeComboBox.FormattingEnabled = true; + this.ScenarioPointTypeComboBox.Location = new System.Drawing.Point(73, 49); + this.ScenarioPointTypeComboBox.Name = "ScenarioPointTypeComboBox"; + this.ScenarioPointTypeComboBox.Size = new System.Drawing.Size(377, 21); + this.ScenarioPointTypeComboBox.TabIndex = 10; + this.ScenarioPointTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioPointTypeComboBox_SelectedIndexChanged); + // + // label98 + // + this.label98.AutoSize = true; + this.label98.Location = new System.Drawing.Point(33, 52); + this.label98.Name = "label98"; + this.label98.Size = new System.Drawing.Size(34, 13); + this.label98.TabIndex = 9; + this.label98.Text = "Type:"; + // + // ScenarioPointDeleteButton + // + this.ScenarioPointDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointDeleteButton.Enabled = false; + this.ScenarioPointDeleteButton.Location = new System.Drawing.Point(458, 394); + this.ScenarioPointDeleteButton.Name = "ScenarioPointDeleteButton"; + this.ScenarioPointDeleteButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioPointDeleteButton.TabIndex = 3; + this.ScenarioPointDeleteButton.Text = "Delete Point"; + this.ScenarioPointDeleteButton.UseVisualStyleBackColor = true; + this.ScenarioPointDeleteButton.Click += new System.EventHandler(this.ScenarioPointDeleteButton_Click); + // + // ScenarioPointAddToProjectButton + // + this.ScenarioPointAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointAddToProjectButton.Enabled = false; + this.ScenarioPointAddToProjectButton.Location = new System.Drawing.Point(362, 394); + this.ScenarioPointAddToProjectButton.Name = "ScenarioPointAddToProjectButton"; + this.ScenarioPointAddToProjectButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioPointAddToProjectButton.TabIndex = 2; + this.ScenarioPointAddToProjectButton.Text = "Add to Project"; + this.ScenarioPointAddToProjectButton.UseVisualStyleBackColor = true; + this.ScenarioPointAddToProjectButton.Click += new System.EventHandler(this.ScenarioPointAddToProjectButton_Click); + // + // ScenarioEntityTabPage + // + this.ScenarioEntityTabPage.Controls.Add(this.ScenarioEntityDeleteButton); + this.ScenarioEntityTabPage.Controls.Add(this.ScenarioEntityPanel); + this.ScenarioEntityTabPage.Controls.Add(this.ScenarioEntityAddToProjectButton); + this.ScenarioEntityTabPage.Location = new System.Drawing.Point(4, 22); + this.ScenarioEntityTabPage.Name = "ScenarioEntityTabPage"; + this.ScenarioEntityTabPage.Size = new System.Drawing.Size(551, 420); + this.ScenarioEntityTabPage.TabIndex = 7; + this.ScenarioEntityTabPage.Text = "Entity"; + this.ScenarioEntityTabPage.UseVisualStyleBackColor = true; + // + // ScenarioEntityDeleteButton + // + this.ScenarioEntityDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityDeleteButton.Enabled = false; + this.ScenarioEntityDeleteButton.Location = new System.Drawing.Point(458, 394); + this.ScenarioEntityDeleteButton.Name = "ScenarioEntityDeleteButton"; + this.ScenarioEntityDeleteButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioEntityDeleteButton.TabIndex = 7; + this.ScenarioEntityDeleteButton.Text = "Delete Override"; + this.ScenarioEntityDeleteButton.UseVisualStyleBackColor = true; + this.ScenarioEntityDeleteButton.Click += new System.EventHandler(this.ScenarioEntityDeleteButton_Click); + // + // ScenarioEntityPanel + // + this.ScenarioEntityPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPanel.Controls.Add(this.label160); + this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityAddPointButton); + this.ScenarioEntityPanel.Controls.Add(this.label161); + this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityPointsListBox); + this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityInfoLabel); + this.ScenarioEntityPanel.Controls.Add(this.label114); + this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityUnk2UpDown); + this.ScenarioEntityPanel.Controls.Add(this.label113); + this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityUnk1UpDown); + this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityTypeHashLabel); + this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityTypeTextBox); + this.ScenarioEntityPanel.Controls.Add(this.label112); + this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityGoToButton); + this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityPositionTextBox); + this.ScenarioEntityPanel.Controls.Add(this.label104); + this.ScenarioEntityPanel.Location = new System.Drawing.Point(0, 3); + this.ScenarioEntityPanel.Name = "ScenarioEntityPanel"; + this.ScenarioEntityPanel.Size = new System.Drawing.Size(551, 385); + this.ScenarioEntityPanel.TabIndex = 8; + // + // label160 + // + this.label160.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label160.AutoSize = true; + this.label160.Location = new System.Drawing.Point(373, 160); + this.label160.Name = "label160"; + this.label160.Size = new System.Drawing.Size(141, 13); + this.label160.TabIndex = 20; + this.label160.Text = "(Double-click to select point)"; + // + // ScenarioEntityAddPointButton + // + this.ScenarioEntityAddPointButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ScenarioEntityAddPointButton.Location = new System.Drawing.Point(91, 318); + this.ScenarioEntityAddPointButton.Name = "ScenarioEntityAddPointButton"; + this.ScenarioEntityAddPointButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioEntityAddPointButton.TabIndex = 19; + this.ScenarioEntityAddPointButton.Text = "Add Point"; + this.ScenarioEntityAddPointButton.UseVisualStyleBackColor = true; + this.ScenarioEntityAddPointButton.Click += new System.EventHandler(this.ScenarioEntityAddPointButton_Click); + // + // label161 + // + this.label161.AutoSize = true; + this.label161.Location = new System.Drawing.Point(42, 160); + this.label161.Name = "label161"; + this.label161.Size = new System.Drawing.Size(39, 13); + this.label161.TabIndex = 18; + this.label161.Text = "Points:"; + // + // ScenarioEntityPointsListBox + // + this.ScenarioEntityPointsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointsListBox.FormattingEnabled = true; + this.ScenarioEntityPointsListBox.Location = new System.Drawing.Point(91, 158); + this.ScenarioEntityPointsListBox.Name = "ScenarioEntityPointsListBox"; + this.ScenarioEntityPointsListBox.Size = new System.Drawing.Size(276, 147); + this.ScenarioEntityPointsListBox.TabIndex = 17; + this.ScenarioEntityPointsListBox.DoubleClick += new System.EventHandler(this.ScenarioEntityPointsListBox_DoubleClick); + // + // ScenarioEntityInfoLabel + // + this.ScenarioEntityInfoLabel.AutoSize = true; + this.ScenarioEntityInfoLabel.Location = new System.Drawing.Point(88, 123); + this.ScenarioEntityInfoLabel.Name = "ScenarioEntityInfoLabel"; + this.ScenarioEntityInfoLabel.Size = new System.Drawing.Size(85, 13); + this.ScenarioEntityInfoLabel.TabIndex = 14; + this.ScenarioEntityInfoLabel.Text = "0 override points"; + // + // label114 + // + this.label114.AutoSize = true; + this.label114.Location = new System.Drawing.Point(46, 83); + this.label114.Name = "label114"; + this.label114.Size = new System.Drawing.Size(39, 13); + this.label114.TabIndex = 12; + this.label114.Text = "Unk 2:"; + // + // ScenarioEntityUnk2UpDown + // + this.ScenarioEntityUnk2UpDown.Location = new System.Drawing.Point(91, 81); + this.ScenarioEntityUnk2UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScenarioEntityUnk2UpDown.Name = "ScenarioEntityUnk2UpDown"; + this.ScenarioEntityUnk2UpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioEntityUnk2UpDown.TabIndex = 13; + this.ScenarioEntityUnk2UpDown.ValueChanged += new System.EventHandler(this.ScenarioEntityUnk2UpDown_ValueChanged); + // + // label113 + // + this.label113.AutoSize = true; + this.label113.Location = new System.Drawing.Point(46, 57); + this.label113.Name = "label113"; + this.label113.Size = new System.Drawing.Size(39, 13); + this.label113.TabIndex = 10; + this.label113.Text = "Unk 1:"; + // + // ScenarioEntityUnk1UpDown + // + this.ScenarioEntityUnk1UpDown.Location = new System.Drawing.Point(91, 55); + this.ScenarioEntityUnk1UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScenarioEntityUnk1UpDown.Name = "ScenarioEntityUnk1UpDown"; + this.ScenarioEntityUnk1UpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioEntityUnk1UpDown.TabIndex = 11; + this.ScenarioEntityUnk1UpDown.ValueChanged += new System.EventHandler(this.ScenarioEntityUnk1UpDown_ValueChanged); + // + // ScenarioEntityTypeHashLabel + // + this.ScenarioEntityTypeHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityTypeHashLabel.AutoSize = true; + this.ScenarioEntityTypeHashLabel.Location = new System.Drawing.Point(382, 32); + this.ScenarioEntityTypeHashLabel.Name = "ScenarioEntityTypeHashLabel"; + this.ScenarioEntityTypeHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioEntityTypeHashLabel.TabIndex = 9; + this.ScenarioEntityTypeHashLabel.Text = "Hash: 0"; + // + // ScenarioEntityTypeTextBox + // + this.ScenarioEntityTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityTypeTextBox.Location = new System.Drawing.Point(91, 29); + this.ScenarioEntityTypeTextBox.Name = "ScenarioEntityTypeTextBox"; + this.ScenarioEntityTypeTextBox.Size = new System.Drawing.Size(285, 20); + this.ScenarioEntityTypeTextBox.TabIndex = 8; + this.ScenarioEntityTypeTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityTypeTextBox_TextChanged); + // + // label112 + // + this.label112.AutoSize = true; + this.label112.Location = new System.Drawing.Point(26, 32); + this.label112.Name = "label112"; + this.label112.Size = new System.Drawing.Size(59, 13); + this.label112.TabIndex = 7; + this.label112.Text = "Entity type:"; + // + // ScenarioEntityGoToButton + // + this.ScenarioEntityGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityGoToButton.Location = new System.Drawing.Point(382, 1); + this.ScenarioEntityGoToButton.Name = "ScenarioEntityGoToButton"; + this.ScenarioEntityGoToButton.Size = new System.Drawing.Size(68, 23); + this.ScenarioEntityGoToButton.TabIndex = 6; + this.ScenarioEntityGoToButton.Text = "Go to"; + this.ScenarioEntityGoToButton.UseVisualStyleBackColor = true; + this.ScenarioEntityGoToButton.Click += new System.EventHandler(this.ScenarioEntityGoToButton_Click); + // + // ScenarioEntityPositionTextBox + // + this.ScenarioEntityPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPositionTextBox.Location = new System.Drawing.Point(91, 3); + this.ScenarioEntityPositionTextBox.Name = "ScenarioEntityPositionTextBox"; + this.ScenarioEntityPositionTextBox.Size = new System.Drawing.Size(285, 20); + this.ScenarioEntityPositionTextBox.TabIndex = 5; + this.ScenarioEntityPositionTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPositionTextBox_TextChanged); + // + // label104 + // + this.label104.AutoSize = true; + this.label104.Location = new System.Drawing.Point(10, 6); + this.label104.Name = "label104"; + this.label104.Size = new System.Drawing.Size(75, 13); + this.label104.TabIndex = 4; + this.label104.Text = "Entity position:"; + // + // ScenarioEntityAddToProjectButton + // + this.ScenarioEntityAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityAddToProjectButton.Enabled = false; + this.ScenarioEntityAddToProjectButton.Location = new System.Drawing.Point(362, 394); + this.ScenarioEntityAddToProjectButton.Name = "ScenarioEntityAddToProjectButton"; + this.ScenarioEntityAddToProjectButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioEntityAddToProjectButton.TabIndex = 6; + this.ScenarioEntityAddToProjectButton.Text = "Add to Project"; + this.ScenarioEntityAddToProjectButton.UseVisualStyleBackColor = true; + this.ScenarioEntityAddToProjectButton.Click += new System.EventHandler(this.ScenarioEntityAddToProjectButton_Click); + // + // ScenarioEntityPointTabPage + // + this.ScenarioEntityPointTabPage.Controls.Add(this.ScenarioEntityPointDeleteButton); + this.ScenarioEntityPointTabPage.Controls.Add(this.ScenarioEntityPointAddToProjectButton); + this.ScenarioEntityPointTabPage.Controls.Add(this.ScenarioEntityPointPanel); + this.ScenarioEntityPointTabPage.Location = new System.Drawing.Point(4, 22); + this.ScenarioEntityPointTabPage.Name = "ScenarioEntityPointTabPage"; + this.ScenarioEntityPointTabPage.Size = new System.Drawing.Size(551, 420); + this.ScenarioEntityPointTabPage.TabIndex = 2; + this.ScenarioEntityPointTabPage.Text = "Entity Point"; + this.ScenarioEntityPointTabPage.UseVisualStyleBackColor = true; + // + // ScenarioEntityPointDeleteButton + // + this.ScenarioEntityPointDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointDeleteButton.Enabled = false; + this.ScenarioEntityPointDeleteButton.Location = new System.Drawing.Point(458, 394); + this.ScenarioEntityPointDeleteButton.Name = "ScenarioEntityPointDeleteButton"; + this.ScenarioEntityPointDeleteButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioEntityPointDeleteButton.TabIndex = 3; + this.ScenarioEntityPointDeleteButton.Text = "Delete Point"; + this.ScenarioEntityPointDeleteButton.UseVisualStyleBackColor = true; + this.ScenarioEntityPointDeleteButton.Click += new System.EventHandler(this.ScenarioEntityPointDeleteButton_Click); + // + // ScenarioEntityPointAddToProjectButton + // + this.ScenarioEntityPointAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointAddToProjectButton.Enabled = false; + this.ScenarioEntityPointAddToProjectButton.Location = new System.Drawing.Point(362, 394); + this.ScenarioEntityPointAddToProjectButton.Name = "ScenarioEntityPointAddToProjectButton"; + this.ScenarioEntityPointAddToProjectButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioEntityPointAddToProjectButton.TabIndex = 2; + this.ScenarioEntityPointAddToProjectButton.Text = "Add to Project"; + this.ScenarioEntityPointAddToProjectButton.UseVisualStyleBackColor = true; + this.ScenarioEntityPointAddToProjectButton.Click += new System.EventHandler(this.ScenarioEntityPointAddToProjectButton_Click); + // + // ScenarioEntityPointPanel + // + this.ScenarioEntityPointPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointNameHashLabel); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointNameTextBox); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointFlagsCheckedListBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label135); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointFlagsUpDown); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointShortRangeCheckBox); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointExtendedRangeCheckBox); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointHighPriCheckBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label133); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointEndUpDown); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointStartUpDown); + this.ScenarioEntityPointPanel.Controls.Add(this.label134); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointRadiusTextBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label132); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointTimeTillPedLeavesTextBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label131); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointProbabilityTextBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label130); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointAvailableInMpSpComboBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label129); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointRequiredImapHashLabel); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointRequiredImapTextBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label128); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointInteriorHashLabel); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointInteriorTextBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label126); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointGroupHashLabel); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointGroupTextBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label124); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointPedTypeHashLabel); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointPedTypeTextBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label122); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointSpawnTypeHashLabel); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointSpawnTypeTextBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label120); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointRotationTextBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label118); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointGoToButton); + this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointPositionTextBox); + this.ScenarioEntityPointPanel.Controls.Add(this.label117); + this.ScenarioEntityPointPanel.Controls.Add(this.label116); + this.ScenarioEntityPointPanel.Location = new System.Drawing.Point(0, 3); + this.ScenarioEntityPointPanel.Name = "ScenarioEntityPointPanel"; + this.ScenarioEntityPointPanel.Size = new System.Drawing.Size(551, 414); + this.ScenarioEntityPointPanel.TabIndex = 4; + // + // ScenarioEntityPointNameHashLabel + // + this.ScenarioEntityPointNameHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointNameHashLabel.AutoSize = true; + this.ScenarioEntityPointNameHashLabel.Location = new System.Drawing.Point(428, 53); + this.ScenarioEntityPointNameHashLabel.Name = "ScenarioEntityPointNameHashLabel"; + this.ScenarioEntityPointNameHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioEntityPointNameHashLabel.TabIndex = 12; + this.ScenarioEntityPointNameHashLabel.Text = "Hash: 0"; + // + // ScenarioEntityPointNameTextBox + // + this.ScenarioEntityPointNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointNameTextBox.Location = new System.Drawing.Point(109, 50); + this.ScenarioEntityPointNameTextBox.Name = "ScenarioEntityPointNameTextBox"; + this.ScenarioEntityPointNameTextBox.Size = new System.Drawing.Size(313, 20); + this.ScenarioEntityPointNameTextBox.TabIndex = 11; + this.ScenarioEntityPointNameTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointNameTextBox_TextChanged); + // + // ScenarioEntityPointFlagsCheckedListBox + // + this.ScenarioEntityPointFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointFlagsCheckedListBox.CheckOnClick = true; + this.ScenarioEntityPointFlagsCheckedListBox.FormattingEnabled = true; + this.ScenarioEntityPointFlagsCheckedListBox.Items.AddRange(new object[] { + "1 - IgnoreMaxInRange", + "2 - NoSpawn", + "4 - StationaryReactions", + "8 - Unk", + "16 - Unk", + "32 - ActivateVehicleSiren", + "64 - AggressiveVehicleDriving", + "128 - Unk", + "256 - Unk", + "512 - Unk", + "1024 - AerialVehiclePoint", + "2048 - TerritorialScenario", + "4096 - Unk", + "8192 - Unk", + "16384 - Unk", + "32768 - Unk", + "65536 - InWater", + "131072 - Unk", + "262144 - OpenDoor", + "524288 - PreciseUseTime", + "1048576 - Unk", + "2097152 - Unk", + "4194304 - ExtendedRange", + "8388608 - ShortRange", + "16777216 - HighPriority", + "33554432 - IgnoreLoitering", + "67108864 - UseSearchlight", + "134217728 - ResetNoCollisionOnCleanUp", + "268435456 - Unk", + "536870912 - Unk", + "1073741824 - IgnoreWeatherRestrictions"}); + this.ScenarioEntityPointFlagsCheckedListBox.Location = new System.Drawing.Point(269, 193); + this.ScenarioEntityPointFlagsCheckedListBox.Name = "ScenarioEntityPointFlagsCheckedListBox"; + this.ScenarioEntityPointFlagsCheckedListBox.Size = new System.Drawing.Size(255, 184); + this.ScenarioEntityPointFlagsCheckedListBox.TabIndex = 45; + this.ScenarioEntityPointFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ScenarioEntityPointFlagsCheckedListBox_ItemCheck); + // + // label135 + // + this.label135.AutoSize = true; + this.label135.Location = new System.Drawing.Point(68, 389); + this.label135.Name = "label135"; + this.label135.Size = new System.Drawing.Size(35, 13); + this.label135.TabIndex = 43; + this.label135.Text = "Flags:"; + // + // ScenarioEntityPointFlagsUpDown + // + this.ScenarioEntityPointFlagsUpDown.Location = new System.Drawing.Point(109, 387); + this.ScenarioEntityPointFlagsUpDown.Maximum = new decimal(new int[] { + -1, + 0, + 0, + 0}); + this.ScenarioEntityPointFlagsUpDown.Name = "ScenarioEntityPointFlagsUpDown"; + this.ScenarioEntityPointFlagsUpDown.Size = new System.Drawing.Size(154, 20); + this.ScenarioEntityPointFlagsUpDown.TabIndex = 44; + this.ScenarioEntityPointFlagsUpDown.ValueChanged += new System.EventHandler(this.ScenarioEntityPointFlagsUpDown_ValueChanged); + // + // ScenarioEntityPointShortRangeCheckBox + // + this.ScenarioEntityPointShortRangeCheckBox.AutoSize = true; + this.ScenarioEntityPointShortRangeCheckBox.Location = new System.Drawing.Point(109, 364); + this.ScenarioEntityPointShortRangeCheckBox.Name = "ScenarioEntityPointShortRangeCheckBox"; + this.ScenarioEntityPointShortRangeCheckBox.Size = new System.Drawing.Size(83, 17); + this.ScenarioEntityPointShortRangeCheckBox.TabIndex = 42; + this.ScenarioEntityPointShortRangeCheckBox.Text = "ShortRange"; + this.ScenarioEntityPointShortRangeCheckBox.UseVisualStyleBackColor = true; + this.ScenarioEntityPointShortRangeCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioEntityPointShortRangeCheckBox_CheckedChanged); + // + // ScenarioEntityPointExtendedRangeCheckBox + // + this.ScenarioEntityPointExtendedRangeCheckBox.AutoSize = true; + this.ScenarioEntityPointExtendedRangeCheckBox.Location = new System.Drawing.Point(109, 346); + this.ScenarioEntityPointExtendedRangeCheckBox.Name = "ScenarioEntityPointExtendedRangeCheckBox"; + this.ScenarioEntityPointExtendedRangeCheckBox.Size = new System.Drawing.Size(103, 17); + this.ScenarioEntityPointExtendedRangeCheckBox.TabIndex = 41; + this.ScenarioEntityPointExtendedRangeCheckBox.Text = "ExtendedRange"; + this.ScenarioEntityPointExtendedRangeCheckBox.UseVisualStyleBackColor = true; + this.ScenarioEntityPointExtendedRangeCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioEntityPointExtendedRangeCheckBox_CheckedChanged); + // + // ScenarioEntityPointHighPriCheckBox + // + this.ScenarioEntityPointHighPriCheckBox.AutoSize = true; + this.ScenarioEntityPointHighPriCheckBox.Location = new System.Drawing.Point(109, 328); + this.ScenarioEntityPointHighPriCheckBox.Name = "ScenarioEntityPointHighPriCheckBox"; + this.ScenarioEntityPointHighPriCheckBox.Size = new System.Drawing.Size(60, 17); + this.ScenarioEntityPointHighPriCheckBox.TabIndex = 40; + this.ScenarioEntityPointHighPriCheckBox.Text = "HighPri"; + this.ScenarioEntityPointHighPriCheckBox.UseVisualStyleBackColor = true; + this.ScenarioEntityPointHighPriCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioEntityPointHighPriCheckBox_CheckedChanged); + // + // label133 + // + this.label133.AutoSize = true; + this.label133.Location = new System.Drawing.Point(74, 306); + this.label133.Name = "label133"; + this.label133.Size = new System.Drawing.Size(29, 13); + this.label133.TabIndex = 38; + this.label133.Text = "End:"; + // + // ScenarioEntityPointEndUpDown + // + this.ScenarioEntityPointEndUpDown.Location = new System.Drawing.Point(109, 304); + this.ScenarioEntityPointEndUpDown.Maximum = new decimal(new int[] { + 24, + 0, + 0, + 0}); + this.ScenarioEntityPointEndUpDown.Name = "ScenarioEntityPointEndUpDown"; + this.ScenarioEntityPointEndUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioEntityPointEndUpDown.TabIndex = 39; + this.ScenarioEntityPointEndUpDown.ValueChanged += new System.EventHandler(this.ScenarioEntityPointEndUpDown_ValueChanged); + // + // ScenarioEntityPointStartUpDown + // + this.ScenarioEntityPointStartUpDown.Location = new System.Drawing.Point(109, 281); + this.ScenarioEntityPointStartUpDown.Maximum = new decimal(new int[] { + 24, + 0, + 0, + 0}); + this.ScenarioEntityPointStartUpDown.Name = "ScenarioEntityPointStartUpDown"; + this.ScenarioEntityPointStartUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioEntityPointStartUpDown.TabIndex = 37; + this.ScenarioEntityPointStartUpDown.ValueChanged += new System.EventHandler(this.ScenarioEntityPointStartUpDown_ValueChanged); + // + // label134 + // + this.label134.AutoSize = true; + this.label134.Location = new System.Drawing.Point(71, 283); + this.label134.Name = "label134"; + this.label134.Size = new System.Drawing.Size(32, 13); + this.label134.TabIndex = 36; + this.label134.Text = "Start:"; + // + // ScenarioEntityPointRadiusTextBox + // + this.ScenarioEntityPointRadiusTextBox.Location = new System.Drawing.Point(109, 258); + this.ScenarioEntityPointRadiusTextBox.Name = "ScenarioEntityPointRadiusTextBox"; + this.ScenarioEntityPointRadiusTextBox.Size = new System.Drawing.Size(88, 20); + this.ScenarioEntityPointRadiusTextBox.TabIndex = 35; + this.ScenarioEntityPointRadiusTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointRadiusTextBox_TextChanged); + // + // label132 + // + this.label132.AutoSize = true; + this.label132.Location = new System.Drawing.Point(60, 261); + this.label132.Name = "label132"; + this.label132.Size = new System.Drawing.Size(43, 13); + this.label132.TabIndex = 34; + this.label132.Text = "Radius:"; + // + // ScenarioEntityPointTimeTillPedLeavesTextBox + // + this.ScenarioEntityPointTimeTillPedLeavesTextBox.Location = new System.Drawing.Point(109, 235); + this.ScenarioEntityPointTimeTillPedLeavesTextBox.Name = "ScenarioEntityPointTimeTillPedLeavesTextBox"; + this.ScenarioEntityPointTimeTillPedLeavesTextBox.Size = new System.Drawing.Size(88, 20); + this.ScenarioEntityPointTimeTillPedLeavesTextBox.TabIndex = 33; + this.ScenarioEntityPointTimeTillPedLeavesTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointTimeTillPedLeavesTextBox_TextChanged); + // + // label131 + // + this.label131.AutoSize = true; + this.label131.Location = new System.Drawing.Point(3, 238); + this.label131.Name = "label131"; + this.label131.Size = new System.Drawing.Size(100, 13); + this.label131.TabIndex = 32; + this.label131.Text = "TimeTillPedLeaves:"; + // + // ScenarioEntityPointProbabilityTextBox + // + this.ScenarioEntityPointProbabilityTextBox.Location = new System.Drawing.Point(109, 212); + this.ScenarioEntityPointProbabilityTextBox.Name = "ScenarioEntityPointProbabilityTextBox"; + this.ScenarioEntityPointProbabilityTextBox.Size = new System.Drawing.Size(88, 20); + this.ScenarioEntityPointProbabilityTextBox.TabIndex = 31; + this.ScenarioEntityPointProbabilityTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointProbabilityTextBox_TextChanged); + // + // label130 + // + this.label130.AutoSize = true; + this.label130.Location = new System.Drawing.Point(45, 215); + this.label130.Name = "label130"; + this.label130.Size = new System.Drawing.Size(58, 13); + this.label130.TabIndex = 30; + this.label130.Text = "Probability:"; + // + // ScenarioEntityPointAvailableInMpSpComboBox + // + this.ScenarioEntityPointAvailableInMpSpComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioEntityPointAvailableInMpSpComboBox.FormattingEnabled = true; + this.ScenarioEntityPointAvailableInMpSpComboBox.Location = new System.Drawing.Point(109, 188); + this.ScenarioEntityPointAvailableInMpSpComboBox.Name = "ScenarioEntityPointAvailableInMpSpComboBox"; + this.ScenarioEntityPointAvailableInMpSpComboBox.Size = new System.Drawing.Size(88, 21); + this.ScenarioEntityPointAvailableInMpSpComboBox.TabIndex = 29; + this.ScenarioEntityPointAvailableInMpSpComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioEntityPointAvailableInMpSpComboBox_SelectedIndexChanged); + // + // label129 + // + this.label129.AutoSize = true; + this.label129.Location = new System.Drawing.Point(14, 191); + this.label129.Name = "label129"; + this.label129.Size = new System.Drawing.Size(90, 13); + this.label129.TabIndex = 28; + this.label129.Text = "AvailableInMpSp:"; + // + // ScenarioEntityPointRequiredImapHashLabel + // + this.ScenarioEntityPointRequiredImapHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointRequiredImapHashLabel.AutoSize = true; + this.ScenarioEntityPointRequiredImapHashLabel.Location = new System.Drawing.Point(428, 168); + this.ScenarioEntityPointRequiredImapHashLabel.Name = "ScenarioEntityPointRequiredImapHashLabel"; + this.ScenarioEntityPointRequiredImapHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioEntityPointRequiredImapHashLabel.TabIndex = 27; + this.ScenarioEntityPointRequiredImapHashLabel.Text = "Hash: 0"; + // + // ScenarioEntityPointRequiredImapTextBox + // + this.ScenarioEntityPointRequiredImapTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointRequiredImapTextBox.Location = new System.Drawing.Point(109, 165); + this.ScenarioEntityPointRequiredImapTextBox.Name = "ScenarioEntityPointRequiredImapTextBox"; + this.ScenarioEntityPointRequiredImapTextBox.Size = new System.Drawing.Size(313, 20); + this.ScenarioEntityPointRequiredImapTextBox.TabIndex = 26; + this.ScenarioEntityPointRequiredImapTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointRequiredImapTextBox_TextChanged); + // + // label128 + // + this.label128.AutoSize = true; + this.label128.Location = new System.Drawing.Point(24, 168); + this.label128.Name = "label128"; + this.label128.Size = new System.Drawing.Size(79, 13); + this.label128.TabIndex = 25; + this.label128.Text = "Required Imap:"; + // + // ScenarioEntityPointInteriorHashLabel + // + this.ScenarioEntityPointInteriorHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointInteriorHashLabel.AutoSize = true; + this.ScenarioEntityPointInteriorHashLabel.Location = new System.Drawing.Point(428, 145); + this.ScenarioEntityPointInteriorHashLabel.Name = "ScenarioEntityPointInteriorHashLabel"; + this.ScenarioEntityPointInteriorHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioEntityPointInteriorHashLabel.TabIndex = 24; + this.ScenarioEntityPointInteriorHashLabel.Text = "Hash: 0"; + // + // ScenarioEntityPointInteriorTextBox + // + this.ScenarioEntityPointInteriorTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointInteriorTextBox.Location = new System.Drawing.Point(109, 142); + this.ScenarioEntityPointInteriorTextBox.Name = "ScenarioEntityPointInteriorTextBox"; + this.ScenarioEntityPointInteriorTextBox.Size = new System.Drawing.Size(313, 20); + this.ScenarioEntityPointInteriorTextBox.TabIndex = 23; + this.ScenarioEntityPointInteriorTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointInteriorTextBox_TextChanged); + // + // label126 + // + this.label126.AutoSize = true; + this.label126.Location = new System.Drawing.Point(61, 145); + this.label126.Name = "label126"; + this.label126.Size = new System.Drawing.Size(42, 13); + this.label126.TabIndex = 22; + this.label126.Text = "Interior:"; + // + // ScenarioEntityPointGroupHashLabel + // + this.ScenarioEntityPointGroupHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointGroupHashLabel.AutoSize = true; + this.ScenarioEntityPointGroupHashLabel.Location = new System.Drawing.Point(428, 122); + this.ScenarioEntityPointGroupHashLabel.Name = "ScenarioEntityPointGroupHashLabel"; + this.ScenarioEntityPointGroupHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioEntityPointGroupHashLabel.TabIndex = 21; + this.ScenarioEntityPointGroupHashLabel.Text = "Hash: 0"; + // + // ScenarioEntityPointGroupTextBox + // + this.ScenarioEntityPointGroupTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointGroupTextBox.Location = new System.Drawing.Point(109, 119); + this.ScenarioEntityPointGroupTextBox.Name = "ScenarioEntityPointGroupTextBox"; + this.ScenarioEntityPointGroupTextBox.Size = new System.Drawing.Size(313, 20); + this.ScenarioEntityPointGroupTextBox.TabIndex = 20; + this.ScenarioEntityPointGroupTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointGroupTextBox_TextChanged); + // + // label124 + // + this.label124.AutoSize = true; + this.label124.Location = new System.Drawing.Point(64, 122); + this.label124.Name = "label124"; + this.label124.Size = new System.Drawing.Size(39, 13); + this.label124.TabIndex = 19; + this.label124.Text = "Group:"; + // + // ScenarioEntityPointPedTypeHashLabel + // + this.ScenarioEntityPointPedTypeHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointPedTypeHashLabel.AutoSize = true; + this.ScenarioEntityPointPedTypeHashLabel.Location = new System.Drawing.Point(428, 99); + this.ScenarioEntityPointPedTypeHashLabel.Name = "ScenarioEntityPointPedTypeHashLabel"; + this.ScenarioEntityPointPedTypeHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioEntityPointPedTypeHashLabel.TabIndex = 18; + this.ScenarioEntityPointPedTypeHashLabel.Text = "Hash: 0"; + // + // ScenarioEntityPointPedTypeTextBox + // + this.ScenarioEntityPointPedTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointPedTypeTextBox.Location = new System.Drawing.Point(109, 96); + this.ScenarioEntityPointPedTypeTextBox.Name = "ScenarioEntityPointPedTypeTextBox"; + this.ScenarioEntityPointPedTypeTextBox.Size = new System.Drawing.Size(313, 20); + this.ScenarioEntityPointPedTypeTextBox.TabIndex = 17; + this.ScenarioEntityPointPedTypeTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointPedTypeTextBox_TextChanged); + // + // label122 + // + this.label122.AutoSize = true; + this.label122.Location = new System.Drawing.Point(51, 99); + this.label122.Name = "label122"; + this.label122.Size = new System.Drawing.Size(52, 13); + this.label122.TabIndex = 16; + this.label122.Text = "Ped type:"; + // + // ScenarioEntityPointSpawnTypeHashLabel + // + this.ScenarioEntityPointSpawnTypeHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointSpawnTypeHashLabel.AutoSize = true; + this.ScenarioEntityPointSpawnTypeHashLabel.Location = new System.Drawing.Point(428, 76); + this.ScenarioEntityPointSpawnTypeHashLabel.Name = "ScenarioEntityPointSpawnTypeHashLabel"; + this.ScenarioEntityPointSpawnTypeHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioEntityPointSpawnTypeHashLabel.TabIndex = 15; + this.ScenarioEntityPointSpawnTypeHashLabel.Text = "Hash: 0"; + // + // ScenarioEntityPointSpawnTypeTextBox + // + this.ScenarioEntityPointSpawnTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointSpawnTypeTextBox.Location = new System.Drawing.Point(109, 73); + this.ScenarioEntityPointSpawnTypeTextBox.Name = "ScenarioEntityPointSpawnTypeTextBox"; + this.ScenarioEntityPointSpawnTypeTextBox.Size = new System.Drawing.Size(313, 20); + this.ScenarioEntityPointSpawnTypeTextBox.TabIndex = 14; + this.ScenarioEntityPointSpawnTypeTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointSpawnTypeTextBox_TextChanged); + // + // label120 + // + this.label120.AutoSize = true; + this.label120.Location = new System.Drawing.Point(37, 76); + this.label120.Name = "label120"; + this.label120.Size = new System.Drawing.Size(66, 13); + this.label120.TabIndex = 13; + this.label120.Text = "Spawn type:"; + // + // ScenarioEntityPointRotationTextBox + // + this.ScenarioEntityPointRotationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointRotationTextBox.Location = new System.Drawing.Point(109, 27); + this.ScenarioEntityPointRotationTextBox.Name = "ScenarioEntityPointRotationTextBox"; + this.ScenarioEntityPointRotationTextBox.Size = new System.Drawing.Size(313, 20); + this.ScenarioEntityPointRotationTextBox.TabIndex = 9; + this.ScenarioEntityPointRotationTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointRotationTextBox_TextChanged); + // + // label118 + // + this.label118.AutoSize = true; + this.label118.Location = new System.Drawing.Point(27, 30); + this.label118.Name = "label118"; + this.label118.Size = new System.Drawing.Size(76, 13); + this.label118.TabIndex = 8; + this.label118.Text = "Offset rotation:"; + // + // ScenarioEntityPointGoToButton + // + this.ScenarioEntityPointGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointGoToButton.Location = new System.Drawing.Point(428, 2); + this.ScenarioEntityPointGoToButton.Name = "ScenarioEntityPointGoToButton"; + this.ScenarioEntityPointGoToButton.Size = new System.Drawing.Size(68, 23); + this.ScenarioEntityPointGoToButton.TabIndex = 7; + this.ScenarioEntityPointGoToButton.Text = "Go to"; + this.ScenarioEntityPointGoToButton.UseVisualStyleBackColor = true; + this.ScenarioEntityPointGoToButton.Click += new System.EventHandler(this.ScenarioEntityPointGoToButton_Click); + // + // ScenarioEntityPointPositionTextBox + // + this.ScenarioEntityPointPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioEntityPointPositionTextBox.Location = new System.Drawing.Point(109, 4); + this.ScenarioEntityPointPositionTextBox.Name = "ScenarioEntityPointPositionTextBox"; + this.ScenarioEntityPointPositionTextBox.Size = new System.Drawing.Size(313, 20); + this.ScenarioEntityPointPositionTextBox.TabIndex = 6; + this.ScenarioEntityPointPositionTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointPositionTextBox_TextChanged); + // + // label117 + // + this.label117.AutoSize = true; + this.label117.Location = new System.Drawing.Point(26, 7); + this.label117.Name = "label117"; + this.label117.Size = new System.Drawing.Size(77, 13); + this.label117.TabIndex = 5; + this.label117.Text = "Offset position:"; + // + // label116 + // + this.label116.AutoSize = true; + this.label116.Location = new System.Drawing.Point(65, 53); + this.label116.Name = "label116"; + this.label116.Size = new System.Drawing.Size(38, 13); + this.label116.TabIndex = 10; + this.label116.Text = "Name:"; + // + // ScenarioChainTabPage + // + this.ScenarioChainTabPage.Controls.Add(this.ScenarioChainDeleteButton); + this.ScenarioChainTabPage.Controls.Add(this.ScenarioChainAddToProjectButton); + this.ScenarioChainTabPage.Controls.Add(this.splitContainer3); + this.ScenarioChainTabPage.Location = new System.Drawing.Point(4, 22); + this.ScenarioChainTabPage.Name = "ScenarioChainTabPage"; + this.ScenarioChainTabPage.Size = new System.Drawing.Size(551, 420); + this.ScenarioChainTabPage.TabIndex = 3; + this.ScenarioChainTabPage.Text = "Chain"; + this.ScenarioChainTabPage.UseVisualStyleBackColor = true; + // + // ScenarioChainDeleteButton + // + this.ScenarioChainDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainDeleteButton.Enabled = false; + this.ScenarioChainDeleteButton.Location = new System.Drawing.Point(458, 394); + this.ScenarioChainDeleteButton.Name = "ScenarioChainDeleteButton"; + this.ScenarioChainDeleteButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioChainDeleteButton.TabIndex = 9; + this.ScenarioChainDeleteButton.Text = "Delete Chain"; + this.ScenarioChainDeleteButton.UseVisualStyleBackColor = true; + this.ScenarioChainDeleteButton.Click += new System.EventHandler(this.ScenarioChainDeleteButton_Click); + // + // ScenarioChainAddToProjectButton + // + this.ScenarioChainAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainAddToProjectButton.Enabled = false; + this.ScenarioChainAddToProjectButton.Location = new System.Drawing.Point(362, 394); + this.ScenarioChainAddToProjectButton.Name = "ScenarioChainAddToProjectButton"; + this.ScenarioChainAddToProjectButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioChainAddToProjectButton.TabIndex = 8; + this.ScenarioChainAddToProjectButton.Text = "Add to Project"; + this.ScenarioChainAddToProjectButton.UseVisualStyleBackColor = true; + this.ScenarioChainAddToProjectButton.Click += new System.EventHandler(this.ScenarioChainAddToProjectButton_Click); + // + // splitContainer3 + // + this.splitContainer3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer3.Location = new System.Drawing.Point(3, 3); + this.splitContainer3.Name = "splitContainer3"; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainMoveEdgeDownButton); + this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainMoveEdgeUpButton); + this.splitContainer3.Panel1.Controls.Add(this.label138); + this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainUnk1UpDown); + this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainRemoveEdgeButton); + this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainAddEdgeButton); + this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainEdgesListBox); + this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainEdgeCountLabel); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.ScenarioChainEdgePanel); + this.splitContainer3.Size = new System.Drawing.Size(545, 385); + this.splitContainer3.SplitterDistance = 205; + this.splitContainer3.TabIndex = 1; + // + // ScenarioChainMoveEdgeDownButton + // + this.ScenarioChainMoveEdgeDownButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ScenarioChainMoveEdgeDownButton.Location = new System.Drawing.Point(85, 326); + this.ScenarioChainMoveEdgeDownButton.Name = "ScenarioChainMoveEdgeDownButton"; + this.ScenarioChainMoveEdgeDownButton.Size = new System.Drawing.Size(76, 23); + this.ScenarioChainMoveEdgeDownButton.TabIndex = 5; + this.ScenarioChainMoveEdgeDownButton.Text = "Move Down"; + this.ScenarioChainMoveEdgeDownButton.UseVisualStyleBackColor = true; + this.ScenarioChainMoveEdgeDownButton.Click += new System.EventHandler(this.ScenarioChainMoveEdgeDownButton_Click); + // + // ScenarioChainMoveEdgeUpButton + // + this.ScenarioChainMoveEdgeUpButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ScenarioChainMoveEdgeUpButton.Location = new System.Drawing.Point(3, 326); + this.ScenarioChainMoveEdgeUpButton.Name = "ScenarioChainMoveEdgeUpButton"; + this.ScenarioChainMoveEdgeUpButton.Size = new System.Drawing.Size(76, 23); + this.ScenarioChainMoveEdgeUpButton.TabIndex = 4; + this.ScenarioChainMoveEdgeUpButton.Text = "Move Up"; + this.ScenarioChainMoveEdgeUpButton.UseVisualStyleBackColor = true; + this.ScenarioChainMoveEdgeUpButton.Click += new System.EventHandler(this.ScenarioChainMoveEdgeUpButton_Click); + // + // label138 + // + this.label138.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label138.AutoSize = true; + this.label138.Location = new System.Drawing.Point(10, 364); + this.label138.Name = "label138"; + this.label138.Size = new System.Drawing.Size(69, 13); + this.label138.TabIndex = 6; + this.label138.Text = "Chain Unk 1:"; + // + // ScenarioChainUnk1UpDown + // + this.ScenarioChainUnk1UpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ScenarioChainUnk1UpDown.Location = new System.Drawing.Point(85, 362); + this.ScenarioChainUnk1UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScenarioChainUnk1UpDown.Name = "ScenarioChainUnk1UpDown"; + this.ScenarioChainUnk1UpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioChainUnk1UpDown.TabIndex = 7; + this.ScenarioChainUnk1UpDown.ValueChanged += new System.EventHandler(this.ScenarioChainUnk1UpDown_ValueChanged); + // + // ScenarioChainRemoveEdgeButton + // + this.ScenarioChainRemoveEdgeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ScenarioChainRemoveEdgeButton.Location = new System.Drawing.Point(85, 297); + this.ScenarioChainRemoveEdgeButton.Name = "ScenarioChainRemoveEdgeButton"; + this.ScenarioChainRemoveEdgeButton.Size = new System.Drawing.Size(76, 23); + this.ScenarioChainRemoveEdgeButton.TabIndex = 3; + this.ScenarioChainRemoveEdgeButton.Text = "Remove"; + this.ScenarioChainRemoveEdgeButton.UseVisualStyleBackColor = true; + this.ScenarioChainRemoveEdgeButton.Click += new System.EventHandler(this.ScenarioChainRemoveEdgeButton_Click); + // + // ScenarioChainAddEdgeButton + // + this.ScenarioChainAddEdgeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ScenarioChainAddEdgeButton.Location = new System.Drawing.Point(3, 297); + this.ScenarioChainAddEdgeButton.Name = "ScenarioChainAddEdgeButton"; + this.ScenarioChainAddEdgeButton.Size = new System.Drawing.Size(76, 23); + this.ScenarioChainAddEdgeButton.TabIndex = 2; + this.ScenarioChainAddEdgeButton.Text = "Add"; + this.ScenarioChainAddEdgeButton.UseVisualStyleBackColor = true; + this.ScenarioChainAddEdgeButton.Click += new System.EventHandler(this.ScenarioChainAddEdgeButton_Click); + // + // ScenarioChainEdgesListBox + // + this.ScenarioChainEdgesListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainEdgesListBox.FormattingEnabled = true; + this.ScenarioChainEdgesListBox.Location = new System.Drawing.Point(0, 0); + this.ScenarioChainEdgesListBox.Name = "ScenarioChainEdgesListBox"; + this.ScenarioChainEdgesListBox.Size = new System.Drawing.Size(202, 251); + this.ScenarioChainEdgesListBox.TabIndex = 0; + this.ScenarioChainEdgesListBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioChainEdgesListBox_SelectedIndexChanged); + // + // ScenarioChainEdgeCountLabel + // + this.ScenarioChainEdgeCountLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ScenarioChainEdgeCountLabel.AutoSize = true; + this.ScenarioChainEdgeCountLabel.Location = new System.Drawing.Point(3, 281); + this.ScenarioChainEdgeCountLabel.Name = "ScenarioChainEdgeCountLabel"; + this.ScenarioChainEdgeCountLabel.Size = new System.Drawing.Size(75, 13); + this.ScenarioChainEdgeCountLabel.TabIndex = 1; + this.ScenarioChainEdgeCountLabel.Text = "Edge Count: 0"; + // + // ScenarioChainEdgePanel + // + this.ScenarioChainEdgePanel.Controls.Add(this.ScenarioChainEdgeNavSpeedComboBox); + this.ScenarioChainEdgePanel.Controls.Add(this.label137); + this.ScenarioChainEdgePanel.Controls.Add(this.ScenarioChainEdgeNavModeComboBox); + this.ScenarioChainEdgePanel.Controls.Add(this.label136); + this.ScenarioChainEdgePanel.Controls.Add(this.ScenarioChainEdgeActionComboBox); + this.ScenarioChainEdgePanel.Controls.Add(this.label127); + this.ScenarioChainEdgePanel.Controls.Add(this.ScenarioChainEdgeNodeIndexToUpDown); + this.ScenarioChainEdgePanel.Controls.Add(this.ScenarioChainEdgeNodeIndexFromUpDown); + this.ScenarioChainEdgePanel.Controls.Add(this.label125); + this.ScenarioChainEdgePanel.Controls.Add(this.label121); + this.ScenarioChainEdgePanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScenarioChainEdgePanel.Enabled = false; + this.ScenarioChainEdgePanel.Location = new System.Drawing.Point(0, 0); + this.ScenarioChainEdgePanel.Name = "ScenarioChainEdgePanel"; + this.ScenarioChainEdgePanel.Size = new System.Drawing.Size(336, 385); + this.ScenarioChainEdgePanel.TabIndex = 0; + // + // ScenarioChainEdgeNavSpeedComboBox + // + this.ScenarioChainEdgeNavSpeedComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioChainEdgeNavSpeedComboBox.FormattingEnabled = true; + this.ScenarioChainEdgeNavSpeedComboBox.Location = new System.Drawing.Point(100, 118); + this.ScenarioChainEdgeNavSpeedComboBox.Name = "ScenarioChainEdgeNavSpeedComboBox"; + this.ScenarioChainEdgeNavSpeedComboBox.Size = new System.Drawing.Size(142, 21); + this.ScenarioChainEdgeNavSpeedComboBox.TabIndex = 10; + this.ScenarioChainEdgeNavSpeedComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioChainEdgeNavSpeedComboBox_SelectedIndexChanged); + // + // label137 + // + this.label137.AutoSize = true; + this.label137.Location = new System.Drawing.Point(33, 121); + this.label137.Name = "label137"; + this.label137.Size = new System.Drawing.Size(61, 13); + this.label137.TabIndex = 9; + this.label137.Text = "NavSpeed:"; + // + // ScenarioChainEdgeNavModeComboBox + // + this.ScenarioChainEdgeNavModeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioChainEdgeNavModeComboBox.FormattingEnabled = true; + this.ScenarioChainEdgeNavModeComboBox.Location = new System.Drawing.Point(100, 91); + this.ScenarioChainEdgeNavModeComboBox.Name = "ScenarioChainEdgeNavModeComboBox"; + this.ScenarioChainEdgeNavModeComboBox.Size = new System.Drawing.Size(142, 21); + this.ScenarioChainEdgeNavModeComboBox.TabIndex = 8; + this.ScenarioChainEdgeNavModeComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioChainEdgeNavModeComboBox_SelectedIndexChanged); + // + // label136 + // + this.label136.AutoSize = true; + this.label136.Location = new System.Drawing.Point(37, 94); + this.label136.Name = "label136"; + this.label136.Size = new System.Drawing.Size(57, 13); + this.label136.TabIndex = 7; + this.label136.Text = "NavMode:"; + // + // ScenarioChainEdgeActionComboBox + // + this.ScenarioChainEdgeActionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioChainEdgeActionComboBox.FormattingEnabled = true; + this.ScenarioChainEdgeActionComboBox.Location = new System.Drawing.Point(100, 64); + this.ScenarioChainEdgeActionComboBox.Name = "ScenarioChainEdgeActionComboBox"; + this.ScenarioChainEdgeActionComboBox.Size = new System.Drawing.Size(142, 21); + this.ScenarioChainEdgeActionComboBox.TabIndex = 6; + this.ScenarioChainEdgeActionComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioChainEdgeActionComboBox_SelectedIndexChanged); + // + // label127 + // + this.label127.AutoSize = true; + this.label127.Location = new System.Drawing.Point(54, 67); + this.label127.Name = "label127"; + this.label127.Size = new System.Drawing.Size(40, 13); + this.label127.TabIndex = 5; + this.label127.Text = "Action:"; + // + // ScenarioChainEdgeNodeIndexToUpDown + // + this.ScenarioChainEdgeNodeIndexToUpDown.Location = new System.Drawing.Point(100, 38); + this.ScenarioChainEdgeNodeIndexToUpDown.Maximum = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + this.ScenarioChainEdgeNodeIndexToUpDown.Name = "ScenarioChainEdgeNodeIndexToUpDown"; + this.ScenarioChainEdgeNodeIndexToUpDown.Size = new System.Drawing.Size(81, 20); + this.ScenarioChainEdgeNodeIndexToUpDown.TabIndex = 4; + this.ScenarioChainEdgeNodeIndexToUpDown.ValueChanged += new System.EventHandler(this.ScenarioChainEdgeNodeIndexToUpDown_ValueChanged); + // + // ScenarioChainEdgeNodeIndexFromUpDown + // + this.ScenarioChainEdgeNodeIndexFromUpDown.Location = new System.Drawing.Point(100, 12); + this.ScenarioChainEdgeNodeIndexFromUpDown.Maximum = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + this.ScenarioChainEdgeNodeIndexFromUpDown.Name = "ScenarioChainEdgeNodeIndexFromUpDown"; + this.ScenarioChainEdgeNodeIndexFromUpDown.Size = new System.Drawing.Size(81, 20); + this.ScenarioChainEdgeNodeIndexFromUpDown.TabIndex = 2; + this.ScenarioChainEdgeNodeIndexFromUpDown.ValueChanged += new System.EventHandler(this.ScenarioChainEdgeNodeIndexFromUpDown_ValueChanged); + // + // label125 + // + this.label125.AutoSize = true; + this.label125.Location = new System.Drawing.Point(19, 40); + this.label125.Name = "label125"; + this.label125.Size = new System.Drawing.Size(75, 13); + this.label125.TabIndex = 3; + this.label125.Text = "NodeIndexTo:"; + // + // label121 + // + this.label121.AutoSize = true; + this.label121.Location = new System.Drawing.Point(9, 14); + this.label121.Name = "label121"; + this.label121.Size = new System.Drawing.Size(85, 13); + this.label121.TabIndex = 1; + this.label121.Text = "NodeIndexFrom:"; + // + // ScenarioChainNodeTabPage + // + this.ScenarioChainNodeTabPage.Controls.Add(this.ScenarioChainNodePanel); + this.ScenarioChainNodeTabPage.Controls.Add(this.ScenarioChainNodeDeleteButton); + this.ScenarioChainNodeTabPage.Controls.Add(this.ScenarioChainNodeAddToProjectButton); + this.ScenarioChainNodeTabPage.Location = new System.Drawing.Point(4, 22); + this.ScenarioChainNodeTabPage.Name = "ScenarioChainNodeTabPage"; + this.ScenarioChainNodeTabPage.Size = new System.Drawing.Size(551, 420); + this.ScenarioChainNodeTabPage.TabIndex = 6; + this.ScenarioChainNodeTabPage.Text = "Chain Node"; + this.ScenarioChainNodeTabPage.UseVisualStyleBackColor = true; + // + // ScenarioChainNodePanel + // + this.ScenarioChainNodePanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeTypeComboBox); + this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeIndexTextBox); + this.ScenarioChainNodePanel.Controls.Add(this.label115); + this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeLastCheckBox); + this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeFirstCheckBox); + this.ScenarioChainNodePanel.Controls.Add(this.label123); + this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeUnk1HashLabel); + this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeUnk1TextBox); + this.ScenarioChainNodePanel.Controls.Add(this.label119); + this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeGoToButton); + this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodePositionTextBox); + this.ScenarioChainNodePanel.Controls.Add(this.label105); + this.ScenarioChainNodePanel.Location = new System.Drawing.Point(0, 3); + this.ScenarioChainNodePanel.Name = "ScenarioChainNodePanel"; + this.ScenarioChainNodePanel.Size = new System.Drawing.Size(551, 227); + this.ScenarioChainNodePanel.TabIndex = 8; + // + // ScenarioChainNodeTypeComboBox + // + this.ScenarioChainNodeTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainNodeTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioChainNodeTypeComboBox.FormattingEnabled = true; + this.ScenarioChainNodeTypeComboBox.Location = new System.Drawing.Point(73, 55); + this.ScenarioChainNodeTypeComboBox.Name = "ScenarioChainNodeTypeComboBox"; + this.ScenarioChainNodeTypeComboBox.Size = new System.Drawing.Size(377, 21); + this.ScenarioChainNodeTypeComboBox.TabIndex = 12; + this.ScenarioChainNodeTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioChainNodeTypeComboBox_SelectedIndexChanged); + // + // ScenarioChainNodeIndexTextBox + // + this.ScenarioChainNodeIndexTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainNodeIndexTextBox.Location = new System.Drawing.Point(73, 142); + this.ScenarioChainNodeIndexTextBox.Name = "ScenarioChainNodeIndexTextBox"; + this.ScenarioChainNodeIndexTextBox.ReadOnly = true; + this.ScenarioChainNodeIndexTextBox.Size = new System.Drawing.Size(135, 20); + this.ScenarioChainNodeIndexTextBox.TabIndex = 17; + // + // label115 + // + this.label115.AutoSize = true; + this.label115.Location = new System.Drawing.Point(33, 145); + this.label115.Name = "label115"; + this.label115.Size = new System.Drawing.Size(36, 13); + this.label115.TabIndex = 16; + this.label115.Text = "Index:"; + // + // ScenarioChainNodeLastCheckBox + // + this.ScenarioChainNodeLastCheckBox.AutoSize = true; + this.ScenarioChainNodeLastCheckBox.Location = new System.Drawing.Point(73, 105); + this.ScenarioChainNodeLastCheckBox.Name = "ScenarioChainNodeLastCheckBox"; + this.ScenarioChainNodeLastCheckBox.Size = new System.Drawing.Size(86, 17); + this.ScenarioChainNodeLastCheckBox.TabIndex = 15; + this.ScenarioChainNodeLastCheckBox.Text = "Last in chain"; + this.ScenarioChainNodeLastCheckBox.UseVisualStyleBackColor = true; + this.ScenarioChainNodeLastCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioChainNodeLastCheckBox_CheckedChanged); + // + // ScenarioChainNodeFirstCheckBox + // + this.ScenarioChainNodeFirstCheckBox.AutoSize = true; + this.ScenarioChainNodeFirstCheckBox.Location = new System.Drawing.Point(73, 82); + this.ScenarioChainNodeFirstCheckBox.Name = "ScenarioChainNodeFirstCheckBox"; + this.ScenarioChainNodeFirstCheckBox.Size = new System.Drawing.Size(85, 17); + this.ScenarioChainNodeFirstCheckBox.TabIndex = 14; + this.ScenarioChainNodeFirstCheckBox.Text = "First in chain"; + this.ScenarioChainNodeFirstCheckBox.UseVisualStyleBackColor = true; + this.ScenarioChainNodeFirstCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioChainNodeFirstCheckBox_CheckedChanged); + // + // label123 + // + this.label123.AutoSize = true; + this.label123.Location = new System.Drawing.Point(33, 58); + this.label123.Name = "label123"; + this.label123.Size = new System.Drawing.Size(34, 13); + this.label123.TabIndex = 11; + this.label123.Text = "Type:"; + // + // ScenarioChainNodeUnk1HashLabel + // + this.ScenarioChainNodeUnk1HashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainNodeUnk1HashLabel.AutoSize = true; + this.ScenarioChainNodeUnk1HashLabel.Location = new System.Drawing.Point(382, 32); + this.ScenarioChainNodeUnk1HashLabel.Name = "ScenarioChainNodeUnk1HashLabel"; + this.ScenarioChainNodeUnk1HashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioChainNodeUnk1HashLabel.TabIndex = 10; + this.ScenarioChainNodeUnk1HashLabel.Text = "Hash: 0"; + // + // ScenarioChainNodeUnk1TextBox + // + this.ScenarioChainNodeUnk1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainNodeUnk1TextBox.Location = new System.Drawing.Point(73, 29); + this.ScenarioChainNodeUnk1TextBox.Name = "ScenarioChainNodeUnk1TextBox"; + this.ScenarioChainNodeUnk1TextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioChainNodeUnk1TextBox.TabIndex = 9; + this.ScenarioChainNodeUnk1TextBox.TextChanged += new System.EventHandler(this.ScenarioChainNodeUnk1TextBox_TextChanged); + // + // label119 + // + this.label119.AutoSize = true; + this.label119.Location = new System.Drawing.Point(28, 32); + this.label119.Name = "label119"; + this.label119.Size = new System.Drawing.Size(39, 13); + this.label119.TabIndex = 8; + this.label119.Text = "Unk 1:"; + // + // ScenarioChainNodeGoToButton + // + this.ScenarioChainNodeGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainNodeGoToButton.Location = new System.Drawing.Point(382, 1); + this.ScenarioChainNodeGoToButton.Name = "ScenarioChainNodeGoToButton"; + this.ScenarioChainNodeGoToButton.Size = new System.Drawing.Size(68, 23); + this.ScenarioChainNodeGoToButton.TabIndex = 7; + this.ScenarioChainNodeGoToButton.Text = "Go to"; + this.ScenarioChainNodeGoToButton.UseVisualStyleBackColor = true; + this.ScenarioChainNodeGoToButton.Click += new System.EventHandler(this.ScenarioChainNodeGoToButton_Click); + // + // ScenarioChainNodePositionTextBox + // + this.ScenarioChainNodePositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainNodePositionTextBox.Location = new System.Drawing.Point(73, 3); + this.ScenarioChainNodePositionTextBox.Name = "ScenarioChainNodePositionTextBox"; + this.ScenarioChainNodePositionTextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioChainNodePositionTextBox.TabIndex = 6; + this.ScenarioChainNodePositionTextBox.TextChanged += new System.EventHandler(this.ScenarioChainNodePositionTextBox_TextChanged); + // + // label105 + // + this.label105.AutoSize = true; + this.label105.Location = new System.Drawing.Point(20, 6); + this.label105.Name = "label105"; + this.label105.Size = new System.Drawing.Size(47, 13); + this.label105.TabIndex = 5; + this.label105.Text = "Position:"; + // + // ScenarioChainNodeDeleteButton + // + this.ScenarioChainNodeDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainNodeDeleteButton.Enabled = false; + this.ScenarioChainNodeDeleteButton.Location = new System.Drawing.Point(458, 394); + this.ScenarioChainNodeDeleteButton.Name = "ScenarioChainNodeDeleteButton"; + this.ScenarioChainNodeDeleteButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioChainNodeDeleteButton.TabIndex = 7; + this.ScenarioChainNodeDeleteButton.Text = "Delete Node"; + this.ScenarioChainNodeDeleteButton.UseVisualStyleBackColor = true; + this.ScenarioChainNodeDeleteButton.Click += new System.EventHandler(this.ScenarioChainNodeDeleteButton_Click); + // + // ScenarioChainNodeAddToProjectButton + // + this.ScenarioChainNodeAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioChainNodeAddToProjectButton.Enabled = false; + this.ScenarioChainNodeAddToProjectButton.Location = new System.Drawing.Point(362, 394); + this.ScenarioChainNodeAddToProjectButton.Name = "ScenarioChainNodeAddToProjectButton"; + this.ScenarioChainNodeAddToProjectButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioChainNodeAddToProjectButton.TabIndex = 6; + this.ScenarioChainNodeAddToProjectButton.Text = "Add to Project"; + this.ScenarioChainNodeAddToProjectButton.UseVisualStyleBackColor = true; + this.ScenarioChainNodeAddToProjectButton.Click += new System.EventHandler(this.ScenarioChainNodeAddToProjectButton_Click); + // + // ScenarioClusterTabPage + // + this.ScenarioClusterTabPage.Controls.Add(this.ScenarioClusterDeleteButton); + this.ScenarioClusterTabPage.Controls.Add(this.ScenarioClusterAddToProjectButton); + this.ScenarioClusterTabPage.Controls.Add(this.ScenarioClusterPanel); + this.ScenarioClusterTabPage.Location = new System.Drawing.Point(4, 22); + this.ScenarioClusterTabPage.Name = "ScenarioClusterTabPage"; + this.ScenarioClusterTabPage.Size = new System.Drawing.Size(551, 420); + this.ScenarioClusterTabPage.TabIndex = 4; + this.ScenarioClusterTabPage.Text = "Cluster"; + this.ScenarioClusterTabPage.UseVisualStyleBackColor = true; + // + // ScenarioClusterDeleteButton + // + this.ScenarioClusterDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterDeleteButton.Enabled = false; + this.ScenarioClusterDeleteButton.Location = new System.Drawing.Point(458, 394); + this.ScenarioClusterDeleteButton.Name = "ScenarioClusterDeleteButton"; + this.ScenarioClusterDeleteButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioClusterDeleteButton.TabIndex = 3; + this.ScenarioClusterDeleteButton.Text = "Delete Cluster"; + this.ScenarioClusterDeleteButton.UseVisualStyleBackColor = true; + this.ScenarioClusterDeleteButton.Click += new System.EventHandler(this.ScenarioClusterDeleteButton_Click); + // + // ScenarioClusterAddToProjectButton + // + this.ScenarioClusterAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterAddToProjectButton.Enabled = false; + this.ScenarioClusterAddToProjectButton.Location = new System.Drawing.Point(362, 394); + this.ScenarioClusterAddToProjectButton.Name = "ScenarioClusterAddToProjectButton"; + this.ScenarioClusterAddToProjectButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioClusterAddToProjectButton.TabIndex = 2; + this.ScenarioClusterAddToProjectButton.Text = "Add to Project"; + this.ScenarioClusterAddToProjectButton.UseVisualStyleBackColor = true; + this.ScenarioClusterAddToProjectButton.Click += new System.EventHandler(this.ScenarioClusterAddToProjectButton_Click); + // + // ScenarioClusterPanel + // + this.ScenarioClusterPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPanel.Controls.Add(this.label159); + this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterAddPointButton); + this.ScenarioClusterPanel.Controls.Add(this.label158); + this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterPointsListBox); + this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterRadiusTextBox); + this.ScenarioClusterPanel.Controls.Add(this.label157); + this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterUnk2CheckBox); + this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterUnk1TextBox); + this.ScenarioClusterPanel.Controls.Add(this.label140); + this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterGoToButton); + this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterCenterTextBox); + this.ScenarioClusterPanel.Controls.Add(this.label139); + this.ScenarioClusterPanel.Location = new System.Drawing.Point(0, 3); + this.ScenarioClusterPanel.Name = "ScenarioClusterPanel"; + this.ScenarioClusterPanel.Size = new System.Drawing.Size(551, 385); + this.ScenarioClusterPanel.TabIndex = 4; + // + // label159 + // + this.label159.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label159.AutoSize = true; + this.label159.Location = new System.Drawing.Point(382, 150); + this.label159.Name = "label159"; + this.label159.Size = new System.Drawing.Size(141, 13); + this.label159.TabIndex = 16; + this.label159.Text = "(Double-click to select point)"; + // + // ScenarioClusterAddPointButton + // + this.ScenarioClusterAddPointButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ScenarioClusterAddPointButton.Location = new System.Drawing.Point(100, 359); + this.ScenarioClusterAddPointButton.Name = "ScenarioClusterAddPointButton"; + this.ScenarioClusterAddPointButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioClusterAddPointButton.TabIndex = 15; + this.ScenarioClusterAddPointButton.Text = "Add Point"; + this.ScenarioClusterAddPointButton.UseVisualStyleBackColor = true; + this.ScenarioClusterAddPointButton.Click += new System.EventHandler(this.ScenarioClusterAddPointButton_Click); + // + // label158 + // + this.label158.AutoSize = true; + this.label158.Location = new System.Drawing.Point(51, 150); + this.label158.Name = "label158"; + this.label158.Size = new System.Drawing.Size(39, 13); + this.label158.TabIndex = 14; + this.label158.Text = "Points:"; + // + // ScenarioClusterPointsListBox + // + this.ScenarioClusterPointsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointsListBox.FormattingEnabled = true; + this.ScenarioClusterPointsListBox.Location = new System.Drawing.Point(100, 148); + this.ScenarioClusterPointsListBox.Name = "ScenarioClusterPointsListBox"; + this.ScenarioClusterPointsListBox.Size = new System.Drawing.Size(276, 186); + this.ScenarioClusterPointsListBox.TabIndex = 13; + this.ScenarioClusterPointsListBox.DoubleClick += new System.EventHandler(this.ScenarioClusterPointsListBox_DoubleClick); + // + // ScenarioClusterRadiusTextBox + // + this.ScenarioClusterRadiusTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterRadiusTextBox.Location = new System.Drawing.Point(100, 29); + this.ScenarioClusterRadiusTextBox.Name = "ScenarioClusterRadiusTextBox"; + this.ScenarioClusterRadiusTextBox.Size = new System.Drawing.Size(204, 20); + this.ScenarioClusterRadiusTextBox.TabIndex = 9; + this.ScenarioClusterRadiusTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterRadiusTextBox_TextChanged); + // + // label157 + // + this.label157.AutoSize = true; + this.label157.Location = new System.Drawing.Point(51, 32); + this.label157.Name = "label157"; + this.label157.Size = new System.Drawing.Size(43, 13); + this.label157.TabIndex = 8; + this.label157.Text = "Radius:"; + // + // ScenarioClusterUnk2CheckBox + // + this.ScenarioClusterUnk2CheckBox.AutoSize = true; + this.ScenarioClusterUnk2CheckBox.Location = new System.Drawing.Point(100, 81); + this.ScenarioClusterUnk2CheckBox.Name = "ScenarioClusterUnk2CheckBox"; + this.ScenarioClusterUnk2CheckBox.Size = new System.Drawing.Size(55, 17); + this.ScenarioClusterUnk2CheckBox.TabIndex = 12; + this.ScenarioClusterUnk2CheckBox.Text = "Unk 2"; + this.ScenarioClusterUnk2CheckBox.UseVisualStyleBackColor = true; + this.ScenarioClusterUnk2CheckBox.CheckedChanged += new System.EventHandler(this.ScenarioClusterUnk2CheckBox_CheckedChanged); + // + // ScenarioClusterUnk1TextBox + // + this.ScenarioClusterUnk1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterUnk1TextBox.Location = new System.Drawing.Point(100, 55); + this.ScenarioClusterUnk1TextBox.Name = "ScenarioClusterUnk1TextBox"; + this.ScenarioClusterUnk1TextBox.Size = new System.Drawing.Size(204, 20); + this.ScenarioClusterUnk1TextBox.TabIndex = 11; + this.ScenarioClusterUnk1TextBox.TextChanged += new System.EventHandler(this.ScenarioClusterUnk1TextBox_TextChanged); + // + // label140 + // + this.label140.AutoSize = true; + this.label140.Location = new System.Drawing.Point(4, 58); + this.label140.Name = "label140"; + this.label140.Size = new System.Drawing.Size(90, 13); + this.label140.TabIndex = 10; + this.label140.Text = "Probability Unk 1:"; + // + // ScenarioClusterGoToButton + // + this.ScenarioClusterGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterGoToButton.Location = new System.Drawing.Point(382, 1); + this.ScenarioClusterGoToButton.Name = "ScenarioClusterGoToButton"; + this.ScenarioClusterGoToButton.Size = new System.Drawing.Size(68, 23); + this.ScenarioClusterGoToButton.TabIndex = 7; + this.ScenarioClusterGoToButton.Text = "Go to"; + this.ScenarioClusterGoToButton.UseVisualStyleBackColor = true; + this.ScenarioClusterGoToButton.Click += new System.EventHandler(this.ScenarioClusterGoToButton_Click); + // + // ScenarioClusterCenterTextBox + // + this.ScenarioClusterCenterTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterCenterTextBox.Location = new System.Drawing.Point(100, 3); + this.ScenarioClusterCenterTextBox.Name = "ScenarioClusterCenterTextBox"; + this.ScenarioClusterCenterTextBox.Size = new System.Drawing.Size(276, 20); + this.ScenarioClusterCenterTextBox.TabIndex = 6; + this.ScenarioClusterCenterTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterCenterTextBox_TextChanged); + // + // label139 + // + this.label139.AutoSize = true; + this.label139.Location = new System.Drawing.Point(53, 6); + this.label139.Name = "label139"; + this.label139.Size = new System.Drawing.Size(41, 13); + this.label139.TabIndex = 5; + this.label139.Text = "Center:"; + // + // ScenarioClusterPointTabPage + // + this.ScenarioClusterPointTabPage.Controls.Add(this.ScenarioClusterPointDeleteButton); + this.ScenarioClusterPointTabPage.Controls.Add(this.ScenarioClusterPointAddToProjectButton); + this.ScenarioClusterPointTabPage.Controls.Add(this.ScenarioClusterPointPanel); + this.ScenarioClusterPointTabPage.Location = new System.Drawing.Point(4, 22); + this.ScenarioClusterPointTabPage.Name = "ScenarioClusterPointTabPage"; + this.ScenarioClusterPointTabPage.Size = new System.Drawing.Size(551, 420); + this.ScenarioClusterPointTabPage.TabIndex = 5; + this.ScenarioClusterPointTabPage.Text = "Cluster Point"; + this.ScenarioClusterPointTabPage.UseVisualStyleBackColor = true; + // + // ScenarioClusterPointDeleteButton + // + this.ScenarioClusterPointDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointDeleteButton.Enabled = false; + this.ScenarioClusterPointDeleteButton.Location = new System.Drawing.Point(458, 394); + this.ScenarioClusterPointDeleteButton.Name = "ScenarioClusterPointDeleteButton"; + this.ScenarioClusterPointDeleteButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioClusterPointDeleteButton.TabIndex = 7; + this.ScenarioClusterPointDeleteButton.Text = "Delete Point"; + this.ScenarioClusterPointDeleteButton.UseVisualStyleBackColor = true; + this.ScenarioClusterPointDeleteButton.Click += new System.EventHandler(this.ScenarioClusterPointDeleteButton_Click); + // + // ScenarioClusterPointAddToProjectButton + // + this.ScenarioClusterPointAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointAddToProjectButton.Enabled = false; + this.ScenarioClusterPointAddToProjectButton.Location = new System.Drawing.Point(362, 394); + this.ScenarioClusterPointAddToProjectButton.Name = "ScenarioClusterPointAddToProjectButton"; + this.ScenarioClusterPointAddToProjectButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioClusterPointAddToProjectButton.TabIndex = 6; + this.ScenarioClusterPointAddToProjectButton.Text = "Add to Project"; + this.ScenarioClusterPointAddToProjectButton.UseVisualStyleBackColor = true; + this.ScenarioClusterPointAddToProjectButton.Click += new System.EventHandler(this.ScenarioClusterPointAddToProjectButton_Click); + // + // ScenarioClusterPointPanel + // + this.ScenarioClusterPointPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointImapHashLabel); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointImapTextBox); + this.ScenarioClusterPointPanel.Controls.Add(this.label143); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointGroupHashLabel); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointGroupTextBox); + this.ScenarioClusterPointPanel.Controls.Add(this.label141); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointInteriorHashLabel); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointFlagsCheckedListBox); + this.ScenarioClusterPointPanel.Controls.Add(this.label142); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointDirectionTextBox); + this.ScenarioClusterPointPanel.Controls.Add(this.label144); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointFlagsUpDown); + this.ScenarioClusterPointPanel.Controls.Add(this.label145); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointGoToButton); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointWaitTimeUpDown); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointPositionTextBox); + this.ScenarioClusterPointPanel.Controls.Add(this.label146); + this.ScenarioClusterPointPanel.Controls.Add(this.label147); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointRadiusUpDown); + this.ScenarioClusterPointPanel.Controls.Add(this.label148); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointSpOnlyFlagUpDown); + this.ScenarioClusterPointPanel.Controls.Add(this.label149); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointProbabilityUpDown); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointInteriorTextBox); + this.ScenarioClusterPointPanel.Controls.Add(this.label151); + this.ScenarioClusterPointPanel.Controls.Add(this.label152); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointTimeEndUpDown); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointTimeStartUpDown); + this.ScenarioClusterPointPanel.Controls.Add(this.label153); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointModelSetComboBox); + this.ScenarioClusterPointPanel.Controls.Add(this.label154); + this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointTypeComboBox); + this.ScenarioClusterPointPanel.Controls.Add(this.label155); + this.ScenarioClusterPointPanel.Location = new System.Drawing.Point(0, 3); + this.ScenarioClusterPointPanel.Name = "ScenarioClusterPointPanel"; + this.ScenarioClusterPointPanel.Size = new System.Drawing.Size(551, 414); + this.ScenarioClusterPointPanel.TabIndex = 8; + // + // ScenarioClusterPointImapHashLabel + // + this.ScenarioClusterPointImapHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointImapHashLabel.AutoSize = true; + this.ScenarioClusterPointImapHashLabel.Location = new System.Drawing.Point(382, 146); + this.ScenarioClusterPointImapHashLabel.Name = "ScenarioClusterPointImapHashLabel"; + this.ScenarioClusterPointImapHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioClusterPointImapHashLabel.TabIndex = 22; + this.ScenarioClusterPointImapHashLabel.Text = "Hash: 0"; + // + // ScenarioClusterPointImapTextBox + // + this.ScenarioClusterPointImapTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointImapTextBox.Location = new System.Drawing.Point(73, 143); + this.ScenarioClusterPointImapTextBox.Name = "ScenarioClusterPointImapTextBox"; + this.ScenarioClusterPointImapTextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioClusterPointImapTextBox.TabIndex = 21; + this.ScenarioClusterPointImapTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterPointImapTextBox_TextChanged); + // + // label143 + // + this.label143.AutoSize = true; + this.label143.Location = new System.Drawing.Point(34, 146); + this.label143.Name = "label143"; + this.label143.Size = new System.Drawing.Size(33, 13); + this.label143.TabIndex = 20; + this.label143.Text = "Imap:"; + // + // ScenarioClusterPointGroupHashLabel + // + this.ScenarioClusterPointGroupHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointGroupHashLabel.AutoSize = true; + this.ScenarioClusterPointGroupHashLabel.Location = new System.Drawing.Point(382, 123); + this.ScenarioClusterPointGroupHashLabel.Name = "ScenarioClusterPointGroupHashLabel"; + this.ScenarioClusterPointGroupHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioClusterPointGroupHashLabel.TabIndex = 19; + this.ScenarioClusterPointGroupHashLabel.Text = "Hash: 0"; + // + // ScenarioClusterPointGroupTextBox + // + this.ScenarioClusterPointGroupTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointGroupTextBox.Location = new System.Drawing.Point(73, 120); + this.ScenarioClusterPointGroupTextBox.Name = "ScenarioClusterPointGroupTextBox"; + this.ScenarioClusterPointGroupTextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioClusterPointGroupTextBox.TabIndex = 18; + this.ScenarioClusterPointGroupTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterPointGroupTextBox_TextChanged); + // + // label141 + // + this.label141.AutoSize = true; + this.label141.Location = new System.Drawing.Point(28, 123); + this.label141.Name = "label141"; + this.label141.Size = new System.Drawing.Size(39, 13); + this.label141.TabIndex = 17; + this.label141.Text = "Group:"; + // + // ScenarioClusterPointInteriorHashLabel + // + this.ScenarioClusterPointInteriorHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointInteriorHashLabel.AutoSize = true; + this.ScenarioClusterPointInteriorHashLabel.Location = new System.Drawing.Point(382, 100); + this.ScenarioClusterPointInteriorHashLabel.Name = "ScenarioClusterPointInteriorHashLabel"; + this.ScenarioClusterPointInteriorHashLabel.Size = new System.Drawing.Size(44, 13); + this.ScenarioClusterPointInteriorHashLabel.TabIndex = 16; + this.ScenarioClusterPointInteriorHashLabel.Text = "Hash: 0"; + // + // ScenarioClusterPointFlagsCheckedListBox + // + this.ScenarioClusterPointFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointFlagsCheckedListBox.CheckOnClick = true; + this.ScenarioClusterPointFlagsCheckedListBox.FormattingEnabled = true; + this.ScenarioClusterPointFlagsCheckedListBox.Items.AddRange(new object[] { + "1 - IgnoreMaxInRange", + "2 - NoSpawn", + "4 - StationaryReactions", + "8 - Unk", + "16 - Unk", + "32 - ActivateVehicleSiren", + "64 - AggressiveVehicleDriving", + "128 - Unk", + "256 - Unk", + "512 - Unk", + "1024 - AerialVehiclePoint", + "2048 - TerritorialScenario", + "4096 - Unk", + "8192 - Unk", + "16384 - Unk", + "32768 - Unk", + "65536 - InWater", + "131072 - Unk", + "262144 - OpenDoor", + "524288 - PreciseUseTime", + "1048576 - Unk", + "2097152 - Unk", + "4194304 - ExtendedRange", + "8388608 - ShortRange", + "16777216 - HighPriority", + "33554432 - IgnoreLoitering", + "67108864 - UseSearchlight", + "134217728 - ResetNoCollisionOnCleanUp", + "268435456 - Unk", + "536870912 - Unk", + "1073741824 - IgnoreWeatherRestrictions"}); + this.ScenarioClusterPointFlagsCheckedListBox.Location = new System.Drawing.Point(195, 167); + this.ScenarioClusterPointFlagsCheckedListBox.Name = "ScenarioClusterPointFlagsCheckedListBox"; + this.ScenarioClusterPointFlagsCheckedListBox.Size = new System.Drawing.Size(255, 214); + this.ScenarioClusterPointFlagsCheckedListBox.TabIndex = 37; + this.ScenarioClusterPointFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ScenarioClusterPointFlagsCheckedListBox_ItemCheck); + // + // label142 + // + this.label142.AutoSize = true; + this.label142.Location = new System.Drawing.Point(32, 325); + this.label142.Name = "label142"; + this.label142.Size = new System.Drawing.Size(35, 13); + this.label142.TabIndex = 35; + this.label142.Text = "Flags:"; + // + // ScenarioClusterPointDirectionTextBox + // + this.ScenarioClusterPointDirectionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointDirectionTextBox.Location = new System.Drawing.Point(73, 26); + this.ScenarioClusterPointDirectionTextBox.Name = "ScenarioClusterPointDirectionTextBox"; + this.ScenarioClusterPointDirectionTextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioClusterPointDirectionTextBox.TabIndex = 9; + this.ScenarioClusterPointDirectionTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterPointDirectionTextBox_TextChanged); + // + // label144 + // + this.label144.AutoSize = true; + this.label144.Location = new System.Drawing.Point(15, 29); + this.label144.Name = "label144"; + this.label144.Size = new System.Drawing.Size(52, 13); + this.label144.TabIndex = 8; + this.label144.Text = "Direction:"; + // + // ScenarioClusterPointFlagsUpDown + // + this.ScenarioClusterPointFlagsUpDown.Location = new System.Drawing.Point(73, 323); + this.ScenarioClusterPointFlagsUpDown.Maximum = new decimal(new int[] { + -1, + 0, + 0, + 0}); + this.ScenarioClusterPointFlagsUpDown.Name = "ScenarioClusterPointFlagsUpDown"; + this.ScenarioClusterPointFlagsUpDown.Size = new System.Drawing.Size(116, 20); + this.ScenarioClusterPointFlagsUpDown.TabIndex = 36; + this.ScenarioClusterPointFlagsUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointFlagsUpDown_ValueChanged); + // + // label145 + // + this.label145.AutoSize = true; + this.label145.Location = new System.Drawing.Point(13, 299); + this.label145.Name = "label145"; + this.label145.Size = new System.Drawing.Size(54, 13); + this.label145.TabIndex = 33; + this.label145.Text = "Wait time:"; + // + // ScenarioClusterPointGoToButton + // + this.ScenarioClusterPointGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointGoToButton.Location = new System.Drawing.Point(382, 1); + this.ScenarioClusterPointGoToButton.Name = "ScenarioClusterPointGoToButton"; + this.ScenarioClusterPointGoToButton.Size = new System.Drawing.Size(68, 23); + this.ScenarioClusterPointGoToButton.TabIndex = 7; + this.ScenarioClusterPointGoToButton.Text = "Go to"; + this.ScenarioClusterPointGoToButton.UseVisualStyleBackColor = true; + this.ScenarioClusterPointGoToButton.Click += new System.EventHandler(this.ScenarioClusterPointGoToButton_Click); + // + // ScenarioClusterPointWaitTimeUpDown + // + this.ScenarioClusterPointWaitTimeUpDown.Location = new System.Drawing.Point(73, 297); + this.ScenarioClusterPointWaitTimeUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScenarioClusterPointWaitTimeUpDown.Name = "ScenarioClusterPointWaitTimeUpDown"; + this.ScenarioClusterPointWaitTimeUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioClusterPointWaitTimeUpDown.TabIndex = 34; + this.ScenarioClusterPointWaitTimeUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointWaitTimeUpDown_ValueChanged); + // + // ScenarioClusterPointPositionTextBox + // + this.ScenarioClusterPointPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointPositionTextBox.Location = new System.Drawing.Point(73, 3); + this.ScenarioClusterPointPositionTextBox.Name = "ScenarioClusterPointPositionTextBox"; + this.ScenarioClusterPointPositionTextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioClusterPointPositionTextBox.TabIndex = 6; + this.ScenarioClusterPointPositionTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterPointPositionTextBox_TextChanged); + // + // label146 + // + this.label146.AutoSize = true; + this.label146.Location = new System.Drawing.Point(20, 6); + this.label146.Name = "label146"; + this.label146.Size = new System.Drawing.Size(47, 13); + this.label146.TabIndex = 5; + this.label146.Text = "Position:"; + // + // label147 + // + this.label147.AutoSize = true; + this.label147.Location = new System.Drawing.Point(24, 273); + this.label147.Name = "label147"; + this.label147.Size = new System.Drawing.Size(43, 13); + this.label147.TabIndex = 31; + this.label147.Text = "Radius:"; + // + // ScenarioClusterPointRadiusUpDown + // + this.ScenarioClusterPointRadiusUpDown.Location = new System.Drawing.Point(73, 271); + this.ScenarioClusterPointRadiusUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScenarioClusterPointRadiusUpDown.Name = "ScenarioClusterPointRadiusUpDown"; + this.ScenarioClusterPointRadiusUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioClusterPointRadiusUpDown.TabIndex = 32; + this.ScenarioClusterPointRadiusUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointRadiusUpDown_ValueChanged); + // + // label148 + // + this.label148.AutoSize = true; + this.label148.Location = new System.Drawing.Point(3, 247); + this.label148.Name = "label148"; + this.label148.Size = new System.Drawing.Size(64, 13); + this.label148.TabIndex = 29; + this.label148.Text = "SpOnly flag:"; + // + // ScenarioClusterPointSpOnlyFlagUpDown + // + this.ScenarioClusterPointSpOnlyFlagUpDown.Location = new System.Drawing.Point(73, 245); + this.ScenarioClusterPointSpOnlyFlagUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScenarioClusterPointSpOnlyFlagUpDown.Name = "ScenarioClusterPointSpOnlyFlagUpDown"; + this.ScenarioClusterPointSpOnlyFlagUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioClusterPointSpOnlyFlagUpDown.TabIndex = 30; + this.ScenarioClusterPointSpOnlyFlagUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointSpOnlyFlagUpDown_ValueChanged); + // + // label149 + // + this.label149.AutoSize = true; + this.label149.Location = new System.Drawing.Point(9, 221); + this.label149.Name = "label149"; + this.label149.Size = new System.Drawing.Size(58, 13); + this.label149.TabIndex = 27; + this.label149.Text = "Probability:"; + // + // ScenarioClusterPointProbabilityUpDown + // + this.ScenarioClusterPointProbabilityUpDown.Location = new System.Drawing.Point(73, 219); + this.ScenarioClusterPointProbabilityUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScenarioClusterPointProbabilityUpDown.Name = "ScenarioClusterPointProbabilityUpDown"; + this.ScenarioClusterPointProbabilityUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioClusterPointProbabilityUpDown.TabIndex = 28; + this.ScenarioClusterPointProbabilityUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointProbabilityUpDown_ValueChanged); + // + // ScenarioClusterPointInteriorTextBox + // + this.ScenarioClusterPointInteriorTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointInteriorTextBox.Location = new System.Drawing.Point(73, 97); + this.ScenarioClusterPointInteriorTextBox.Name = "ScenarioClusterPointInteriorTextBox"; + this.ScenarioClusterPointInteriorTextBox.Size = new System.Drawing.Size(303, 20); + this.ScenarioClusterPointInteriorTextBox.TabIndex = 15; + this.ScenarioClusterPointInteriorTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterPointInteriorTextBox_TextChanged); + // + // label151 + // + this.label151.AutoSize = true; + this.label151.Location = new System.Drawing.Point(25, 100); + this.label151.Name = "label151"; + this.label151.Size = new System.Drawing.Size(42, 13); + this.label151.TabIndex = 14; + this.label151.Text = "Interior:"; + // + // label152 + // + this.label152.AutoSize = true; + this.label152.Location = new System.Drawing.Point(13, 195); + this.label152.Name = "label152"; + this.label152.Size = new System.Drawing.Size(54, 13); + this.label152.TabIndex = 25; + this.label152.Text = "Time end:"; + // + // ScenarioClusterPointTimeEndUpDown + // + this.ScenarioClusterPointTimeEndUpDown.Location = new System.Drawing.Point(73, 193); + this.ScenarioClusterPointTimeEndUpDown.Maximum = new decimal(new int[] { + 24, + 0, + 0, + 0}); + this.ScenarioClusterPointTimeEndUpDown.Name = "ScenarioClusterPointTimeEndUpDown"; + this.ScenarioClusterPointTimeEndUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioClusterPointTimeEndUpDown.TabIndex = 26; + this.ScenarioClusterPointTimeEndUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointTimeEndUpDown_ValueChanged); + // + // ScenarioClusterPointTimeStartUpDown + // + this.ScenarioClusterPointTimeStartUpDown.Location = new System.Drawing.Point(73, 167); + this.ScenarioClusterPointTimeStartUpDown.Maximum = new decimal(new int[] { + 24, + 0, + 0, + 0}); + this.ScenarioClusterPointTimeStartUpDown.Name = "ScenarioClusterPointTimeStartUpDown"; + this.ScenarioClusterPointTimeStartUpDown.Size = new System.Drawing.Size(57, 20); + this.ScenarioClusterPointTimeStartUpDown.TabIndex = 24; + this.ScenarioClusterPointTimeStartUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointTimeStartUpDown_ValueChanged); + // + // label153 + // + this.label153.AutoSize = true; + this.label153.Location = new System.Drawing.Point(11, 169); + this.label153.Name = "label153"; + this.label153.Size = new System.Drawing.Size(56, 13); + this.label153.TabIndex = 23; + this.label153.Text = "Time start:"; + // + // ScenarioClusterPointModelSetComboBox + // + this.ScenarioClusterPointModelSetComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointModelSetComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioClusterPointModelSetComboBox.FormattingEnabled = true; + this.ScenarioClusterPointModelSetComboBox.Location = new System.Drawing.Point(73, 73); + this.ScenarioClusterPointModelSetComboBox.Name = "ScenarioClusterPointModelSetComboBox"; + this.ScenarioClusterPointModelSetComboBox.Size = new System.Drawing.Size(377, 21); + this.ScenarioClusterPointModelSetComboBox.TabIndex = 13; + this.ScenarioClusterPointModelSetComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioClusterPointModelSetComboBox_SelectedIndexChanged); + // + // label154 + // + this.label154.AutoSize = true; + this.label154.Location = new System.Drawing.Point(9, 76); + this.label154.Name = "label154"; + this.label154.Size = new System.Drawing.Size(58, 13); + this.label154.TabIndex = 12; + this.label154.Text = "Model Set:"; + // + // ScenarioClusterPointTypeComboBox + // + this.ScenarioClusterPointTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioClusterPointTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioClusterPointTypeComboBox.FormattingEnabled = true; + this.ScenarioClusterPointTypeComboBox.Location = new System.Drawing.Point(73, 49); + this.ScenarioClusterPointTypeComboBox.Name = "ScenarioClusterPointTypeComboBox"; + this.ScenarioClusterPointTypeComboBox.Size = new System.Drawing.Size(377, 21); + this.ScenarioClusterPointTypeComboBox.TabIndex = 11; + this.ScenarioClusterPointTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioClusterPointTypeComboBox_SelectedIndexChanged); + // + // label155 + // + this.label155.AutoSize = true; + this.label155.Location = new System.Drawing.Point(33, 52); + this.label155.Name = "label155"; + this.label155.Size = new System.Drawing.Size(34, 13); + this.label155.TabIndex = 10; + this.label155.Text = "Type:"; + // + // EditScenarioNodePanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(562, 450); + this.Controls.Add(this.ScenarioTabControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditScenarioNodePanel"; + this.Text = "Edit Scenario Node"; + this.ScenarioTabControl.ResumeLayout(false); + this.ScenarioPointTabPage.ResumeLayout(false); + this.ScenarioPointOuterPanel.ResumeLayout(false); + this.ScenarioPointPanel.ResumeLayout(false); + this.ScenarioPointPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointFlagsValueUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointWaitTimeUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointRadiusUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointSpOnlyFlagUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointProbabilityUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointTimeEndUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointTimeStartUpDown)).EndInit(); + this.ScenarioEntityTabPage.ResumeLayout(false); + this.ScenarioEntityPanel.ResumeLayout(false); + this.ScenarioEntityPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityUnk2UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityUnk1UpDown)).EndInit(); + this.ScenarioEntityPointTabPage.ResumeLayout(false); + this.ScenarioEntityPointPanel.ResumeLayout(false); + this.ScenarioEntityPointPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointFlagsUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointEndUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointStartUpDown)).EndInit(); + this.ScenarioChainTabPage.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel1.PerformLayout(); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainUnk1UpDown)).EndInit(); + this.ScenarioChainEdgePanel.ResumeLayout(false); + this.ScenarioChainEdgePanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainEdgeNodeIndexToUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainEdgeNodeIndexFromUpDown)).EndInit(); + this.ScenarioChainNodeTabPage.ResumeLayout(false); + this.ScenarioChainNodePanel.ResumeLayout(false); + this.ScenarioChainNodePanel.PerformLayout(); + this.ScenarioClusterTabPage.ResumeLayout(false); + this.ScenarioClusterPanel.ResumeLayout(false); + this.ScenarioClusterPanel.PerformLayout(); + this.ScenarioClusterPointTabPage.ResumeLayout(false); + this.ScenarioClusterPointPanel.ResumeLayout(false); + this.ScenarioClusterPointPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointFlagsUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointWaitTimeUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointRadiusUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointSpOnlyFlagUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointProbabilityUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointTimeEndUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointTimeStartUpDown)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl ScenarioTabControl; + private System.Windows.Forms.TabPage ScenarioPointTabPage; + private System.Windows.Forms.Panel ScenarioPointOuterPanel; + private System.Windows.Forms.Panel ScenarioPointPanel; + private System.Windows.Forms.Label ScenarioPointImapHashLabel; + private System.Windows.Forms.TextBox ScenarioPointImapTextBox; + private System.Windows.Forms.Label label110; + private System.Windows.Forms.Label ScenarioPointGroupHashLabel; + private System.Windows.Forms.TextBox ScenarioPointGroupTextBox; + private System.Windows.Forms.Label label156; + private System.Windows.Forms.Label ScenarioPointInteriorHashLabel; + private System.Windows.Forms.CheckedListBox ScenarioPointFlagsCheckedListBox; + private System.Windows.Forms.Label label111; + private System.Windows.Forms.TextBox ScenarioPointDirectionTextBox; + private System.Windows.Forms.Label label97; + private System.Windows.Forms.NumericUpDown ScenarioPointFlagsValueUpDown; + private System.Windows.Forms.Label label109; + private System.Windows.Forms.Button ScenarioPointGoToButton; + private System.Windows.Forms.NumericUpDown ScenarioPointWaitTimeUpDown; + private System.Windows.Forms.TextBox ScenarioPointPositionTextBox; + private System.Windows.Forms.Label label62; + private System.Windows.Forms.Label label108; + private System.Windows.Forms.NumericUpDown ScenarioPointRadiusUpDown; + private System.Windows.Forms.Label label107; + private System.Windows.Forms.NumericUpDown ScenarioPointSpOnlyFlagUpDown; + private System.Windows.Forms.Label label106; + private System.Windows.Forms.NumericUpDown ScenarioPointProbabilityUpDown; + private System.Windows.Forms.TextBox ScenarioPointInteriorTextBox; + private System.Windows.Forms.Label label102; + private System.Windows.Forms.Label label101; + private System.Windows.Forms.NumericUpDown ScenarioPointTimeEndUpDown; + private System.Windows.Forms.NumericUpDown ScenarioPointTimeStartUpDown; + private System.Windows.Forms.Label label100; + private System.Windows.Forms.ComboBox ScenarioPointModelSetComboBox; + private System.Windows.Forms.Label label99; + private System.Windows.Forms.ComboBox ScenarioPointTypeComboBox; + private System.Windows.Forms.Label label98; + private System.Windows.Forms.Button ScenarioPointDeleteButton; + private System.Windows.Forms.Button ScenarioPointAddToProjectButton; + private System.Windows.Forms.TabPage ScenarioEntityTabPage; + private System.Windows.Forms.Button ScenarioEntityDeleteButton; + private System.Windows.Forms.Panel ScenarioEntityPanel; + private System.Windows.Forms.Label label160; + private System.Windows.Forms.Button ScenarioEntityAddPointButton; + private System.Windows.Forms.Label label161; + private System.Windows.Forms.ListBox ScenarioEntityPointsListBox; + private System.Windows.Forms.Label ScenarioEntityInfoLabel; + private System.Windows.Forms.Label label114; + private System.Windows.Forms.NumericUpDown ScenarioEntityUnk2UpDown; + private System.Windows.Forms.Label label113; + private System.Windows.Forms.NumericUpDown ScenarioEntityUnk1UpDown; + private System.Windows.Forms.Label ScenarioEntityTypeHashLabel; + private System.Windows.Forms.TextBox ScenarioEntityTypeTextBox; + private System.Windows.Forms.Label label112; + private System.Windows.Forms.Button ScenarioEntityGoToButton; + private System.Windows.Forms.TextBox ScenarioEntityPositionTextBox; + private System.Windows.Forms.Label label104; + private System.Windows.Forms.Button ScenarioEntityAddToProjectButton; + private System.Windows.Forms.TabPage ScenarioEntityPointTabPage; + private System.Windows.Forms.Button ScenarioEntityPointDeleteButton; + private System.Windows.Forms.Button ScenarioEntityPointAddToProjectButton; + private System.Windows.Forms.Panel ScenarioEntityPointPanel; + private System.Windows.Forms.Label ScenarioEntityPointNameHashLabel; + private System.Windows.Forms.TextBox ScenarioEntityPointNameTextBox; + private System.Windows.Forms.CheckedListBox ScenarioEntityPointFlagsCheckedListBox; + private System.Windows.Forms.Label label135; + private System.Windows.Forms.NumericUpDown ScenarioEntityPointFlagsUpDown; + private System.Windows.Forms.CheckBox ScenarioEntityPointShortRangeCheckBox; + private System.Windows.Forms.CheckBox ScenarioEntityPointExtendedRangeCheckBox; + private System.Windows.Forms.CheckBox ScenarioEntityPointHighPriCheckBox; + private System.Windows.Forms.Label label133; + private System.Windows.Forms.NumericUpDown ScenarioEntityPointEndUpDown; + private System.Windows.Forms.NumericUpDown ScenarioEntityPointStartUpDown; + private System.Windows.Forms.Label label134; + private System.Windows.Forms.TextBox ScenarioEntityPointRadiusTextBox; + private System.Windows.Forms.Label label132; + private System.Windows.Forms.TextBox ScenarioEntityPointTimeTillPedLeavesTextBox; + private System.Windows.Forms.Label label131; + private System.Windows.Forms.TextBox ScenarioEntityPointProbabilityTextBox; + private System.Windows.Forms.Label label130; + private System.Windows.Forms.ComboBox ScenarioEntityPointAvailableInMpSpComboBox; + private System.Windows.Forms.Label label129; + private System.Windows.Forms.Label ScenarioEntityPointRequiredImapHashLabel; + private System.Windows.Forms.TextBox ScenarioEntityPointRequiredImapTextBox; + private System.Windows.Forms.Label label128; + private System.Windows.Forms.Label ScenarioEntityPointInteriorHashLabel; + private System.Windows.Forms.TextBox ScenarioEntityPointInteriorTextBox; + private System.Windows.Forms.Label label126; + private System.Windows.Forms.Label ScenarioEntityPointGroupHashLabel; + private System.Windows.Forms.TextBox ScenarioEntityPointGroupTextBox; + private System.Windows.Forms.Label label124; + private System.Windows.Forms.Label ScenarioEntityPointPedTypeHashLabel; + private System.Windows.Forms.TextBox ScenarioEntityPointPedTypeTextBox; + private System.Windows.Forms.Label label122; + private System.Windows.Forms.Label ScenarioEntityPointSpawnTypeHashLabel; + private System.Windows.Forms.TextBox ScenarioEntityPointSpawnTypeTextBox; + private System.Windows.Forms.Label label120; + private System.Windows.Forms.TextBox ScenarioEntityPointRotationTextBox; + private System.Windows.Forms.Label label118; + private System.Windows.Forms.Button ScenarioEntityPointGoToButton; + private System.Windows.Forms.TextBox ScenarioEntityPointPositionTextBox; + private System.Windows.Forms.Label label117; + private System.Windows.Forms.Label label116; + private System.Windows.Forms.TabPage ScenarioChainTabPage; + private System.Windows.Forms.Button ScenarioChainDeleteButton; + private System.Windows.Forms.Button ScenarioChainAddToProjectButton; + private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.Button ScenarioChainMoveEdgeDownButton; + private System.Windows.Forms.Button ScenarioChainMoveEdgeUpButton; + private System.Windows.Forms.Label label138; + private System.Windows.Forms.NumericUpDown ScenarioChainUnk1UpDown; + private System.Windows.Forms.Button ScenarioChainRemoveEdgeButton; + private System.Windows.Forms.Button ScenarioChainAddEdgeButton; + private System.Windows.Forms.ListBox ScenarioChainEdgesListBox; + private System.Windows.Forms.Label ScenarioChainEdgeCountLabel; + private System.Windows.Forms.Panel ScenarioChainEdgePanel; + private System.Windows.Forms.ComboBox ScenarioChainEdgeNavSpeedComboBox; + private System.Windows.Forms.Label label137; + private System.Windows.Forms.ComboBox ScenarioChainEdgeNavModeComboBox; + private System.Windows.Forms.Label label136; + private System.Windows.Forms.ComboBox ScenarioChainEdgeActionComboBox; + private System.Windows.Forms.Label label127; + private System.Windows.Forms.NumericUpDown ScenarioChainEdgeNodeIndexToUpDown; + private System.Windows.Forms.NumericUpDown ScenarioChainEdgeNodeIndexFromUpDown; + private System.Windows.Forms.Label label125; + private System.Windows.Forms.Label label121; + private System.Windows.Forms.TabPage ScenarioChainNodeTabPage; + private System.Windows.Forms.Panel ScenarioChainNodePanel; + private System.Windows.Forms.ComboBox ScenarioChainNodeTypeComboBox; + private System.Windows.Forms.TextBox ScenarioChainNodeIndexTextBox; + private System.Windows.Forms.Label label115; + private System.Windows.Forms.CheckBox ScenarioChainNodeLastCheckBox; + private System.Windows.Forms.CheckBox ScenarioChainNodeFirstCheckBox; + private System.Windows.Forms.Label label123; + private System.Windows.Forms.Label ScenarioChainNodeUnk1HashLabel; + private System.Windows.Forms.TextBox ScenarioChainNodeUnk1TextBox; + private System.Windows.Forms.Label label119; + private System.Windows.Forms.Button ScenarioChainNodeGoToButton; + private System.Windows.Forms.TextBox ScenarioChainNodePositionTextBox; + private System.Windows.Forms.Label label105; + private System.Windows.Forms.Button ScenarioChainNodeDeleteButton; + private System.Windows.Forms.Button ScenarioChainNodeAddToProjectButton; + private System.Windows.Forms.TabPage ScenarioClusterTabPage; + private System.Windows.Forms.Button ScenarioClusterDeleteButton; + private System.Windows.Forms.Button ScenarioClusterAddToProjectButton; + private System.Windows.Forms.Panel ScenarioClusterPanel; + private System.Windows.Forms.Label label159; + private System.Windows.Forms.Button ScenarioClusterAddPointButton; + private System.Windows.Forms.Label label158; + private System.Windows.Forms.ListBox ScenarioClusterPointsListBox; + private System.Windows.Forms.TextBox ScenarioClusterRadiusTextBox; + private System.Windows.Forms.Label label157; + private System.Windows.Forms.CheckBox ScenarioClusterUnk2CheckBox; + private System.Windows.Forms.TextBox ScenarioClusterUnk1TextBox; + private System.Windows.Forms.Label label140; + private System.Windows.Forms.Button ScenarioClusterGoToButton; + private System.Windows.Forms.TextBox ScenarioClusterCenterTextBox; + private System.Windows.Forms.Label label139; + private System.Windows.Forms.TabPage ScenarioClusterPointTabPage; + private System.Windows.Forms.Button ScenarioClusterPointDeleteButton; + private System.Windows.Forms.Button ScenarioClusterPointAddToProjectButton; + private System.Windows.Forms.Panel ScenarioClusterPointPanel; + private System.Windows.Forms.Label ScenarioClusterPointImapHashLabel; + private System.Windows.Forms.TextBox ScenarioClusterPointImapTextBox; + private System.Windows.Forms.Label label143; + private System.Windows.Forms.Label ScenarioClusterPointGroupHashLabel; + private System.Windows.Forms.TextBox ScenarioClusterPointGroupTextBox; + private System.Windows.Forms.Label label141; + private System.Windows.Forms.Label ScenarioClusterPointInteriorHashLabel; + private System.Windows.Forms.CheckedListBox ScenarioClusterPointFlagsCheckedListBox; + private System.Windows.Forms.Label label142; + private System.Windows.Forms.TextBox ScenarioClusterPointDirectionTextBox; + private System.Windows.Forms.Label label144; + private System.Windows.Forms.NumericUpDown ScenarioClusterPointFlagsUpDown; + private System.Windows.Forms.Label label145; + private System.Windows.Forms.Button ScenarioClusterPointGoToButton; + private System.Windows.Forms.NumericUpDown ScenarioClusterPointWaitTimeUpDown; + private System.Windows.Forms.TextBox ScenarioClusterPointPositionTextBox; + private System.Windows.Forms.Label label146; + private System.Windows.Forms.Label label147; + private System.Windows.Forms.NumericUpDown ScenarioClusterPointRadiusUpDown; + private System.Windows.Forms.Label label148; + private System.Windows.Forms.NumericUpDown ScenarioClusterPointSpOnlyFlagUpDown; + private System.Windows.Forms.Label label149; + private System.Windows.Forms.NumericUpDown ScenarioClusterPointProbabilityUpDown; + private System.Windows.Forms.TextBox ScenarioClusterPointInteriorTextBox; + private System.Windows.Forms.Label label151; + private System.Windows.Forms.Label label152; + private System.Windows.Forms.NumericUpDown ScenarioClusterPointTimeEndUpDown; + private System.Windows.Forms.NumericUpDown ScenarioClusterPointTimeStartUpDown; + private System.Windows.Forms.Label label153; + private System.Windows.Forms.ComboBox ScenarioClusterPointModelSetComboBox; + private System.Windows.Forms.Label label154; + private System.Windows.Forms.ComboBox ScenarioClusterPointTypeComboBox; + private System.Windows.Forms.Label label155; + } +} \ No newline at end of file diff --git a/Project/Panels/EditScenarioNodePanel.cs b/Project/Panels/EditScenarioNodePanel.cs new file mode 100644 index 0000000..2952a36 --- /dev/null +++ b/Project/Panels/EditScenarioNodePanel.cs @@ -0,0 +1,2401 @@ +using CodeWalker.GameFiles; +using CodeWalker.World; +using SharpDX; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditScenarioNodePanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public ScenarioNode CurrentScenarioNode { get; set; } + public YmtFile CurrentScenario { get; set; } + public MCScenarioChainingEdge CurrentScenarioChainEdge { get; set; } + + private bool populatingui = false; + + public EditScenarioNodePanel(ProjectForm2 projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + } + + public void SetScenarioNode(ScenarioNode node) + { + CurrentScenarioNode = node; + CurrentScenario = node?.Ymt; + Tag = node; + UpdateFormTitle(); + UpdateScenarioNodeUI(); + } + + private void UpdateFormTitle() + { + var sn = CurrentScenarioNode.ToString(); + Text = sn; + } + + public void UpdateScenarioNodeUI() + { + populatingui = true; + + LoadScenarioDropDowns(); + + LoadScenarioPointTabPage(); + LoadScenarioEntityTabPage(); + LoadScenarioEntityPointTabPage(); + LoadScenarioChainTabPage(); + LoadScenarioChainEdgeTabPage(); + LoadScenarioChainNodeTabPage(); + LoadScenarioClusterTabPage(); + LoadScenarioClusterPointTabPage(); + populatingui = false; + + UpdateTabVisibility(); + + if (CurrentScenarioNode != null) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SelectScenarioNode(CurrentScenarioNode); + } + } + } + + private void UpdateTabVisibility() + { + + + //avoid resetting the tabs if no change is necessary. + bool ok = true; + bool pointTabVis = false; + bool entTabVis = false; + bool entPntTabVis = false; + bool chainTabVis = false; + bool chainNodeTabVis = false; + bool clusterTabVis = false; + bool clusterNodeTabVis = false; + foreach (var tab in ScenarioTabControl.TabPages) + { + if (tab == ScenarioPointTabPage) pointTabVis = true; + if (tab == ScenarioEntityTabPage) entTabVis = true; + if (tab == ScenarioEntityPointTabPage) entPntTabVis = true; + if (tab == ScenarioChainTabPage) chainTabVis = true; + if (tab == ScenarioChainNodeTabPage) chainNodeTabVis = true; + if (tab == ScenarioClusterTabPage) clusterTabVis = true; + if (tab == ScenarioClusterPointTabPage) clusterNodeTabVis = true; + } + + if ((CurrentScenarioNode?.MyPoint != null) != pointTabVis) ok = false; + if ((CurrentScenarioNode?.Entity != null) != entTabVis) ok = false; + if ((CurrentScenarioNode?.EntityPoint != null) != entPntTabVis) ok = false; + if ((CurrentScenarioNode?.ChainingNode != null) != chainTabVis) ok = false; + if ((CurrentScenarioNode?.ChainingNode != null) != chainNodeTabVis) ok = false; + if ((CurrentScenarioNode?.Cluster != null) != clusterTabVis) ok = false; + if ((CurrentScenarioNode?.ClusterMyPoint != null) != clusterNodeTabVis) ok = false; + if (ok) return; + + var seltab = ScenarioTabControl.SelectedTab; + + ScenarioTabControl.TabPages.Clear(); + + if (CurrentScenarioNode?.MyPoint != null) ScenarioTabControl.TabPages.Add(ScenarioPointTabPage); + if (CurrentScenarioNode?.Entity != null) ScenarioTabControl.TabPages.Add(ScenarioEntityTabPage); + if (CurrentScenarioNode?.EntityPoint != null) ScenarioTabControl.TabPages.Add(ScenarioEntityPointTabPage); + if (CurrentScenarioNode?.ChainingNode != null) ScenarioTabControl.TabPages.Add(ScenarioChainTabPage); + if (CurrentScenarioNode?.ChainingNode != null) ScenarioTabControl.TabPages.Add(ScenarioChainNodeTabPage); + if (CurrentScenarioNode?.Cluster != null) ScenarioTabControl.TabPages.Add(ScenarioClusterTabPage); + if (CurrentScenarioNode?.ClusterMyPoint != null) ScenarioTabControl.TabPages.Add(ScenarioClusterPointTabPage); + + if (ScenarioTabControl.TabPages.Contains(seltab)) + { + ScenarioTabControl.SelectedTab = seltab; + } + } + + + private void LoadScenarioDropDowns() + { + if (ScenarioPointTypeComboBox.Items.Count > 0) return; + + var types = Scenarios.ScenarioTypes; //these are loaded by Scenarios.Init + if (types == null) + { return; } + + var stypes = types.GetScenarioTypes(); + if (stypes == null) return; + + var pmsets = types.GetPedModelSets(); + if (pmsets == null) return; + + var vmsets = types.GetVehicleModelSets(); + if (vmsets == null) return; + + ScenarioPointTypeComboBox.Items.Clear(); + ScenarioPointTypeComboBox.Items.Add(""); + ScenarioClusterPointTypeComboBox.Items.Clear(); + ScenarioClusterPointTypeComboBox.Items.Add(""); + ScenarioChainNodeTypeComboBox.Items.Clear(); + ScenarioChainNodeTypeComboBox.Items.Add(""); + foreach (var stype in stypes) + { + ScenarioPointTypeComboBox.Items.Add(stype); + ScenarioClusterPointTypeComboBox.Items.Add(stype); + ScenarioChainNodeTypeComboBox.Items.Add(stype); + } + + ScenarioPointModelSetComboBox.Items.Clear(); + ScenarioPointModelSetComboBox.Items.Add(""); + ScenarioClusterPointModelSetComboBox.Items.Clear(); + ScenarioClusterPointModelSetComboBox.Items.Add(""); + foreach (var pmset in pmsets) + { + ScenarioPointModelSetComboBox.Items.Add(pmset); + ScenarioClusterPointModelSetComboBox.Items.Add(pmset); + } + foreach (var vmset in vmsets) + { + ScenarioPointModelSetComboBox.Items.Add(vmset); + ScenarioClusterPointModelSetComboBox.Items.Add(vmset); + } + + + ScenarioEntityPointAvailableInMpSpComboBox.Items.Clear(); + ScenarioEntityPointAvailableInMpSpComboBox.Items.Add(Unk_3573596290.kBoth); + ScenarioEntityPointAvailableInMpSpComboBox.Items.Add(Unk_3573596290.kOnlySp); + ScenarioEntityPointAvailableInMpSpComboBox.Items.Add(Unk_3573596290.kOnlyMp); + + + ScenarioChainEdgeActionComboBox.Items.Clear(); + ScenarioChainEdgeActionComboBox.Items.Add(Unk_3609807418.Move); + ScenarioChainEdgeActionComboBox.Items.Add(Unk_3609807418.Unk_7865678); + ScenarioChainEdgeActionComboBox.Items.Add(Unk_3609807418.MoveFollowMaster); + + ScenarioChainEdgeNavModeComboBox.Items.Clear(); + ScenarioChainEdgeNavModeComboBox.Items.Add(Unk_3971773454.Direct); + ScenarioChainEdgeNavModeComboBox.Items.Add(Unk_3971773454.NavMesh); + ScenarioChainEdgeNavModeComboBox.Items.Add(Unk_3971773454.Roads); + + ScenarioChainEdgeNavSpeedComboBox.Items.Clear(); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_00_3279574318); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_01_2212923970); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_02_4022799658); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_03_1425672334); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_04_957720931); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_05_3795195414); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_06_2834622009); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_07_1876554076); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_08_698543797); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_09_1544199634); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_10_2725613303); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_11_4033265820); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_12_3054809929); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_13_3911005380); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_14_3717649022); + ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_15_3356026130); + + } + + private void LoadScenarioPointTabPage() + { + var p = CurrentScenarioNode?.MyPoint; + if (p == null) + { + //ScenarioPointPanel.Enabled = false; + //ScenarioPointCheckBox.Checked = false; + ScenarioPointAddToProjectButton.Enabled = false; + ScenarioPointDeleteButton.Enabled = false; + ScenarioPointPositionTextBox.Text = ""; + ScenarioPointDirectionTextBox.Text = ""; + ScenarioPointTypeComboBox.SelectedItem = null; + ScenarioPointModelSetComboBox.SelectedItem = null; + ScenarioPointInteriorTextBox.Text = ""; + ScenarioPointInteriorHashLabel.Text = "Hash: 0"; + ScenarioPointGroupTextBox.Text = ""; + ScenarioPointGroupHashLabel.Text = "Hash: 0"; + ScenarioPointImapTextBox.Text = ""; + ScenarioPointImapHashLabel.Text = "Hash: 0"; + ScenarioPointTimeStartUpDown.Value = 0; + ScenarioPointTimeEndUpDown.Value = 0; + ScenarioPointProbabilityUpDown.Value = 0; + ScenarioPointSpOnlyFlagUpDown.Value = 0; + ScenarioPointRadiusUpDown.Value = 0; + ScenarioPointWaitTimeUpDown.Value = 0; + ScenarioPointFlagsValueUpDown.Value = 0; + foreach (int i in ScenarioPointFlagsCheckedListBox.CheckedIndices) + { + ScenarioPointFlagsCheckedListBox.SetItemCheckState(i, CheckState.Unchecked); + } + } + else + { + //ScenarioPointPanel.Enabled = true; + //ScenarioPointCheckBox.Checked = true; + ScenarioPointDeleteButton.Enabled = ProjectForm.ScenarioExistsInProject(CurrentScenario); + ScenarioPointAddToProjectButton.Enabled = !ScenarioPointDeleteButton.Enabled; + ScenarioPointPositionTextBox.Text = FloatUtil.GetVector3String(p.Position); + ScenarioPointDirectionTextBox.Text = FloatUtil.ToString(p.Direction); + ScenarioPointTypeComboBox.SelectedItem = ((object)p.Type) ?? ""; + ScenarioPointModelSetComboBox.SelectedItem = ((object)p.ModelSet) ?? ""; + ScenarioPointInteriorTextBox.Text = p.InteriorName.ToString(); + ScenarioPointInteriorHashLabel.Text = "Hash: " + p.InteriorName.Hash.ToString(); + ScenarioPointGroupTextBox.Text = p.GroupName.ToString(); + ScenarioPointGroupHashLabel.Text = "Hash: " + p.GroupName.Hash.ToString(); + ScenarioPointImapTextBox.Text = p.IMapName.ToString(); + ScenarioPointImapHashLabel.Text = "Hash: " + p.IMapName.Hash.ToString(); + ScenarioPointTimeStartUpDown.Value = p.TimeStart; + ScenarioPointTimeEndUpDown.Value = p.TimeEnd; + ScenarioPointProbabilityUpDown.Value = p.Probability; + ScenarioPointSpOnlyFlagUpDown.Value = p.AvailableMpSp; + ScenarioPointRadiusUpDown.Value = p.Radius; + ScenarioPointWaitTimeUpDown.Value = p.WaitTime; + var iflags = (int)p.Flags; + ScenarioPointFlagsValueUpDown.Value = iflags; + for (int i = 0; i < ScenarioPointFlagsCheckedListBox.Items.Count; i++) + { + var c = ((iflags & (1 << i)) > 0); + ScenarioPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); + } + } + } + + private void LoadScenarioEntityTabPage() + { + var e = CurrentScenarioNode?.Entity; + if (e == null) + { + //ScenarioEntityPanel.Enabled = false; + //ScenarioEntityCheckBox.Checked = false; + ScenarioEntityAddToProjectButton.Enabled = false; + ScenarioEntityDeleteButton.Enabled = false; + ScenarioEntityPositionTextBox.Text = ""; + ScenarioEntityTypeTextBox.Text = ""; + ScenarioEntityTypeHashLabel.Text = "Hash: 0"; + ScenarioEntityUnk1UpDown.Value = 0; + ScenarioEntityUnk2UpDown.Value = 0; + ScenarioEntityInfoLabel.Text = "0 override points"; + ScenarioEntityPointsListBox.Items.Clear(); + ScenarioEntityAddPointButton.Enabled = false; + } + else + { + //ScenarioEntityPanel.Enabled = true; + //ScenarioEntityCheckBox.Checked = true; + ScenarioEntityDeleteButton.Enabled = ProjectForm.ScenarioExistsInProject(CurrentScenario); + ScenarioEntityAddToProjectButton.Enabled = !ScenarioEntityDeleteButton.Enabled; + ScenarioEntityPositionTextBox.Text = FloatUtil.GetVector3String(e.Position); + ScenarioEntityTypeTextBox.Text = e.TypeName.ToString(); + ScenarioEntityTypeHashLabel.Text = "Hash: " + e.TypeName.Hash.ToString(); + ScenarioEntityUnk1UpDown.Value = e.Unk1; + ScenarioEntityUnk2UpDown.Value = e.Unk2; + var pc = e.ScenarioPoints?.Length ?? 0; + ScenarioEntityInfoLabel.Text = pc.ToString() + " override point" + ((pc != 1) ? "s" : ""); + ScenarioEntityPointsListBox.Items.Clear(); + ScenarioEntityAddPointButton.Enabled = true; + + if (e.ScenarioPoints != null) + { + foreach (var point in e.ScenarioPoints) + { + ScenarioEntityPointsListBox.Items.Add(point); + } + if (CurrentScenarioNode.EntityPoint != null) + { + ScenarioEntityPointsListBox.SelectedItem = CurrentScenarioNode.EntityPoint; + } + } + } + } + + private void LoadScenarioEntityPointTabPage() + { + var p = CurrentScenarioNode?.EntityPoint; + if (p == null) + { + //ScenarioEntityPointPanel.Enabled = false; + //ScenarioEntityPointCheckBox.Checked = false; + ScenarioEntityPointAddToProjectButton.Enabled = false; + ScenarioEntityPointDeleteButton.Enabled = false; + ScenarioEntityPointNameTextBox.Text = ""; + ScenarioEntityPointNameHashLabel.Text = "Hash: 0"; + ScenarioEntityPointPositionTextBox.Text = ""; + ScenarioEntityPointRotationTextBox.Text = ""; + ScenarioEntityPointSpawnTypeTextBox.Text = ""; + ScenarioEntityPointSpawnTypeHashLabel.Text = "Hash: 0"; + ScenarioEntityPointPedTypeTextBox.Text = ""; + ScenarioEntityPointPedTypeHashLabel.Text = "Hash: 0"; + ScenarioEntityPointGroupTextBox.Text = ""; + ScenarioEntityPointGroupHashLabel.Text = "Hash: 0"; + ScenarioEntityPointInteriorTextBox.Text = ""; + ScenarioEntityPointInteriorHashLabel.Text = "Hash: 0"; + ScenarioEntityPointRequiredImapTextBox.Text = ""; + ScenarioEntityPointRequiredImapHashLabel.Text = "Hash: 0"; + ScenarioEntityPointAvailableInMpSpComboBox.SelectedItem = null; + ScenarioEntityPointProbabilityTextBox.Text = ""; + ScenarioEntityPointTimeTillPedLeavesTextBox.Text = ""; + ScenarioEntityPointRadiusTextBox.Text = ""; + ScenarioEntityPointStartUpDown.Value = 0; + ScenarioEntityPointEndUpDown.Value = 0; + ScenarioEntityPointExtendedRangeCheckBox.Checked = false; + ScenarioEntityPointShortRangeCheckBox.Checked = false; + ScenarioEntityPointHighPriCheckBox.Checked = false; + ScenarioEntityPointFlagsUpDown.Value = 0; + foreach (int i in ScenarioEntityPointFlagsCheckedListBox.CheckedIndices) + { + ScenarioEntityPointFlagsCheckedListBox.SetItemCheckState(i, CheckState.Unchecked); + } + } + else + { + //ScenarioEntityPointPanel.Enabled = true; + //ScenarioEntityPointCheckBox.Checked = true; + ScenarioEntityPointDeleteButton.Enabled = ProjectForm.ScenarioExistsInProject(CurrentScenario); + ScenarioEntityPointAddToProjectButton.Enabled = !ScenarioEntityPointDeleteButton.Enabled; + ScenarioEntityPointNameTextBox.Text = p.NameHash.ToString(); + ScenarioEntityPointNameHashLabel.Text = "Hash: " + p.NameHash.Hash.ToString(); + ScenarioEntityPointPositionTextBox.Text = FloatUtil.GetVector3String(p.OffsetPosition); + ScenarioEntityPointRotationTextBox.Text = FloatUtil.GetVector4String(p.OffsetRotation); + ScenarioEntityPointSpawnTypeTextBox.Text = p.SpawnType.ToString(); + ScenarioEntityPointSpawnTypeHashLabel.Text = "Hash: " + p.SpawnType.Hash.ToString(); + ScenarioEntityPointPedTypeTextBox.Text = p.PedType.ToString(); + ScenarioEntityPointPedTypeHashLabel.Text = "Hash: " + p.PedType.Hash.ToString(); + ScenarioEntityPointGroupTextBox.Text = p.Group.ToString(); + ScenarioEntityPointGroupHashLabel.Text = "Hash: " + p.Group.Hash.ToString(); + ScenarioEntityPointInteriorTextBox.Text = p.Interior.ToString(); + ScenarioEntityPointInteriorHashLabel.Text = "Hash: " + p.Interior.Hash.ToString(); + ScenarioEntityPointRequiredImapTextBox.Text = p.RequiredImap.ToString(); + ScenarioEntityPointRequiredImapHashLabel.Text = "Hash: " + p.RequiredImap.Hash.ToString(); + ScenarioEntityPointAvailableInMpSpComboBox.SelectedItem = p.AvailableInMpSp; + ScenarioEntityPointProbabilityTextBox.Text = FloatUtil.ToString(p.Probability); + ScenarioEntityPointTimeTillPedLeavesTextBox.Text = FloatUtil.ToString(p.TimeTillPedLeaves); + ScenarioEntityPointRadiusTextBox.Text = FloatUtil.ToString(p.Radius); + ScenarioEntityPointStartUpDown.Value = p.StartTime; + ScenarioEntityPointEndUpDown.Value = p.EndTime; + ScenarioEntityPointExtendedRangeCheckBox.Checked = p.ExtendedRange; + ScenarioEntityPointShortRangeCheckBox.Checked = p.ShortRange; + ScenarioEntityPointHighPriCheckBox.Checked = p.HighPri; + var iflags = (int)p.Flags; + ScenarioEntityPointFlagsUpDown.Value = 0; + for (int i = 0; i < ScenarioEntityPointFlagsCheckedListBox.Items.Count; i++) + { + var c = ((iflags & (1 << i)) > 0); + ScenarioEntityPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); + } + + } + } + + private void LoadScenarioChainTabPage() + { + CurrentScenarioChainEdge = null; + ProjectForm.SetScenarioChainEdge(CurrentScenarioChainEdge); + + var n = CurrentScenarioNode?.ChainingNode; + if (n == null) + { + ScenarioChainAddToProjectButton.Enabled = false; + ScenarioChainDeleteButton.Enabled = false; + ScenarioChainEdgesListBox.Items.Clear(); + ScenarioChainEdgeCountLabel.Text = "Edge Count: 0"; + ScenarioChainUnk1UpDown.Value = 0; + } + else + { + ScenarioChainDeleteButton.Enabled = ScenarioChainNodeDeleteButton.Enabled;// ScenarioExistsInProject(CurrentScenario); + ScenarioChainAddToProjectButton.Enabled = !ScenarioChainDeleteButton.Enabled; + ScenarioChainEdgesListBox.Items.Clear(); + ScenarioChainEdgeCountLabel.Text = "Edge Count: " + (n.Chain?.EdgeIds?.Length ?? 0).ToString(); + ScenarioChainUnk1UpDown.Value = n.Chain?.Unk1 ?? 0; + + if ((n.Chain != null) && (n.Chain.Edges != null)) + { + foreach (var edge in n.Chain.Edges) + { + ScenarioChainEdgesListBox.Items.Add(edge); + } + } + else + { } + } + } + + private void LoadScenarioChainEdgeTabPage() + { + var e = CurrentScenarioChainEdge; + if (e == null) + { + ScenarioChainEdgePanel.Enabled = false; + ScenarioChainEdgeNodeIndexFromUpDown.Value = 0; + ScenarioChainEdgeNodeIndexToUpDown.Value = 0; + ScenarioChainEdgeActionComboBox.SelectedItem = null; + ScenarioChainEdgeNavModeComboBox.SelectedItem = null; + ScenarioChainEdgeNavSpeedComboBox.SelectedItem = null; + ScenarioChainMoveEdgeDownButton.Enabled = false; + ScenarioChainMoveEdgeUpButton.Enabled = false; + } + else + { + ScenarioChainEdgePanel.Enabled = true; + ScenarioChainEdgeNodeIndexFromUpDown.Value = e.NodeIndexFrom; + ScenarioChainEdgeNodeIndexToUpDown.Value = e.NodeIndexTo; + ScenarioChainEdgeActionComboBox.SelectedItem = e.Action; + ScenarioChainEdgeNavModeComboBox.SelectedItem = e.NavMode; + ScenarioChainEdgeNavSpeedComboBox.SelectedItem = e.NavSpeed; + ScenarioChainMoveEdgeDownButton.Enabled = true; + ScenarioChainMoveEdgeUpButton.Enabled = true; + + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SelectScenarioEdge(CurrentScenarioNode, e); + } + } + } + + private void LoadScenarioChainNodeTabPage() + { + var n = CurrentScenarioNode?.ChainingNode; + if (n == null) + { + //ScenarioChainNodePanel.Enabled = false; + //ScenarioChainNodeCheckBox.Checked = false; + ScenarioChainNodeAddToProjectButton.Enabled = false; + ScenarioChainNodeDeleteButton.Enabled = false; + ScenarioChainNodePositionTextBox.Text = ""; + ScenarioChainNodeUnk1TextBox.Text = ""; + ScenarioChainNodeUnk1HashLabel.Text = "Hash: 0"; + ScenarioChainNodeTypeComboBox.SelectedItem = null; + ScenarioChainNodeFirstCheckBox.Checked = false; + ScenarioChainNodeLastCheckBox.Checked = false; + ScenarioChainNodeIndexTextBox.Text = ""; + } + else + { + //ScenarioChainNodePanel.Enabled = true; + //ScenarioChainNodeCheckBox.Checked = true; + ScenarioChainNodeDeleteButton.Enabled = ProjectForm.ScenarioExistsInProject(CurrentScenario); + ScenarioChainNodeAddToProjectButton.Enabled = !ScenarioChainNodeDeleteButton.Enabled; + ScenarioChainNodePositionTextBox.Text = FloatUtil.GetVector3String(n.Position); + ScenarioChainNodeUnk1TextBox.Text = n.Unk1.ToString(); + ScenarioChainNodeUnk1HashLabel.Text = "Hash: " + n.Unk1.Hash.ToString(); + ScenarioChainNodeTypeComboBox.SelectedItem = ((object)n.Type) ?? ""; + ScenarioChainNodeFirstCheckBox.Checked = !n.NotFirst; + ScenarioChainNodeLastCheckBox.Checked = !n.NotLast; + ScenarioChainNodeIndexTextBox.Text = n.NodeIndex.ToString(); + } + } + + private void LoadScenarioClusterTabPage() + { + var c = CurrentScenarioNode?.Cluster; + if (c == null) + { + //ScenarioClusterPanel.Enabled = false; + //ScenarioClusterCheckBox.Checked = false; + ScenarioClusterAddToProjectButton.Enabled = false; + ScenarioClusterDeleteButton.Enabled = false; + ScenarioClusterCenterTextBox.Text = ""; + ScenarioClusterRadiusTextBox.Text = ""; + ScenarioClusterUnk1TextBox.Text = ""; + ScenarioClusterUnk2CheckBox.Checked = false; + ScenarioClusterPointsListBox.Items.Clear(); + ScenarioClusterAddPointButton.Enabled = false; + } + else + { + //ScenarioClusterPanel.Enabled = true; + //ScenarioClusterCheckBox.Checked = true; + ScenarioClusterDeleteButton.Enabled = ProjectForm.ScenarioExistsInProject(CurrentScenario); + ScenarioClusterAddToProjectButton.Enabled = !ScenarioClusterDeleteButton.Enabled; + ScenarioClusterCenterTextBox.Text = FloatUtil.GetVector3String(c.Position); + ScenarioClusterRadiusTextBox.Text = FloatUtil.ToString(c.Radius); + ScenarioClusterUnk1TextBox.Text = FloatUtil.ToString(c.Unk1); + ScenarioClusterUnk2CheckBox.Checked = c.Unk2; + ScenarioClusterPointsListBox.Items.Clear(); + ScenarioClusterAddPointButton.Enabled = true; + + if (c.Points != null) + { + if (c.Points.MyPoints != null) + { + foreach (var point in c.Points.MyPoints) + { + ScenarioClusterPointsListBox.Items.Add(point); + } + if (CurrentScenarioNode.ClusterMyPoint != null) + { + ScenarioClusterPointsListBox.SelectedItem = CurrentScenarioNode.ClusterMyPoint; + } + } + if (c.Points.LoadSavePoints != null) + { + foreach (var point in c.Points.LoadSavePoints) + { + ScenarioClusterPointsListBox.Items.Add(point); + } + if (CurrentScenarioNode.ClusterLoadSavePoint != null) + { + ScenarioClusterPointsListBox.SelectedItem = CurrentScenarioNode.ClusterLoadSavePoint; + } + } + } + + } + } + + private void LoadScenarioClusterPointTabPage() + { + var p = CurrentScenarioNode?.ClusterMyPoint; + if (p == null) + { + //ScenarioClusterPointPanel.Enabled = false; + //ScenarioClusterPointCheckBox.Checked = false; + ScenarioClusterPointAddToProjectButton.Enabled = false; + ScenarioClusterPointDeleteButton.Enabled = false; + ScenarioClusterPointPositionTextBox.Text = ""; + ScenarioClusterPointDirectionTextBox.Text = ""; + ScenarioClusterPointTypeComboBox.SelectedItem = null; + ScenarioClusterPointModelSetComboBox.SelectedItem = null; + ScenarioClusterPointInteriorTextBox.Text = ""; + ScenarioClusterPointInteriorHashLabel.Text = "Hash: 0"; + ScenarioClusterPointGroupTextBox.Text = ""; + ScenarioClusterPointGroupHashLabel.Text = "Hash: 0"; + ScenarioClusterPointImapTextBox.Text = ""; + ScenarioClusterPointImapHashLabel.Text = "Hash: 0"; + ScenarioClusterPointTimeStartUpDown.Value = 0; + ScenarioClusterPointTimeEndUpDown.Value = 0; + ScenarioClusterPointProbabilityUpDown.Value = 0; + ScenarioClusterPointSpOnlyFlagUpDown.Value = 0; + ScenarioClusterPointRadiusUpDown.Value = 0; + ScenarioClusterPointWaitTimeUpDown.Value = 0; + ScenarioClusterPointFlagsUpDown.Value = 0; + foreach (int i in ScenarioClusterPointFlagsCheckedListBox.CheckedIndices) + { + ScenarioClusterPointFlagsCheckedListBox.SetItemCheckState(i, CheckState.Unchecked); + } + } + else + { + //ScenarioClusterPointPanel.Enabled = true; + //ScenarioClusterPointCheckBox.Checked = true; + ScenarioClusterPointDeleteButton.Enabled = ProjectForm.ScenarioExistsInProject(CurrentScenario); + ScenarioClusterPointAddToProjectButton.Enabled = !ScenarioClusterPointDeleteButton.Enabled; + ScenarioClusterPointPositionTextBox.Text = FloatUtil.GetVector3String(p.Position); + ScenarioClusterPointDirectionTextBox.Text = FloatUtil.ToString(p.Direction); + ScenarioClusterPointTypeComboBox.SelectedItem = ((object)p.Type) ?? ""; + ScenarioClusterPointModelSetComboBox.SelectedItem = ((object)p.ModelSet) ?? ""; + ScenarioClusterPointInteriorTextBox.Text = p.InteriorName.ToString(); + ScenarioClusterPointInteriorHashLabel.Text = "Hash: " + p.InteriorName.Hash.ToString(); + ScenarioClusterPointGroupTextBox.Text = p.GroupName.ToString(); + ScenarioClusterPointGroupHashLabel.Text = "Hash: " + p.GroupName.Hash.ToString(); + ScenarioClusterPointImapTextBox.Text = p.IMapName.ToString(); + ScenarioClusterPointImapHashLabel.Text = "Hash: " + p.IMapName.Hash.ToString(); + ScenarioClusterPointTimeStartUpDown.Value = p.TimeStart; + ScenarioClusterPointTimeEndUpDown.Value = p.TimeEnd; + ScenarioClusterPointProbabilityUpDown.Value = p.Probability; + ScenarioClusterPointSpOnlyFlagUpDown.Value = p.AvailableMpSp; + ScenarioClusterPointRadiusUpDown.Value = p.Radius; + ScenarioClusterPointWaitTimeUpDown.Value = p.WaitTime; + var iflags = (int)p.Flags; + ScenarioClusterPointFlagsUpDown.Value = iflags; + for (int i = 0; i < ScenarioClusterPointFlagsCheckedListBox.Items.Count; i++) + { + var c = ((iflags & (1 << i)) > 0); + ScenarioClusterPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); + } + } + } + + + + + + + + + + private void AddScenarioChainEdge() + { + var chain = CurrentScenarioNode?.ChainingNode?.Chain; + if (chain == null) return; + var paths = CurrentScenario?.CScenarioPointRegion?.Paths; + if (paths == null) return; + + MCScenarioChainingEdge edge = new MCScenarioChainingEdge(); + if (CurrentScenarioChainEdge != null) + { + edge.Data = CurrentScenarioChainEdge.Data; + } + + paths.AddEdge(edge); + chain.AddEdge(edge); + + CurrentScenarioChainEdge = edge; + ProjectForm.SetScenarioChainEdge(CurrentScenarioChainEdge); + + UpdateScenarioChainEdgeLinkage(); + + LoadScenarioChainTabPage(); + + ScenarioChainEdgesListBox.SelectedItem = edge; + } + + private void RemoveScenarioChainEdge() + { + if (CurrentScenarioChainEdge == null) return; + if (CurrentScenario == null) return; + + var chain = CurrentScenarioNode?.ChainingNode?.Chain; + if (chain == null) return; + var paths = CurrentScenario?.CScenarioPointRegion?.Paths; + if (paths == null) return; + + if (MessageBox.Show("Are you sure you want to delete this scenario chain edge?\n" + CurrentScenarioChainEdge.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + chain.RemoveEdge(CurrentScenarioChainEdge); + paths.RemoveEdge(CurrentScenarioChainEdge); + + LoadScenarioChainTabPage(); + + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + ProjectForm.WorldForm.SelectScenarioEdge(CurrentScenarioNode, null); + } + } + + private void MoveScenarioChainEdge(bool moveDown) + { + + var chain = CurrentScenarioNode?.ChainingNode?.Chain; + if (chain == null) return; + if (chain.Edges == null) return; + if (chain.EdgeIds == null) return; + + if (CurrentScenarioChainEdge == null) return; + + var edges = CurrentScenario?.CScenarioPointRegion?.Paths?.Edges; + if (edges == null) return; + + + int lasti = (chain.Edges?.Length ?? 0) - 1; + + var edgeid = 0; + for (int i = 0; i < chain.Edges.Length; i++) + { + if (chain.Edges[i] == CurrentScenarioChainEdge) + { + edgeid = i; + break; + } + } + + if (!moveDown && (edgeid <= 0)) return; + if (moveDown && (edgeid >= lasti)) return; + + var swapid = edgeid + (moveDown ? 1 : -1); + var swaped = chain.Edges[swapid]; + + chain.Edges[swapid] = CurrentScenarioChainEdge; + chain.EdgeIds[swapid] = (ushort)CurrentScenarioChainEdge.EdgeIndex; + chain.Edges[edgeid] = swaped; + chain.EdgeIds[edgeid] = (ushort)swapid; + + var ce = CurrentScenarioChainEdge; + + LoadScenarioChainTabPage(); + + CurrentScenarioChainEdge = ce; + ProjectForm.SetScenarioChainEdge(CurrentScenarioChainEdge); + + ScenarioChainEdgesListBox.SelectedItem = ce; + + //LoadScenarioChainEdgeTabPage(); + + } + + private void UpdateScenarioChainEdgeLinkage() + { + if (CurrentScenarioChainEdge == null) return; + if (CurrentScenario == null) return; + + + var chains = CurrentScenario?.CScenarioPointRegion?.Paths; + if (chains == null) return; + + var nodes = chains.Nodes; + if (nodes == null) return; + + ushort nifrom = CurrentScenarioChainEdge.NodeIndexFrom; + ushort nito = CurrentScenarioChainEdge.NodeIndexTo; + + if (nifrom < nodes.Length) CurrentScenarioChainEdge.NodeFrom = nodes[nifrom]; + if (nito < nodes.Length) CurrentScenarioChainEdge.NodeTo = nodes[nito]; + + ////need to rebuild the link verts.. updating the graphics should do it... + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + } + + + + + + + + + + + private void ScenarioPointAddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.AddScenarioToProject(CurrentScenario); + } + + private void ScenarioPointDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentScenarioNode); + ProjectForm.DeleteScenarioNode(); + } + + private void ScenarioPointGoToButton_Click(object sender, EventArgs e) + { + if (CurrentScenarioNode == null) return; + if (ProjectForm.WorldForm == null) return; + ProjectForm.WorldForm.GoToPosition(CurrentScenarioNode.Position); + } + + private void ScenarioPointPositionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + Vector3 v = FloatUtil.ParseVector3String(ScenarioPointPositionTextBox.Text); + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.Position != v) + { + CurrentScenarioNode.SetPosition(v); + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); + ProjectForm.WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + } + } + + private void ScenarioPointDirectionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + float dir = FloatUtil.Parse(ScenarioPointDirectionTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.Direction != dir) + { + CurrentScenarioNode.MyPoint.Direction = dir; + CurrentScenarioNode.Orientation = CurrentScenarioNode.MyPoint.Orientation; + ProjectForm.SetScenarioHasChanged(true); + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetRotation(CurrentScenarioNode.Orientation); + } + } + } + } + + private void ScenarioPointTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + ScenarioType stype = ScenarioPointTypeComboBox.SelectedItem as ScenarioType; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.Type != stype) + { + CurrentScenarioNode.MyPoint.Type = stype; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + + if (CurrentScenarioNode.ChainingNode != null) + { + ScenarioChainNodeTypeComboBox.SelectedItem = stype; + } + } + + private void ScenarioPointModelSetComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + AmbientModelSet mset = ScenarioPointModelSetComboBox.SelectedItem as AmbientModelSet; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.ModelSet != mset) + { + CurrentScenarioNode.MyPoint.ModelSet = mset; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + } + + private void ScenarioPointInteriorTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + uint hash = 0; + string name = ScenarioPointInteriorTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioPointInteriorHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.InteriorName != hash) + { + CurrentScenarioNode.MyPoint.InteriorName = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioPointGroupTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + uint hash = 0; + string name = ScenarioPointGroupTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioPointGroupHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.GroupName != hash) + { + CurrentScenarioNode.MyPoint.GroupName = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioPointImapTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + uint hash = 0; + string name = ScenarioPointImapTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioPointImapHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.IMapName != hash) + { + CurrentScenarioNode.MyPoint.IMapName = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioPointTimeStartUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + byte t = (byte)ScenarioPointTimeStartUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.TimeStart != t) + { + CurrentScenarioNode.MyPoint.TimeStart = t; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + } + + private void ScenarioPointTimeEndUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + byte t = (byte)ScenarioPointTimeEndUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.TimeEnd != t) + { + CurrentScenarioNode.MyPoint.TimeEnd = t; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + } + + private void ScenarioPointProbabilityUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + byte v = (byte)ScenarioPointProbabilityUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.Probability != v) + { + CurrentScenarioNode.MyPoint.Probability = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioPointSpOnlyFlagUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + byte v = (byte)ScenarioPointSpOnlyFlagUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.AvailableMpSp != v) + { + CurrentScenarioNode.MyPoint.AvailableMpSp = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioPointRadiusUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + byte v = (byte)ScenarioPointRadiusUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.Radius != v) + { + CurrentScenarioNode.MyPoint.Radius = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioPointWaitTimeUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + byte v = (byte)ScenarioPointWaitTimeUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.WaitTime != v) + { + CurrentScenarioNode.MyPoint.WaitTime = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioPointFlagsValueUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + var iflags = (uint)ScenarioPointFlagsValueUpDown.Value; + populatingui = true; + for (int i = 0; i < ScenarioPointFlagsCheckedListBox.Items.Count; i++) + { + var c = ((iflags & (1 << i)) > 0); + ScenarioPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); + } + populatingui = false; + Unk_700327466 f = (Unk_700327466)iflags; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.Flags != f) + { + CurrentScenarioNode.MyPoint.Flags = f; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioPointFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.MyPoint == null) return; + uint iflags = 0; + for (int i = 0; i < ScenarioPointFlagsCheckedListBox.Items.Count; i++) + { + if (e.Index == i) + { + if (e.NewValue == CheckState.Checked) + { + iflags += (uint)(1 << i); + } + } + else + { + if (ScenarioPointFlagsCheckedListBox.GetItemChecked(i)) + { + iflags += (uint)(1 << i); + } + } + } + populatingui = true; + ScenarioPointFlagsValueUpDown.Value = iflags; + populatingui = false; + Unk_700327466 f = (Unk_700327466)iflags; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.MyPoint.Flags != f) + { + CurrentScenarioNode.MyPoint.Flags = f; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + + + private void ScenarioEntityAddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.AddScenarioToProject(CurrentScenario); + } + + private void ScenarioEntityDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.DeleteScenarioEntity(); + } + + private void ScenarioEntityGoToButton_Click(object sender, EventArgs e) + { + if (CurrentScenarioNode == null) return; + if (ProjectForm.WorldForm == null) return; + ProjectForm.WorldForm.GoToPosition(CurrentScenarioNode.Position); + } + + private void ScenarioEntityPositionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.Entity == null) return; + Vector3 v = FloatUtil.ParseVector3String(ScenarioEntityPositionTextBox.Text); + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.Position != v) + { + CurrentScenarioNode.SetPosition(v); + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); + ProjectForm.WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + } + } + + private void ScenarioEntityTypeTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.Entity == null) return; + uint hash = 0; + string name = ScenarioEntityTypeTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioEntityTypeHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.Entity.TypeName != hash) + { + CurrentScenarioNode.Entity.TypeName = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + } + + private void ScenarioEntityUnk1UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.Entity == null) return; + byte v = (byte)ScenarioEntityUnk1UpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.Entity.Unk1 != v) + { + CurrentScenarioNode.Entity.Unk1 = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityUnk2UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.Entity == null) return; + byte v = (byte)ScenarioEntityUnk2UpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.Entity.Unk2 != v) + { + CurrentScenarioNode.Entity.Unk2 = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointsListBox_DoubleClick(object sender, EventArgs e) + { + var item = ScenarioEntityPointsListBox.SelectedItem as MCExtensionDefSpawnPoint; + if (item == null) return; + + var nodes = CurrentScenario?.ScenarioRegion?.Nodes; + if (nodes == null) return; + + ScenarioNode node = null; + foreach (var snode in nodes) + { + if (snode.EntityPoint == item) + { + node = snode; + break; + } + } + + if (node == null) return; + + ProjectForm.ProjectExplorer?.TrySelectScenarioNodeTreeNode(node); + + } + + private void ScenarioEntityAddPointButton_Click(object sender, EventArgs e) + { + ProjectForm.AddScenarioEntityPoint(); + } + + + + private void ScenarioEntityPointAddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.AddScenarioToProject(CurrentScenario); + } + + private void ScenarioEntityPointDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentScenarioNode); + ProjectForm.DeleteScenarioNode(); + } + + private void ScenarioEntityPointGoToButton_Click(object sender, EventArgs e) + { + if (CurrentScenarioNode == null) return; + if (ProjectForm.WorldForm == null) return; + ProjectForm.WorldForm.GoToPosition(CurrentScenarioNode.Position); + } + + private void ScenarioEntityPointPositionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + Vector3 v = FloatUtil.ParseVector3String(ScenarioEntityPointPositionTextBox.Text); + v += CurrentScenarioNode.EntityPoint.ParentPosition; + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.Position != v) + { + CurrentScenarioNode.SetPosition(v); + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); + ProjectForm.WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + } + } + + private void ScenarioEntityPointRotationTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + Vector4 v = FloatUtil.ParseVector4String(ScenarioEntityPointRotationTextBox.Text); + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.OffsetRotation != v) + { + CurrentScenarioNode.EntityPoint.OffsetRotation = v; + CurrentScenarioNode.Orientation = new Quaternion(v); + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetRotation(CurrentScenarioNode.Orientation); + } + } + } + + private void ScenarioEntityPointNameTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + uint hash = 0; + string name = ScenarioEntityPointNameTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioEntityPointNameHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.NameHash != hash) + { + CurrentScenarioNode.EntityPoint.NameHash = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + } + + private void ScenarioEntityPointSpawnTypeTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + uint hash = 0; + string name = ScenarioEntityPointSpawnTypeTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioEntityPointSpawnTypeHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.SpawnType != hash) + { + CurrentScenarioNode.EntityPoint.SpawnType = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + } + + private void ScenarioEntityPointPedTypeTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + uint hash = 0; + string name = ScenarioEntityPointPedTypeTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioEntityPointPedTypeHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.PedType != hash) + { + CurrentScenarioNode.EntityPoint.PedType = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + } + + private void ScenarioEntityPointGroupTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + uint hash = 0; + string name = ScenarioEntityPointGroupTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioEntityPointGroupHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.Group != hash) + { + CurrentScenarioNode.EntityPoint.Group = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointInteriorTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + uint hash = 0; + string name = ScenarioEntityPointInteriorTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioEntityPointInteriorHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.Interior != hash) + { + CurrentScenarioNode.EntityPoint.Interior = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointRequiredImapTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + uint hash = 0; + string name = ScenarioEntityPointRequiredImapTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioEntityPointRequiredImapHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.RequiredImap != hash) + { + CurrentScenarioNode.EntityPoint.RequiredImap = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointAvailableInMpSpComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + Unk_3573596290 v = (Unk_3573596290)ScenarioEntityPointAvailableInMpSpComboBox.SelectedItem; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.AvailableInMpSp != v) + { + CurrentScenarioNode.EntityPoint.AvailableInMpSp = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointProbabilityTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + float v = FloatUtil.Parse(ScenarioEntityPointProbabilityTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.Probability != v) + { + CurrentScenarioNode.EntityPoint.Probability = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointTimeTillPedLeavesTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + float v = FloatUtil.Parse(ScenarioEntityPointTimeTillPedLeavesTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.TimeTillPedLeaves != v) + { + CurrentScenarioNode.EntityPoint.TimeTillPedLeaves = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointRadiusTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + float v = FloatUtil.Parse(ScenarioEntityPointRadiusTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.Radius != v) + { + CurrentScenarioNode.EntityPoint.Radius = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointStartUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + byte v = (byte)ScenarioEntityPointStartUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.StartTime != v) + { + CurrentScenarioNode.EntityPoint.StartTime = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointEndUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + byte v = (byte)ScenarioEntityPointEndUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.EndTime != v) + { + CurrentScenarioNode.EntityPoint.EndTime = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointExtendedRangeCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + bool v = ScenarioEntityPointExtendedRangeCheckBox.Checked; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.ExtendedRange != v) + { + CurrentScenarioNode.EntityPoint.ExtendedRange = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointShortRangeCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + bool v = ScenarioEntityPointShortRangeCheckBox.Checked; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.ShortRange != v) + { + CurrentScenarioNode.EntityPoint.ShortRange = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointHighPriCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + bool v = ScenarioEntityPointHighPriCheckBox.Checked; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.HighPri != v) + { + CurrentScenarioNode.EntityPoint.HighPri = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointFlagsUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + var iflags = (uint)ScenarioEntityPointFlagsUpDown.Value; + populatingui = true; + for (int i = 0; i < ScenarioEntityPointFlagsCheckedListBox.Items.Count; i++) + { + var c = ((iflags & (1 << i)) > 0); + ScenarioEntityPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); + } + populatingui = false; + Unk_700327466 f = (Unk_700327466)iflags; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.Flags != f) + { + CurrentScenarioNode.EntityPoint.Flags = f; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioEntityPointFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.EntityPoint == null) return; + uint iflags = 0; + for (int i = 0; i < ScenarioEntityPointFlagsCheckedListBox.Items.Count; i++) + { + if (e.Index == i) + { + if (e.NewValue == CheckState.Checked) + { + iflags += (uint)(1 << i); + } + } + else + { + if (ScenarioEntityPointFlagsCheckedListBox.GetItemChecked(i)) + { + iflags += (uint)(1 << i); + } + } + } + populatingui = true; + ScenarioEntityPointFlagsUpDown.Value = iflags; + populatingui = false; + Unk_700327466 f = (Unk_700327466)iflags; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.EntityPoint.Flags != f) + { + CurrentScenarioNode.EntityPoint.Flags = f; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + + + private void ScenarioChainNodeAddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.AddScenarioToProject(CurrentScenario); + } + + private void ScenarioChainNodeDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentScenarioNode); + ProjectForm.DeleteScenarioNode(); + } + + private void ScenarioChainNodeGoToButton_Click(object sender, EventArgs e) + { + if (CurrentScenarioNode == null) return; + if (ProjectForm.WorldForm == null) return; + ProjectForm.WorldForm.GoToPosition(CurrentScenarioNode.Position); + } + + private void ScenarioChainNodePositionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + Vector3 v = FloatUtil.ParseVector3String(ScenarioChainNodePositionTextBox.Text); + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.Position != v) + { + CurrentScenarioNode.SetPosition(v); + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); + ProjectForm.WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + } + } + + private void ScenarioChainNodeUnk1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ChainingNode == null) return; + uint hash = 0; + string name = ScenarioChainNodeUnk1TextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioChainNodeUnk1HashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ChainingNode.Unk1 != hash) + { + CurrentScenarioNode.ChainingNode.Unk1 = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioChainNodeTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ChainingNode == null) return; + ScenarioType stype = ScenarioChainNodeTypeComboBox.SelectedItem as ScenarioType; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ChainingNode.Type != stype) + { + CurrentScenarioNode.ChainingNode.Type = stype; + CurrentScenarioNode.ChainingNode.TypeHash = stype?.NameHash ?? 0; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + } + + private void ScenarioChainNodeFirstCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ChainingNode == null) return; + bool v = !ScenarioChainNodeFirstCheckBox.Checked; + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ChainingNode.NotFirst != v) + { + CurrentScenarioNode.ChainingNode.NotFirst = v; + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + } + } + + private void ScenarioChainNodeLastCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ChainingNode == null) return; + bool v = !ScenarioChainNodeLastCheckBox.Checked; + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ChainingNode.NotLast != v) + { + CurrentScenarioNode.ChainingNode.NotLast = v; + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + } + } + + + private void ScenarioChainAddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.AddScenarioToProject(CurrentScenario); + } + + private void ScenarioChainDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.DeleteScenarioChain(); + } + + private void ScenarioChainEdgesListBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + CurrentScenarioChainEdge = ScenarioChainEdgesListBox.SelectedItem as MCScenarioChainingEdge; + ProjectForm.SetScenarioChainEdge(CurrentScenarioChainEdge); + populatingui = true; + LoadScenarioChainEdgeTabPage(); + populatingui = false; + } + + private void ScenarioChainAddEdgeButton_Click(object sender, EventArgs e) + { + AddScenarioChainEdge(); + } + + private void ScenarioChainRemoveEdgeButton_Click(object sender, EventArgs e) + { + RemoveScenarioChainEdge(); + } + + private void ScenarioChainMoveEdgeUpButton_Click(object sender, EventArgs e) + { + MoveScenarioChainEdge(false); + } + + private void ScenarioChainMoveEdgeDownButton_Click(object sender, EventArgs e) + { + MoveScenarioChainEdge(true); + } + + private void ScenarioChainUnk1UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ChainingNode == null) return; + if (CurrentScenarioNode.ChainingNode.Chain == null) return; + byte v = (byte)ScenarioChainUnk1UpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ChainingNode.Chain.Unk1 != v) + { + CurrentScenarioNode.ChainingNode.Chain.Unk1 = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + + private void ScenarioChainEdgeNodeIndexFromUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioChainEdge == null) return; + ushort nodeid = (ushort)ScenarioChainEdgeNodeIndexFromUpDown.Value; + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioChainEdge.NodeIndexFrom != nodeid) + { + CurrentScenarioChainEdge.NodeIndexFrom = nodeid; + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + UpdateScenarioChainEdgeLinkage(); + + //refresh the selected item in the list box, to update the text, and the other controls. + ScenarioChainEdgesListBox.Items[ScenarioChainEdgesListBox.SelectedIndex] = ScenarioChainEdgesListBox.SelectedItem; + } + } + + private void ScenarioChainEdgeNodeIndexToUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioChainEdge == null) return; + ushort nodeid = (ushort)ScenarioChainEdgeNodeIndexToUpDown.Value; + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioChainEdge.NodeIndexTo != nodeid) + { + CurrentScenarioChainEdge.NodeIndexTo = nodeid; + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + UpdateScenarioChainEdgeLinkage(); + + //refresh the selected item in the list box, to update the text, and the other controls. + ScenarioChainEdgesListBox.Items[ScenarioChainEdgesListBox.SelectedIndex] = ScenarioChainEdgesListBox.SelectedItem; + } + } + + private void ScenarioChainEdgeActionComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioChainEdge == null) return; + Unk_3609807418 v = (Unk_3609807418)ScenarioChainEdgeActionComboBox.SelectedItem; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioChainEdge.Action != v) + { + CurrentScenarioChainEdge.Action = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioChainEdgeNavModeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioChainEdge == null) return; + Unk_3971773454 v = (Unk_3971773454)ScenarioChainEdgeNavModeComboBox.SelectedItem; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioChainEdge.NavMode != v) + { + CurrentScenarioChainEdge.NavMode = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioChainEdgeNavSpeedComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioChainEdge == null) return; + Unk_941086046 v = (Unk_941086046)ScenarioChainEdgeNavSpeedComboBox.SelectedItem; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioChainEdge.NavSpeed != v) + { + CurrentScenarioChainEdge.NavSpeed = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + + + private void ScenarioClusterAddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.AddScenarioToProject(CurrentScenario); + } + + private void ScenarioClusterDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.DeleteScenarioCluster(); + } + + private void ScenarioClusterGoToButton_Click(object sender, EventArgs e) + { + if (CurrentScenarioNode == null) return; + if (ProjectForm.WorldForm == null) return; + ProjectForm.WorldForm.GoToPosition(CurrentScenarioNode.Position); + } + + private void ScenarioClusterCenterTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + Vector3 v = FloatUtil.ParseVector3String(ScenarioClusterCenterTextBox.Text); + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.Position != v) + { + CurrentScenarioNode.SetPosition(v); + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + if ((CurrentScenarioNode.Cluster != null) && (CurrentScenarioNode.Cluster.Position != v)) + { + CurrentScenarioNode.Cluster.Position = v; + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); + ProjectForm.WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + } + } + + private void ScenarioClusterRadiusTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + float r = FloatUtil.Parse(ScenarioClusterRadiusTextBox.Text); + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if ((CurrentScenarioNode.Cluster != null) && (CurrentScenarioNode.Cluster.Radius != r)) + { + CurrentScenarioNode.Cluster.Radius = r; + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); + ProjectForm.WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + } + } + + private void ScenarioClusterUnk1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.Cluster == null) return; + float v = FloatUtil.Parse(ScenarioClusterUnk1TextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.Cluster.Unk1 != v) + { + CurrentScenarioNode.Cluster.Unk1 = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioClusterUnk2CheckBox_CheckedChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.Cluster == null) return; + bool v = ScenarioClusterUnk2CheckBox.Checked; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.Cluster.Unk2 != v) + { + CurrentScenarioNode.Cluster.Unk2 = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioClusterPointsListBox_DoubleClick(object sender, EventArgs e) + { + var item = ScenarioClusterPointsListBox.SelectedItem as MCScenarioPoint; + if (item == null) return; + + var nodes = CurrentScenario?.ScenarioRegion?.Nodes; + if (nodes == null) return; + + ScenarioNode node = null; + foreach (var snode in nodes) + { + if (snode.ClusterMyPoint == item) + { + node = snode; + break; + } + } + + if (node == null) return; + + ProjectForm.ProjectExplorer?.TrySelectScenarioNodeTreeNode(node); + + } + + private void ScenarioClusterAddPointButton_Click(object sender, EventArgs e) + { + ProjectForm.AddScenarioClusterPoint(); + } + + + + private void ScenarioClusterPointAddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.AddScenarioToProject(CurrentScenario); + } + + private void ScenarioClusterPointDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentScenarioNode); + ProjectForm.DeleteScenarioNode(); + } + + private void ScenarioClusterPointGoToButton_Click(object sender, EventArgs e) + { + if (CurrentScenarioNode == null) return; + if (ProjectForm.WorldForm == null) return; + ProjectForm.WorldForm.GoToPosition(CurrentScenarioNode.Position); + } + + private void ScenarioClusterPointPositionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + Vector3 v = FloatUtil.ParseVector3String(ScenarioClusterPointPositionTextBox.Text); + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.Position != v) + { + CurrentScenarioNode.SetPosition(v); + ProjectForm.SetScenarioHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); + ProjectForm.WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + } + } + + private void ScenarioClusterPointDirectionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + float dir = FloatUtil.Parse(ScenarioClusterPointDirectionTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.Direction != dir) + { + CurrentScenarioNode.ClusterMyPoint.Direction = dir; + CurrentScenarioNode.Orientation = CurrentScenarioNode.ClusterMyPoint.Orientation; + ProjectForm.SetScenarioHasChanged(true); + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetRotation(CurrentScenarioNode.Orientation); + } + } + } + } + + private void ScenarioClusterPointTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + ScenarioType stype = ScenarioClusterPointTypeComboBox.SelectedItem as ScenarioType; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.Type != stype) + { + CurrentScenarioNode.ClusterMyPoint.Type = stype; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + + if (CurrentScenarioNode.ChainingNode != null) + { + ScenarioChainNodeTypeComboBox.SelectedItem = stype; + } + } + + private void ScenarioClusterPointModelSetComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + AmbientModelSet mset = ScenarioClusterPointModelSetComboBox.SelectedItem as AmbientModelSet; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.ModelSet != mset) + { + CurrentScenarioNode.ClusterMyPoint.ModelSet = mset; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + } + + private void ScenarioClusterPointInteriorTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + uint hash = 0; + string name = ScenarioClusterPointInteriorTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioClusterPointInteriorHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.InteriorName != hash) + { + CurrentScenarioNode.ClusterMyPoint.InteriorName = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioClusterPointGroupTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + uint hash = 0; + string name = ScenarioClusterPointGroupTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioClusterPointGroupHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.GroupName != hash) + { + CurrentScenarioNode.ClusterMyPoint.GroupName = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioClusterPointImapTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + uint hash = 0; + string name = ScenarioClusterPointImapTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + ScenarioClusterPointImapHashLabel.Text = "Hash: " + hash.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.IMapName != hash) + { + CurrentScenarioNode.ClusterMyPoint.IMapName = hash; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioClusterPointTimeStartUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + byte t = (byte)ScenarioClusterPointTimeStartUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.TimeStart != t) + { + CurrentScenarioNode.ClusterMyPoint.TimeStart = t; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + } + + private void ScenarioClusterPointTimeEndUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + byte t = (byte)ScenarioClusterPointTimeEndUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.TimeEnd != t) + { + CurrentScenarioNode.ClusterMyPoint.TimeEnd = t; + ProjectForm.SetScenarioHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateScenarioNodeTreeNode(CurrentScenarioNode); + } + + private void ScenarioClusterPointProbabilityUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + byte v = (byte)ScenarioClusterPointProbabilityUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.Probability != v) + { + CurrentScenarioNode.ClusterMyPoint.Probability = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioClusterPointSpOnlyFlagUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + byte v = (byte)ScenarioClusterPointSpOnlyFlagUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.AvailableMpSp != v) + { + CurrentScenarioNode.ClusterMyPoint.AvailableMpSp = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioClusterPointRadiusUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + byte v = (byte)ScenarioClusterPointRadiusUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.Radius != v) + { + CurrentScenarioNode.ClusterMyPoint.Radius = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioClusterPointWaitTimeUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + byte v = (byte)ScenarioClusterPointWaitTimeUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.WaitTime != v) + { + CurrentScenarioNode.ClusterMyPoint.WaitTime = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioClusterPointFlagsUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + var iflags = (uint)ScenarioClusterPointFlagsUpDown.Value; + populatingui = true; + for (int i = 0; i < ScenarioClusterPointFlagsCheckedListBox.Items.Count; i++) + { + var c = ((iflags & (1 << i)) > 0); + ScenarioClusterPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); + } + populatingui = false; + Unk_700327466 f = (Unk_700327466)iflags; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.Flags != f) + { + CurrentScenarioNode.ClusterMyPoint.Flags = f; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + private void ScenarioClusterPointFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) + { + if (populatingui) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ClusterMyPoint == null) return; + uint iflags = 0; + for (int i = 0; i < ScenarioClusterPointFlagsCheckedListBox.Items.Count; i++) + { + if (e.Index == i) + { + if (e.NewValue == CheckState.Checked) + { + iflags += (uint)(1 << i); + } + } + else + { + if (ScenarioClusterPointFlagsCheckedListBox.GetItemChecked(i)) + { + iflags += (uint)(1 << i); + } + } + } + populatingui = true; + ScenarioClusterPointFlagsUpDown.Value = iflags; + populatingui = false; + Unk_700327466 f = (Unk_700327466)iflags; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentScenarioNode.ClusterMyPoint.Flags != f) + { + CurrentScenarioNode.ClusterMyPoint.Flags = f; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + + + + } +} diff --git a/Project/Panels/EditScenarioNodePanel.resx b/Project/Panels/EditScenarioNodePanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditScenarioNodePanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditScenarioYmtPanel.Designer.cs b/Project/Panels/EditScenarioYmtPanel.Designer.cs new file mode 100644 index 0000000..919a8a4 --- /dev/null +++ b/Project/Panels/EditScenarioYmtPanel.Designer.cs @@ -0,0 +1,287 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditScenarioYmtPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditScenarioYmtPanel)); + this.ScenarioYmtExtentsMaxTextBox = new System.Windows.Forms.TextBox(); + this.label103 = new System.Windows.Forms.Label(); + this.ScenarioYmtExtentsMinTextBox = new System.Windows.Forms.TextBox(); + this.label150 = new System.Windows.Forms.Label(); + this.ScenarioYmtGridInfoLabel = new System.Windows.Forms.Label(); + this.ScenarioYmtGridScaleTextBox = new System.Windows.Forms.TextBox(); + this.label96 = new System.Windows.Forms.Label(); + this.ScenarioYmtProjectPathTextBox = new System.Windows.Forms.TextBox(); + this.label66 = new System.Windows.Forms.Label(); + this.ScenarioYmtFileLocationTextBox = new System.Windows.Forms.TextBox(); + this.label72 = new System.Windows.Forms.Label(); + this.ScenarioYmtGridMaxTextBox = new System.Windows.Forms.TextBox(); + this.label73 = new System.Windows.Forms.Label(); + this.ScenarioYmtGridMinTextBox = new System.Windows.Forms.TextBox(); + this.label75 = new System.Windows.Forms.Label(); + this.ScenarioYmtVersionTextBox = new System.Windows.Forms.TextBox(); + this.label64 = new System.Windows.Forms.Label(); + this.ScenarioYmtNameTextBox = new System.Windows.Forms.TextBox(); + this.label63 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // ScenarioYmtExtentsMaxTextBox + // + this.ScenarioYmtExtentsMaxTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioYmtExtentsMaxTextBox.Location = new System.Drawing.Point(96, 240); + this.ScenarioYmtExtentsMaxTextBox.Name = "ScenarioYmtExtentsMaxTextBox"; + this.ScenarioYmtExtentsMaxTextBox.ReadOnly = true; + this.ScenarioYmtExtentsMaxTextBox.Size = new System.Drawing.Size(285, 20); + this.ScenarioYmtExtentsMaxTextBox.TabIndex = 34; + // + // label103 + // + this.label103.AutoSize = true; + this.label103.Location = new System.Drawing.Point(8, 243); + this.label103.Name = "label103"; + this.label103.Size = new System.Drawing.Size(68, 13); + this.label103.TabIndex = 33; + this.label103.Text = "Extents Max:"; + // + // ScenarioYmtExtentsMinTextBox + // + this.ScenarioYmtExtentsMinTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioYmtExtentsMinTextBox.Location = new System.Drawing.Point(96, 214); + this.ScenarioYmtExtentsMinTextBox.Name = "ScenarioYmtExtentsMinTextBox"; + this.ScenarioYmtExtentsMinTextBox.ReadOnly = true; + this.ScenarioYmtExtentsMinTextBox.Size = new System.Drawing.Size(285, 20); + this.ScenarioYmtExtentsMinTextBox.TabIndex = 32; + // + // label150 + // + this.label150.AutoSize = true; + this.label150.Location = new System.Drawing.Point(8, 217); + this.label150.Name = "label150"; + this.label150.Size = new System.Drawing.Size(65, 13); + this.label150.TabIndex = 31; + this.label150.Text = "Extents Min:"; + // + // ScenarioYmtGridInfoLabel + // + this.ScenarioYmtGridInfoLabel.AutoSize = true; + this.ScenarioYmtGridInfoLabel.Location = new System.Drawing.Point(93, 171); + this.ScenarioYmtGridInfoLabel.Name = "ScenarioYmtGridInfoLabel"; + this.ScenarioYmtGridInfoLabel.Size = new System.Drawing.Size(94, 13); + this.ScenarioYmtGridInfoLabel.TabIndex = 30; + this.ScenarioYmtGridInfoLabel.Text = "Total grid points: 0"; + // + // ScenarioYmtGridScaleTextBox + // + this.ScenarioYmtGridScaleTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioYmtGridScaleTextBox.Location = new System.Drawing.Point(96, 133); + this.ScenarioYmtGridScaleTextBox.Name = "ScenarioYmtGridScaleTextBox"; + this.ScenarioYmtGridScaleTextBox.ReadOnly = true; + this.ScenarioYmtGridScaleTextBox.Size = new System.Drawing.Size(285, 20); + this.ScenarioYmtGridScaleTextBox.TabIndex = 29; + // + // label96 + // + this.label96.AutoSize = true; + this.label96.Location = new System.Drawing.Point(8, 136); + this.label96.Name = "label96"; + this.label96.Size = new System.Drawing.Size(59, 13); + this.label96.TabIndex = 28; + this.label96.Text = "Grid Scale:"; + // + // ScenarioYmtProjectPathTextBox + // + this.ScenarioYmtProjectPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioYmtProjectPathTextBox.Location = new System.Drawing.Point(96, 330); + this.ScenarioYmtProjectPathTextBox.Name = "ScenarioYmtProjectPathTextBox"; + this.ScenarioYmtProjectPathTextBox.ReadOnly = true; + this.ScenarioYmtProjectPathTextBox.Size = new System.Drawing.Size(412, 20); + this.ScenarioYmtProjectPathTextBox.TabIndex = 38; + // + // label66 + // + this.label66.AutoSize = true; + this.label66.Location = new System.Drawing.Point(8, 333); + this.label66.Name = "label66"; + this.label66.Size = new System.Drawing.Size(67, 13); + this.label66.TabIndex = 37; + this.label66.Text = "Project path:"; + // + // ScenarioYmtFileLocationTextBox + // + this.ScenarioYmtFileLocationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioYmtFileLocationTextBox.Location = new System.Drawing.Point(96, 304); + this.ScenarioYmtFileLocationTextBox.Name = "ScenarioYmtFileLocationTextBox"; + this.ScenarioYmtFileLocationTextBox.ReadOnly = true; + this.ScenarioYmtFileLocationTextBox.Size = new System.Drawing.Size(412, 20); + this.ScenarioYmtFileLocationTextBox.TabIndex = 36; + // + // label72 + // + this.label72.AutoSize = true; + this.label72.Location = new System.Drawing.Point(8, 307); + this.label72.Name = "label72"; + this.label72.Size = new System.Drawing.Size(66, 13); + this.label72.TabIndex = 35; + this.label72.Text = "File location:"; + // + // ScenarioYmtGridMaxTextBox + // + this.ScenarioYmtGridMaxTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioYmtGridMaxTextBox.Location = new System.Drawing.Point(96, 107); + this.ScenarioYmtGridMaxTextBox.Name = "ScenarioYmtGridMaxTextBox"; + this.ScenarioYmtGridMaxTextBox.ReadOnly = true; + this.ScenarioYmtGridMaxTextBox.Size = new System.Drawing.Size(285, 20); + this.ScenarioYmtGridMaxTextBox.TabIndex = 27; + // + // label73 + // + this.label73.AutoSize = true; + this.label73.Location = new System.Drawing.Point(8, 110); + this.label73.Name = "label73"; + this.label73.Size = new System.Drawing.Size(52, 13); + this.label73.TabIndex = 26; + this.label73.Text = "Grid Max:"; + // + // ScenarioYmtGridMinTextBox + // + this.ScenarioYmtGridMinTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioYmtGridMinTextBox.Location = new System.Drawing.Point(96, 81); + this.ScenarioYmtGridMinTextBox.Name = "ScenarioYmtGridMinTextBox"; + this.ScenarioYmtGridMinTextBox.ReadOnly = true; + this.ScenarioYmtGridMinTextBox.Size = new System.Drawing.Size(285, 20); + this.ScenarioYmtGridMinTextBox.TabIndex = 25; + // + // label75 + // + this.label75.AutoSize = true; + this.label75.Location = new System.Drawing.Point(8, 84); + this.label75.Name = "label75"; + this.label75.Size = new System.Drawing.Size(49, 13); + this.label75.TabIndex = 24; + this.label75.Text = "Grid Min:"; + // + // ScenarioYmtVersionTextBox + // + this.ScenarioYmtVersionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioYmtVersionTextBox.Location = new System.Drawing.Point(96, 38); + this.ScenarioYmtVersionTextBox.Name = "ScenarioYmtVersionTextBox"; + this.ScenarioYmtVersionTextBox.Size = new System.Drawing.Size(285, 20); + this.ScenarioYmtVersionTextBox.TabIndex = 23; + this.ScenarioYmtVersionTextBox.TextChanged += new System.EventHandler(this.ScenarioYmtVersionTextBox_TextChanged); + // + // label64 + // + this.label64.AutoSize = true; + this.label64.Location = new System.Drawing.Point(8, 41); + this.label64.Name = "label64"; + this.label64.Size = new System.Drawing.Size(82, 13); + this.label64.TabIndex = 22; + this.label64.Text = "VersionNumber:"; + // + // ScenarioYmtNameTextBox + // + this.ScenarioYmtNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioYmtNameTextBox.Location = new System.Drawing.Point(96, 12); + this.ScenarioYmtNameTextBox.Name = "ScenarioYmtNameTextBox"; + this.ScenarioYmtNameTextBox.ReadOnly = true; + this.ScenarioYmtNameTextBox.Size = new System.Drawing.Size(285, 20); + this.ScenarioYmtNameTextBox.TabIndex = 21; + // + // label63 + // + this.label63.AutoSize = true; + this.label63.Location = new System.Drawing.Point(8, 15); + this.label63.Name = "label63"; + this.label63.Size = new System.Drawing.Size(38, 13); + this.label63.TabIndex = 20; + this.label63.Text = "Name:"; + // + // EditScenarioYmtPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(520, 382); + this.Controls.Add(this.ScenarioYmtExtentsMaxTextBox); + this.Controls.Add(this.label103); + this.Controls.Add(this.ScenarioYmtExtentsMinTextBox); + this.Controls.Add(this.label150); + this.Controls.Add(this.ScenarioYmtGridInfoLabel); + this.Controls.Add(this.ScenarioYmtGridScaleTextBox); + this.Controls.Add(this.label96); + this.Controls.Add(this.ScenarioYmtProjectPathTextBox); + this.Controls.Add(this.label66); + this.Controls.Add(this.ScenarioYmtFileLocationTextBox); + this.Controls.Add(this.label72); + this.Controls.Add(this.ScenarioYmtGridMaxTextBox); + this.Controls.Add(this.label73); + this.Controls.Add(this.ScenarioYmtGridMinTextBox); + this.Controls.Add(this.label75); + this.Controls.Add(this.ScenarioYmtVersionTextBox); + this.Controls.Add(this.label64); + this.Controls.Add(this.ScenarioYmtNameTextBox); + this.Controls.Add(this.label63); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditScenarioYmtPanel"; + this.Text = "Edit Scenario Ymt"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox ScenarioYmtExtentsMaxTextBox; + private System.Windows.Forms.Label label103; + private System.Windows.Forms.TextBox ScenarioYmtExtentsMinTextBox; + private System.Windows.Forms.Label label150; + private System.Windows.Forms.Label ScenarioYmtGridInfoLabel; + private System.Windows.Forms.TextBox ScenarioYmtGridScaleTextBox; + private System.Windows.Forms.Label label96; + private System.Windows.Forms.TextBox ScenarioYmtProjectPathTextBox; + private System.Windows.Forms.Label label66; + private System.Windows.Forms.TextBox ScenarioYmtFileLocationTextBox; + private System.Windows.Forms.Label label72; + private System.Windows.Forms.TextBox ScenarioYmtGridMaxTextBox; + private System.Windows.Forms.Label label73; + private System.Windows.Forms.TextBox ScenarioYmtGridMinTextBox; + private System.Windows.Forms.Label label75; + private System.Windows.Forms.TextBox ScenarioYmtVersionTextBox; + private System.Windows.Forms.Label label64; + private System.Windows.Forms.TextBox ScenarioYmtNameTextBox; + private System.Windows.Forms.Label label63; + } +} \ No newline at end of file diff --git a/Project/Panels/EditScenarioYmtPanel.cs b/Project/Panels/EditScenarioYmtPanel.cs new file mode 100644 index 0000000..745f014 --- /dev/null +++ b/Project/Panels/EditScenarioYmtPanel.cs @@ -0,0 +1,119 @@ +using CodeWalker.GameFiles; +using SharpDX; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditScenarioYmtPanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public YmtFile CurrentScenario { get; set; } + + private bool populatingui = false; + private bool waschanged = false; + + public EditScenarioYmtPanel(ProjectForm2 projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + } + + public void SetScenarioYmt(YmtFile scenario) + { + CurrentScenario = scenario; + Tag = scenario; + UpdateFormTitle(); + UpdateScenarioUI(); + waschanged = scenario?.HasChanged ?? false; + } + + public void UpdateFormTitleYmtChanged() + { + bool changed = CurrentScenario.HasChanged; + if (!waschanged && changed) + { + UpdateFormTitle(); + waschanged = true; + } + else if (waschanged && !changed) + { + UpdateFormTitle(); + waschanged = false; + } + } + private void UpdateFormTitle() + { + string fn = CurrentScenario.RpfFileEntry?.Name ?? CurrentScenario.Name; + if (string.IsNullOrEmpty(fn)) fn = "untitled.ymt"; + Text = fn + (CurrentScenario.HasChanged ? "*" : ""); + } + + + public void UpdateScenarioUI() + { + if (CurrentScenario == null) + { + populatingui = true; + //ScenarioYmtPanel.Enabled = false; + ScenarioYmtNameTextBox.Text = string.Empty; + ScenarioYmtVersionTextBox.Text = string.Empty; + ScenarioYmtGridMinTextBox.Text = string.Empty; + ScenarioYmtGridMaxTextBox.Text = string.Empty; + ScenarioYmtGridScaleTextBox.Text = string.Empty; + ScenarioYmtGridInfoLabel.Text = "Total grid points: 0"; + ScenarioYmtExtentsMinTextBox.Text = string.Empty; + ScenarioYmtExtentsMaxTextBox.Text = string.Empty; + ScenarioYmtFileLocationTextBox.Text = string.Empty; + ScenarioYmtProjectPathTextBox.Text = string.Empty; + populatingui = false; + } + else + { + var rgn = CurrentScenario.CScenarioPointRegion; + var accg = rgn?._Data.AccelGrid ?? new rage__spdGrid2D(); + var bvh = CurrentScenario.ScenarioRegion?.BVH; + var emin = bvh?.Box.Minimum ?? Vector3.Zero; + var emax = bvh?.Box.Maximum ?? Vector3.Zero; + + populatingui = true; + //ScenarioYmtPanel.Enabled = true; + ScenarioYmtNameTextBox.Text = CurrentScenario.Name; + ScenarioYmtVersionTextBox.Text = rgn?.VersionNumber.ToString() ?? ""; + ScenarioYmtGridMinTextBox.Text = FloatUtil.GetVector2String(accg.Min); + ScenarioYmtGridMaxTextBox.Text = FloatUtil.GetVector2String(accg.Max); + ScenarioYmtGridScaleTextBox.Text = FloatUtil.GetVector2String(accg.Scale); + ScenarioYmtGridInfoLabel.Text = "Total grid points: " + (rgn?.Unk_3844724227?.Length ?? 0).ToString(); + ScenarioYmtExtentsMinTextBox.Text = FloatUtil.GetVector3String(emin); + ScenarioYmtExtentsMaxTextBox.Text = FloatUtil.GetVector3String(emax); + ScenarioYmtFileLocationTextBox.Text = CurrentScenario.RpfFileEntry?.Path ?? ""; + ScenarioYmtProjectPathTextBox.Text = (ProjectForm.CurrentProjectFile != null) ? ProjectForm.CurrentProjectFile.GetRelativePath(CurrentScenario.FilePath) : CurrentScenario.FilePath; + populatingui = false; + } + } + + private void ScenarioYmtVersionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentScenario == null) return; + if (CurrentScenario.CScenarioPointRegion == null) return; + lock (ProjectForm.ProjectSyncRoot) + { + int v = 0; + int.TryParse(ScenarioYmtVersionTextBox.Text, out v); + if (CurrentScenario.CScenarioPointRegion.VersionNumber != v) + { + CurrentScenario.CScenarioPointRegion.VersionNumber = v; + ProjectForm.SetScenarioHasChanged(true); + } + } + } + } +} diff --git a/Project/Panels/EditScenarioYmtPanel.resx b/Project/Panels/EditScenarioYmtPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditScenarioYmtPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditTrainNodePanel.Designer.cs b/Project/Panels/EditTrainNodePanel.Designer.cs new file mode 100644 index 0000000..f1b6094 --- /dev/null +++ b/Project/Panels/EditTrainNodePanel.Designer.cs @@ -0,0 +1,146 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditTrainNodePanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditTrainNodePanel)); + this.TrainNodeTypeComboBox = new System.Windows.Forms.ComboBox(); + this.label82 = new System.Windows.Forms.Label(); + this.TrainNodeDeleteButton = new System.Windows.Forms.Button(); + this.TrainNodeAddToProjectButton = new System.Windows.Forms.Button(); + this.TrainNodeGoToButton = new System.Windows.Forms.Button(); + this.TrainNodePositionTextBox = new System.Windows.Forms.TextBox(); + this.label81 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // TrainNodeTypeComboBox + // + this.TrainNodeTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.TrainNodeTypeComboBox.FormattingEnabled = true; + this.TrainNodeTypeComboBox.Items.AddRange(new object[] { + "0 - Default", + "1 - Default Station", + "2 - Freight Station", + "3 - (Not used)", + "4 - Underground", + "5 - Underground Station"}); + this.TrainNodeTypeComboBox.Location = new System.Drawing.Point(76, 45); + this.TrainNodeTypeComboBox.Name = "TrainNodeTypeComboBox"; + this.TrainNodeTypeComboBox.Size = new System.Drawing.Size(142, 21); + this.TrainNodeTypeComboBox.TabIndex = 47; + this.TrainNodeTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.TrainNodeTypeComboBox_SelectedIndexChanged); + // + // label82 + // + this.label82.AutoSize = true; + this.label82.Location = new System.Drawing.Point(23, 48); + this.label82.Name = "label82"; + this.label82.Size = new System.Drawing.Size(34, 13); + this.label82.TabIndex = 46; + this.label82.Text = "Type:"; + // + // TrainNodeDeleteButton + // + this.TrainNodeDeleteButton.Enabled = false; + this.TrainNodeDeleteButton.Location = new System.Drawing.Point(172, 92); + this.TrainNodeDeleteButton.Name = "TrainNodeDeleteButton"; + this.TrainNodeDeleteButton.Size = new System.Drawing.Size(90, 23); + this.TrainNodeDeleteButton.TabIndex = 49; + this.TrainNodeDeleteButton.Text = "Delete Node"; + this.TrainNodeDeleteButton.UseVisualStyleBackColor = true; + this.TrainNodeDeleteButton.Click += new System.EventHandler(this.TrainNodeDeleteButton_Click); + // + // TrainNodeAddToProjectButton + // + this.TrainNodeAddToProjectButton.Enabled = false; + this.TrainNodeAddToProjectButton.Location = new System.Drawing.Point(76, 92); + this.TrainNodeAddToProjectButton.Name = "TrainNodeAddToProjectButton"; + this.TrainNodeAddToProjectButton.Size = new System.Drawing.Size(90, 23); + this.TrainNodeAddToProjectButton.TabIndex = 48; + this.TrainNodeAddToProjectButton.Text = "Add to Project"; + this.TrainNodeAddToProjectButton.UseVisualStyleBackColor = true; + this.TrainNodeAddToProjectButton.Click += new System.EventHandler(this.TrainNodeAddToProjectButton_Click); + // + // TrainNodeGoToButton + // + this.TrainNodeGoToButton.Location = new System.Drawing.Point(306, 10); + this.TrainNodeGoToButton.Name = "TrainNodeGoToButton"; + this.TrainNodeGoToButton.Size = new System.Drawing.Size(68, 23); + this.TrainNodeGoToButton.TabIndex = 44; + this.TrainNodeGoToButton.Text = "Go to"; + this.TrainNodeGoToButton.UseVisualStyleBackColor = true; + this.TrainNodeGoToButton.Click += new System.EventHandler(this.TrainNodeGoToButton_Click); + // + // TrainNodePositionTextBox + // + this.TrainNodePositionTextBox.Location = new System.Drawing.Point(76, 12); + this.TrainNodePositionTextBox.Name = "TrainNodePositionTextBox"; + this.TrainNodePositionTextBox.Size = new System.Drawing.Size(224, 20); + this.TrainNodePositionTextBox.TabIndex = 43; + this.TrainNodePositionTextBox.TextChanged += new System.EventHandler(this.TrainNodePositionTextBox_TextChanged); + // + // label81 + // + this.label81.AutoSize = true; + this.label81.Location = new System.Drawing.Point(23, 15); + this.label81.Name = "label81"; + this.label81.Size = new System.Drawing.Size(47, 13); + this.label81.TabIndex = 45; + this.label81.Text = "Position:"; + // + // EditTrainNodePanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(510, 310); + this.Controls.Add(this.TrainNodeTypeComboBox); + this.Controls.Add(this.label82); + this.Controls.Add(this.TrainNodeDeleteButton); + this.Controls.Add(this.TrainNodeAddToProjectButton); + this.Controls.Add(this.TrainNodeGoToButton); + this.Controls.Add(this.TrainNodePositionTextBox); + this.Controls.Add(this.label81); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditTrainNodePanel"; + this.Text = "Edit Train Node"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ComboBox TrainNodeTypeComboBox; + private System.Windows.Forms.Label label82; + private System.Windows.Forms.Button TrainNodeDeleteButton; + private System.Windows.Forms.Button TrainNodeAddToProjectButton; + private System.Windows.Forms.Button TrainNodeGoToButton; + private System.Windows.Forms.TextBox TrainNodePositionTextBox; + private System.Windows.Forms.Label label81; + } +} \ No newline at end of file diff --git a/Project/Panels/EditTrainNodePanel.cs b/Project/Panels/EditTrainNodePanel.cs new file mode 100644 index 0000000..2d95169 --- /dev/null +++ b/Project/Panels/EditTrainNodePanel.cs @@ -0,0 +1,139 @@ +using CodeWalker.GameFiles; +using CodeWalker.World; +using SharpDX; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditTrainNodePanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public TrainTrackNode TrainNode { get; set; } + + private bool populatingui = false; + + public EditTrainNodePanel(ProjectForm2 projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + } + + public void SetTrainNode(TrainTrackNode node) + { + TrainNode = node; + Tag = node; + UpdateFormTitle(); + UpdateTrainTrackNodeUI(); + } + + private void UpdateFormTitle() + { + Text = "Train Node " + TrainNode.Index.ToString(); + } + + public void UpdateTrainTrackNodeUI() + { + if (TrainNode == null) + { + //TrainNodePanel.Enabled = false; + TrainNodeDeleteButton.Enabled = false; + TrainNodeAddToProjectButton.Enabled = false; + TrainNodePositionTextBox.Text = string.Empty; + TrainNodeTypeComboBox.SelectedIndex = -1; + } + else + { + populatingui = true; + //TrainNodePanel.Enabled = true; + TrainNodeDeleteButton.Enabled = ProjectForm.TrainTrackExistsInProject(TrainNode.Track); + TrainNodeAddToProjectButton.Enabled = !TrainNodeDeleteButton.Enabled; + TrainNodePositionTextBox.Text = FloatUtil.GetVector3String(TrainNode.Position); + TrainNodeTypeComboBox.SelectedIndex = TrainNode.NodeType; + populatingui = false; + + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SelectTrainTrackNode(TrainNode); + } + } + } + + private void TrainNodePositionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (TrainNode == null) return; + Vector3 v = FloatUtil.ParseVector3String(TrainNodePositionTextBox.Text); + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (TrainNode.Position != v) + { + TrainNode.SetPosition(v); + ProjectForm.SetTrainTrackHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetPosition(TrainNode.Position); + ProjectForm.WorldForm.UpdateTrainTrackNodeGraphics(TrainNode, false); + } + //TrainNodePositionTextBox.Text = FloatUtil.GetVector3String(CurrentTrainNode.Position); + } + } + + private void TrainNodeGoToButton_Click(object sender, EventArgs e) + { + if (TrainNode == null) return; + if (ProjectForm.WorldForm == null) return; + ProjectForm.WorldForm.GoToPosition(TrainNode.Position); + } + + private void TrainNodeTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (TrainNode == null) return; + int type = TrainNodeTypeComboBox.SelectedIndex; + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (TrainNode.NodeType != type) + { + TrainNode.NodeType = type; + ProjectForm.SetTrainTrackHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.UpdateTrainTrackNodeGraphics(TrainNode, false); //change the colour... + } + } + ProjectForm.ProjectExplorer?.UpdateTrainNodeTreeNode(TrainNode); + } + + private void TrainNodeAddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(TrainNode); + ProjectForm.AddTrainTrackToProject(TrainNode.Track); + } + + private void TrainNodeDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(TrainNode); + ProjectForm.DeleteTrainNode(); + } + } +} diff --git a/Project/Panels/EditTrainNodePanel.resx b/Project/Panels/EditTrainNodePanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditTrainNodePanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditTrainTrackPanel.Designer.cs b/Project/Panels/EditTrainTrackPanel.Designer.cs new file mode 100644 index 0000000..3babf7a --- /dev/null +++ b/Project/Panels/EditTrainTrackPanel.Designer.cs @@ -0,0 +1,275 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditTrainTrackPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditTrainTrackPanel)); + this.TrainTrackInfoLabel = new System.Windows.Forms.Label(); + this.label86 = new System.Windows.Forms.Label(); + this.TrainTrackBrakingDistTextBox = new System.Windows.Forms.TextBox(); + this.label85 = new System.Windows.Forms.Label(); + this.TrainTrackSpeedTextBox = new System.Windows.Forms.TextBox(); + this.TrainTrackMPStopsAtStationsCheckBox = new System.Windows.Forms.CheckBox(); + this.TrainTrackStopsAtStationsCheckBox = new System.Windows.Forms.CheckBox(); + this.TrainTrackIsPingPongCheckBox = new System.Windows.Forms.CheckBox(); + this.label84 = new System.Windows.Forms.Label(); + this.TrainTrackConfigNameTextBox = new System.Windows.Forms.TextBox(); + this.label83 = new System.Windows.Forms.Label(); + this.TrainTrackFilenameTextBox = new System.Windows.Forms.TextBox(); + this.label74 = new System.Windows.Forms.Label(); + this.TrainTrackProjectPathTextBox = new System.Windows.Forms.TextBox(); + this.label79 = new System.Windows.Forms.Label(); + this.TrainTrackFilePathTextBox = new System.Windows.Forms.TextBox(); + this.label80 = new System.Windows.Forms.Label(); + this.TrainTrackRpfPathTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // TrainTrackInfoLabel + // + this.TrainTrackInfoLabel.AutoSize = true; + this.TrainTrackInfoLabel.Location = new System.Drawing.Point(112, 150); + this.TrainTrackInfoLabel.Name = "TrainTrackInfoLabel"; + this.TrainTrackInfoLabel.Size = new System.Drawing.Size(10, 13); + this.TrainTrackInfoLabel.TabIndex = 54; + this.TrainTrackInfoLabel.Text = "-"; + // + // label86 + // + this.label86.AutoSize = true; + this.label86.Location = new System.Drawing.Point(297, 101); + this.label86.Name = "label86"; + this.label86.Size = new System.Drawing.Size(63, 13); + this.label86.TabIndex = 50; + this.label86.Text = "brakingDist:"; + // + // TrainTrackBrakingDistTextBox + // + this.TrainTrackBrakingDistTextBox.Location = new System.Drawing.Point(366, 98); + this.TrainTrackBrakingDistTextBox.Name = "TrainTrackBrakingDistTextBox"; + this.TrainTrackBrakingDistTextBox.ReadOnly = true; + this.TrainTrackBrakingDistTextBox.Size = new System.Drawing.Size(107, 20); + this.TrainTrackBrakingDistTextBox.TabIndex = 49; + // + // label85 + // + this.label85.AutoSize = true; + this.label85.Location = new System.Drawing.Point(70, 101); + this.label85.Name = "label85"; + this.label85.Size = new System.Drawing.Size(39, 13); + this.label85.TabIndex = 48; + this.label85.Text = "speed:"; + // + // TrainTrackSpeedTextBox + // + this.TrainTrackSpeedTextBox.Location = new System.Drawing.Point(115, 98); + this.TrainTrackSpeedTextBox.Name = "TrainTrackSpeedTextBox"; + this.TrainTrackSpeedTextBox.ReadOnly = true; + this.TrainTrackSpeedTextBox.Size = new System.Drawing.Size(107, 20); + this.TrainTrackSpeedTextBox.TabIndex = 47; + // + // TrainTrackMPStopsAtStationsCheckBox + // + this.TrainTrackMPStopsAtStationsCheckBox.AutoSize = true; + this.TrainTrackMPStopsAtStationsCheckBox.Enabled = false; + this.TrainTrackMPStopsAtStationsCheckBox.Location = new System.Drawing.Point(366, 75); + this.TrainTrackMPStopsAtStationsCheckBox.Name = "TrainTrackMPStopsAtStationsCheckBox"; + this.TrainTrackMPStopsAtStationsCheckBox.Size = new System.Drawing.Size(115, 17); + this.TrainTrackMPStopsAtStationsCheckBox.TabIndex = 46; + this.TrainTrackMPStopsAtStationsCheckBox.Text = "MPstopsAtStations"; + this.TrainTrackMPStopsAtStationsCheckBox.UseVisualStyleBackColor = true; + // + // TrainTrackStopsAtStationsCheckBox + // + this.TrainTrackStopsAtStationsCheckBox.AutoSize = true; + this.TrainTrackStopsAtStationsCheckBox.Enabled = false; + this.TrainTrackStopsAtStationsCheckBox.Location = new System.Drawing.Point(240, 75); + this.TrainTrackStopsAtStationsCheckBox.Name = "TrainTrackStopsAtStationsCheckBox"; + this.TrainTrackStopsAtStationsCheckBox.Size = new System.Drawing.Size(99, 17); + this.TrainTrackStopsAtStationsCheckBox.TabIndex = 45; + this.TrainTrackStopsAtStationsCheckBox.Text = "stopsAtStations"; + this.TrainTrackStopsAtStationsCheckBox.UseVisualStyleBackColor = true; + // + // TrainTrackIsPingPongCheckBox + // + this.TrainTrackIsPingPongCheckBox.AutoSize = true; + this.TrainTrackIsPingPongCheckBox.Enabled = false; + this.TrainTrackIsPingPongCheckBox.Location = new System.Drawing.Point(115, 75); + this.TrainTrackIsPingPongCheckBox.Name = "TrainTrackIsPingPongCheckBox"; + this.TrainTrackIsPingPongCheckBox.Size = new System.Drawing.Size(107, 17); + this.TrainTrackIsPingPongCheckBox.TabIndex = 44; + this.TrainTrackIsPingPongCheckBox.Text = "isPingPongTrack"; + this.TrainTrackIsPingPongCheckBox.UseVisualStyleBackColor = true; + // + // label84 + // + this.label84.AutoSize = true; + this.label84.Location = new System.Drawing.Point(21, 52); + this.label84.Name = "label84"; + this.label84.Size = new System.Drawing.Size(88, 13); + this.label84.TabIndex = 43; + this.label84.Text = "trainConfigName:"; + // + // TrainTrackConfigNameTextBox + // + this.TrainTrackConfigNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TrainTrackConfigNameTextBox.Location = new System.Drawing.Point(115, 49); + this.TrainTrackConfigNameTextBox.Name = "TrainTrackConfigNameTextBox"; + this.TrainTrackConfigNameTextBox.ReadOnly = true; + this.TrainTrackConfigNameTextBox.Size = new System.Drawing.Size(360, 20); + this.TrainTrackConfigNameTextBox.TabIndex = 42; + // + // label83 + // + this.label83.AutoSize = true; + this.label83.Location = new System.Drawing.Point(60, 26); + this.label83.Name = "label83"; + this.label83.Size = new System.Drawing.Size(49, 13); + this.label83.TabIndex = 41; + this.label83.Text = "filename:"; + // + // TrainTrackFilenameTextBox + // + this.TrainTrackFilenameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TrainTrackFilenameTextBox.Location = new System.Drawing.Point(115, 23); + this.TrainTrackFilenameTextBox.Name = "TrainTrackFilenameTextBox"; + this.TrainTrackFilenameTextBox.ReadOnly = true; + this.TrainTrackFilenameTextBox.Size = new System.Drawing.Size(360, 20); + this.TrainTrackFilenameTextBox.TabIndex = 40; + // + // label74 + // + this.label74.AutoSize = true; + this.label74.Location = new System.Drawing.Point(21, 271); + this.label74.Name = "label74"; + this.label74.Size = new System.Drawing.Size(68, 13); + this.label74.TabIndex = 39; + this.label74.Text = "Project Path:"; + // + // TrainTrackProjectPathTextBox + // + this.TrainTrackProjectPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TrainTrackProjectPathTextBox.Location = new System.Drawing.Point(95, 268); + this.TrainTrackProjectPathTextBox.Name = "TrainTrackProjectPathTextBox"; + this.TrainTrackProjectPathTextBox.ReadOnly = true; + this.TrainTrackProjectPathTextBox.Size = new System.Drawing.Size(380, 20); + this.TrainTrackProjectPathTextBox.TabIndex = 53; + // + // label79 + // + this.label79.AutoSize = true; + this.label79.Location = new System.Drawing.Point(21, 245); + this.label79.Name = "label79"; + this.label79.Size = new System.Drawing.Size(51, 13); + this.label79.TabIndex = 38; + this.label79.Text = "File Path:"; + // + // TrainTrackFilePathTextBox + // + this.TrainTrackFilePathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TrainTrackFilePathTextBox.Location = new System.Drawing.Point(95, 242); + this.TrainTrackFilePathTextBox.Name = "TrainTrackFilePathTextBox"; + this.TrainTrackFilePathTextBox.ReadOnly = true; + this.TrainTrackFilePathTextBox.Size = new System.Drawing.Size(380, 20); + this.TrainTrackFilePathTextBox.TabIndex = 52; + // + // label80 + // + this.label80.AutoSize = true; + this.label80.Location = new System.Drawing.Point(21, 219); + this.label80.Name = "label80"; + this.label80.Size = new System.Drawing.Size(52, 13); + this.label80.TabIndex = 37; + this.label80.Text = "Rpf Path:"; + // + // TrainTrackRpfPathTextBox + // + this.TrainTrackRpfPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TrainTrackRpfPathTextBox.Location = new System.Drawing.Point(95, 216); + this.TrainTrackRpfPathTextBox.Name = "TrainTrackRpfPathTextBox"; + this.TrainTrackRpfPathTextBox.ReadOnly = true; + this.TrainTrackRpfPathTextBox.Size = new System.Drawing.Size(380, 20); + this.TrainTrackRpfPathTextBox.TabIndex = 51; + // + // EditTrainTrackPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(506, 346); + this.Controls.Add(this.TrainTrackInfoLabel); + this.Controls.Add(this.label86); + this.Controls.Add(this.TrainTrackBrakingDistTextBox); + this.Controls.Add(this.label85); + this.Controls.Add(this.TrainTrackSpeedTextBox); + this.Controls.Add(this.TrainTrackMPStopsAtStationsCheckBox); + this.Controls.Add(this.TrainTrackStopsAtStationsCheckBox); + this.Controls.Add(this.TrainTrackIsPingPongCheckBox); + this.Controls.Add(this.label84); + this.Controls.Add(this.TrainTrackConfigNameTextBox); + this.Controls.Add(this.label83); + this.Controls.Add(this.TrainTrackFilenameTextBox); + this.Controls.Add(this.label74); + this.Controls.Add(this.TrainTrackProjectPathTextBox); + this.Controls.Add(this.label79); + this.Controls.Add(this.TrainTrackFilePathTextBox); + this.Controls.Add(this.label80); + this.Controls.Add(this.TrainTrackRpfPathTextBox); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditTrainTrackPanel"; + this.Text = "Edit Train Track"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label TrainTrackInfoLabel; + private System.Windows.Forms.Label label86; + private System.Windows.Forms.TextBox TrainTrackBrakingDistTextBox; + private System.Windows.Forms.Label label85; + private System.Windows.Forms.TextBox TrainTrackSpeedTextBox; + private System.Windows.Forms.CheckBox TrainTrackMPStopsAtStationsCheckBox; + private System.Windows.Forms.CheckBox TrainTrackStopsAtStationsCheckBox; + private System.Windows.Forms.CheckBox TrainTrackIsPingPongCheckBox; + private System.Windows.Forms.Label label84; + private System.Windows.Forms.TextBox TrainTrackConfigNameTextBox; + private System.Windows.Forms.Label label83; + private System.Windows.Forms.TextBox TrainTrackFilenameTextBox; + private System.Windows.Forms.Label label74; + private System.Windows.Forms.TextBox TrainTrackProjectPathTextBox; + private System.Windows.Forms.Label label79; + private System.Windows.Forms.TextBox TrainTrackFilePathTextBox; + private System.Windows.Forms.Label label80; + private System.Windows.Forms.TextBox TrainTrackRpfPathTextBox; + } +} \ No newline at end of file diff --git a/Project/Panels/EditTrainTrackPanel.cs b/Project/Panels/EditTrainTrackPanel.cs new file mode 100644 index 0000000..90e067e --- /dev/null +++ b/Project/Panels/EditTrainTrackPanel.cs @@ -0,0 +1,95 @@ +using CodeWalker.World; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditTrainTrackPanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public TrainTrack Track { get; set; } + + //private bool populatingui = false; + private bool waschanged = false; + + public EditTrainTrackPanel(ProjectForm2 projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + } + + public void SetTrainTrack(TrainTrack track) + { + Track = track; + Tag = track; + UpdateFormTitle(); + UpdateTrainTrackUI(); + waschanged = track?.HasChanged ?? false; + } + + public void UpdateFormTitleYnvChanged() + { + bool changed = Track.HasChanged; + if (!waschanged && changed) + { + UpdateFormTitle(); + waschanged = true; + } + else if (waschanged && !changed) + { + UpdateFormTitle(); + waschanged = false; + } + } + private void UpdateFormTitle() + { + string fn = Track.RpfFileEntry?.Name ?? Track.Name; + if (string.IsNullOrEmpty(fn)) fn = "Edit Train Track"; + Text = fn + (Track.HasChanged ? "*" : ""); + } + + + public void UpdateTrainTrackUI() + { + if (Track == null) + { + //TrainTrackFilePanel.Enabled = false; + TrainTrackFilenameTextBox.Text = string.Empty; + TrainTrackConfigNameTextBox.Text = string.Empty; + TrainTrackIsPingPongCheckBox.Checked = false; + TrainTrackStopsAtStationsCheckBox.Checked = false; + TrainTrackMPStopsAtStationsCheckBox.Checked = false; + TrainTrackSpeedTextBox.Text = string.Empty; + TrainTrackBrakingDistTextBox.Text = string.Empty; + TrainTrackRpfPathTextBox.Text = string.Empty; + TrainTrackFilePathTextBox.Text = string.Empty; + TrainTrackProjectPathTextBox.Text = string.Empty; + TrainTrackInfoLabel.Text = string.Empty; + } + else + { + //populatingui = true; + //TrainTrackFilePanel.Enabled = true; + TrainTrackFilenameTextBox.Text = Track.filename; + TrainTrackConfigNameTextBox.Text = Track.trainConfigName; + TrainTrackIsPingPongCheckBox.Checked = Track.isPingPongTrack; + TrainTrackStopsAtStationsCheckBox.Checked = Track.stopsAtStations; + TrainTrackMPStopsAtStationsCheckBox.Checked = Track.MPstopsAtStations; + TrainTrackSpeedTextBox.Text = FloatUtil.ToString(Track.speed); + TrainTrackBrakingDistTextBox.Text = FloatUtil.ToString(Track.brakingDist); + TrainTrackRpfPathTextBox.Text = Track.RpfFileEntry?.Path ?? string.Empty; + TrainTrackFilePathTextBox.Text = Track.FilePath; + TrainTrackProjectPathTextBox.Text = string.Empty; //todo + TrainTrackInfoLabel.Text = Track.StationCount.ToString() + " stations"; + //populatingui = false; + } + } + } +} diff --git a/Project/Panels/EditTrainTrackPanel.resx b/Project/Panels/EditTrainTrackPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditTrainTrackPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditYmapCarGenPanel.Designer.cs b/Project/Panels/EditYmapCarGenPanel.Designer.cs new file mode 100644 index 0000000..738a791 --- /dev/null +++ b/Project/Panels/EditYmapCarGenPanel.Designer.cs @@ -0,0 +1,464 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditYmapCarGenPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYmapCarGenPanel)); + this.CarFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); + this.CarDeleteButton = new System.Windows.Forms.Button(); + this.CarAddToProjectButton = new System.Windows.Forms.Button(); + this.label44 = new System.Windows.Forms.Label(); + this.CarLiveryTextBox = new System.Windows.Forms.TextBox(); + this.label43 = new System.Windows.Forms.Label(); + this.CarBodyColorRemap4TextBox = new System.Windows.Forms.TextBox(); + this.label42 = new System.Windows.Forms.Label(); + this.CarBodyColorRemap3TextBox = new System.Windows.Forms.TextBox(); + this.label41 = new System.Windows.Forms.Label(); + this.CarBodyColorRemap2TextBox = new System.Windows.Forms.TextBox(); + this.CarPopGroupTextBox = new System.Windows.Forms.TextBox(); + this.label39 = new System.Windows.Forms.Label(); + this.CarPopGroupHashLabel = new System.Windows.Forms.Label(); + this.label38 = new System.Windows.Forms.Label(); + this.CarBodyColorRemap1TextBox = new System.Windows.Forms.TextBox(); + this.label37 = new System.Windows.Forms.Label(); + this.CarFlagsTextBox = new System.Windows.Forms.TextBox(); + this.CarPerpendicularLengthTextBox = new System.Windows.Forms.TextBox(); + this.label36 = new System.Windows.Forms.Label(); + this.CarOrientYTextBox = new System.Windows.Forms.TextBox(); + this.label34 = new System.Windows.Forms.Label(); + this.CarOrientXTextBox = new System.Windows.Forms.TextBox(); + this.label35 = new System.Windows.Forms.Label(); + this.CarModelTextBox = new System.Windows.Forms.TextBox(); + this.label32 = new System.Windows.Forms.Label(); + this.CarModelHashLabel = new System.Windows.Forms.Label(); + this.CarGoToButton = new System.Windows.Forms.Button(); + this.CarPositionTextBox = new System.Windows.Forms.TextBox(); + this.label31 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // CarFlagsCheckedListBox + // + this.CarFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarFlagsCheckedListBox.CheckOnClick = true; + this.CarFlagsCheckedListBox.FormattingEnabled = true; + this.CarFlagsCheckedListBox.Items.AddRange(new object[] { + "1 - Unk01", + "2 - Unk02", + "4 - Unk03", + "8 - Unk04", + "16 - Unk05", + "32 - Unk06", + "64 - Unk07", + "128 - Unk08", + "256 - Unk09", + "512 - Unk10", + "1024 - Unk11", + "2048 - Unk12", + "4096 - Unk13", + "8192 - Unk14", + "16384 - Unk15", + "32768 - Unk16", + "65536 - Unk17", + "131072 - Unk18", + "262144 - Unk19", + "524288 - Unk20", + "1048576 - Unk21", + "2097152 - Unk22", + "4194304 - Unk23", + "8388608 - Unk24", + "16777216 - Unk25", + "33554432 - Unk26", + "67108864 - Unk27", + "134217728 - Unk28", + "268435456 - Unk29", + "536870912 - Unk30", + "1073741824 - Unk31", + "2147483648 - Unk32"}); + this.CarFlagsCheckedListBox.Location = new System.Drawing.Point(345, 112); + this.CarFlagsCheckedListBox.Name = "CarFlagsCheckedListBox"; + this.CarFlagsCheckedListBox.Size = new System.Drawing.Size(201, 289); + this.CarFlagsCheckedListBox.TabIndex = 103; + this.CarFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.CarFlagsCheckedListBox_ItemCheck); + // + // CarDeleteButton + // + this.CarDeleteButton.Location = new System.Drawing.Point(163, 309); + this.CarDeleteButton.Name = "CarDeleteButton"; + this.CarDeleteButton.Size = new System.Drawing.Size(95, 23); + this.CarDeleteButton.TabIndex = 105; + this.CarDeleteButton.Text = "Delete CarGen"; + this.CarDeleteButton.UseVisualStyleBackColor = true; + this.CarDeleteButton.Click += new System.EventHandler(this.CarDeleteButton_Click); + // + // CarAddToProjectButton + // + this.CarAddToProjectButton.Location = new System.Drawing.Point(62, 309); + this.CarAddToProjectButton.Name = "CarAddToProjectButton"; + this.CarAddToProjectButton.Size = new System.Drawing.Size(95, 23); + this.CarAddToProjectButton.TabIndex = 104; + this.CarAddToProjectButton.Text = "Add to Project"; + this.CarAddToProjectButton.UseVisualStyleBackColor = true; + this.CarAddToProjectButton.Click += new System.EventHandler(this.CarAddToProjectButton_Click); + // + // label44 + // + this.label44.AutoSize = true; + this.label44.Location = new System.Drawing.Point(4, 271); + this.label44.Name = "label44"; + this.label44.Size = new System.Drawing.Size(38, 13); + this.label44.TabIndex = 99; + this.label44.Text = "Livery:"; + // + // CarLiveryTextBox + // + this.CarLiveryTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarLiveryTextBox.Location = new System.Drawing.Point(118, 268); + this.CarLiveryTextBox.Name = "CarLiveryTextBox"; + this.CarLiveryTextBox.Size = new System.Drawing.Size(198, 20); + this.CarLiveryTextBox.TabIndex = 100; + this.CarLiveryTextBox.TextChanged += new System.EventHandler(this.CarLiveryTextBox_TextChanged); + // + // label43 + // + this.label43.AutoSize = true; + this.label43.Location = new System.Drawing.Point(4, 245); + this.label43.Name = "label43"; + this.label43.Size = new System.Drawing.Size(98, 13); + this.label43.TabIndex = 97; + this.label43.Text = "BodyColorRemap4:"; + // + // CarBodyColorRemap4TextBox + // + this.CarBodyColorRemap4TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarBodyColorRemap4TextBox.Location = new System.Drawing.Point(118, 242); + this.CarBodyColorRemap4TextBox.Name = "CarBodyColorRemap4TextBox"; + this.CarBodyColorRemap4TextBox.Size = new System.Drawing.Size(198, 20); + this.CarBodyColorRemap4TextBox.TabIndex = 98; + this.CarBodyColorRemap4TextBox.TextChanged += new System.EventHandler(this.CarBodyColorRemap4TextBox_TextChanged); + // + // label42 + // + this.label42.AutoSize = true; + this.label42.Location = new System.Drawing.Point(4, 219); + this.label42.Name = "label42"; + this.label42.Size = new System.Drawing.Size(98, 13); + this.label42.TabIndex = 95; + this.label42.Text = "BodyColorRemap3:"; + // + // CarBodyColorRemap3TextBox + // + this.CarBodyColorRemap3TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarBodyColorRemap3TextBox.Location = new System.Drawing.Point(118, 216); + this.CarBodyColorRemap3TextBox.Name = "CarBodyColorRemap3TextBox"; + this.CarBodyColorRemap3TextBox.Size = new System.Drawing.Size(198, 20); + this.CarBodyColorRemap3TextBox.TabIndex = 96; + this.CarBodyColorRemap3TextBox.TextChanged += new System.EventHandler(this.CarBodyColorRemap3TextBox_TextChanged); + // + // label41 + // + this.label41.AutoSize = true; + this.label41.Location = new System.Drawing.Point(4, 193); + this.label41.Name = "label41"; + this.label41.Size = new System.Drawing.Size(98, 13); + this.label41.TabIndex = 93; + this.label41.Text = "BodyColorRemap2:"; + // + // CarBodyColorRemap2TextBox + // + this.CarBodyColorRemap2TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarBodyColorRemap2TextBox.Location = new System.Drawing.Point(118, 190); + this.CarBodyColorRemap2TextBox.Name = "CarBodyColorRemap2TextBox"; + this.CarBodyColorRemap2TextBox.Size = new System.Drawing.Size(198, 20); + this.CarBodyColorRemap2TextBox.TabIndex = 94; + this.CarBodyColorRemap2TextBox.TextChanged += new System.EventHandler(this.CarBodyColorRemap2TextBox_TextChanged); + // + // CarPopGroupTextBox + // + this.CarPopGroupTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarPopGroupTextBox.Location = new System.Drawing.Point(82, 60); + this.CarPopGroupTextBox.Name = "CarPopGroupTextBox"; + this.CarPopGroupTextBox.Size = new System.Drawing.Size(310, 20); + this.CarPopGroupTextBox.TabIndex = 80; + this.CarPopGroupTextBox.TextChanged += new System.EventHandler(this.CarPopGroupTextBox_TextChanged); + // + // label39 + // + this.label39.AutoSize = true; + this.label39.Location = new System.Drawing.Point(4, 63); + this.label39.Name = "label39"; + this.label39.Size = new System.Drawing.Size(58, 13); + this.label39.TabIndex = 79; + this.label39.Text = "PopGroup:"; + // + // CarPopGroupHashLabel + // + this.CarPopGroupHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.CarPopGroupHashLabel.AutoSize = true; + this.CarPopGroupHashLabel.Location = new System.Drawing.Point(398, 63); + this.CarPopGroupHashLabel.Name = "CarPopGroupHashLabel"; + this.CarPopGroupHashLabel.Size = new System.Drawing.Size(44, 13); + this.CarPopGroupHashLabel.TabIndex = 81; + this.CarPopGroupHashLabel.Text = "Hash: 0"; + // + // label38 + // + this.label38.AutoSize = true; + this.label38.Location = new System.Drawing.Point(4, 167); + this.label38.Name = "label38"; + this.label38.Size = new System.Drawing.Size(98, 13); + this.label38.TabIndex = 91; + this.label38.Text = "BodyColorRemap1:"; + // + // CarBodyColorRemap1TextBox + // + this.CarBodyColorRemap1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarBodyColorRemap1TextBox.Location = new System.Drawing.Point(118, 164); + this.CarBodyColorRemap1TextBox.Name = "CarBodyColorRemap1TextBox"; + this.CarBodyColorRemap1TextBox.Size = new System.Drawing.Size(198, 20); + this.CarBodyColorRemap1TextBox.TabIndex = 92; + this.CarBodyColorRemap1TextBox.TextChanged += new System.EventHandler(this.CarBodyColorRemap1TextBox_TextChanged); + // + // label37 + // + this.label37.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label37.AutoSize = true; + this.label37.Location = new System.Drawing.Point(362, 89); + this.label37.Name = "label37"; + this.label37.Size = new System.Drawing.Size(35, 13); + this.label37.TabIndex = 101; + this.label37.Text = "Flags:"; + // + // CarFlagsTextBox + // + this.CarFlagsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.CarFlagsTextBox.Location = new System.Drawing.Point(403, 86); + this.CarFlagsTextBox.Name = "CarFlagsTextBox"; + this.CarFlagsTextBox.Size = new System.Drawing.Size(143, 20); + this.CarFlagsTextBox.TabIndex = 102; + this.CarFlagsTextBox.TextChanged += new System.EventHandler(this.CarFlagsTextBox_TextChanged); + // + // CarPerpendicularLengthTextBox + // + this.CarPerpendicularLengthTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarPerpendicularLengthTextBox.Location = new System.Drawing.Point(118, 138); + this.CarPerpendicularLengthTextBox.Name = "CarPerpendicularLengthTextBox"; + this.CarPerpendicularLengthTextBox.Size = new System.Drawing.Size(198, 20); + this.CarPerpendicularLengthTextBox.TabIndex = 90; + this.CarPerpendicularLengthTextBox.TextChanged += new System.EventHandler(this.CarPerpendicularLengthTextBox_TextChanged); + // + // label36 + // + this.label36.AutoSize = true; + this.label36.Location = new System.Drawing.Point(4, 141); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(108, 13); + this.label36.TabIndex = 89; + this.label36.Text = "PerpendicularLength:"; + // + // CarOrientYTextBox + // + this.CarOrientYTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarOrientYTextBox.Location = new System.Drawing.Point(82, 112); + this.CarOrientYTextBox.Name = "CarOrientYTextBox"; + this.CarOrientYTextBox.Size = new System.Drawing.Size(234, 20); + this.CarOrientYTextBox.TabIndex = 88; + this.CarOrientYTextBox.TextChanged += new System.EventHandler(this.CarOrientYTextBox_TextChanged); + // + // label34 + // + this.label34.AutoSize = true; + this.label34.Location = new System.Drawing.Point(4, 115); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(45, 13); + this.label34.TabIndex = 87; + this.label34.Text = "OrientY:"; + // + // CarOrientXTextBox + // + this.CarOrientXTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarOrientXTextBox.Location = new System.Drawing.Point(82, 86); + this.CarOrientXTextBox.Name = "CarOrientXTextBox"; + this.CarOrientXTextBox.Size = new System.Drawing.Size(234, 20); + this.CarOrientXTextBox.TabIndex = 86; + this.CarOrientXTextBox.TextChanged += new System.EventHandler(this.CarOrientXTextBox_TextChanged); + // + // label35 + // + this.label35.AutoSize = true; + this.label35.Location = new System.Drawing.Point(4, 89); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(45, 13); + this.label35.TabIndex = 85; + this.label35.Text = "OrientX:"; + // + // CarModelTextBox + // + this.CarModelTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarModelTextBox.Location = new System.Drawing.Point(82, 34); + this.CarModelTextBox.Name = "CarModelTextBox"; + this.CarModelTextBox.Size = new System.Drawing.Size(310, 20); + this.CarModelTextBox.TabIndex = 77; + this.CarModelTextBox.TextChanged += new System.EventHandler(this.CarModelTextBox_TextChanged); + // + // label32 + // + this.label32.AutoSize = true; + this.label32.Location = new System.Drawing.Point(4, 37); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(55, 13); + this.label32.TabIndex = 76; + this.label32.Text = "CarModel:"; + // + // CarModelHashLabel + // + this.CarModelHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.CarModelHashLabel.AutoSize = true; + this.CarModelHashLabel.Location = new System.Drawing.Point(398, 37); + this.CarModelHashLabel.Name = "CarModelHashLabel"; + this.CarModelHashLabel.Size = new System.Drawing.Size(44, 13); + this.CarModelHashLabel.TabIndex = 78; + this.CarModelHashLabel.Text = "Hash: 0"; + // + // CarGoToButton + // + this.CarGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.CarGoToButton.Location = new System.Drawing.Point(478, 6); + this.CarGoToButton.Name = "CarGoToButton"; + this.CarGoToButton.Size = new System.Drawing.Size(68, 23); + this.CarGoToButton.TabIndex = 84; + this.CarGoToButton.Text = "Go to"; + this.CarGoToButton.UseVisualStyleBackColor = true; + this.CarGoToButton.Click += new System.EventHandler(this.CarGoToButton_Click); + // + // CarPositionTextBox + // + this.CarPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CarPositionTextBox.Location = new System.Drawing.Point(82, 8); + this.CarPositionTextBox.Name = "CarPositionTextBox"; + this.CarPositionTextBox.Size = new System.Drawing.Size(390, 20); + this.CarPositionTextBox.TabIndex = 83; + this.CarPositionTextBox.TextChanged += new System.EventHandler(this.CarPositionTextBox_TextChanged); + // + // label31 + // + this.label31.AutoSize = true; + this.label31.Location = new System.Drawing.Point(4, 11); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(47, 13); + this.label31.TabIndex = 82; + this.label31.Text = "Position:"; + // + // EditYmapCarGenPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(553, 407); + this.Controls.Add(this.CarFlagsCheckedListBox); + this.Controls.Add(this.CarDeleteButton); + this.Controls.Add(this.CarAddToProjectButton); + this.Controls.Add(this.label44); + this.Controls.Add(this.CarLiveryTextBox); + this.Controls.Add(this.label43); + this.Controls.Add(this.CarBodyColorRemap4TextBox); + this.Controls.Add(this.label42); + this.Controls.Add(this.CarBodyColorRemap3TextBox); + this.Controls.Add(this.label41); + this.Controls.Add(this.CarBodyColorRemap2TextBox); + this.Controls.Add(this.CarPopGroupTextBox); + this.Controls.Add(this.label39); + this.Controls.Add(this.CarPopGroupHashLabel); + this.Controls.Add(this.label38); + this.Controls.Add(this.CarBodyColorRemap1TextBox); + this.Controls.Add(this.label37); + this.Controls.Add(this.CarFlagsTextBox); + this.Controls.Add(this.CarPerpendicularLengthTextBox); + this.Controls.Add(this.label36); + this.Controls.Add(this.CarOrientYTextBox); + this.Controls.Add(this.label34); + this.Controls.Add(this.CarOrientXTextBox); + this.Controls.Add(this.label35); + this.Controls.Add(this.CarModelTextBox); + this.Controls.Add(this.label32); + this.Controls.Add(this.CarModelHashLabel); + this.Controls.Add(this.CarGoToButton); + this.Controls.Add(this.CarPositionTextBox); + this.Controls.Add(this.label31); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditYmapCarGenPanel"; + this.Text = "Car Generator"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.CheckedListBox CarFlagsCheckedListBox; + private System.Windows.Forms.Button CarDeleteButton; + private System.Windows.Forms.Button CarAddToProjectButton; + private System.Windows.Forms.Label label44; + private System.Windows.Forms.TextBox CarLiveryTextBox; + private System.Windows.Forms.Label label43; + private System.Windows.Forms.TextBox CarBodyColorRemap4TextBox; + private System.Windows.Forms.Label label42; + private System.Windows.Forms.TextBox CarBodyColorRemap3TextBox; + private System.Windows.Forms.Label label41; + private System.Windows.Forms.TextBox CarBodyColorRemap2TextBox; + private System.Windows.Forms.TextBox CarPopGroupTextBox; + private System.Windows.Forms.Label label39; + private System.Windows.Forms.Label CarPopGroupHashLabel; + private System.Windows.Forms.Label label38; + private System.Windows.Forms.TextBox CarBodyColorRemap1TextBox; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.TextBox CarFlagsTextBox; + private System.Windows.Forms.TextBox CarPerpendicularLengthTextBox; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.TextBox CarOrientYTextBox; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.TextBox CarOrientXTextBox; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.TextBox CarModelTextBox; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.Label CarModelHashLabel; + private System.Windows.Forms.Button CarGoToButton; + private System.Windows.Forms.TextBox CarPositionTextBox; + private System.Windows.Forms.Label label31; + } +} \ No newline at end of file diff --git a/Project/Panels/EditYmapCarGenPanel.cs b/Project/Panels/EditYmapCarGenPanel.cs new file mode 100644 index 0000000..c9da213 --- /dev/null +++ b/Project/Panels/EditYmapCarGenPanel.cs @@ -0,0 +1,421 @@ +using CodeWalker.GameFiles; +using SharpDX; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditYmapCarGenPanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public YmapCarGen CurrentCarGen { get; set; } + + private bool populatingui = false; + + public EditYmapCarGenPanel(ProjectForm2 owner) + { + ProjectForm = owner; + InitializeComponent(); + } + + public void SetCarGen(YmapCarGen cargen) + { + CurrentCarGen = cargen; + Tag = cargen; + LoadCarGen(); + UpdateFormTitle(); + } + + private void UpdateFormTitle() + { + if (CurrentCarGen._CCarGen.carModel == 0) + { + Text = "Car Generator"; + } + else + { + Text = CurrentCarGen?.NameString() ?? "Car Generator"; + } + } + + + private void LoadCarGen() + { + + if (CurrentCarGen == null) + { + //CarGenPanel.Enabled = false; + CarAddToProjectButton.Enabled = false; + CarDeleteButton.Enabled = false; + CarModelTextBox.Text = string.Empty; + CarModelHashLabel.Text = "Hash: 0"; + CarPopGroupTextBox.Text = string.Empty; + CarPopGroupHashLabel.Text = "Hash: 0"; + CarFlagsTextBox.Text = string.Empty; + CarPositionTextBox.Text = string.Empty; + CarOrientXTextBox.Text = string.Empty; + CarOrientYTextBox.Text = string.Empty; + CarPerpendicularLengthTextBox.Text = string.Empty; + CarBodyColorRemap1TextBox.Text = string.Empty; + CarBodyColorRemap2TextBox.Text = string.Empty; + CarBodyColorRemap3TextBox.Text = string.Empty; + CarBodyColorRemap4TextBox.Text = string.Empty; + CarLiveryTextBox.Text = string.Empty; + foreach (int i in CarFlagsCheckedListBox.CheckedIndices) + { + CarFlagsCheckedListBox.SetItemCheckState(i, CheckState.Unchecked); + } + } + else + { + populatingui = true; + var c = CurrentCarGen.CCarGen; + //CarGenPanel.Enabled = true; + CarAddToProjectButton.Enabled = !ProjectForm.YmapExistsInProject(CurrentCarGen.Ymap); + CarDeleteButton.Enabled = !CarAddToProjectButton.Enabled; + CarModelTextBox.Text = c.carModel.ToString(); + CarModelHashLabel.Text = "Hash: " + c.carModel.Hash.ToString(); + CarPopGroupTextBox.Text = c.popGroup.ToString(); + CarPopGroupHashLabel.Text = "Hash: " + c.popGroup.Hash.ToString(); + CarFlagsTextBox.Text = c.flags.ToString(); + CarPositionTextBox.Text = FloatUtil.GetVector3String(c.position); + CarOrientXTextBox.Text = FloatUtil.ToString(c.orientX); + CarOrientYTextBox.Text = FloatUtil.ToString(c.orientY); + CarPerpendicularLengthTextBox.Text = FloatUtil.ToString(c.perpendicularLength); + CarBodyColorRemap1TextBox.Text = c.bodyColorRemap1.ToString(); + CarBodyColorRemap2TextBox.Text = c.bodyColorRemap2.ToString(); + CarBodyColorRemap3TextBox.Text = c.bodyColorRemap3.ToString(); + CarBodyColorRemap4TextBox.Text = c.bodyColorRemap4.ToString(); + CarLiveryTextBox.Text = c.livery.ToString(); + for (int i = 0; i < CarFlagsCheckedListBox.Items.Count; i++) + { + var cv = ((c.flags & (1u << i)) > 0); + CarFlagsCheckedListBox.SetItemCheckState(i, cv ? CheckState.Checked : CheckState.Unchecked); + } + populatingui = false; + + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SelectCarGen(CurrentCarGen); + } + + ////struct CCarGen: + //Vector3 position { get; set; } //16 16: Float_XYZ: 0: position + //float orientX { get; set; } //32 32: Float: 0: orientX=735213009 + //float orientY { get; set; } //36 36: Float: 0: orientY=979440342 + //float perpendicularLength { get; set; } //40 40: Float: 0: perpendicularLength=124715667 + //MetaHash carModel { get; set; } //44 44: Hash: 0: carModel + //uint flags { get; set; } //48 48: UnsignedInt: 0: flags + //int bodyColorRemap1 { get; set; } //52 52: SignedInt: 0: bodyColorRemap1=1429703670 + //int bodyColorRemap2 { get; set; } //56 56: SignedInt: 0: bodyColorRemap2=1254848286 + //int bodyColorRemap3 { get; set; } //60 60: SignedInt: 0: bodyColorRemap3=1880965569 + //int bodyColorRemap4 { get; set; } //64 64: SignedInt: 0: bodyColorRemap4=1719152247 + //MetaHash popGroup { get; set; } //68 68: Hash: 0: popGroup=911358791 + //sbyte livery { get; set; } //72 72: SignedByte: 0: livery + } + } + + private void CarModelTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + uint hash = 0; + string name = CarModelTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + CarModelHashLabel.Text = "Hash: " + hash.ToString(); + + //var model = GameFileCache.GetCarInfo(hash); //todo: something like this for car info? + //if (model == null) + //{ + // CarModelHashLabel.Text += " (not found)"; + //} + + if (CurrentCarGen != null) + { + lock (ProjectForm.ProjectSyncRoot) + { + var modelhash = new MetaHash(hash); + if (CurrentCarGen._CCarGen.carModel != modelhash) + { + CurrentCarGen._CCarGen.carModel = modelhash; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + ProjectForm.ProjectExplorer?.UpdateCarGenTreeNode(CurrentCarGen); + + } + + private void CarPopGroupTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + uint hash = 0; + string name = CarPopGroupTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + CarPopGroupHashLabel.Text = "Hash: " + hash.ToString(); + + //var grp = GameFileCache.GetCarPopGroup(hash); //todo: something like this for popgroup info? + //if (grp == null) + //{ + // CarPopGroupHashLabel.Text += " (not found)"; + //} + + if (CurrentCarGen != null) + { + lock (ProjectForm.ProjectSyncRoot) + { + var pghash = new MetaHash(hash); + if (CurrentCarGen._CCarGen.popGroup != pghash) + { + CurrentCarGen._CCarGen.popGroup = pghash; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + ProjectForm.ProjectExplorer?.UpdateCarGenTreeNode(CurrentCarGen); + } + + private void CarFlagsTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + uint flags = 0; + uint.TryParse(CarFlagsTextBox.Text, out flags); + populatingui = true; + for (int i = 0; i < CarFlagsCheckedListBox.Items.Count; i++) + { + var c = ((flags & (1u << i)) > 0); + CarFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); + } + populatingui = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentCarGen._CCarGen.flags != flags) + { + CurrentCarGen._CCarGen.flags = flags; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void CarFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + uint flags = 0; + for (int i = 0; i < CarFlagsCheckedListBox.Items.Count; i++) + { + if (e.Index == i) + { + if (e.NewValue == CheckState.Checked) + { + flags += (uint)(1 << i); + } + } + else + { + if (CarFlagsCheckedListBox.GetItemChecked(i)) + { + flags += (uint)(1 << i); + } + } + } + populatingui = true; + CarFlagsTextBox.Text = flags.ToString(); + populatingui = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentCarGen._CCarGen.flags != flags) + { + CurrentCarGen._CCarGen.flags = flags; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void CarPositionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + Vector3 v = FloatUtil.ParseVector3String(CarPositionTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentCarGen.Position != v) + { + CurrentCarGen.SetPosition(v); + ProjectForm.SetYmapHasChanged(true); + ProjectForm.WorldForm?.SetWidgetPosition(v); + } + } + + ProjectForm.ProjectExplorer?.UpdateCarGenTreeNode(CurrentCarGen); + } + + private void CarOrientXTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + float ox = FloatUtil.Parse(CarOrientXTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentCarGen._CCarGen.orientX != ox) + { + CurrentCarGen._CCarGen.orientX = ox; + CurrentCarGen.CalcOrientation(); + ProjectForm.SetYmapHasChanged(true); + ProjectForm.WorldForm?.SetWidgetRotation(CurrentCarGen.Orientation); + } + } + } + + private void CarOrientYTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + float oy = FloatUtil.Parse(CarOrientYTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentCarGen._CCarGen.orientY != oy) + { + CurrentCarGen._CCarGen.orientY = oy; + CurrentCarGen.CalcOrientation(); + ProjectForm.SetYmapHasChanged(true); + ProjectForm.WorldForm?.SetWidgetRotation(CurrentCarGen.Orientation); + } + } + } + + private void CarPerpendicularLengthTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + float len = FloatUtil.Parse(CarPerpendicularLengthTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentCarGen._CCarGen.perpendicularLength != len) + { + CurrentCarGen.SetLength(len); + ProjectForm.SetYmapHasChanged(true); + ProjectForm.WorldForm?.SetWidgetScale(new Vector3(len)); + } + } + } + + private void CarBodyColorRemap1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + int cr = 0; + int.TryParse(CarBodyColorRemap1TextBox.Text, out cr); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentCarGen._CCarGen.bodyColorRemap1 != cr) + { + CurrentCarGen._CCarGen.bodyColorRemap1 = cr; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void CarBodyColorRemap2TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + int cr = 0; + int.TryParse(CarBodyColorRemap2TextBox.Text, out cr); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentCarGen._CCarGen.bodyColorRemap2 != cr) + { + CurrentCarGen._CCarGen.bodyColorRemap2 = cr; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void CarBodyColorRemap3TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + int cr = 0; + int.TryParse(CarBodyColorRemap3TextBox.Text, out cr); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentCarGen._CCarGen.bodyColorRemap3 != cr) + { + CurrentCarGen._CCarGen.bodyColorRemap3 = cr; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void CarBodyColorRemap4TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + int cr = 0; + int.TryParse(CarBodyColorRemap4TextBox.Text, out cr); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentCarGen._CCarGen.bodyColorRemap4 != cr) + { + CurrentCarGen._CCarGen.bodyColorRemap4 = cr; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void CarLiveryTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentCarGen == null) return; + sbyte cr = 0; + sbyte.TryParse(CarLiveryTextBox.Text, out cr); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentCarGen._CCarGen.livery != cr) + { + CurrentCarGen._CCarGen.livery = cr; + ProjectForm.SetYmapHasChanged(true); + } + } + ProjectForm.ProjectExplorer?.UpdateCarGenTreeNode(CurrentCarGen); + } + + private void CarGoToButton_Click(object sender, EventArgs e) + { + if (CurrentCarGen == null) return; + ProjectForm.WorldForm?.GoToPosition(CurrentCarGen.Position); + } + + private void CarAddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentCarGen); + ProjectForm.AddCarGenToProject(); + } + + private void CarDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentCarGen); + ProjectForm.DeleteCarGen(); + } + } +} diff --git a/Project/Panels/EditYmapCarGenPanel.resx b/Project/Panels/EditYmapCarGenPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditYmapCarGenPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditYmapEntityPanel.Designer.cs b/Project/Panels/EditYmapEntityPanel.Designer.cs new file mode 100644 index 0000000..f33c0e7 --- /dev/null +++ b/Project/Panels/EditYmapEntityPanel.Designer.cs @@ -0,0 +1,748 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditYmapEntityPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYmapEntityPanel)); + this.EntityTabControl = new System.Windows.Forms.TabControl(); + this.EntityGeneralTabPage = new System.Windows.Forms.TabPage(); + this.EntityFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); + this.label13 = new System.Windows.Forms.Label(); + this.label28 = new System.Windows.Forms.Label(); + this.EntityDeleteButton = new System.Windows.Forms.Button(); + this.EntityTintValueTextBox = new System.Windows.Forms.TextBox(); + this.EntityAddToProjectButton = new System.Windows.Forms.Button(); + this.label27 = new System.Windows.Forms.Label(); + this.EntityArtificialAOTextBox = new System.Windows.Forms.TextBox(); + this.label26 = new System.Windows.Forms.Label(); + this.EntityAOMultiplierTextBox = new System.Windows.Forms.TextBox(); + this.EntityGuidTextBox = new System.Windows.Forms.TextBox(); + this.EntityPriorityLevelComboBox = new System.Windows.Forms.ComboBox(); + this.label24 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.EntityFlagsTextBox = new System.Windows.Forms.TextBox(); + this.label18 = new System.Windows.Forms.Label(); + this.EntityLodLevelComboBox = new System.Windows.Forms.ComboBox(); + this.label14 = new System.Windows.Forms.Label(); + this.label23 = new System.Windows.Forms.Label(); + this.EntityScaleXYTextBox = new System.Windows.Forms.TextBox(); + this.label22 = new System.Windows.Forms.Label(); + this.EntityArchetypeHashLabel = new System.Windows.Forms.Label(); + this.EntityChildLodDistTextBox = new System.Windows.Forms.TextBox(); + this.label19 = new System.Windows.Forms.Label(); + this.label21 = new System.Windows.Forms.Label(); + this.EntityScaleZTextBox = new System.Windows.Forms.TextBox(); + this.EntityLodDistTextBox = new System.Windows.Forms.TextBox(); + this.EntityArchetypeTextBox = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.EntityPositionTextBox = new System.Windows.Forms.TextBox(); + this.EntityNormalizeRotationButton = new System.Windows.Forms.Button(); + this.EntityGoToButton = new System.Windows.Forms.Button(); + this.label17 = new System.Windows.Forms.Label(); + this.EntityRotationTextBox = new System.Windows.Forms.TextBox(); + this.EntityLodTabPage = new System.Windows.Forms.TabPage(); + this.label20 = new System.Windows.Forms.Label(); + this.EntityParentIndexTextBox = new System.Windows.Forms.TextBox(); + this.EntityNumChildrenTextBox = new System.Windows.Forms.TextBox(); + this.label25 = new System.Windows.Forms.Label(); + this.EntityExtensionsTabPage = new System.Windows.Forms.TabPage(); + this.EntityPivotTabPage = new System.Windows.Forms.TabPage(); + this.label95 = new System.Windows.Forms.Label(); + this.EntityPivotEditCheckBox = new System.Windows.Forms.CheckBox(); + this.label93 = new System.Windows.Forms.Label(); + this.EntityPivotPositionTextBox = new System.Windows.Forms.TextBox(); + this.EntityPivotRotationNormalizeButton = new System.Windows.Forms.Button(); + this.label94 = new System.Windows.Forms.Label(); + this.EntityPivotRotationTextBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.EntityTabControl.SuspendLayout(); + this.EntityGeneralTabPage.SuspendLayout(); + this.EntityLodTabPage.SuspendLayout(); + this.EntityExtensionsTabPage.SuspendLayout(); + this.EntityPivotTabPage.SuspendLayout(); + this.SuspendLayout(); + // + // EntityTabControl + // + this.EntityTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityTabControl.Controls.Add(this.EntityGeneralTabPage); + this.EntityTabControl.Controls.Add(this.EntityLodTabPage); + this.EntityTabControl.Controls.Add(this.EntityExtensionsTabPage); + this.EntityTabControl.Controls.Add(this.EntityPivotTabPage); + this.EntityTabControl.Location = new System.Drawing.Point(2, 3); + this.EntityTabControl.Name = "EntityTabControl"; + this.EntityTabControl.SelectedIndex = 0; + this.EntityTabControl.Size = new System.Drawing.Size(563, 502); + this.EntityTabControl.TabIndex = 45; + // + // EntityGeneralTabPage + // + this.EntityGeneralTabPage.Controls.Add(this.EntityFlagsCheckedListBox); + this.EntityGeneralTabPage.Controls.Add(this.label13); + this.EntityGeneralTabPage.Controls.Add(this.label28); + this.EntityGeneralTabPage.Controls.Add(this.EntityDeleteButton); + this.EntityGeneralTabPage.Controls.Add(this.EntityTintValueTextBox); + this.EntityGeneralTabPage.Controls.Add(this.EntityAddToProjectButton); + this.EntityGeneralTabPage.Controls.Add(this.label27); + this.EntityGeneralTabPage.Controls.Add(this.EntityArtificialAOTextBox); + this.EntityGeneralTabPage.Controls.Add(this.label26); + this.EntityGeneralTabPage.Controls.Add(this.EntityAOMultiplierTextBox); + this.EntityGeneralTabPage.Controls.Add(this.EntityGuidTextBox); + this.EntityGeneralTabPage.Controls.Add(this.EntityPriorityLevelComboBox); + this.EntityGeneralTabPage.Controls.Add(this.label24); + this.EntityGeneralTabPage.Controls.Add(this.label15); + this.EntityGeneralTabPage.Controls.Add(this.EntityFlagsTextBox); + this.EntityGeneralTabPage.Controls.Add(this.label18); + this.EntityGeneralTabPage.Controls.Add(this.EntityLodLevelComboBox); + this.EntityGeneralTabPage.Controls.Add(this.label14); + this.EntityGeneralTabPage.Controls.Add(this.label23); + this.EntityGeneralTabPage.Controls.Add(this.EntityScaleXYTextBox); + this.EntityGeneralTabPage.Controls.Add(this.label22); + this.EntityGeneralTabPage.Controls.Add(this.EntityArchetypeHashLabel); + this.EntityGeneralTabPage.Controls.Add(this.EntityChildLodDistTextBox); + this.EntityGeneralTabPage.Controls.Add(this.label19); + this.EntityGeneralTabPage.Controls.Add(this.label21); + this.EntityGeneralTabPage.Controls.Add(this.EntityScaleZTextBox); + this.EntityGeneralTabPage.Controls.Add(this.EntityLodDistTextBox); + this.EntityGeneralTabPage.Controls.Add(this.EntityArchetypeTextBox); + this.EntityGeneralTabPage.Controls.Add(this.label16); + this.EntityGeneralTabPage.Controls.Add(this.EntityPositionTextBox); + this.EntityGeneralTabPage.Controls.Add(this.EntityNormalizeRotationButton); + this.EntityGeneralTabPage.Controls.Add(this.EntityGoToButton); + this.EntityGeneralTabPage.Controls.Add(this.label17); + this.EntityGeneralTabPage.Controls.Add(this.EntityRotationTextBox); + this.EntityGeneralTabPage.Location = new System.Drawing.Point(4, 22); + this.EntityGeneralTabPage.Name = "EntityGeneralTabPage"; + this.EntityGeneralTabPage.Padding = new System.Windows.Forms.Padding(3); + this.EntityGeneralTabPage.Size = new System.Drawing.Size(555, 476); + this.EntityGeneralTabPage.TabIndex = 0; + this.EntityGeneralTabPage.Text = "General"; + this.EntityGeneralTabPage.UseVisualStyleBackColor = true; + // + // EntityFlagsCheckedListBox + // + this.EntityFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityFlagsCheckedListBox.CheckOnClick = true; + this.EntityFlagsCheckedListBox.FormattingEnabled = true; + this.EntityFlagsCheckedListBox.Items.AddRange(new object[] { + "1 - Unk01", + "2 - Unk02", + "4 - Unk03", + "8 - Unk04", + "16 - Unk05", + "32 - Unk06", + "64 - Unk07", + "128 - Unk08", + "256 - Unk09", + "512 - Unk10", + "1024 - Unk11", + "2048 - Unk12", + "4096 - Unk13", + "8192 - Unk14", + "16384 - Unk15", + "32768 - Unk16", + "65536 - Unk17", + "131072 - Unk18", + "262144 - Unk19", + "524288 - Unk20", + "1048576 - Unk21", + "2097152 - Unk22", + "4194304 - Unk23", + "8388608 - Unk24", + "16777216 - Unk25", + "33554432 - Unk26", + "67108864 - Unk27", + "134217728 - Unk28", + "268435456 - Unk29", + "536870912 - Unk30", + "1073741824 - Unk31", + "2147483648 - Unk32"}); + this.EntityFlagsCheckedListBox.Location = new System.Drawing.Point(348, 113); + this.EntityFlagsCheckedListBox.Name = "EntityFlagsCheckedListBox"; + this.EntityFlagsCheckedListBox.Size = new System.Drawing.Size(201, 349); + this.EntityFlagsCheckedListBox.TabIndex = 32; + this.EntityFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.EntityFlagsCheckedListBox_ItemCheck); + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(15, 64); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(58, 13); + this.label13.TabIndex = 7; + this.label13.Text = "Archetype:"; + // + // label28 + // + this.label28.AutoSize = true; + this.label28.Location = new System.Drawing.Point(15, 326); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(55, 13); + this.label28.TabIndex = 28; + this.label28.Text = "TintValue:"; + // + // EntityDeleteButton + // + this.EntityDeleteButton.Location = new System.Drawing.Point(175, 376); + this.EntityDeleteButton.Name = "EntityDeleteButton"; + this.EntityDeleteButton.Size = new System.Drawing.Size(95, 23); + this.EntityDeleteButton.TabIndex = 34; + this.EntityDeleteButton.Text = "Delete Entity"; + this.EntityDeleteButton.UseVisualStyleBackColor = true; + this.EntityDeleteButton.Click += new System.EventHandler(this.EntityDeleteButton_Click); + // + // EntityTintValueTextBox + // + this.EntityTintValueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityTintValueTextBox.Location = new System.Drawing.Point(93, 323); + this.EntityTintValueTextBox.Name = "EntityTintValueTextBox"; + this.EntityTintValueTextBox.Size = new System.Drawing.Size(233, 20); + this.EntityTintValueTextBox.TabIndex = 29; + this.EntityTintValueTextBox.TextChanged += new System.EventHandler(this.EntityTintValueTextBox_TextChanged); + // + // EntityAddToProjectButton + // + this.EntityAddToProjectButton.Location = new System.Drawing.Point(74, 376); + this.EntityAddToProjectButton.Name = "EntityAddToProjectButton"; + this.EntityAddToProjectButton.Size = new System.Drawing.Size(95, 23); + this.EntityAddToProjectButton.TabIndex = 33; + this.EntityAddToProjectButton.Text = "Add to Project"; + this.EntityAddToProjectButton.UseVisualStyleBackColor = true; + this.EntityAddToProjectButton.Click += new System.EventHandler(this.EntityAddToProjectButton_Click); + // + // label27 + // + this.label27.AutoSize = true; + this.label27.Location = new System.Drawing.Point(15, 300); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(61, 13); + this.label27.TabIndex = 26; + this.label27.Text = "ArtificialAO:"; + // + // EntityArtificialAOTextBox + // + this.EntityArtificialAOTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityArtificialAOTextBox.Location = new System.Drawing.Point(93, 297); + this.EntityArtificialAOTextBox.Name = "EntityArtificialAOTextBox"; + this.EntityArtificialAOTextBox.Size = new System.Drawing.Size(233, 20); + this.EntityArtificialAOTextBox.TabIndex = 27; + this.EntityArtificialAOTextBox.TextChanged += new System.EventHandler(this.EntityArtificialAOTextBox_TextChanged); + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Location = new System.Drawing.Point(15, 274); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(66, 13); + this.label26.TabIndex = 24; + this.label26.Text = "AOMultiplier:"; + // + // EntityAOMultiplierTextBox + // + this.EntityAOMultiplierTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityAOMultiplierTextBox.Location = new System.Drawing.Point(93, 271); + this.EntityAOMultiplierTextBox.Name = "EntityAOMultiplierTextBox"; + this.EntityAOMultiplierTextBox.Size = new System.Drawing.Size(233, 20); + this.EntityAOMultiplierTextBox.TabIndex = 25; + this.EntityAOMultiplierTextBox.TextChanged += new System.EventHandler(this.EntityAOMultiplierTextBox_TextChanged); + // + // EntityGuidTextBox + // + this.EntityGuidTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityGuidTextBox.Location = new System.Drawing.Point(93, 87); + this.EntityGuidTextBox.Name = "EntityGuidTextBox"; + this.EntityGuidTextBox.Size = new System.Drawing.Size(233, 20); + this.EntityGuidTextBox.TabIndex = 11; + this.EntityGuidTextBox.TextChanged += new System.EventHandler(this.EntityGuidTextBox_TextChanged); + // + // EntityPriorityLevelComboBox + // + this.EntityPriorityLevelComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityPriorityLevelComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.EntityPriorityLevelComboBox.FormattingEnabled = true; + this.EntityPriorityLevelComboBox.Location = new System.Drawing.Point(93, 244); + this.EntityPriorityLevelComboBox.Name = "EntityPriorityLevelComboBox"; + this.EntityPriorityLevelComboBox.Size = new System.Drawing.Size(233, 21); + this.EntityPriorityLevelComboBox.TabIndex = 23; + this.EntityPriorityLevelComboBox.SelectedIndexChanged += new System.EventHandler(this.EntityPriorityLevelComboBox_SelectedIndexChanged); + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Location = new System.Drawing.Point(15, 247); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(67, 13); + this.label24.TabIndex = 22; + this.label24.Text = "PriorityLevel:"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(15, 90); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(37, 13); + this.label15.TabIndex = 10; + this.label15.Text = "GUID:"; + // + // EntityFlagsTextBox + // + this.EntityFlagsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.EntityFlagsTextBox.Location = new System.Drawing.Point(402, 87); + this.EntityFlagsTextBox.Name = "EntityFlagsTextBox"; + this.EntityFlagsTextBox.Size = new System.Drawing.Size(147, 20); + this.EntityFlagsTextBox.TabIndex = 31; + this.EntityFlagsTextBox.TextChanged += new System.EventHandler(this.EntityFlagsTextBox_TextChanged); + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(15, 116); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(51, 13); + this.label18.TabIndex = 12; + this.label18.Text = "ScaleXY:"; + // + // EntityLodLevelComboBox + // + this.EntityLodLevelComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityLodLevelComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.EntityLodLevelComboBox.FormattingEnabled = true; + this.EntityLodLevelComboBox.Location = new System.Drawing.Point(93, 217); + this.EntityLodLevelComboBox.Name = "EntityLodLevelComboBox"; + this.EntityLodLevelComboBox.Size = new System.Drawing.Size(233, 21); + this.EntityLodLevelComboBox.TabIndex = 21; + this.EntityLodLevelComboBox.SelectedIndexChanged += new System.EventHandler(this.EntityLodLevelComboBox_SelectedIndexChanged); + // + // label14 + // + this.label14.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(361, 90); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(35, 13); + this.label14.TabIndex = 30; + this.label14.Text = "Flags:"; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(15, 220); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(54, 13); + this.label23.TabIndex = 20; + this.label23.Text = "LodLevel:"; + // + // EntityScaleXYTextBox + // + this.EntityScaleXYTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityScaleXYTextBox.Location = new System.Drawing.Point(93, 113); + this.EntityScaleXYTextBox.Name = "EntityScaleXYTextBox"; + this.EntityScaleXYTextBox.Size = new System.Drawing.Size(233, 20); + this.EntityScaleXYTextBox.TabIndex = 13; + this.EntityScaleXYTextBox.TextChanged += new System.EventHandler(this.EntityScaleXYTextBox_TextChanged); + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(15, 194); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(69, 13); + this.label22.TabIndex = 18; + this.label22.Text = "ChildLodDist:"; + // + // EntityArchetypeHashLabel + // + this.EntityArchetypeHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.EntityArchetypeHashLabel.AutoSize = true; + this.EntityArchetypeHashLabel.Location = new System.Drawing.Point(332, 64); + this.EntityArchetypeHashLabel.Name = "EntityArchetypeHashLabel"; + this.EntityArchetypeHashLabel.Size = new System.Drawing.Size(44, 13); + this.EntityArchetypeHashLabel.TabIndex = 9; + this.EntityArchetypeHashLabel.Text = "Hash: 0"; + // + // EntityChildLodDistTextBox + // + this.EntityChildLodDistTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityChildLodDistTextBox.Location = new System.Drawing.Point(93, 191); + this.EntityChildLodDistTextBox.Name = "EntityChildLodDistTextBox"; + this.EntityChildLodDistTextBox.Size = new System.Drawing.Size(233, 20); + this.EntityChildLodDistTextBox.TabIndex = 19; + this.EntityChildLodDistTextBox.TextChanged += new System.EventHandler(this.EntityChildLodDistTextBox_TextChanged); + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(15, 142); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(44, 13); + this.label19.TabIndex = 14; + this.label19.Text = "ScaleZ:"; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(15, 168); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(46, 13); + this.label21.TabIndex = 16; + this.label21.Text = "LodDist:"; + // + // EntityScaleZTextBox + // + this.EntityScaleZTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityScaleZTextBox.Location = new System.Drawing.Point(93, 139); + this.EntityScaleZTextBox.Name = "EntityScaleZTextBox"; + this.EntityScaleZTextBox.Size = new System.Drawing.Size(233, 20); + this.EntityScaleZTextBox.TabIndex = 15; + this.EntityScaleZTextBox.TextChanged += new System.EventHandler(this.EntityScaleZTextBox_TextChanged); + // + // EntityLodDistTextBox + // + this.EntityLodDistTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityLodDistTextBox.Location = new System.Drawing.Point(93, 165); + this.EntityLodDistTextBox.Name = "EntityLodDistTextBox"; + this.EntityLodDistTextBox.Size = new System.Drawing.Size(233, 20); + this.EntityLodDistTextBox.TabIndex = 17; + this.EntityLodDistTextBox.TextChanged += new System.EventHandler(this.EntityLodDistTextBox_TextChanged); + // + // EntityArchetypeTextBox + // + this.EntityArchetypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityArchetypeTextBox.Location = new System.Drawing.Point(93, 61); + this.EntityArchetypeTextBox.Name = "EntityArchetypeTextBox"; + this.EntityArchetypeTextBox.Size = new System.Drawing.Size(233, 20); + this.EntityArchetypeTextBox.TabIndex = 8; + this.EntityArchetypeTextBox.TextChanged += new System.EventHandler(this.EntityArchetypeTextBox_TextChanged); + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(15, 12); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(47, 13); + this.label16.TabIndex = 1; + this.label16.Text = "Position:"; + // + // EntityPositionTextBox + // + this.EntityPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityPositionTextBox.Location = new System.Drawing.Point(93, 9); + this.EntityPositionTextBox.Name = "EntityPositionTextBox"; + this.EntityPositionTextBox.Size = new System.Drawing.Size(382, 20); + this.EntityPositionTextBox.TabIndex = 2; + this.EntityPositionTextBox.TextChanged += new System.EventHandler(this.EntityPositionTextBox_TextChanged); + // + // EntityNormalizeRotationButton + // + this.EntityNormalizeRotationButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.EntityNormalizeRotationButton.Location = new System.Drawing.Point(481, 33); + this.EntityNormalizeRotationButton.Name = "EntityNormalizeRotationButton"; + this.EntityNormalizeRotationButton.Size = new System.Drawing.Size(68, 23); + this.EntityNormalizeRotationButton.TabIndex = 6; + this.EntityNormalizeRotationButton.Text = "Normalize"; + this.EntityNormalizeRotationButton.UseVisualStyleBackColor = true; + this.EntityNormalizeRotationButton.Click += new System.EventHandler(this.EntityNormalizeRotationButton_Click); + // + // EntityGoToButton + // + this.EntityGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.EntityGoToButton.Location = new System.Drawing.Point(481, 7); + this.EntityGoToButton.Name = "EntityGoToButton"; + this.EntityGoToButton.Size = new System.Drawing.Size(68, 23); + this.EntityGoToButton.TabIndex = 3; + this.EntityGoToButton.Text = "Go to"; + this.EntityGoToButton.UseVisualStyleBackColor = true; + this.EntityGoToButton.Click += new System.EventHandler(this.EntityGoToButton_Click); + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(15, 38); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(50, 13); + this.label17.TabIndex = 4; + this.label17.Text = "Rotation:"; + // + // EntityRotationTextBox + // + this.EntityRotationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityRotationTextBox.Location = new System.Drawing.Point(93, 35); + this.EntityRotationTextBox.Name = "EntityRotationTextBox"; + this.EntityRotationTextBox.Size = new System.Drawing.Size(382, 20); + this.EntityRotationTextBox.TabIndex = 5; + this.EntityRotationTextBox.TextChanged += new System.EventHandler(this.EntityRotationTextBox_TextChanged); + // + // EntityLodTabPage + // + this.EntityLodTabPage.Controls.Add(this.label20); + this.EntityLodTabPage.Controls.Add(this.EntityParentIndexTextBox); + this.EntityLodTabPage.Controls.Add(this.EntityNumChildrenTextBox); + this.EntityLodTabPage.Controls.Add(this.label25); + this.EntityLodTabPage.Location = new System.Drawing.Point(4, 22); + this.EntityLodTabPage.Name = "EntityLodTabPage"; + this.EntityLodTabPage.Padding = new System.Windows.Forms.Padding(3); + this.EntityLodTabPage.Size = new System.Drawing.Size(555, 476); + this.EntityLodTabPage.TabIndex = 1; + this.EntityLodTabPage.Text = "LOD Hierarchy"; + this.EntityLodTabPage.UseVisualStyleBackColor = true; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(15, 16); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(67, 13); + this.label20.TabIndex = 24; + this.label20.Text = "ParentIndex:"; + // + // EntityParentIndexTextBox + // + this.EntityParentIndexTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityParentIndexTextBox.Location = new System.Drawing.Point(93, 13); + this.EntityParentIndexTextBox.Name = "EntityParentIndexTextBox"; + this.EntityParentIndexTextBox.Size = new System.Drawing.Size(245, 20); + this.EntityParentIndexTextBox.TabIndex = 25; + this.EntityParentIndexTextBox.TextChanged += new System.EventHandler(this.EntityParentIndexTextBox_TextChanged); + // + // EntityNumChildrenTextBox + // + this.EntityNumChildrenTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityNumChildrenTextBox.Location = new System.Drawing.Point(93, 39); + this.EntityNumChildrenTextBox.Name = "EntityNumChildrenTextBox"; + this.EntityNumChildrenTextBox.Size = new System.Drawing.Size(245, 20); + this.EntityNumChildrenTextBox.TabIndex = 35; + this.EntityNumChildrenTextBox.TextChanged += new System.EventHandler(this.EntityNumChildrenTextBox_TextChanged); + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(15, 42); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(70, 13); + this.label25.TabIndex = 34; + this.label25.Text = "NumChildren:"; + // + // EntityExtensionsTabPage + // + this.EntityExtensionsTabPage.Controls.Add(this.label1); + this.EntityExtensionsTabPage.Location = new System.Drawing.Point(4, 22); + this.EntityExtensionsTabPage.Name = "EntityExtensionsTabPage"; + this.EntityExtensionsTabPage.Size = new System.Drawing.Size(555, 476); + this.EntityExtensionsTabPage.TabIndex = 2; + this.EntityExtensionsTabPage.Text = "Extensions"; + this.EntityExtensionsTabPage.UseVisualStyleBackColor = true; + // + // EntityPivotTabPage + // + this.EntityPivotTabPage.Controls.Add(this.label95); + this.EntityPivotTabPage.Controls.Add(this.EntityPivotEditCheckBox); + this.EntityPivotTabPage.Controls.Add(this.label93); + this.EntityPivotTabPage.Controls.Add(this.EntityPivotPositionTextBox); + this.EntityPivotTabPage.Controls.Add(this.EntityPivotRotationNormalizeButton); + this.EntityPivotTabPage.Controls.Add(this.label94); + this.EntityPivotTabPage.Controls.Add(this.EntityPivotRotationTextBox); + this.EntityPivotTabPage.Location = new System.Drawing.Point(4, 22); + this.EntityPivotTabPage.Name = "EntityPivotTabPage"; + this.EntityPivotTabPage.Size = new System.Drawing.Size(555, 476); + this.EntityPivotTabPage.TabIndex = 3; + this.EntityPivotTabPage.Text = "Pivot"; + this.EntityPivotTabPage.UseVisualStyleBackColor = true; + // + // label95 + // + this.label95.Location = new System.Drawing.Point(90, 152); + this.label95.Name = "label95"; + this.label95.Size = new System.Drawing.Size(329, 51); + this.label95.TabIndex = 27; + this.label95.Text = "Note: Custom pivot is not saved. It will be reset if you close the project or res" + + "tart CodeWalker."; + // + // EntityPivotEditCheckBox + // + this.EntityPivotEditCheckBox.AutoSize = true; + this.EntityPivotEditCheckBox.Location = new System.Drawing.Point(93, 32); + this.EntityPivotEditCheckBox.Name = "EntityPivotEditCheckBox"; + this.EntityPivotEditCheckBox.Size = new System.Drawing.Size(137, 17); + this.EntityPivotEditCheckBox.TabIndex = 20; + this.EntityPivotEditCheckBox.Text = "Edit pivot in World view"; + this.EntityPivotEditCheckBox.UseVisualStyleBackColor = true; + this.EntityPivotEditCheckBox.CheckedChanged += new System.EventHandler(this.EntityPivotEditCheckBox_CheckedChanged); + // + // label93 + // + this.label93.AutoSize = true; + this.label93.Location = new System.Drawing.Point(15, 73); + this.label93.Name = "label93"; + this.label93.Size = new System.Drawing.Size(47, 13); + this.label93.TabIndex = 21; + this.label93.Text = "Position:"; + // + // EntityPivotPositionTextBox + // + this.EntityPivotPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityPivotPositionTextBox.Location = new System.Drawing.Point(93, 70); + this.EntityPivotPositionTextBox.Name = "EntityPivotPositionTextBox"; + this.EntityPivotPositionTextBox.Size = new System.Drawing.Size(382, 20); + this.EntityPivotPositionTextBox.TabIndex = 22; + this.EntityPivotPositionTextBox.TextChanged += new System.EventHandler(this.EntityPivotPositionTextBox_TextChanged); + // + // EntityPivotRotationNormalizeButton + // + this.EntityPivotRotationNormalizeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.EntityPivotRotationNormalizeButton.Location = new System.Drawing.Point(481, 94); + this.EntityPivotRotationNormalizeButton.Name = "EntityPivotRotationNormalizeButton"; + this.EntityPivotRotationNormalizeButton.Size = new System.Drawing.Size(68, 23); + this.EntityPivotRotationNormalizeButton.TabIndex = 26; + this.EntityPivotRotationNormalizeButton.Text = "Normalize"; + this.EntityPivotRotationNormalizeButton.UseVisualStyleBackColor = true; + this.EntityPivotRotationNormalizeButton.Click += new System.EventHandler(this.EntityPivotRotationNormalizeButton_Click); + // + // label94 + // + this.label94.AutoSize = true; + this.label94.Location = new System.Drawing.Point(15, 99); + this.label94.Name = "label94"; + this.label94.Size = new System.Drawing.Size(50, 13); + this.label94.TabIndex = 24; + this.label94.Text = "Rotation:"; + // + // EntityPivotRotationTextBox + // + this.EntityPivotRotationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityPivotRotationTextBox.Location = new System.Drawing.Point(93, 96); + this.EntityPivotRotationTextBox.Name = "EntityPivotRotationTextBox"; + this.EntityPivotRotationTextBox.Size = new System.Drawing.Size(382, 20); + this.EntityPivotRotationTextBox.TabIndex = 25; + this.EntityPivotRotationTextBox.TextChanged += new System.EventHandler(this.EntityPivotRotationTextBox_TextChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(27, 27); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(157, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Entity extensions editing TODO!"; + // + // EditYmapEntityPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(565, 505); + this.Controls.Add(this.EntityTabControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditYmapEntityPanel"; + this.Text = "Entity"; + this.EntityTabControl.ResumeLayout(false); + this.EntityGeneralTabPage.ResumeLayout(false); + this.EntityGeneralTabPage.PerformLayout(); + this.EntityLodTabPage.ResumeLayout(false); + this.EntityLodTabPage.PerformLayout(); + this.EntityExtensionsTabPage.ResumeLayout(false); + this.EntityExtensionsTabPage.PerformLayout(); + this.EntityPivotTabPage.ResumeLayout(false); + this.EntityPivotTabPage.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl EntityTabControl; + private System.Windows.Forms.TabPage EntityGeneralTabPage; + private System.Windows.Forms.CheckedListBox EntityFlagsCheckedListBox; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.Button EntityDeleteButton; + private System.Windows.Forms.TextBox EntityTintValueTextBox; + private System.Windows.Forms.Button EntityAddToProjectButton; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.TextBox EntityArtificialAOTextBox; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.TextBox EntityAOMultiplierTextBox; + private System.Windows.Forms.TextBox EntityGuidTextBox; + private System.Windows.Forms.ComboBox EntityPriorityLevelComboBox; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox EntityFlagsTextBox; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.ComboBox EntityLodLevelComboBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.TextBox EntityScaleXYTextBox; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label EntityArchetypeHashLabel; + private System.Windows.Forms.TextBox EntityChildLodDistTextBox; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.TextBox EntityScaleZTextBox; + private System.Windows.Forms.TextBox EntityLodDistTextBox; + private System.Windows.Forms.TextBox EntityArchetypeTextBox; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox EntityPositionTextBox; + private System.Windows.Forms.Button EntityNormalizeRotationButton; + private System.Windows.Forms.Button EntityGoToButton; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.TextBox EntityRotationTextBox; + private System.Windows.Forms.TabPage EntityLodTabPage; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.TextBox EntityParentIndexTextBox; + private System.Windows.Forms.TextBox EntityNumChildrenTextBox; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.TabPage EntityExtensionsTabPage; + private System.Windows.Forms.TabPage EntityPivotTabPage; + private System.Windows.Forms.Label label95; + private System.Windows.Forms.CheckBox EntityPivotEditCheckBox; + private System.Windows.Forms.Label label93; + private System.Windows.Forms.TextBox EntityPivotPositionTextBox; + private System.Windows.Forms.Button EntityPivotRotationNormalizeButton; + private System.Windows.Forms.Label label94; + private System.Windows.Forms.TextBox EntityPivotRotationTextBox; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/Project/Panels/EditYmapEntityPanel.cs b/Project/Panels/EditYmapEntityPanel.cs new file mode 100644 index 0000000..f89acd9 --- /dev/null +++ b/Project/Panels/EditYmapEntityPanel.cs @@ -0,0 +1,608 @@ +using CodeWalker.GameFiles; +using SharpDX; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditYmapEntityPanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public YmapEntityDef CurrentEntity { get; set; } + + private bool populatingui = false; + + public EditYmapEntityPanel(ProjectForm2 owner) + { + ProjectForm = owner; + InitializeComponent(); + LoadDropDowns(); + } + + public void SetEntity(YmapEntityDef entity) + { + CurrentEntity = entity; + Tag = entity; + LoadEntity(); + UpdateFormTitle(); + } + + private void UpdateFormTitle() + { + Text = CurrentEntity?.Name ?? "Entity"; + } + + + private void LoadDropDowns() + { + EntityLodLevelComboBox.Items.Clear(); + EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_ORPHANHD); + EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_HD); + EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_LOD); + EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD1); + EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD2); + EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD3); + EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD4); + + EntityPriorityLevelComboBox.Items.Clear(); + EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_REQUIRED); + EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_OPTIONAL_HIGH); + EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_OPTIONAL_MEDIUM); + EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_OPTIONAL_LOW); + } + + + private void LoadEntity() + { + if (CurrentEntity == null) + { + //EntityPanel.Enabled = false; + EntityAddToProjectButton.Enabled = false; + EntityDeleteButton.Enabled = false; + EntityArchetypeTextBox.Text = string.Empty; + EntityArchetypeHashLabel.Text = "Hash: 0"; + EntityFlagsTextBox.Text = string.Empty; + EntityGuidTextBox.Text = string.Empty; + EntityPositionTextBox.Text = string.Empty; + EntityRotationTextBox.Text = string.Empty; + EntityScaleXYTextBox.Text = string.Empty; + EntityScaleZTextBox.Text = string.Empty; + EntityParentIndexTextBox.Text = string.Empty; + EntityLodDistTextBox.Text = string.Empty; + EntityChildLodDistTextBox.Text = string.Empty; + EntityLodLevelComboBox.SelectedIndex = 0;// Math.Max(EntityLodLevelComboBox.FindString(), 0); + EntityNumChildrenTextBox.Text = string.Empty; + EntityPriorityLevelComboBox.SelectedIndex = 0; //Math.Max(.. + EntityAOMultiplierTextBox.Text = string.Empty; + EntityArtificialAOTextBox.Text = string.Empty; + EntityTintValueTextBox.Text = string.Empty; + EntityPivotEditCheckBox.Checked = false; + EntityPivotPositionTextBox.Text = string.Empty; + EntityPivotRotationTextBox.Text = string.Empty; + foreach (int i in EntityFlagsCheckedListBox.CheckedIndices) + { + EntityFlagsCheckedListBox.SetItemCheckState(i, CheckState.Unchecked); + } + } + else + { + populatingui = true; + var e = CurrentEntity.CEntityDef; + var po = CurrentEntity.PivotOrientation; + //EntityPanel.Enabled = true; + EntityAddToProjectButton.Enabled = !ProjectForm.YmapExistsInProject(CurrentEntity.Ymap); + EntityDeleteButton.Enabled = !EntityAddToProjectButton.Enabled; + EntityArchetypeTextBox.Text = e.archetypeName.ToString(); + EntityArchetypeHashLabel.Text = "Hash: " + e.archetypeName.Hash.ToString(); + EntityFlagsTextBox.Text = e.flags.ToString(); + EntityGuidTextBox.Text = e.guid.ToString(); + EntityPositionTextBox.Text = FloatUtil.GetVector3String(e.position); + EntityRotationTextBox.Text = FloatUtil.GetVector4String(e.rotation); + EntityScaleXYTextBox.Text = FloatUtil.ToString(e.scaleXY); + EntityScaleZTextBox.Text = FloatUtil.ToString(e.scaleZ); + EntityParentIndexTextBox.Text = e.parentIndex.ToString(); + EntityLodDistTextBox.Text = FloatUtil.ToString(e.lodDist); + EntityChildLodDistTextBox.Text = FloatUtil.ToString(e.childLodDist); + EntityLodLevelComboBox.SelectedIndex = Math.Max(EntityLodLevelComboBox.FindString(e.lodLevel.ToString()), 0); + EntityNumChildrenTextBox.Text = e.numChildren.ToString(); + EntityPriorityLevelComboBox.SelectedIndex = Math.Max(EntityPriorityLevelComboBox.FindString(e.priorityLevel.ToString()), 0); + EntityAOMultiplierTextBox.Text = e.ambientOcclusionMultiplier.ToString(); + EntityArtificialAOTextBox.Text = e.artificialAmbientOcclusion.ToString(); + EntityTintValueTextBox.Text = e.tintValue.ToString(); + EntityPivotPositionTextBox.Text = FloatUtil.GetVector3String(CurrentEntity.PivotPosition); + EntityPivotRotationTextBox.Text = FloatUtil.GetVector4String(new Vector4(po.X, po.Y, po.Z, po.W)); + for (int i = 0; i < EntityFlagsCheckedListBox.Items.Count; i++) + { + var cv = ((e.flags & (1u << i)) > 0); + EntityFlagsCheckedListBox.SetItemCheckState(i, cv ? CheckState.Checked : CheckState.Unchecked); + } + populatingui = false; + + + + ProjectForm.WorldForm?.SelectEntity(CurrentEntity); //hopefully the drawable is already loaded - this will try get from cache + + ////struct CEntityDef: + //MetaHash archetypeName { get; set; } //8 8: Hash: 0: archetypeName + //uint flags { get; set; } //12 12: UnsignedInt: 0: flags + //uint guid { get; set; } //16 16: UnsignedInt: 0: guid + //Vector3 position { get; set; } //32 32: Float_XYZ: 0: position + //Vector4 rotation { get; set; } //48 48: Float_XYZW: 0: rotation + //float scaleXY { get; set; } //64 64: Float: 0: 2627937847 + //float scaleZ { get; set; } //68 68: Float: 0: 284916802 + //int parentIndex { get; set; } //72 72: SignedInt: 0: parentIndex + //float lodDist { get; set; } //76 76: Float: 0: lodDist + //float childLodDist { get; set; } //80 80: Float: 0: childLodDist//3398912973 + //Unk_1264241711 lodLevel { get; set; } //84 84: IntEnum: 1264241711: lodLevel //LODTYPES_DEPTH_ + //uint numChildren { get; set; } //88 88: UnsignedInt: 0: numChildren//2793909385 + //Unk_648413703 priorityLevel { get; set; } //92 92: IntEnum: 648413703: priorityLevel//647098393 + //Array_StructurePointer extensions { get; set; } //96 96: Array: 0: extensions {0: StructurePointer: 0: 256} + //int ambientOcclusionMultiplier { get; set; } //112 112: SignedInt: 0: ambientOcclusionMultiplier//415356295 + //int artificialAmbientOcclusion { get; set; } //116 116: SignedInt: 0: artificialAmbientOcclusion//599844163 + //uint tintValue { get; set; } //120 120: UnsignedInt: 0: tintValue//1015358759 + } + + } + + + private void EntityArchetypeTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + uint hash = 0; + string name = EntityArchetypeTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + EntityArchetypeHashLabel.Text = "Hash: " + hash.ToString(); + + var arch = ProjectForm.GameFileCache.GetArchetype(hash); + if (arch == null) + { + EntityArchetypeHashLabel.Text += " (not found)"; + } + + TreeNode tn = ProjectForm.ProjectExplorer?.FindEntityTreeNode(CurrentEntity); + if (tn != null) + { + tn.Text = name; + } + + if (CurrentEntity != null) + { + lock (ProjectForm.ProjectSyncRoot) + { + CurrentEntity._CEntityDef.archetypeName = new MetaHash(hash); + if (CurrentEntity.Archetype != arch) + { + CurrentEntity.SetArchetype(arch); + ProjectForm.SetYmapHasChanged(true); + } + } + } + } + + private void EntityFlagsTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + uint flags = 0; + uint.TryParse(EntityFlagsTextBox.Text, out flags); + populatingui = true; + for (int i = 0; i < EntityFlagsCheckedListBox.Items.Count; i++) + { + var c = ((flags & (1u << i)) > 0); + EntityFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); + } + populatingui = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.flags != flags) + { + CurrentEntity._CEntityDef.flags = flags; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + uint flags = 0; + for (int i = 0; i < EntityFlagsCheckedListBox.Items.Count; i++) + { + if (e.Index == i) + { + if (e.NewValue == CheckState.Checked) + { + flags += (uint)(1 << i); + } + } + else + { + if (EntityFlagsCheckedListBox.GetItemChecked(i)) + { + flags += (uint)(1 << i); + } + } + } + populatingui = true; + EntityFlagsTextBox.Text = flags.ToString(); + populatingui = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.flags != flags) + { + CurrentEntity._CEntityDef.flags = flags; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityGuidTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + uint guid = 0; + uint.TryParse(EntityGuidTextBox.Text, out guid); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.guid != guid) + { + CurrentEntity._CEntityDef.guid = guid; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityPositionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + Vector3 v = FloatUtil.ParseVector3String(EntityPositionTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity.MloParent != null) + { + //TODO: positioning for interior entities! + } + else + { + if (CurrentEntity.Position != v) + { + CurrentEntity.SetPosition(v); + ProjectForm.SetYmapHasChanged(true); + var wf = ProjectForm.WorldForm; + if (wf != null) + { + wf.BeginInvoke(new Action(() => + { + wf.SetWidgetPosition(CurrentEntity.WidgetPosition, true); + })); + } + } + } + } + } + + private void EntityRotationTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + Vector4 v = FloatUtil.ParseVector4String(EntityRotationTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.rotation != v) + { + Quaternion q = new Quaternion(v); + CurrentEntity.SetOrientationInv(q); + ProjectForm.SetYmapHasChanged(true); + var wf = ProjectForm.WorldForm; + if (wf != null) + { + wf.BeginInvoke(new Action(() => + { + wf.SetWidgetRotation(CurrentEntity.WidgetOrientation, true); + })); + } + } + } + } + + private void EntityScaleXYTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + float sxy = 0; + FloatUtil.TryParse(EntityScaleXYTextBox.Text, out sxy); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity.Scale.X != sxy) + { + Vector3 newscale = new Vector3(sxy, sxy, CurrentEntity.Scale.Z); + CurrentEntity.SetScale(newscale); + ProjectForm.SetYmapHasChanged(true); + var wf = ProjectForm.WorldForm; + if (wf != null) + { + wf.BeginInvoke(new Action(() => + { + wf.SetWidgetScale(newscale, true); + })); + } + } + } + } + + private void EntityScaleZTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + float sz = 0; + FloatUtil.TryParse(EntityScaleZTextBox.Text, out sz); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity.Scale.Z != sz) + { + Vector3 newscale = new Vector3(CurrentEntity.Scale.X, CurrentEntity.Scale.Y, sz); + CurrentEntity.SetScale(newscale); + ProjectForm.SetYmapHasChanged(true); + var wf = ProjectForm.WorldForm; + if (wf != null) + { + wf.BeginInvoke(new Action(() => + { + wf.SetWidgetScale(newscale, true); + })); + } + } + } + } + + private void EntityParentIndexTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + int pind = 0; + int.TryParse(EntityParentIndexTextBox.Text, out pind); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.parentIndex != pind) + { + CurrentEntity._CEntityDef.parentIndex = pind; //Needs more work for LOD linking! + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityLodDistTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + float lodDist = 0; + FloatUtil.TryParse(EntityLodDistTextBox.Text, out lodDist); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.lodDist != lodDist) + { + CurrentEntity._CEntityDef.lodDist = lodDist; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityChildLodDistTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + float childLodDist = 0; + FloatUtil.TryParse(EntityChildLodDistTextBox.Text, out childLodDist); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.childLodDist != childLodDist) + { + CurrentEntity._CEntityDef.childLodDist = childLodDist; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityLodLevelComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + Unk_1264241711 lodLevel = (Unk_1264241711)EntityLodLevelComboBox.SelectedItem; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.lodLevel != lodLevel) + { + CurrentEntity._CEntityDef.lodLevel = lodLevel; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityNumChildrenTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + uint numChildren = 0; + uint.TryParse(EntityNumChildrenTextBox.Text, out numChildren); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.numChildren != numChildren) + { + CurrentEntity._CEntityDef.numChildren = numChildren; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityPriorityLevelComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + Unk_648413703 priorityLevel = (Unk_648413703)EntityPriorityLevelComboBox.SelectedItem; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.priorityLevel != priorityLevel) + { + CurrentEntity._CEntityDef.priorityLevel = priorityLevel; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityAOMultiplierTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + int aomult = 0; + int.TryParse(EntityAOMultiplierTextBox.Text, out aomult); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.ambientOcclusionMultiplier != aomult) + { + CurrentEntity._CEntityDef.ambientOcclusionMultiplier = aomult; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityArtificialAOTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + int artao = 0; + int.TryParse(EntityArtificialAOTextBox.Text, out artao); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.artificialAmbientOcclusion != artao) + { + CurrentEntity._CEntityDef.artificialAmbientOcclusion = artao; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityTintValueTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + uint tintValue = 0; + uint.TryParse(EntityTintValueTextBox.Text, out tintValue); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity._CEntityDef.tintValue != tintValue) + { + CurrentEntity._CEntityDef.tintValue = tintValue; + ProjectForm.SetYmapHasChanged(true); + } + } + } + + private void EntityGoToButton_Click(object sender, EventArgs e) + { + if (CurrentEntity == null) return; + if (ProjectForm.WorldForm == null) return; + ProjectForm.WorldForm.GoToPosition(CurrentEntity.Position); + } + + private void EntityNormalizeRotationButton_Click(object sender, EventArgs e) + { + Vector4 v = FloatUtil.ParseVector4String(EntityRotationTextBox.Text); + Quaternion q = Quaternion.Normalize(new Quaternion(v)); + EntityRotationTextBox.Text = FloatUtil.GetVector4String(new Vector4(q.X, q.Y, q.Z, q.W)); + } + + private void EntityAddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentEntity); + ProjectForm.AddEntityToProject(); + } + + private void EntityDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentEntity); + ProjectForm.DeleteEntity(); + } + + private void EntityPivotEditCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.EditEntityPivot = EntityPivotEditCheckBox.Checked; + } + } + + private void EntityPivotPositionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + Vector3 v = FloatUtil.ParseVector3String(EntityPivotPositionTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity.PivotPosition != v) + { + CurrentEntity.SetPivotPosition(v); + //SetYmapHasChanged(true); + var wf = ProjectForm.WorldForm; + if (wf != null) + { + wf.BeginInvoke(new Action(() => + { + bool editpivot = wf.EditEntityPivot; + wf.EditEntityPivot = true; + wf.SetWidgetPosition(CurrentEntity.WidgetPosition, true); + wf.EditEntityPivot = editpivot; + })); + } + } + } + } + + private void EntityPivotRotationTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + Vector4 v = FloatUtil.ParseVector4String(EntityPivotRotationTextBox.Text); + Quaternion q = new Quaternion(v); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity.PivotOrientation != q) + { + CurrentEntity.SetPivotOrientation(q); + //SetYmapHasChanged(true); + var wf = ProjectForm.WorldForm; + if (wf != null) + { + wf.BeginInvoke(new Action(() => + { + bool editpivot = wf.EditEntityPivot; + wf.EditEntityPivot = true; + wf.SetWidgetRotation(CurrentEntity.WidgetOrientation, true); + wf.EditEntityPivot = editpivot; + })); + } + } + } + } + + private void EntityPivotRotationNormalizeButton_Click(object sender, EventArgs e) + { + Vector4 v = FloatUtil.ParseVector4String(EntityPivotRotationTextBox.Text); + Quaternion q = Quaternion.Normalize(new Quaternion(v)); + EntityPivotRotationTextBox.Text = FloatUtil.GetVector4String(new Vector4(q.X, q.Y, q.Z, q.W)); + } + } +} diff --git a/Project/Panels/EditYmapEntityPanel.resx b/Project/Panels/EditYmapEntityPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditYmapEntityPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditYmapGrassPanel.Designer.cs b/Project/Panels/EditYmapGrassPanel.Designer.cs new file mode 100644 index 0000000..824c62a --- /dev/null +++ b/Project/Panels/EditYmapGrassPanel.Designer.cs @@ -0,0 +1,62 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditYmapGrassPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYmapGrassPanel)); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(52, 52); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(105, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Grass editing TODO!"; + // + // EditYmapGrassPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(554, 355); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditYmapGrassPanel"; + this.Text = "Grass Batch"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/Project/Panels/EditYmapGrassPanel.cs b/Project/Panels/EditYmapGrassPanel.cs new file mode 100644 index 0000000..a4d5a6f --- /dev/null +++ b/Project/Panels/EditYmapGrassPanel.cs @@ -0,0 +1,47 @@ +using CodeWalker.GameFiles; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditYmapGrassPanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public YmapGrassInstanceBatch CurrentBatch { get; set; } + + //private bool populatingui = false; + + public EditYmapGrassPanel(ProjectForm2 owner) + { + ProjectForm = owner; + InitializeComponent(); + } + + public void SetBatch(YmapGrassInstanceBatch batch) + { + CurrentBatch = batch; + Tag = batch; + LoadGrassBatch(); + UpdateFormTitle(); + } + + private void UpdateFormTitle() + { + Text = CurrentBatch?.Batch.archetypeName.ToString() ?? "Grass Batch"; + } + + + + private void LoadGrassBatch() + { + } + + } +} diff --git a/Project/Panels/EditYmapGrassPanel.resx b/Project/Panels/EditYmapGrassPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditYmapGrassPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditYmapPanel.Designer.cs b/Project/Panels/EditYmapPanel.Designer.cs new file mode 100644 index 0000000..12e796c --- /dev/null +++ b/Project/Panels/EditYmapPanel.Designer.cs @@ -0,0 +1,661 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditYmapPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYmapPanel)); + this.YmapTabControl = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.YmapCFlagsGrassCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapCFlagsCriticalCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapCFlagsDistLightsCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapCFlagsLODLightsCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapCFlagsPhysicsCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapCFlagsOcclusionCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapCFlagsInteriorCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapCFlagsSLODCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapCFlagsSLOD2CheckBox = new System.Windows.Forms.CheckBox(); + this.YmapCFlagsLODCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapCFlagsHDCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapContentFlagsTextBox = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.YmapCalculateFlagsButton = new System.Windows.Forms.Button(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.YmapFlagsLODCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapFlagsScriptedCheckBox = new System.Windows.Forms.CheckBox(); + this.YmapFlagsTextBox = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.label12 = new System.Windows.Forms.Label(); + this.YmapPhysicsDictionariesTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.YmapProjectPathTextBox = new System.Windows.Forms.TextBox(); + this.label30 = new System.Windows.Forms.Label(); + this.YmapFileLocationTextBox = new System.Windows.Forms.TextBox(); + this.label29 = new System.Windows.Forms.Label(); + this.YmapCalculateExtentsButton = new System.Windows.Forms.Button(); + this.YmapStreamingExtentsMaxTextBox = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.YmapStreamingExtentsMinTextBox = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.YmapEntitiesExtentsMaxTextBox = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.YmapEntitiesExtentsMinTextBox = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.YmapParentHashLabel = new System.Windows.Forms.Label(); + this.YmapNameHashLabel = new System.Windows.Forms.Label(); + this.YmapParentTextBox = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.YmapNameTextBox = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.YmapTabControl.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.SuspendLayout(); + // + // YmapTabControl + // + this.YmapTabControl.Controls.Add(this.tabPage1); + this.YmapTabControl.Controls.Add(this.tabPage2); + this.YmapTabControl.Location = new System.Drawing.Point(3, 59); + this.YmapTabControl.Name = "YmapTabControl"; + this.YmapTabControl.SelectedIndex = 0; + this.YmapTabControl.Size = new System.Drawing.Size(504, 203); + this.YmapTabControl.TabIndex = 63; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.groupBox1); + this.tabPage1.Controls.Add(this.YmapCalculateFlagsButton); + this.tabPage1.Controls.Add(this.groupBox2); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(496, 177); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Flags"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.YmapCFlagsGrassCheckBox); + this.groupBox1.Controls.Add(this.YmapCFlagsCriticalCheckBox); + this.groupBox1.Controls.Add(this.YmapCFlagsDistLightsCheckBox); + this.groupBox1.Controls.Add(this.YmapCFlagsLODLightsCheckBox); + this.groupBox1.Controls.Add(this.YmapCFlagsPhysicsCheckBox); + this.groupBox1.Controls.Add(this.YmapCFlagsOcclusionCheckBox); + this.groupBox1.Controls.Add(this.YmapCFlagsInteriorCheckBox); + this.groupBox1.Controls.Add(this.YmapCFlagsSLODCheckBox); + this.groupBox1.Controls.Add(this.YmapCFlagsSLOD2CheckBox); + this.groupBox1.Controls.Add(this.YmapCFlagsLODCheckBox); + this.groupBox1.Controls.Add(this.YmapCFlagsHDCheckBox); + this.groupBox1.Controls.Add(this.YmapContentFlagsTextBox); + this.groupBox1.Controls.Add(this.label7); + this.groupBox1.Location = new System.Drawing.Point(6, 6); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(259, 166); + this.groupBox1.TabIndex = 13; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Content Flags"; + // + // YmapCFlagsGrassCheckBox + // + this.YmapCFlagsGrassCheckBox.AutoSize = true; + this.YmapCFlagsGrassCheckBox.Location = new System.Drawing.Point(138, 113); + this.YmapCFlagsGrassCheckBox.Name = "YmapCFlagsGrassCheckBox"; + this.YmapCFlagsGrassCheckBox.Size = new System.Drawing.Size(86, 17); + this.YmapCFlagsGrassCheckBox.TabIndex = 10; + this.YmapCFlagsGrassCheckBox.Text = "Grass (1024)"; + this.YmapCFlagsGrassCheckBox.UseVisualStyleBackColor = true; + this.YmapCFlagsGrassCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsGrassCheckBox_CheckedChanged); + // + // YmapCFlagsCriticalCheckBox + // + this.YmapCFlagsCriticalCheckBox.AutoSize = true; + this.YmapCFlagsCriticalCheckBox.Location = new System.Drawing.Point(6, 113); + this.YmapCFlagsCriticalCheckBox.Name = "YmapCFlagsCriticalCheckBox"; + this.YmapCFlagsCriticalCheckBox.Size = new System.Drawing.Size(84, 17); + this.YmapCFlagsCriticalCheckBox.TabIndex = 9; + this.YmapCFlagsCriticalCheckBox.Text = "Critical (512)"; + this.YmapCFlagsCriticalCheckBox.UseVisualStyleBackColor = true; + this.YmapCFlagsCriticalCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsCriticalCheckBox_CheckedChanged); + // + // YmapCFlagsDistLightsCheckBox + // + this.YmapCFlagsDistLightsCheckBox.AutoSize = true; + this.YmapCFlagsDistLightsCheckBox.Location = new System.Drawing.Point(138, 90); + this.YmapCFlagsDistLightsCheckBox.Name = "YmapCFlagsDistLightsCheckBox"; + this.YmapCFlagsDistLightsCheckBox.Size = new System.Drawing.Size(117, 17); + this.YmapCFlagsDistLightsCheckBox.TabIndex = 8; + this.YmapCFlagsDistLightsCheckBox.Text = "Distant Lights (256)"; + this.YmapCFlagsDistLightsCheckBox.UseVisualStyleBackColor = true; + this.YmapCFlagsDistLightsCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsDistLightsCheckBox_CheckedChanged); + // + // YmapCFlagsLODLightsCheckBox + // + this.YmapCFlagsLODLightsCheckBox.AutoSize = true; + this.YmapCFlagsLODLightsCheckBox.Location = new System.Drawing.Point(6, 90); + this.YmapCFlagsLODLightsCheckBox.Name = "YmapCFlagsLODLightsCheckBox"; + this.YmapCFlagsLODLightsCheckBox.Size = new System.Drawing.Size(106, 17); + this.YmapCFlagsLODLightsCheckBox.TabIndex = 7; + this.YmapCFlagsLODLightsCheckBox.Text = "LOD Lights (128)"; + this.YmapCFlagsLODLightsCheckBox.UseVisualStyleBackColor = true; + this.YmapCFlagsLODLightsCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsLODLightsCheckBox_CheckedChanged); + // + // YmapCFlagsPhysicsCheckBox + // + this.YmapCFlagsPhysicsCheckBox.AutoSize = true; + this.YmapCFlagsPhysicsCheckBox.Location = new System.Drawing.Point(138, 67); + this.YmapCFlagsPhysicsCheckBox.Name = "YmapCFlagsPhysicsCheckBox"; + this.YmapCFlagsPhysicsCheckBox.Size = new System.Drawing.Size(83, 17); + this.YmapCFlagsPhysicsCheckBox.TabIndex = 6; + this.YmapCFlagsPhysicsCheckBox.Text = "Physics (64)"; + this.YmapCFlagsPhysicsCheckBox.UseVisualStyleBackColor = true; + this.YmapCFlagsPhysicsCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsPhysicsCheckBox_CheckedChanged); + // + // YmapCFlagsOcclusionCheckBox + // + this.YmapCFlagsOcclusionCheckBox.AutoSize = true; + this.YmapCFlagsOcclusionCheckBox.Location = new System.Drawing.Point(6, 67); + this.YmapCFlagsOcclusionCheckBox.Name = "YmapCFlagsOcclusionCheckBox"; + this.YmapCFlagsOcclusionCheckBox.Size = new System.Drawing.Size(94, 17); + this.YmapCFlagsOcclusionCheckBox.TabIndex = 5; + this.YmapCFlagsOcclusionCheckBox.Text = "Occlusion (32)"; + this.YmapCFlagsOcclusionCheckBox.UseVisualStyleBackColor = true; + this.YmapCFlagsOcclusionCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsOcclusionCheckBox_CheckedChanged); + // + // YmapCFlagsInteriorCheckBox + // + this.YmapCFlagsInteriorCheckBox.AutoSize = true; + this.YmapCFlagsInteriorCheckBox.Location = new System.Drawing.Point(6, 44); + this.YmapCFlagsInteriorCheckBox.Name = "YmapCFlagsInteriorCheckBox"; + this.YmapCFlagsInteriorCheckBox.Size = new System.Drawing.Size(73, 17); + this.YmapCFlagsInteriorCheckBox.TabIndex = 4; + this.YmapCFlagsInteriorCheckBox.Text = "Interior (8)"; + this.YmapCFlagsInteriorCheckBox.UseVisualStyleBackColor = true; + this.YmapCFlagsInteriorCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsInteriorCheckBox_CheckedChanged); + // + // YmapCFlagsSLODCheckBox + // + this.YmapCFlagsSLODCheckBox.AutoSize = true; + this.YmapCFlagsSLODCheckBox.Location = new System.Drawing.Point(138, 44); + this.YmapCFlagsSLODCheckBox.Name = "YmapCFlagsSLODCheckBox"; + this.YmapCFlagsSLODCheckBox.Size = new System.Drawing.Size(76, 17); + this.YmapCFlagsSLODCheckBox.TabIndex = 3; + this.YmapCFlagsSLODCheckBox.Text = "SLOD (16)"; + this.YmapCFlagsSLODCheckBox.UseVisualStyleBackColor = true; + this.YmapCFlagsSLODCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsSLODCheckBox_CheckedChanged); + // + // YmapCFlagsSLOD2CheckBox + // + this.YmapCFlagsSLOD2CheckBox.AutoSize = true; + this.YmapCFlagsSLOD2CheckBox.Location = new System.Drawing.Point(138, 21); + this.YmapCFlagsSLOD2CheckBox.Name = "YmapCFlagsSLOD2CheckBox"; + this.YmapCFlagsSLOD2CheckBox.Size = new System.Drawing.Size(82, 17); + this.YmapCFlagsSLOD2CheckBox.TabIndex = 2; + this.YmapCFlagsSLOD2CheckBox.Text = "SLOD2+ (4)"; + this.YmapCFlagsSLOD2CheckBox.UseVisualStyleBackColor = true; + this.YmapCFlagsSLOD2CheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsSLOD2CheckBox_CheckedChanged); + // + // YmapCFlagsLODCheckBox + // + this.YmapCFlagsLODCheckBox.AutoSize = true; + this.YmapCFlagsLODCheckBox.Location = new System.Drawing.Point(69, 21); + this.YmapCFlagsLODCheckBox.Name = "YmapCFlagsLODCheckBox"; + this.YmapCFlagsLODCheckBox.Size = new System.Drawing.Size(63, 17); + this.YmapCFlagsLODCheckBox.TabIndex = 1; + this.YmapCFlagsLODCheckBox.Text = "LOD (2)"; + this.YmapCFlagsLODCheckBox.UseVisualStyleBackColor = true; + this.YmapCFlagsLODCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsLODCheckBox_CheckedChanged); + // + // YmapCFlagsHDCheckBox + // + this.YmapCFlagsHDCheckBox.AutoSize = true; + this.YmapCFlagsHDCheckBox.Location = new System.Drawing.Point(6, 21); + this.YmapCFlagsHDCheckBox.Name = "YmapCFlagsHDCheckBox"; + this.YmapCFlagsHDCheckBox.Size = new System.Drawing.Size(57, 17); + this.YmapCFlagsHDCheckBox.TabIndex = 0; + this.YmapCFlagsHDCheckBox.Text = "HD (1)"; + this.YmapCFlagsHDCheckBox.UseVisualStyleBackColor = true; + this.YmapCFlagsHDCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsHDCheckBox_CheckedChanged); + // + // YmapContentFlagsTextBox + // + this.YmapContentFlagsTextBox.Location = new System.Drawing.Point(69, 140); + this.YmapContentFlagsTextBox.Name = "YmapContentFlagsTextBox"; + this.YmapContentFlagsTextBox.Size = new System.Drawing.Size(130, 20); + this.YmapContentFlagsTextBox.TabIndex = 13; + this.YmapContentFlagsTextBox.TextChanged += new System.EventHandler(this.YmapContentFlagsTextBox_TextChanged); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(26, 143); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(37, 13); + this.label7.TabIndex = 12; + this.label7.Text = "Value:"; + // + // YmapCalculateFlagsButton + // + this.YmapCalculateFlagsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.YmapCalculateFlagsButton.Location = new System.Drawing.Point(385, 144); + this.YmapCalculateFlagsButton.Name = "YmapCalculateFlagsButton"; + this.YmapCalculateFlagsButton.Size = new System.Drawing.Size(106, 23); + this.YmapCalculateFlagsButton.TabIndex = 40; + this.YmapCalculateFlagsButton.Text = "Calculate all flags"; + this.YmapCalculateFlagsButton.UseVisualStyleBackColor = true; + this.YmapCalculateFlagsButton.Click += new System.EventHandler(this.YmapCalculateFlagsButton_Click); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.YmapFlagsLODCheckBox); + this.groupBox2.Controls.Add(this.YmapFlagsScriptedCheckBox); + this.groupBox2.Controls.Add(this.YmapFlagsTextBox); + this.groupBox2.Controls.Add(this.label6); + this.groupBox2.Location = new System.Drawing.Point(271, 6); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(219, 74); + this.groupBox2.TabIndex = 14; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Flags"; + // + // YmapFlagsLODCheckBox + // + this.YmapFlagsLODCheckBox.AutoSize = true; + this.YmapFlagsLODCheckBox.Location = new System.Drawing.Point(92, 21); + this.YmapFlagsLODCheckBox.Name = "YmapFlagsLODCheckBox"; + this.YmapFlagsLODCheckBox.Size = new System.Drawing.Size(63, 17); + this.YmapFlagsLODCheckBox.TabIndex = 13; + this.YmapFlagsLODCheckBox.Text = "LOD (2)"; + this.YmapFlagsLODCheckBox.UseVisualStyleBackColor = true; + this.YmapFlagsLODCheckBox.CheckedChanged += new System.EventHandler(this.YmapFlagsLODCheckBox_CheckedChanged); + // + // YmapFlagsScriptedCheckBox + // + this.YmapFlagsScriptedCheckBox.AutoSize = true; + this.YmapFlagsScriptedCheckBox.Location = new System.Drawing.Point(6, 21); + this.YmapFlagsScriptedCheckBox.Name = "YmapFlagsScriptedCheckBox"; + this.YmapFlagsScriptedCheckBox.Size = new System.Drawing.Size(80, 17); + this.YmapFlagsScriptedCheckBox.TabIndex = 12; + this.YmapFlagsScriptedCheckBox.Text = "Scripted (1)"; + this.YmapFlagsScriptedCheckBox.UseVisualStyleBackColor = true; + this.YmapFlagsScriptedCheckBox.CheckedChanged += new System.EventHandler(this.YmapFlagsScriptedCheckBox_CheckedChanged); + // + // YmapFlagsTextBox + // + this.YmapFlagsTextBox.Location = new System.Drawing.Point(78, 48); + this.YmapFlagsTextBox.Name = "YmapFlagsTextBox"; + this.YmapFlagsTextBox.Size = new System.Drawing.Size(130, 20); + this.YmapFlagsTextBox.TabIndex = 11; + this.YmapFlagsTextBox.TextChanged += new System.EventHandler(this.YmapFlagsTextBox_TextChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(35, 51); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(37, 13); + this.label6.TabIndex = 10; + this.label6.Text = "Value:"; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.label12); + this.tabPage2.Controls.Add(this.YmapPhysicsDictionariesTextBox); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(496, 177); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Physics Dictionaries"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(3, 9); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(75, 13); + this.label12.TabIndex = 52; + this.label12.Text = "Name hashes:"; + // + // YmapPhysicsDictionariesTextBox + // + this.YmapPhysicsDictionariesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YmapPhysicsDictionariesTextBox.Location = new System.Drawing.Point(84, 6); + this.YmapPhysicsDictionariesTextBox.Multiline = true; + this.YmapPhysicsDictionariesTextBox.Name = "YmapPhysicsDictionariesTextBox"; + this.YmapPhysicsDictionariesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.YmapPhysicsDictionariesTextBox.Size = new System.Drawing.Size(248, 165); + this.YmapPhysicsDictionariesTextBox.TabIndex = 51; + this.YmapPhysicsDictionariesTextBox.WordWrap = false; + this.YmapPhysicsDictionariesTextBox.TextChanged += new System.EventHandler(this.YmapPhysicsDictionariesTextBox_TextChanged); + // + // YmapProjectPathTextBox + // + this.YmapProjectPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YmapProjectPathTextBox.Location = new System.Drawing.Point(84, 415); + this.YmapProjectPathTextBox.Name = "YmapProjectPathTextBox"; + this.YmapProjectPathTextBox.ReadOnly = true; + this.YmapProjectPathTextBox.Size = new System.Drawing.Size(414, 20); + this.YmapProjectPathTextBox.TabIndex = 62; + // + // label30 + // + this.label30.AutoSize = true; + this.label30.Location = new System.Drawing.Point(6, 418); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(67, 13); + this.label30.TabIndex = 61; + this.label30.Text = "Project path:"; + // + // YmapFileLocationTextBox + // + this.YmapFileLocationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YmapFileLocationTextBox.Location = new System.Drawing.Point(84, 389); + this.YmapFileLocationTextBox.Name = "YmapFileLocationTextBox"; + this.YmapFileLocationTextBox.ReadOnly = true; + this.YmapFileLocationTextBox.Size = new System.Drawing.Size(414, 20); + this.YmapFileLocationTextBox.TabIndex = 60; + // + // label29 + // + this.label29.AutoSize = true; + this.label29.Location = new System.Drawing.Point(6, 392); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(66, 13); + this.label29.TabIndex = 59; + this.label29.Text = "File location:"; + // + // YmapCalculateExtentsButton + // + this.YmapCalculateExtentsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.YmapCalculateExtentsButton.Location = new System.Drawing.Point(392, 348); + this.YmapCalculateExtentsButton.Name = "YmapCalculateExtentsButton"; + this.YmapCalculateExtentsButton.Size = new System.Drawing.Size(106, 23); + this.YmapCalculateExtentsButton.TabIndex = 58; + this.YmapCalculateExtentsButton.Text = "Calculate extents"; + this.YmapCalculateExtentsButton.UseVisualStyleBackColor = true; + this.YmapCalculateExtentsButton.Click += new System.EventHandler(this.YmapCalculateExtentsButton_Click); + // + // YmapStreamingExtentsMaxTextBox + // + this.YmapStreamingExtentsMaxTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YmapStreamingExtentsMaxTextBox.Location = new System.Drawing.Point(127, 350); + this.YmapStreamingExtentsMaxTextBox.Name = "YmapStreamingExtentsMaxTextBox"; + this.YmapStreamingExtentsMaxTextBox.Size = new System.Drawing.Size(259, 20); + this.YmapStreamingExtentsMaxTextBox.TabIndex = 57; + this.YmapStreamingExtentsMaxTextBox.TextChanged += new System.EventHandler(this.YmapStreamingExtentsMaxTextBox_TextChanged); + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(6, 353); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(118, 13); + this.label10.TabIndex = 56; + this.label10.Text = "Streaming Extents Max:"; + // + // YmapStreamingExtentsMinTextBox + // + this.YmapStreamingExtentsMinTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YmapStreamingExtentsMinTextBox.Location = new System.Drawing.Point(127, 324); + this.YmapStreamingExtentsMinTextBox.Name = "YmapStreamingExtentsMinTextBox"; + this.YmapStreamingExtentsMinTextBox.Size = new System.Drawing.Size(259, 20); + this.YmapStreamingExtentsMinTextBox.TabIndex = 55; + this.YmapStreamingExtentsMinTextBox.TextChanged += new System.EventHandler(this.YmapStreamingExtentsMinTextBox_TextChanged); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(6, 327); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(115, 13); + this.label11.TabIndex = 54; + this.label11.Text = "Streaming Extents Min:"; + // + // YmapEntitiesExtentsMaxTextBox + // + this.YmapEntitiesExtentsMaxTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YmapEntitiesExtentsMaxTextBox.Location = new System.Drawing.Point(127, 298); + this.YmapEntitiesExtentsMaxTextBox.Name = "YmapEntitiesExtentsMaxTextBox"; + this.YmapEntitiesExtentsMaxTextBox.Size = new System.Drawing.Size(259, 20); + this.YmapEntitiesExtentsMaxTextBox.TabIndex = 53; + this.YmapEntitiesExtentsMaxTextBox.TextChanged += new System.EventHandler(this.YmapEntitiesExtentsMaxTextBox_TextChanged); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(6, 301); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(105, 13); + this.label9.TabIndex = 52; + this.label9.Text = "Entities Extents Max:"; + // + // YmapEntitiesExtentsMinTextBox + // + this.YmapEntitiesExtentsMinTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YmapEntitiesExtentsMinTextBox.Location = new System.Drawing.Point(127, 272); + this.YmapEntitiesExtentsMinTextBox.Name = "YmapEntitiesExtentsMinTextBox"; + this.YmapEntitiesExtentsMinTextBox.Size = new System.Drawing.Size(259, 20); + this.YmapEntitiesExtentsMinTextBox.TabIndex = 51; + this.YmapEntitiesExtentsMinTextBox.TextChanged += new System.EventHandler(this.YmapEntitiesExtentsMinTextBox_TextChanged); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(6, 275); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(102, 13); + this.label8.TabIndex = 50; + this.label8.Text = "Entities Extents Min:"; + // + // YmapParentHashLabel + // + this.YmapParentHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.YmapParentHashLabel.AutoSize = true; + this.YmapParentHashLabel.Location = new System.Drawing.Point(350, 36); + this.YmapParentHashLabel.Name = "YmapParentHashLabel"; + this.YmapParentHashLabel.Size = new System.Drawing.Size(44, 13); + this.YmapParentHashLabel.TabIndex = 49; + this.YmapParentHashLabel.Text = "Hash: 0"; + // + // YmapNameHashLabel + // + this.YmapNameHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.YmapNameHashLabel.AutoSize = true; + this.YmapNameHashLabel.Location = new System.Drawing.Point(350, 10); + this.YmapNameHashLabel.Name = "YmapNameHashLabel"; + this.YmapNameHashLabel.Size = new System.Drawing.Size(44, 13); + this.YmapNameHashLabel.TabIndex = 48; + this.YmapNameHashLabel.Text = "Hash: 0"; + // + // YmapParentTextBox + // + this.YmapParentTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YmapParentTextBox.Location = new System.Drawing.Point(84, 33); + this.YmapParentTextBox.Name = "YmapParentTextBox"; + this.YmapParentTextBox.Size = new System.Drawing.Size(216, 20); + this.YmapParentTextBox.TabIndex = 46; + this.YmapParentTextBox.TextChanged += new System.EventHandler(this.YmapParentTextBox_TextChanged); + // + // label4 + // + this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(299, 36); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(35, 13); + this.label4.TabIndex = 47; + this.label4.Text = ".ymap"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(6, 36); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(41, 13); + this.label5.TabIndex = 45; + this.label5.Text = "Parent:"; + // + // YmapNameTextBox + // + this.YmapNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YmapNameTextBox.Location = new System.Drawing.Point(84, 7); + this.YmapNameTextBox.Name = "YmapNameTextBox"; + this.YmapNameTextBox.Size = new System.Drawing.Size(216, 20); + this.YmapNameTextBox.TabIndex = 43; + this.YmapNameTextBox.TextChanged += new System.EventHandler(this.YmapNameTextBox_TextChanged); + // + // label3 + // + this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(299, 10); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(35, 13); + this.label3.TabIndex = 44; + this.label3.Text = ".ymap"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 10); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(38, 13); + this.label2.TabIndex = 42; + this.label2.Text = "Name:"; + // + // EditYmapPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(510, 443); + this.Controls.Add(this.YmapTabControl); + this.Controls.Add(this.YmapProjectPathTextBox); + this.Controls.Add(this.label30); + this.Controls.Add(this.YmapFileLocationTextBox); + this.Controls.Add(this.label29); + this.Controls.Add(this.YmapCalculateExtentsButton); + this.Controls.Add(this.YmapStreamingExtentsMaxTextBox); + this.Controls.Add(this.label10); + this.Controls.Add(this.YmapStreamingExtentsMinTextBox); + this.Controls.Add(this.label11); + this.Controls.Add(this.YmapEntitiesExtentsMaxTextBox); + this.Controls.Add(this.label9); + this.Controls.Add(this.YmapEntitiesExtentsMinTextBox); + this.Controls.Add(this.label8); + this.Controls.Add(this.YmapParentHashLabel); + this.Controls.Add(this.YmapNameHashLabel); + this.Controls.Add(this.YmapParentTextBox); + this.Controls.Add(this.label4); + this.Controls.Add(this.label5); + this.Controls.Add(this.YmapNameTextBox); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditYmapPanel"; + this.Text = "Edit Ymap"; + this.YmapTabControl.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TabControl YmapTabControl; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox YmapCFlagsGrassCheckBox; + private System.Windows.Forms.CheckBox YmapCFlagsCriticalCheckBox; + private System.Windows.Forms.CheckBox YmapCFlagsDistLightsCheckBox; + private System.Windows.Forms.CheckBox YmapCFlagsLODLightsCheckBox; + private System.Windows.Forms.CheckBox YmapCFlagsPhysicsCheckBox; + private System.Windows.Forms.CheckBox YmapCFlagsOcclusionCheckBox; + private System.Windows.Forms.CheckBox YmapCFlagsInteriorCheckBox; + private System.Windows.Forms.CheckBox YmapCFlagsSLODCheckBox; + private System.Windows.Forms.CheckBox YmapCFlagsSLOD2CheckBox; + private System.Windows.Forms.CheckBox YmapCFlagsLODCheckBox; + private System.Windows.Forms.CheckBox YmapCFlagsHDCheckBox; + private System.Windows.Forms.TextBox YmapContentFlagsTextBox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Button YmapCalculateFlagsButton; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.CheckBox YmapFlagsLODCheckBox; + private System.Windows.Forms.CheckBox YmapFlagsScriptedCheckBox; + private System.Windows.Forms.TextBox YmapFlagsTextBox; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Label label12; + private WinForms.TextBoxFix YmapPhysicsDictionariesTextBox; + private System.Windows.Forms.TextBox YmapProjectPathTextBox; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.TextBox YmapFileLocationTextBox; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.Button YmapCalculateExtentsButton; + private System.Windows.Forms.TextBox YmapStreamingExtentsMaxTextBox; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox YmapStreamingExtentsMinTextBox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox YmapEntitiesExtentsMaxTextBox; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox YmapEntitiesExtentsMinTextBox; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label YmapParentHashLabel; + private System.Windows.Forms.Label YmapNameHashLabel; + private System.Windows.Forms.TextBox YmapParentTextBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox YmapNameTextBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + } +} \ No newline at end of file diff --git a/Project/Panels/EditYmapPanel.cs b/Project/Panels/EditYmapPanel.cs new file mode 100644 index 0000000..e662c62 --- /dev/null +++ b/Project/Panels/EditYmapPanel.cs @@ -0,0 +1,572 @@ +using CodeWalker.GameFiles; +using SharpDX; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using WeifenLuo.WinFormsUI.Docking; + +namespace CodeWalker.Project.Panels +{ + public partial class EditYmapPanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public YmapFile Ymap { get; set; } + + private bool populatingui = false; + private bool waschanged = false; + + public EditYmapPanel(ProjectForm2 projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + } + + public void SetYmap(YmapFile ymap) + { + Ymap = ymap; + Tag = ymap; + UpdateFormTitle(); + UpdateYmapUI(); + waschanged = ymap?.HasChanged ?? false; + } + + public void UpdateFormTitleYmapChanged() + { + bool changed = Ymap.HasChanged; + if (!waschanged && changed) + { + UpdateFormTitle(); + waschanged = true; + } + else if (waschanged && !changed) + { + UpdateFormTitle(); + waschanged = false; + } + } + private void UpdateFormTitle() + { + string fn = Ymap.RpfFileEntry?.Name ?? Ymap.Name; + if (string.IsNullOrEmpty(fn)) fn = "untitled.ymap"; + Text = fn + (Ymap.HasChanged ? "*" : ""); + } + + public void UpdateYmapUI() + { + if (Ymap == null) + { + YmapNameTextBox.Text = ""; + YmapNameHashLabel.Text = "Hash: 0"; + YmapParentTextBox.Text = string.Empty; + YmapParentHashLabel.Text = "Hash: 0"; + YmapFlagsTextBox.Text = string.Empty; + YmapContentFlagsTextBox.Text = string.Empty; + YmapCFlagsHDCheckBox.Checked = false; + YmapCFlagsLODCheckBox.Checked = false; + YmapCFlagsSLOD2CheckBox.Checked = false; + YmapCFlagsInteriorCheckBox.Checked = false; + YmapCFlagsSLODCheckBox.Checked = false; + YmapCFlagsOcclusionCheckBox.Checked = false; + YmapCFlagsPhysicsCheckBox.Checked = false; + YmapCFlagsLODLightsCheckBox.Checked = false; + YmapCFlagsDistLightsCheckBox.Checked = false; + YmapCFlagsCriticalCheckBox.Checked = false; + YmapCFlagsGrassCheckBox.Checked = false; + YmapFlagsScriptedCheckBox.Checked = false; + YmapFlagsLODCheckBox.Checked = false; + YmapPhysicsDictionariesTextBox.Text = string.Empty; + YmapEntitiesExtentsMinTextBox.Text = string.Empty; + YmapEntitiesExtentsMaxTextBox.Text = string.Empty; + YmapStreamingExtentsMinTextBox.Text = string.Empty; + YmapStreamingExtentsMaxTextBox.Text = string.Empty; + YmapFileLocationTextBox.Text = string.Empty; + YmapProjectPathTextBox.Text = string.Empty; + } + else + { + populatingui = true; + var md = Ymap.CMapData; + if (md.name.Hash == 0) + { + string name = Path.GetFileNameWithoutExtension(Ymap.Name); + JenkIndex.Ensure(name); + md.name = new MetaHash(JenkHash.GenHash(name)); + } + + var project = ProjectForm?.CurrentProjectFile; + + YmapNameTextBox.Text = md.name.ToString(); + YmapNameHashLabel.Text = "Hash: " + md.name.Hash.ToString(); + YmapParentTextBox.Text = md.parent.ToString(); + YmapParentHashLabel.Text = "Hash: " + md.parent.Hash.ToString(); + YmapEntitiesExtentsMinTextBox.Text = FloatUtil.GetVector3String(md.entitiesExtentsMin); + YmapEntitiesExtentsMaxTextBox.Text = FloatUtil.GetVector3String(md.entitiesExtentsMax); + YmapStreamingExtentsMinTextBox.Text = FloatUtil.GetVector3String(md.streamingExtentsMin); + YmapStreamingExtentsMaxTextBox.Text = FloatUtil.GetVector3String(md.streamingExtentsMax); + YmapFileLocationTextBox.Text = Ymap.RpfFileEntry?.Path ?? Ymap.FilePath; + YmapProjectPathTextBox.Text = (project != null) ? project.GetRelativePath(Ymap.FilePath) : Ymap.FilePath; + + UpdateYmapFlagsUI(true, true); + + UpdateYmapPhysicsDictionariesUI(); + + populatingui = false; + + ////struct CMapData: + //MetaHash name { get; set; } //8 8: Hash: 0: name + //MetaHash parent { get; set; } //12 12: Hash: 0: parent + //uint flags { get; set; } //16 16: UnsignedInt: 0: flags + //uint contentFlags { get; set; } //20 20: UnsignedInt: 0: contentFlags//1785155637 + //Vector3 streamingExtentsMin { get; set; } //32 32: Float_XYZ: 0: streamingExtentsMin//3710026271 + //Vector3 streamingExtentsMax { get; set; } //48 48: Float_XYZ: 0: streamingExtentsMax//2720965429 + //Vector3 entitiesExtentsMin { get; set; } //64 64: Float_XYZ: 0: entitiesExtentsMin//477478129 + //Vector3 entitiesExtentsMax { get; set; } //80 80: Float_XYZ: 0: entitiesExtentsMax//1829192759 + //Array_StructurePointer entities { get; set; } //96 96: Array: 0: entities {0: StructurePointer: 0: 256} + //Array_Structure containerLods { get; set; } //112 112: Array: 0: containerLods//2935983381 {0: Structure: 372253349: 256} + //Array_Structure boxOccluders { get; set; } //128 128: Array: 0: boxOccluders//3983590932 {0: Structure: SectionUNKNOWN7: 256} + //Array_Structure occludeModels { get; set; } //144 144: Array: 0: occludeModels//2132383965 {0: Structure: SectionUNKNOWN5: 256} + //Array_uint physicsDictionaries { get; set; } //160 160: Array: 0: physicsDictionaries//949589348 {0: Hash: 0: 256} + //rage__fwInstancedMapData instancedData { get; set; } //176 176: Structure: rage__fwInstancedMapData: instancedData//2569067561 + //Array_Structure timeCycleModifiers { get; set; } //224 224: Array: 0: timeCycleModifiers {0: Structure: CTimeCycleModifier: 256} + //Array_Structure carGenerators { get; set; } //240 240: Array: 0: carGenerators//3254823756 {0: Structure: CCarGen: 256} + //CLODLight LODLightsSOA { get; set; } //256 256: Structure: CLODLight: LODLightsSOA//1774371066 + //CDistantLODLight DistantLODLightsSOA { get; set; } //392 392: Structure: CDistantLODLight: DistantLODLightsSOA//2954466641 + //CBlockDesc block { get; set; } //440 440: Structure: CBlockDesc//3072355914: block + + } + + + } + + private void UpdateYmapFlagsUI(bool updateCheckboxes, bool updateTextboxes) + { + if (Ymap == null) return; + + var md = Ymap.CMapData; + var flags = md.flags; + var contentFlags = md.contentFlags; + + if (updateCheckboxes) + { + YmapCFlagsHDCheckBox.Checked = BitUtil.IsBitSet(contentFlags, 0); //1 + YmapCFlagsLODCheckBox.Checked = BitUtil.IsBitSet(contentFlags, 1); //2 + YmapCFlagsSLOD2CheckBox.Checked = BitUtil.IsBitSet(contentFlags, 2); //4 + YmapCFlagsInteriorCheckBox.Checked = BitUtil.IsBitSet(contentFlags, 3); //8 + YmapCFlagsSLODCheckBox.Checked = BitUtil.IsBitSet(contentFlags, 4); //16 + YmapCFlagsOcclusionCheckBox.Checked = BitUtil.IsBitSet(contentFlags, 5); //32 + YmapCFlagsPhysicsCheckBox.Checked = BitUtil.IsBitSet(contentFlags, 6); //64 + YmapCFlagsLODLightsCheckBox.Checked = BitUtil.IsBitSet(contentFlags, 7); //128 + YmapCFlagsDistLightsCheckBox.Checked = BitUtil.IsBitSet(contentFlags, 8); //256 + YmapCFlagsCriticalCheckBox.Checked = BitUtil.IsBitSet(contentFlags, 9); //512 + YmapCFlagsGrassCheckBox.Checked = BitUtil.IsBitSet(contentFlags, 10); //1024 + + YmapFlagsScriptedCheckBox.Checked = BitUtil.IsBitSet(flags, 0); //1 + YmapFlagsLODCheckBox.Checked = BitUtil.IsBitSet(flags, 1); //2 + } + if (updateTextboxes) + { + YmapFlagsTextBox.Text = flags.ToString(); + YmapContentFlagsTextBox.Text = contentFlags.ToString(); + } + } + + private void UpdateYmapPhysicsDictionariesUI() + { + if ((Ymap == null) || (Ymap.physicsDictionaries == null)) + { + YmapPhysicsDictionariesTextBox.Text = string.Empty; + } + else + { + StringBuilder sb = new StringBuilder(); + foreach (var hash in Ymap.physicsDictionaries) + { + sb.AppendLine(hash.ToString()); + } + YmapPhysicsDictionariesTextBox.Text = sb.ToString(); + } + } + + private void SetYmapHasChanged(bool changed) + { + ProjectForm.SetYmapHasChanged(changed); + UpdateFormTitleYmapChanged(); + } + + private void SetYmapPhysicsDictionariesFromTextbox() + { + if (populatingui) return; + if (Ymap == null) return; + + List hashes = new List(); + + var strs = YmapPhysicsDictionariesTextBox.Text.Split('\n'); + foreach (var str in strs) + { + var tstr = str.Trim(); + if (!string.IsNullOrEmpty(tstr)) + { + uint h = 0; + if (uint.TryParse(tstr, out h)) + { + hashes.Add(h); + } + else + { + h = JenkHash.GenHash(tstr.ToLowerInvariant()); + hashes.Add(h); + } + } + } + + lock (ProjectForm.ProjectSyncRoot) + { + Ymap.physicsDictionaries = (hashes.Count > 0) ? hashes.ToArray() : null; + SetYmapHasChanged(true); + } + } + + private void SetYmapFlagsFromCheckBoxes() + { + if (populatingui) return; + if (Ymap == null) return; + + uint flags = 0; + uint contentFlags = 0; + + contentFlags = BitUtil.UpdateBit(contentFlags, 0, YmapCFlagsHDCheckBox.Checked); + contentFlags = BitUtil.UpdateBit(contentFlags, 1, YmapCFlagsLODCheckBox.Checked); + contentFlags = BitUtil.UpdateBit(contentFlags, 2, YmapCFlagsSLOD2CheckBox.Checked); + contentFlags = BitUtil.UpdateBit(contentFlags, 3, YmapCFlagsInteriorCheckBox.Checked); + contentFlags = BitUtil.UpdateBit(contentFlags, 4, YmapCFlagsSLODCheckBox.Checked); + contentFlags = BitUtil.UpdateBit(contentFlags, 5, YmapCFlagsOcclusionCheckBox.Checked); + contentFlags = BitUtil.UpdateBit(contentFlags, 6, YmapCFlagsPhysicsCheckBox.Checked); + contentFlags = BitUtil.UpdateBit(contentFlags, 7, YmapCFlagsLODLightsCheckBox.Checked); + contentFlags = BitUtil.UpdateBit(contentFlags, 8, YmapCFlagsDistLightsCheckBox.Checked); + contentFlags = BitUtil.UpdateBit(contentFlags, 9, YmapCFlagsCriticalCheckBox.Checked); + contentFlags = BitUtil.UpdateBit(contentFlags, 10, YmapCFlagsGrassCheckBox.Checked); + + flags = BitUtil.UpdateBit(flags, 0, YmapFlagsScriptedCheckBox.Checked); + flags = BitUtil.UpdateBit(flags, 1, YmapFlagsLODCheckBox.Checked); + + + lock (ProjectForm.ProjectSyncRoot) + { + if (Ymap._CMapData.flags != flags) + { + Ymap._CMapData.flags = flags; + SetYmapHasChanged(true); + } + if (Ymap._CMapData.contentFlags != contentFlags) + { + Ymap._CMapData.contentFlags = contentFlags; + SetYmapHasChanged(true); + } + } + + populatingui = true; + UpdateYmapFlagsUI(false, true); //update textbox + populatingui = false; + } + + private void SetYmapFlagsFromTextBoxes() + { + if (populatingui) return; + if (Ymap == null) return; + + uint flags = 0; + uint contentFlags = 0; + uint.TryParse(YmapFlagsTextBox.Text, out flags); + uint.TryParse(YmapContentFlagsTextBox.Text, out contentFlags); + + lock (ProjectForm.ProjectSyncRoot) + { + if (Ymap._CMapData.flags != flags) + { + Ymap._CMapData.flags = flags; + SetYmapHasChanged(true); + } + if (Ymap._CMapData.contentFlags != contentFlags) + { + Ymap._CMapData.contentFlags = contentFlags; + SetYmapHasChanged(true); + } + } + + populatingui = true; + UpdateYmapFlagsUI(true, false); //update checkboxes + populatingui = false; + } + + private void CalcYmapFlags() + { + if (populatingui) return; + if (Ymap == null) return; + + lock (ProjectForm.ProjectSyncRoot) + { + if (Ymap.CalcFlags()) + { + SetYmapHasChanged(true); + } + } + + populatingui = true; + UpdateYmapFlagsUI(true, true); //update checkboxes and textboxes + populatingui = false; + } + + private void CalcYmapExtents() + { + if (Ymap == null) return; + + var allents = Ymap.AllEntities; + var allbatches = Ymap.GrassInstanceBatches; + + if ((allents == null) && (allbatches == null)) + { + MessageBox.Show("No items to calculate extents from."); + return; + } + + lock (ProjectForm.ProjectSyncRoot) + { + if (Ymap.CalcExtents()) + { + SetYmapHasChanged(true); + } + } + + populatingui = true; + var md = Ymap.CMapData; + YmapEntitiesExtentsMinTextBox.Text = FloatUtil.GetVector3String(md.entitiesExtentsMin); + YmapEntitiesExtentsMaxTextBox.Text = FloatUtil.GetVector3String(md.entitiesExtentsMax); + YmapStreamingExtentsMinTextBox.Text = FloatUtil.GetVector3String(md.streamingExtentsMin); + YmapStreamingExtentsMaxTextBox.Text = FloatUtil.GetVector3String(md.streamingExtentsMax); + populatingui = false; + } + + + private void YmapNameTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + uint hash = 0; + string name = YmapNameTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + YmapNameHashLabel.Text = "Hash: " + hash.ToString(); + + if (Ymap != null) + { + lock (ProjectForm.ProjectSyncRoot) + { + string ymname = name + ".ymap"; + if (Ymap.Name != ymname) + { + Ymap.Name = ymname; + Ymap._CMapData.name = new MetaHash(hash); + SetYmapHasChanged(true); + UpdateFormTitle(); + } + } + } + } + + private void YmapParentTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + uint hash = 0; + string name = YmapParentTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + YmapParentHashLabel.Text = "Hash: " + hash.ToString(); + + if (hash != 0) + { + var entry = ProjectForm.FindParentYmapEntry(hash); + if (entry == null) + { + YmapParentHashLabel.Text += " (not found!)"; + } + } + + if (Ymap != null) + { + lock (ProjectForm.ProjectSyncRoot) + { + if (Ymap._CMapData.parent.Hash != hash) + { + Ymap._CMapData.parent = new MetaHash(hash); + SetYmapHasChanged(true); + + //TODO: confirm entity parent linkage? + } + } + } + + } + + private void YmapFlagsTextBox_TextChanged(object sender, EventArgs e) + { + SetYmapFlagsFromTextBoxes(); + } + + private void YmapContentFlagsTextBox_TextChanged(object sender, EventArgs e) + { + SetYmapFlagsFromTextBoxes(); + } + + private void YmapCFlagsHDCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapCFlagsLODCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapCFlagsSLOD2CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapCFlagsInteriorCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapCFlagsSLODCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapCFlagsOcclusionCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapCFlagsPhysicsCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapCFlagsLODLightsCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapCFlagsDistLightsCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapCFlagsCriticalCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapCFlagsGrassCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapFlagsScriptedCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapFlagsLODCheckBox_CheckedChanged(object sender, EventArgs e) + { + SetYmapFlagsFromCheckBoxes(); + } + + private void YmapCalculateFlagsButton_Click(object sender, EventArgs e) + { + CalcYmapFlags(); + } + + private void YmapEntitiesExtentsMinTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (Ymap == null) return; + Vector3 v = FloatUtil.ParseVector3String(YmapEntitiesExtentsMinTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (Ymap._CMapData.entitiesExtentsMin != v) + { + Ymap._CMapData.entitiesExtentsMin = v; + SetYmapHasChanged(true); + } + } + } + + private void YmapEntitiesExtentsMaxTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (Ymap == null) return; + Vector3 v = FloatUtil.ParseVector3String(YmapEntitiesExtentsMaxTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (Ymap._CMapData.entitiesExtentsMax != v) + { + Ymap._CMapData.entitiesExtentsMax = v; + SetYmapHasChanged(true); + } + } + } + + private void YmapStreamingExtentsMinTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (Ymap == null) return; + Vector3 v = FloatUtil.ParseVector3String(YmapStreamingExtentsMinTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (Ymap._CMapData.streamingExtentsMin != v) + { + Ymap._CMapData.streamingExtentsMin = v; + SetYmapHasChanged(true); + } + } + } + + private void YmapStreamingExtentsMaxTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (Ymap == null) return; + Vector3 v = FloatUtil.ParseVector3String(YmapStreamingExtentsMaxTextBox.Text); + lock (ProjectForm.ProjectSyncRoot) + { + if (Ymap._CMapData.streamingExtentsMax != v) + { + Ymap._CMapData.streamingExtentsMax = v; + SetYmapHasChanged(true); + } + } + } + + private void YmapCalculateExtentsButton_Click(object sender, EventArgs e) + { + CalcYmapExtents(); + } + + private void YmapPhysicsDictionariesTextBox_TextChanged(object sender, EventArgs e) + { + SetYmapPhysicsDictionariesFromTextbox(); + } + } +} diff --git a/Project/Panels/EditYmapPanel.resx b/Project/Panels/EditYmapPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditYmapPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditYndNodePanel.Designer.cs b/Project/Panels/EditYndNodePanel.Designer.cs new file mode 100644 index 0000000..a29f106 --- /dev/null +++ b/Project/Panels/EditYndNodePanel.Designer.cs @@ -0,0 +1,1955 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditYndNodePanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYndNodePanel)); + this.PathNodeTabControl = new System.Windows.Forms.TabControl(); + this.PathNodePropertiesTabPage = new System.Windows.Forms.TabPage(); + this.PathNodeFlags5GroupBox = new System.Windows.Forms.GroupBox(); + this.PathNodeFlags52CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags53CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags51CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags5UpDown = new System.Windows.Forms.NumericUpDown(); + this.PathNodeFlags4GroupBox = new System.Windows.Forms.GroupBox(); + this.PathNodeFlags45CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags46CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags47CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags48CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags42UpDown = new System.Windows.Forms.NumericUpDown(); + this.label71 = new System.Windows.Forms.Label(); + this.PathNodeFlags41CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags4UpDown = new System.Windows.Forms.NumericUpDown(); + this.PathNodeFlags4Label = new System.Windows.Forms.Label(); + this.PathNodeFlags3GroupBox = new System.Windows.Forms.GroupBox(); + this.PathNodeFlags32UpDown = new System.Windows.Forms.NumericUpDown(); + this.label70 = new System.Windows.Forms.Label(); + this.PathNodeFlags31CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags3UpDown = new System.Windows.Forms.NumericUpDown(); + this.PathNodeFlags3Label = new System.Windows.Forms.Label(); + this.PathNodeFlags2GroupBox = new System.Windows.Forms.GroupBox(); + this.PathNodeFlags21CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags28CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags22CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags27CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags23CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags26CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags24CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags25CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags2UpDown = new System.Windows.Forms.NumericUpDown(); + this.PathNodeFlags2Label = new System.Windows.Forms.Label(); + this.PathNodeFlags1GroupBox = new System.Windows.Forms.GroupBox(); + this.PathNodeFlags11CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags18CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags12CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags17CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags13CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags16CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags14CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags15CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags1UpDown = new System.Windows.Forms.NumericUpDown(); + this.PathNodeFlags1Label = new System.Windows.Forms.Label(); + this.PathNodeFlags0GroupBox = new System.Windows.Forms.GroupBox(); + this.PathNodeFlags01CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags08CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags02CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags07CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags03CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags06CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags04CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags05CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeFlags0UpDown = new System.Windows.Forms.NumericUpDown(); + this.PathNodeFlags0Label = new System.Windows.Forms.Label(); + this.PathNodeDeleteButton = new System.Windows.Forms.Button(); + this.PathNodeAreaIDUpDown = new System.Windows.Forms.NumericUpDown(); + this.PathNodeAddToProjectButton = new System.Windows.Forms.Button(); + this.label49 = new System.Windows.Forms.Label(); + this.label50 = new System.Windows.Forms.Label(); + this.label68 = new System.Windows.Forms.Label(); + this.PathNodeNodeIDUpDown = new System.Windows.Forms.NumericUpDown(); + this.label52 = new System.Windows.Forms.Label(); + this.PathNodeStreetHashTextBox = new System.Windows.Forms.TextBox(); + this.PathNodeGoToButton = new System.Windows.Forms.Button(); + this.PathNodeStreetNameLabel = new System.Windows.Forms.Label(); + this.PathNodePositionTextBox = new System.Windows.Forms.TextBox(); + this.label55 = new System.Windows.Forms.Label(); + this.PathNodeLinksTabPage = new System.Windows.Forms.TabPage(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.PathNodeRemoveLinkButton = new System.Windows.Forms.Button(); + this.PathNodeAddLinkButton = new System.Windows.Forms.Button(); + this.PathNodeLinksListBox = new System.Windows.Forms.ListBox(); + this.PathNodeLinkCountLabel = new System.Windows.Forms.Label(); + this.PathNodeLinkPanel = new System.Windows.Forms.Panel(); + this.PathLinkFlags2GroupBox = new System.Windows.Forms.GroupBox(); + this.PathNodeLinkFlags21CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeLinkFlags22CheckBox = new System.Windows.Forms.CheckBox(); + this.label53 = new System.Windows.Forms.Label(); + this.PathNodeLinkFwdLanesUpDown = new System.Windows.Forms.NumericUpDown(); + this.label56 = new System.Windows.Forms.Label(); + this.PathNodeLinkBackLanesUpDown = new System.Windows.Forms.NumericUpDown(); + this.PathNodeLinkFlags2UpDown = new System.Windows.Forms.NumericUpDown(); + this.PathNodeLinkFlags2Label = new System.Windows.Forms.Label(); + this.PathLinkFlags1GroupBox = new System.Windows.Forms.GroupBox(); + this.PathNodeLinkOffsetSizeUpDown = new System.Windows.Forms.NumericUpDown(); + this.label61 = new System.Windows.Forms.Label(); + this.PathNodeLinkFlags11CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeLinkFlags18CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeLinkFlags12CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeLinkFlags13CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeLinkFlags14CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeLinkFlags1UpDown = new System.Windows.Forms.NumericUpDown(); + this.PathNodeLinkFlags1Label = new System.Windows.Forms.Label(); + this.PathLinkFlags0GroupBox = new System.Windows.Forms.GroupBox(); + this.PathNodeLinkFlags04UpDown = new System.Windows.Forms.NumericUpDown(); + this.label60 = new System.Windows.Forms.Label(); + this.PathNodeLinkFlags03UpDown = new System.Windows.Forms.NumericUpDown(); + this.label58 = new System.Windows.Forms.Label(); + this.PathNodeLinkFlags01CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeLinkFlags02CheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeLinkFlags0UpDown = new System.Windows.Forms.NumericUpDown(); + this.PathNodeLinkFlags0Label = new System.Windows.Forms.Label(); + this.PathNodeLinkageStatusLabel = new System.Windows.Forms.Label(); + this.PathNodeLinkLengthUpDown = new System.Windows.Forms.NumericUpDown(); + this.label57 = new System.Windows.Forms.Label(); + this.PathNodeLinkNodeIDUpDown = new System.Windows.Forms.NumericUpDown(); + this.label51 = new System.Windows.Forms.Label(); + this.PathNodeLinkAreaIDUpDown = new System.Windows.Forms.NumericUpDown(); + this.label54 = new System.Windows.Forms.Label(); + this.PathNodeJunctionTabPage = new System.Windows.Forms.TabPage(); + this.label78 = new System.Windows.Forms.Label(); + this.PathNodeJunctionPanel = new System.Windows.Forms.Panel(); + this.PathNodeJunctionPosYUpDown = new System.Windows.Forms.NumericUpDown(); + this.label59 = new System.Windows.Forms.Label(); + this.PathNodeJunctionPosXUpDown = new System.Windows.Forms.NumericUpDown(); + this.label69 = new System.Windows.Forms.Label(); + this.PathNodeJunctionHeightmapBytesTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.PathNodeJunctionHeightmapDimYUpDown = new System.Windows.Forms.NumericUpDown(); + this.label77 = new System.Windows.Forms.Label(); + this.PathNodeJunctionHeightmapDimXUpDown = new System.Windows.Forms.NumericUpDown(); + this.label76 = new System.Windows.Forms.Label(); + this.PathNodeJunctionMinZUpDown = new System.Windows.Forms.NumericUpDown(); + this.label67 = new System.Windows.Forms.Label(); + this.PathNodeJunctionMaxZUpDown = new System.Windows.Forms.NumericUpDown(); + this.label65 = new System.Windows.Forms.Label(); + this.PathNodeJunctionEnableCheckBox = new System.Windows.Forms.CheckBox(); + this.PathNodeTabControl.SuspendLayout(); + this.PathNodePropertiesTabPage.SuspendLayout(); + this.PathNodeFlags5GroupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags5UpDown)).BeginInit(); + this.PathNodeFlags4GroupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags42UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags4UpDown)).BeginInit(); + this.PathNodeFlags3GroupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags32UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags3UpDown)).BeginInit(); + this.PathNodeFlags2GroupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags2UpDown)).BeginInit(); + this.PathNodeFlags1GroupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags1UpDown)).BeginInit(); + this.PathNodeFlags0GroupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags0UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeAreaIDUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeNodeIDUpDown)).BeginInit(); + this.PathNodeLinksTabPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.PathNodeLinkPanel.SuspendLayout(); + this.PathLinkFlags2GroupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFwdLanesUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkBackLanesUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags2UpDown)).BeginInit(); + this.PathLinkFlags1GroupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkOffsetSizeUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags1UpDown)).BeginInit(); + this.PathLinkFlags0GroupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags04UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags03UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags0UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkLengthUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkNodeIDUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkAreaIDUpDown)).BeginInit(); + this.PathNodeJunctionTabPage.SuspendLayout(); + this.PathNodeJunctionPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionPosYUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionPosXUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionHeightmapDimYUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionHeightmapDimXUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionMinZUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionMaxZUpDown)).BeginInit(); + this.SuspendLayout(); + // + // PathNodeTabControl + // + this.PathNodeTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PathNodeTabControl.Controls.Add(this.PathNodePropertiesTabPage); + this.PathNodeTabControl.Controls.Add(this.PathNodeLinksTabPage); + this.PathNodeTabControl.Controls.Add(this.PathNodeJunctionTabPage); + this.PathNodeTabControl.Location = new System.Drawing.Point(2, 3); + this.PathNodeTabControl.Name = "PathNodeTabControl"; + this.PathNodeTabControl.SelectedIndex = 0; + this.PathNodeTabControl.Size = new System.Drawing.Size(519, 447); + this.PathNodeTabControl.TabIndex = 29; + // + // PathNodePropertiesTabPage + // + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags5GroupBox); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags4GroupBox); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags3GroupBox); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags2GroupBox); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags1GroupBox); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags0GroupBox); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeDeleteButton); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeAreaIDUpDown); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeAddToProjectButton); + this.PathNodePropertiesTabPage.Controls.Add(this.label49); + this.PathNodePropertiesTabPage.Controls.Add(this.label50); + this.PathNodePropertiesTabPage.Controls.Add(this.label68); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeNodeIDUpDown); + this.PathNodePropertiesTabPage.Controls.Add(this.label52); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeStreetHashTextBox); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeGoToButton); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeStreetNameLabel); + this.PathNodePropertiesTabPage.Controls.Add(this.PathNodePositionTextBox); + this.PathNodePropertiesTabPage.Controls.Add(this.label55); + this.PathNodePropertiesTabPage.Location = new System.Drawing.Point(4, 22); + this.PathNodePropertiesTabPage.Name = "PathNodePropertiesTabPage"; + this.PathNodePropertiesTabPage.Size = new System.Drawing.Size(511, 421); + this.PathNodePropertiesTabPage.TabIndex = 2; + this.PathNodePropertiesTabPage.Text = "Node Properties"; + this.PathNodePropertiesTabPage.UseVisualStyleBackColor = true; + // + // PathNodeFlags5GroupBox + // + this.PathNodeFlags5GroupBox.Controls.Add(this.PathNodeFlags52CheckBox); + this.PathNodeFlags5GroupBox.Controls.Add(this.PathNodeFlags53CheckBox); + this.PathNodeFlags5GroupBox.Controls.Add(this.PathNodeFlags51CheckBox); + this.PathNodeFlags5GroupBox.Controls.Add(this.PathNodeFlags5UpDown); + this.PathNodeFlags5GroupBox.Location = new System.Drawing.Point(249, 318); + this.PathNodeFlags5GroupBox.Name = "PathNodeFlags5GroupBox"; + this.PathNodeFlags5GroupBox.Size = new System.Drawing.Size(223, 84); + this.PathNodeFlags5GroupBox.TabIndex = 48; + this.PathNodeFlags5GroupBox.TabStop = false; + this.PathNodeFlags5GroupBox.Text = "Flags 5"; + // + // PathNodeFlags52CheckBox + // + this.PathNodeFlags52CheckBox.AutoSize = true; + this.PathNodeFlags52CheckBox.Location = new System.Drawing.Point(80, 41); + this.PathNodeFlags52CheckBox.Name = "PathNodeFlags52CheckBox"; + this.PathNodeFlags52CheckBox.Size = new System.Drawing.Size(87, 17); + this.PathNodeFlags52CheckBox.TabIndex = 36; + this.PathNodeFlags52CheckBox.Text = "Speed unk 1"; + this.PathNodeFlags52CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags52CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags52CheckBox_CheckedChanged); + // + // PathNodeFlags53CheckBox + // + this.PathNodeFlags53CheckBox.AutoSize = true; + this.PathNodeFlags53CheckBox.Location = new System.Drawing.Point(80, 62); + this.PathNodeFlags53CheckBox.Name = "PathNodeFlags53CheckBox"; + this.PathNodeFlags53CheckBox.Size = new System.Drawing.Size(87, 17); + this.PathNodeFlags53CheckBox.TabIndex = 37; + this.PathNodeFlags53CheckBox.Text = "Speed unk 2"; + this.PathNodeFlags53CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags53CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags53CheckBox_CheckedChanged); + // + // PathNodeFlags51CheckBox + // + this.PathNodeFlags51CheckBox.AutoSize = true; + this.PathNodeFlags51CheckBox.Location = new System.Drawing.Point(80, 20); + this.PathNodeFlags51CheckBox.Name = "PathNodeFlags51CheckBox"; + this.PathNodeFlags51CheckBox.Size = new System.Drawing.Size(137, 17); + this.PathNodeFlags51CheckBox.TabIndex = 35; + this.PathNodeFlags51CheckBox.Text = "Has junction heightmap"; + this.PathNodeFlags51CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags51CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags51CheckBox_CheckedChanged); + // + // PathNodeFlags5UpDown + // + this.PathNodeFlags5UpDown.Location = new System.Drawing.Point(6, 19); + this.PathNodeFlags5UpDown.Maximum = new decimal(new int[] { + 7, + 0, + 0, + 0}); + this.PathNodeFlags5UpDown.Name = "PathNodeFlags5UpDown"; + this.PathNodeFlags5UpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeFlags5UpDown.TabIndex = 43; + this.PathNodeFlags5UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags5UpDown_ValueChanged); + // + // PathNodeFlags4GroupBox + // + this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags45CheckBox); + this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags46CheckBox); + this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags47CheckBox); + this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags48CheckBox); + this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags42UpDown); + this.PathNodeFlags4GroupBox.Controls.Add(this.label71); + this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags41CheckBox); + this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags4UpDown); + this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags4Label); + this.PathNodeFlags4GroupBox.Location = new System.Drawing.Point(370, 96); + this.PathNodeFlags4GroupBox.Name = "PathNodeFlags4GroupBox"; + this.PathNodeFlags4GroupBox.Size = new System.Drawing.Size(115, 175); + this.PathNodeFlags4GroupBox.TabIndex = 47; + this.PathNodeFlags4GroupBox.TabStop = false; + this.PathNodeFlags4GroupBox.Text = "Flags 4"; + // + // PathNodeFlags45CheckBox + // + this.PathNodeFlags45CheckBox.AutoSize = true; + this.PathNodeFlags45CheckBox.Location = new System.Drawing.Point(6, 66); + this.PathNodeFlags45CheckBox.Name = "PathNodeFlags45CheckBox"; + this.PathNodeFlags45CheckBox.Size = new System.Drawing.Size(70, 17); + this.PathNodeFlags45CheckBox.TabIndex = 36; + this.PathNodeFlags45CheckBox.Text = "Special 1"; + this.PathNodeFlags45CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags45CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags45CheckBox_CheckedChanged); + // + // PathNodeFlags46CheckBox + // + this.PathNodeFlags46CheckBox.AutoSize = true; + this.PathNodeFlags46CheckBox.Location = new System.Drawing.Point(6, 87); + this.PathNodeFlags46CheckBox.Name = "PathNodeFlags46CheckBox"; + this.PathNodeFlags46CheckBox.Size = new System.Drawing.Size(70, 17); + this.PathNodeFlags46CheckBox.TabIndex = 37; + this.PathNodeFlags46CheckBox.Text = "Special 2"; + this.PathNodeFlags46CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags46CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags46CheckBox_CheckedChanged); + // + // PathNodeFlags47CheckBox + // + this.PathNodeFlags47CheckBox.AutoSize = true; + this.PathNodeFlags47CheckBox.Location = new System.Drawing.Point(6, 108); + this.PathNodeFlags47CheckBox.Name = "PathNodeFlags47CheckBox"; + this.PathNodeFlags47CheckBox.Size = new System.Drawing.Size(70, 17); + this.PathNodeFlags47CheckBox.TabIndex = 38; + this.PathNodeFlags47CheckBox.Text = "Special 3"; + this.PathNodeFlags47CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags47CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags47CheckBox_CheckedChanged); + // + // PathNodeFlags48CheckBox + // + this.PathNodeFlags48CheckBox.AutoSize = true; + this.PathNodeFlags48CheckBox.Location = new System.Drawing.Point(6, 129); + this.PathNodeFlags48CheckBox.Name = "PathNodeFlags48CheckBox"; + this.PathNodeFlags48CheckBox.Size = new System.Drawing.Size(96, 17); + this.PathNodeFlags48CheckBox.TabIndex = 39; + this.PathNodeFlags48CheckBox.Text = "Junction unk 6"; + this.PathNodeFlags48CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags48CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags48CheckBox_CheckedChanged); + // + // PathNodeFlags42UpDown + // + this.PathNodeFlags42UpDown.Location = new System.Drawing.Point(41, 150); + this.PathNodeFlags42UpDown.Maximum = new decimal(new int[] { + 7, + 0, + 0, + 0}); + this.PathNodeFlags42UpDown.Name = "PathNodeFlags42UpDown"; + this.PathNodeFlags42UpDown.Size = new System.Drawing.Size(57, 20); + this.PathNodeFlags42UpDown.TabIndex = 41; + this.PathNodeFlags42UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags42UpDown_ValueChanged); + // + // label71 + // + this.label71.AutoSize = true; + this.label71.Location = new System.Drawing.Point(4, 152); + this.label71.Name = "label71"; + this.label71.Size = new System.Drawing.Size(30, 13); + this.label71.TabIndex = 40; + this.label71.Text = "Unk:"; + // + // PathNodeFlags41CheckBox + // + this.PathNodeFlags41CheckBox.AutoSize = true; + this.PathNodeFlags41CheckBox.Location = new System.Drawing.Point(6, 45); + this.PathNodeFlags41CheckBox.Name = "PathNodeFlags41CheckBox"; + this.PathNodeFlags41CheckBox.Size = new System.Drawing.Size(79, 17); + this.PathNodeFlags41CheckBox.TabIndex = 35; + this.PathNodeFlags41CheckBox.Text = "Slow unk 4"; + this.PathNodeFlags41CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags41CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags41CheckBox_CheckedChanged); + // + // PathNodeFlags4UpDown + // + this.PathNodeFlags4UpDown.Location = new System.Drawing.Point(6, 19); + this.PathNodeFlags4UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PathNodeFlags4UpDown.Name = "PathNodeFlags4UpDown"; + this.PathNodeFlags4UpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeFlags4UpDown.TabIndex = 43; + this.PathNodeFlags4UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags4UpDown_ValueChanged); + // + // PathNodeFlags4Label + // + this.PathNodeFlags4Label.AutoSize = true; + this.PathNodeFlags4Label.Location = new System.Drawing.Point(74, 21); + this.PathNodeFlags4Label.Name = "PathNodeFlags4Label"; + this.PathNodeFlags4Label.Size = new System.Drawing.Size(30, 13); + this.PathNodeFlags4Label.TabIndex = 44; + this.PathNodeFlags4Label.Text = "0x00"; + // + // PathNodeFlags3GroupBox + // + this.PathNodeFlags3GroupBox.Controls.Add(this.PathNodeFlags32UpDown); + this.PathNodeFlags3GroupBox.Controls.Add(this.label70); + this.PathNodeFlags3GroupBox.Controls.Add(this.PathNodeFlags31CheckBox); + this.PathNodeFlags3GroupBox.Controls.Add(this.PathNodeFlags3UpDown); + this.PathNodeFlags3GroupBox.Controls.Add(this.PathNodeFlags3Label); + this.PathNodeFlags3GroupBox.Location = new System.Drawing.Point(7, 318); + this.PathNodeFlags3GroupBox.Name = "PathNodeFlags3GroupBox"; + this.PathNodeFlags3GroupBox.Size = new System.Drawing.Size(223, 84); + this.PathNodeFlags3GroupBox.TabIndex = 46; + this.PathNodeFlags3GroupBox.TabStop = false; + this.PathNodeFlags3GroupBox.Text = "Flags 3"; + // + // PathNodeFlags32UpDown + // + this.PathNodeFlags32UpDown.Location = new System.Drawing.Point(147, 44); + this.PathNodeFlags32UpDown.Maximum = new decimal(new int[] { + 127, + 0, + 0, + 0}); + this.PathNodeFlags32UpDown.Name = "PathNodeFlags32UpDown"; + this.PathNodeFlags32UpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeFlags32UpDown.TabIndex = 37; + this.PathNodeFlags32UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags32UpDown_ValueChanged); + // + // label70 + // + this.label70.AutoSize = true; + this.label70.Location = new System.Drawing.Point(111, 46); + this.label70.Name = "label70"; + this.label70.Size = new System.Drawing.Size(30, 13); + this.label70.TabIndex = 36; + this.label70.Text = "Unk:"; + // + // PathNodeFlags31CheckBox + // + this.PathNodeFlags31CheckBox.AutoSize = true; + this.PathNodeFlags31CheckBox.Location = new System.Drawing.Point(6, 45); + this.PathNodeFlags31CheckBox.Name = "PathNodeFlags31CheckBox"; + this.PathNodeFlags31CheckBox.Size = new System.Drawing.Size(85, 17); + this.PathNodeFlags31CheckBox.TabIndex = 35; + this.PathNodeFlags31CheckBox.Text = "Interior node"; + this.PathNodeFlags31CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags31CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags31CheckBox_CheckedChanged); + // + // PathNodeFlags3UpDown + // + this.PathNodeFlags3UpDown.Location = new System.Drawing.Point(6, 19); + this.PathNodeFlags3UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PathNodeFlags3UpDown.Name = "PathNodeFlags3UpDown"; + this.PathNodeFlags3UpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeFlags3UpDown.TabIndex = 43; + this.PathNodeFlags3UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags3UpDown_ValueChanged); + // + // PathNodeFlags3Label + // + this.PathNodeFlags3Label.AutoSize = true; + this.PathNodeFlags3Label.Location = new System.Drawing.Point(74, 21); + this.PathNodeFlags3Label.Name = "PathNodeFlags3Label"; + this.PathNodeFlags3Label.Size = new System.Drawing.Size(30, 13); + this.PathNodeFlags3Label.TabIndex = 44; + this.PathNodeFlags3Label.Text = "0x00"; + // + // PathNodeFlags2GroupBox + // + this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags21CheckBox); + this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags28CheckBox); + this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags22CheckBox); + this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags27CheckBox); + this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags23CheckBox); + this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags26CheckBox); + this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags24CheckBox); + this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags25CheckBox); + this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags2UpDown); + this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags2Label); + this.PathNodeFlags2GroupBox.Location = new System.Drawing.Point(249, 96); + this.PathNodeFlags2GroupBox.Name = "PathNodeFlags2GroupBox"; + this.PathNodeFlags2GroupBox.Size = new System.Drawing.Size(115, 216); + this.PathNodeFlags2GroupBox.TabIndex = 45; + this.PathNodeFlags2GroupBox.TabStop = false; + this.PathNodeFlags2GroupBox.Text = "Flags 2"; + // + // PathNodeFlags21CheckBox + // + this.PathNodeFlags21CheckBox.AutoSize = true; + this.PathNodeFlags21CheckBox.Location = new System.Drawing.Point(6, 45); + this.PathNodeFlags21CheckBox.Name = "PathNodeFlags21CheckBox"; + this.PathNodeFlags21CheckBox.Size = new System.Drawing.Size(79, 17); + this.PathNodeFlags21CheckBox.TabIndex = 35; + this.PathNodeFlags21CheckBox.Text = "Slow unk 2"; + this.PathNodeFlags21CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags21CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags21CheckBox_CheckedChanged); + // + // PathNodeFlags28CheckBox + // + this.PathNodeFlags28CheckBox.AutoSize = true; + this.PathNodeFlags28CheckBox.Location = new System.Drawing.Point(6, 192); + this.PathNodeFlags28CheckBox.Name = "PathNodeFlags28CheckBox"; + this.PathNodeFlags28CheckBox.Size = new System.Drawing.Size(81, 17); + this.PathNodeFlags28CheckBox.TabIndex = 42; + this.PathNodeFlags28CheckBox.Text = "Back road?"; + this.PathNodeFlags28CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags28CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags28CheckBox_CheckedChanged); + // + // PathNodeFlags22CheckBox + // + this.PathNodeFlags22CheckBox.AutoSize = true; + this.PathNodeFlags22CheckBox.Location = new System.Drawing.Point(6, 66); + this.PathNodeFlags22CheckBox.Name = "PathNodeFlags22CheckBox"; + this.PathNodeFlags22CheckBox.Size = new System.Drawing.Size(72, 17); + this.PathNodeFlags22CheckBox.TabIndex = 36; + this.PathNodeFlags22CheckBox.Text = "Unused 2"; + this.PathNodeFlags22CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags22CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags22CheckBox_CheckedChanged); + // + // PathNodeFlags27CheckBox + // + this.PathNodeFlags27CheckBox.AutoSize = true; + this.PathNodeFlags27CheckBox.Location = new System.Drawing.Point(6, 171); + this.PathNodeFlags27CheckBox.Name = "PathNodeFlags27CheckBox"; + this.PathNodeFlags27CheckBox.Size = new System.Drawing.Size(66, 17); + this.PathNodeFlags27CheckBox.TabIndex = 41; + this.PathNodeFlags27CheckBox.Text = "Freeway"; + this.PathNodeFlags27CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags27CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags27CheckBox_CheckedChanged); + // + // PathNodeFlags23CheckBox + // + this.PathNodeFlags23CheckBox.AutoSize = true; + this.PathNodeFlags23CheckBox.Location = new System.Drawing.Point(6, 87); + this.PathNodeFlags23CheckBox.Name = "PathNodeFlags23CheckBox"; + this.PathNodeFlags23CheckBox.Size = new System.Drawing.Size(96, 17); + this.PathNodeFlags23CheckBox.TabIndex = 37; + this.PathNodeFlags23CheckBox.Text = "Junction unk 5"; + this.PathNodeFlags23CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags23CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags23CheckBox_CheckedChanged); + // + // PathNodeFlags26CheckBox + // + this.PathNodeFlags26CheckBox.AutoSize = true; + this.PathNodeFlags26CheckBox.Location = new System.Drawing.Point(6, 150); + this.PathNodeFlags26CheckBox.Name = "PathNodeFlags26CheckBox"; + this.PathNodeFlags26CheckBox.Size = new System.Drawing.Size(86, 17); + this.PathNodeFlags26CheckBox.TabIndex = 40; + this.PathNodeFlags26CheckBox.Text = "Water/boats"; + this.PathNodeFlags26CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags26CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags26CheckBox_CheckedChanged); + // + // PathNodeFlags24CheckBox + // + this.PathNodeFlags24CheckBox.AutoSize = true; + this.PathNodeFlags24CheckBox.Location = new System.Drawing.Point(6, 108); + this.PathNodeFlags24CheckBox.Name = "PathNodeFlags24CheckBox"; + this.PathNodeFlags24CheckBox.Size = new System.Drawing.Size(72, 17); + this.PathNodeFlags24CheckBox.TabIndex = 38; + this.PathNodeFlags24CheckBox.Text = "Unused 8"; + this.PathNodeFlags24CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags24CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags24CheckBox_CheckedChanged); + // + // PathNodeFlags25CheckBox + // + this.PathNodeFlags25CheckBox.AutoSize = true; + this.PathNodeFlags25CheckBox.Location = new System.Drawing.Point(6, 129); + this.PathNodeFlags25CheckBox.Name = "PathNodeFlags25CheckBox"; + this.PathNodeFlags25CheckBox.Size = new System.Drawing.Size(79, 17); + this.PathNodeFlags25CheckBox.TabIndex = 39; + this.PathNodeFlags25CheckBox.Text = "Slow unk 3"; + this.PathNodeFlags25CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags25CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags25CheckBox_CheckedChanged); + // + // PathNodeFlags2UpDown + // + this.PathNodeFlags2UpDown.Location = new System.Drawing.Point(6, 19); + this.PathNodeFlags2UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PathNodeFlags2UpDown.Name = "PathNodeFlags2UpDown"; + this.PathNodeFlags2UpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeFlags2UpDown.TabIndex = 43; + this.PathNodeFlags2UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags2UpDown_ValueChanged); + // + // PathNodeFlags2Label + // + this.PathNodeFlags2Label.AutoSize = true; + this.PathNodeFlags2Label.Location = new System.Drawing.Point(74, 21); + this.PathNodeFlags2Label.Name = "PathNodeFlags2Label"; + this.PathNodeFlags2Label.Size = new System.Drawing.Size(30, 13); + this.PathNodeFlags2Label.TabIndex = 44; + this.PathNodeFlags2Label.Text = "0x00"; + // + // PathNodeFlags1GroupBox + // + this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags11CheckBox); + this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags18CheckBox); + this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags12CheckBox); + this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags17CheckBox); + this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags13CheckBox); + this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags16CheckBox); + this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags14CheckBox); + this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags15CheckBox); + this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags1UpDown); + this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags1Label); + this.PathNodeFlags1GroupBox.Location = new System.Drawing.Point(128, 96); + this.PathNodeFlags1GroupBox.Name = "PathNodeFlags1GroupBox"; + this.PathNodeFlags1GroupBox.Size = new System.Drawing.Size(115, 216); + this.PathNodeFlags1GroupBox.TabIndex = 44; + this.PathNodeFlags1GroupBox.TabStop = false; + this.PathNodeFlags1GroupBox.Text = "Flags 1"; + // + // PathNodeFlags11CheckBox + // + this.PathNodeFlags11CheckBox.AutoSize = true; + this.PathNodeFlags11CheckBox.Location = new System.Drawing.Point(6, 45); + this.PathNodeFlags11CheckBox.Name = "PathNodeFlags11CheckBox"; + this.PathNodeFlags11CheckBox.Size = new System.Drawing.Size(82, 17); + this.PathNodeFlags11CheckBox.TabIndex = 35; + this.PathNodeFlags11CheckBox.Text = "L turn lane?"; + this.PathNodeFlags11CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags11CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags11CheckBox_CheckedChanged); + // + // PathNodeFlags18CheckBox + // + this.PathNodeFlags18CheckBox.AutoSize = true; + this.PathNodeFlags18CheckBox.Location = new System.Drawing.Point(6, 192); + this.PathNodeFlags18CheckBox.Name = "PathNodeFlags18CheckBox"; + this.PathNodeFlags18CheckBox.Size = new System.Drawing.Size(96, 17); + this.PathNodeFlags18CheckBox.TabIndex = 42; + this.PathNodeFlags18CheckBox.Text = "Junction unk 4"; + this.PathNodeFlags18CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags18CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags18CheckBox_CheckedChanged); + // + // PathNodeFlags12CheckBox + // + this.PathNodeFlags12CheckBox.AutoSize = true; + this.PathNodeFlags12CheckBox.Location = new System.Drawing.Point(6, 66); + this.PathNodeFlags12CheckBox.Name = "PathNodeFlags12CheckBox"; + this.PathNodeFlags12CheckBox.Size = new System.Drawing.Size(98, 17); + this.PathNodeFlags12CheckBox.TabIndex = 36; + this.PathNodeFlags12CheckBox.Text = "L turn no return"; + this.PathNodeFlags12CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags12CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags12CheckBox_CheckedChanged); + // + // PathNodeFlags17CheckBox + // + this.PathNodeFlags17CheckBox.AutoSize = true; + this.PathNodeFlags17CheckBox.Location = new System.Drawing.Point(6, 171); + this.PathNodeFlags17CheckBox.Name = "PathNodeFlags17CheckBox"; + this.PathNodeFlags17CheckBox.Size = new System.Drawing.Size(108, 17); + this.PathNodeFlags17CheckBox.TabIndex = 41; + this.PathNodeFlags17CheckBox.Text = "Traffic light unk 3"; + this.PathNodeFlags17CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags17CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags17CheckBox_CheckedChanged); + // + // PathNodeFlags13CheckBox + // + this.PathNodeFlags13CheckBox.AutoSize = true; + this.PathNodeFlags13CheckBox.Location = new System.Drawing.Point(6, 87); + this.PathNodeFlags13CheckBox.Name = "PathNodeFlags13CheckBox"; + this.PathNodeFlags13CheckBox.Size = new System.Drawing.Size(100, 17); + this.PathNodeFlags13CheckBox.TabIndex = 37; + this.PathNodeFlags13CheckBox.Text = "R turn no return"; + this.PathNodeFlags13CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags13CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags13CheckBox_CheckedChanged); + // + // PathNodeFlags16CheckBox + // + this.PathNodeFlags16CheckBox.AutoSize = true; + this.PathNodeFlags16CheckBox.Location = new System.Drawing.Point(6, 150); + this.PathNodeFlags16CheckBox.Name = "PathNodeFlags16CheckBox"; + this.PathNodeFlags16CheckBox.Size = new System.Drawing.Size(96, 17); + this.PathNodeFlags16CheckBox.TabIndex = 40; + this.PathNodeFlags16CheckBox.Text = "Junction unk 3"; + this.PathNodeFlags16CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags16CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags16CheckBox_CheckedChanged); + // + // PathNodeFlags14CheckBox + // + this.PathNodeFlags14CheckBox.AutoSize = true; + this.PathNodeFlags14CheckBox.Location = new System.Drawing.Point(6, 108); + this.PathNodeFlags14CheckBox.Name = "PathNodeFlags14CheckBox"; + this.PathNodeFlags14CheckBox.Size = new System.Drawing.Size(108, 17); + this.PathNodeFlags14CheckBox.TabIndex = 38; + this.PathNodeFlags14CheckBox.Text = "Traffic light unk 1"; + this.PathNodeFlags14CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags14CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags14CheckBox_CheckedChanged); + // + // PathNodeFlags15CheckBox + // + this.PathNodeFlags15CheckBox.AutoSize = true; + this.PathNodeFlags15CheckBox.Location = new System.Drawing.Point(6, 129); + this.PathNodeFlags15CheckBox.Name = "PathNodeFlags15CheckBox"; + this.PathNodeFlags15CheckBox.Size = new System.Drawing.Size(108, 17); + this.PathNodeFlags15CheckBox.TabIndex = 39; + this.PathNodeFlags15CheckBox.Text = "Traffic light unk 2"; + this.PathNodeFlags15CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags15CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags15CheckBox_CheckedChanged); + // + // PathNodeFlags1UpDown + // + this.PathNodeFlags1UpDown.Location = new System.Drawing.Point(6, 19); + this.PathNodeFlags1UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PathNodeFlags1UpDown.Name = "PathNodeFlags1UpDown"; + this.PathNodeFlags1UpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeFlags1UpDown.TabIndex = 43; + this.PathNodeFlags1UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags1UpDown_ValueChanged); + // + // PathNodeFlags1Label + // + this.PathNodeFlags1Label.AutoSize = true; + this.PathNodeFlags1Label.Location = new System.Drawing.Point(74, 21); + this.PathNodeFlags1Label.Name = "PathNodeFlags1Label"; + this.PathNodeFlags1Label.Size = new System.Drawing.Size(30, 13); + this.PathNodeFlags1Label.TabIndex = 44; + this.PathNodeFlags1Label.Text = "0x00"; + // + // PathNodeFlags0GroupBox + // + this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags01CheckBox); + this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags08CheckBox); + this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags02CheckBox); + this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags07CheckBox); + this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags03CheckBox); + this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags06CheckBox); + this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags04CheckBox); + this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags05CheckBox); + this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags0UpDown); + this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags0Label); + this.PathNodeFlags0GroupBox.Location = new System.Drawing.Point(7, 96); + this.PathNodeFlags0GroupBox.Name = "PathNodeFlags0GroupBox"; + this.PathNodeFlags0GroupBox.Size = new System.Drawing.Size(115, 216); + this.PathNodeFlags0GroupBox.TabIndex = 43; + this.PathNodeFlags0GroupBox.TabStop = false; + this.PathNodeFlags0GroupBox.Text = "Flags 0"; + // + // PathNodeFlags01CheckBox + // + this.PathNodeFlags01CheckBox.AutoSize = true; + this.PathNodeFlags01CheckBox.Location = new System.Drawing.Point(6, 45); + this.PathNodeFlags01CheckBox.Name = "PathNodeFlags01CheckBox"; + this.PathNodeFlags01CheckBox.Size = new System.Drawing.Size(65, 17); + this.PathNodeFlags01CheckBox.TabIndex = 35; + this.PathNodeFlags01CheckBox.Text = "Scripted"; + this.PathNodeFlags01CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags01CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags01CheckBox_CheckedChanged); + // + // PathNodeFlags08CheckBox + // + this.PathNodeFlags08CheckBox.AutoSize = true; + this.PathNodeFlags08CheckBox.Location = new System.Drawing.Point(6, 192); + this.PathNodeFlags08CheckBox.Name = "PathNodeFlags08CheckBox"; + this.PathNodeFlags08CheckBox.Size = new System.Drawing.Size(96, 17); + this.PathNodeFlags08CheckBox.TabIndex = 42; + this.PathNodeFlags08CheckBox.Text = "Junction unk 2"; + this.PathNodeFlags08CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags08CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags08CheckBox_CheckedChanged); + // + // PathNodeFlags02CheckBox + // + this.PathNodeFlags02CheckBox.AutoSize = true; + this.PathNodeFlags02CheckBox.Location = new System.Drawing.Point(6, 66); + this.PathNodeFlags02CheckBox.Name = "PathNodeFlags02CheckBox"; + this.PathNodeFlags02CheckBox.Size = new System.Drawing.Size(89, 17); + this.PathNodeFlags02CheckBox.TabIndex = 36; + this.PathNodeFlags02CheckBox.Text = "GPS enable?"; + this.PathNodeFlags02CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags02CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags02CheckBox_CheckedChanged); + // + // PathNodeFlags07CheckBox + // + this.PathNodeFlags07CheckBox.AutoSize = true; + this.PathNodeFlags07CheckBox.Location = new System.Drawing.Point(6, 171); + this.PathNodeFlags07CheckBox.Name = "PathNodeFlags07CheckBox"; + this.PathNodeFlags07CheckBox.Size = new System.Drawing.Size(96, 17); + this.PathNodeFlags07CheckBox.TabIndex = 41; + this.PathNodeFlags07CheckBox.Text = "Junction unk 1"; + this.PathNodeFlags07CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags07CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags07CheckBox_CheckedChanged); + // + // PathNodeFlags03CheckBox + // + this.PathNodeFlags03CheckBox.AutoSize = true; + this.PathNodeFlags03CheckBox.Location = new System.Drawing.Point(6, 87); + this.PathNodeFlags03CheckBox.Name = "PathNodeFlags03CheckBox"; + this.PathNodeFlags03CheckBox.Size = new System.Drawing.Size(72, 17); + this.PathNodeFlags03CheckBox.TabIndex = 37; + this.PathNodeFlags03CheckBox.Text = "Unused 4"; + this.PathNodeFlags03CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags03CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags03CheckBox_CheckedChanged); + // + // PathNodeFlags06CheckBox + // + this.PathNodeFlags06CheckBox.AutoSize = true; + this.PathNodeFlags06CheckBox.Location = new System.Drawing.Point(6, 150); + this.PathNodeFlags06CheckBox.Name = "PathNodeFlags06CheckBox"; + this.PathNodeFlags06CheckBox.Size = new System.Drawing.Size(79, 17); + this.PathNodeFlags06CheckBox.TabIndex = 40; + this.PathNodeFlags06CheckBox.Text = "Slow unk 1"; + this.PathNodeFlags06CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags06CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags06CheckBox_CheckedChanged); + // + // PathNodeFlags04CheckBox + // + this.PathNodeFlags04CheckBox.AutoSize = true; + this.PathNodeFlags04CheckBox.Location = new System.Drawing.Point(6, 108); + this.PathNodeFlags04CheckBox.Name = "PathNodeFlags04CheckBox"; + this.PathNodeFlags04CheckBox.Size = new System.Drawing.Size(87, 17); + this.PathNodeFlags04CheckBox.TabIndex = 38; + this.PathNodeFlags04CheckBox.Text = "Gravel road?"; + this.PathNodeFlags04CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags04CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags04CheckBox_CheckedChanged); + // + // PathNodeFlags05CheckBox + // + this.PathNodeFlags05CheckBox.AutoSize = true; + this.PathNodeFlags05CheckBox.Location = new System.Drawing.Point(6, 129); + this.PathNodeFlags05CheckBox.Name = "PathNodeFlags05CheckBox"; + this.PathNodeFlags05CheckBox.Size = new System.Drawing.Size(78, 17); + this.PathNodeFlags05CheckBox.TabIndex = 39; + this.PathNodeFlags05CheckBox.Text = "Unused 16"; + this.PathNodeFlags05CheckBox.UseVisualStyleBackColor = true; + this.PathNodeFlags05CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags05CheckBox_CheckedChanged); + // + // PathNodeFlags0UpDown + // + this.PathNodeFlags0UpDown.Location = new System.Drawing.Point(6, 19); + this.PathNodeFlags0UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PathNodeFlags0UpDown.Name = "PathNodeFlags0UpDown"; + this.PathNodeFlags0UpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeFlags0UpDown.TabIndex = 43; + this.PathNodeFlags0UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags0UpDown_ValueChanged); + // + // PathNodeFlags0Label + // + this.PathNodeFlags0Label.AutoSize = true; + this.PathNodeFlags0Label.Location = new System.Drawing.Point(74, 21); + this.PathNodeFlags0Label.Name = "PathNodeFlags0Label"; + this.PathNodeFlags0Label.Size = new System.Drawing.Size(30, 13); + this.PathNodeFlags0Label.TabIndex = 44; + this.PathNodeFlags0Label.Text = "0x00"; + // + // PathNodeDeleteButton + // + this.PathNodeDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.PathNodeDeleteButton.Enabled = false; + this.PathNodeDeleteButton.Location = new System.Drawing.Point(418, 36); + this.PathNodeDeleteButton.Name = "PathNodeDeleteButton"; + this.PathNodeDeleteButton.Size = new System.Drawing.Size(90, 23); + this.PathNodeDeleteButton.TabIndex = 12; + this.PathNodeDeleteButton.Text = "Delete Node"; + this.PathNodeDeleteButton.UseVisualStyleBackColor = true; + this.PathNodeDeleteButton.Click += new System.EventHandler(this.PathNodeDeleteButton_Click); + // + // PathNodeAreaIDUpDown + // + this.PathNodeAreaIDUpDown.Location = new System.Drawing.Point(78, 12); + this.PathNodeAreaIDUpDown.Maximum = new decimal(new int[] { + 1023, + 0, + 0, + 0}); + this.PathNodeAreaIDUpDown.Name = "PathNodeAreaIDUpDown"; + this.PathNodeAreaIDUpDown.Size = new System.Drawing.Size(74, 20); + this.PathNodeAreaIDUpDown.TabIndex = 6; + this.PathNodeAreaIDUpDown.ValueChanged += new System.EventHandler(this.PathNodeAreaIDUpDown_ValueChanged); + // + // PathNodeAddToProjectButton + // + this.PathNodeAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.PathNodeAddToProjectButton.Enabled = false; + this.PathNodeAddToProjectButton.Location = new System.Drawing.Point(322, 36); + this.PathNodeAddToProjectButton.Name = "PathNodeAddToProjectButton"; + this.PathNodeAddToProjectButton.Size = new System.Drawing.Size(90, 23); + this.PathNodeAddToProjectButton.TabIndex = 11; + this.PathNodeAddToProjectButton.Text = "Add to Project"; + this.PathNodeAddToProjectButton.UseVisualStyleBackColor = true; + this.PathNodeAddToProjectButton.Click += new System.EventHandler(this.PathNodeAddToProjectButton_Click); + // + // label49 + // + this.label49.AutoSize = true; + this.label49.Location = new System.Drawing.Point(26, 14); + this.label49.Name = "label49"; + this.label49.Size = new System.Drawing.Size(46, 13); + this.label49.TabIndex = 5; + this.label49.Text = "Area ID:"; + // + // label50 + // + this.label50.AutoSize = true; + this.label50.Location = new System.Drawing.Point(166, 14); + this.label50.Name = "label50"; + this.label50.Size = new System.Drawing.Size(50, 13); + this.label50.TabIndex = 7; + this.label50.Text = "Node ID:"; + // + // label68 + // + this.label68.AutoSize = true; + this.label68.Location = new System.Drawing.Point(302, 14); + this.label68.Name = "label68"; + this.label68.Size = new System.Drawing.Size(156, 13); + this.label68.TabIndex = 32; + this.label68.Text = "(These will be set automatically)"; + // + // PathNodeNodeIDUpDown + // + this.PathNodeNodeIDUpDown.Location = new System.Drawing.Point(222, 12); + this.PathNodeNodeIDUpDown.Maximum = new decimal(new int[] { + 100000, + 0, + 0, + 0}); + this.PathNodeNodeIDUpDown.Name = "PathNodeNodeIDUpDown"; + this.PathNodeNodeIDUpDown.Size = new System.Drawing.Size(74, 20); + this.PathNodeNodeIDUpDown.TabIndex = 8; + this.PathNodeNodeIDUpDown.ValueChanged += new System.EventHandler(this.PathNodeNodeIDUpDown_ValueChanged); + // + // label52 + // + this.label52.AutoSize = true; + this.label52.Location = new System.Drawing.Point(4, 67); + this.label52.Name = "label52"; + this.label52.Size = new System.Drawing.Size(70, 13); + this.label52.TabIndex = 9; + this.label52.Text = "Street (hash):"; + // + // PathNodeStreetHashTextBox + // + this.PathNodeStreetHashTextBox.Location = new System.Drawing.Point(78, 64); + this.PathNodeStreetHashTextBox.Name = "PathNodeStreetHashTextBox"; + this.PathNodeStreetHashTextBox.Size = new System.Drawing.Size(138, 20); + this.PathNodeStreetHashTextBox.TabIndex = 13; + this.PathNodeStreetHashTextBox.TextChanged += new System.EventHandler(this.PathNodeStreetHashTextBox_TextChanged); + // + // PathNodeGoToButton + // + this.PathNodeGoToButton.Location = new System.Drawing.Point(222, 36); + this.PathNodeGoToButton.Name = "PathNodeGoToButton"; + this.PathNodeGoToButton.Size = new System.Drawing.Size(68, 23); + this.PathNodeGoToButton.TabIndex = 10; + this.PathNodeGoToButton.Text = "Go to"; + this.PathNodeGoToButton.UseVisualStyleBackColor = true; + this.PathNodeGoToButton.Click += new System.EventHandler(this.PathNodeGoToButton_Click); + // + // PathNodeStreetNameLabel + // + this.PathNodeStreetNameLabel.AutoSize = true; + this.PathNodeStreetNameLabel.Location = new System.Drawing.Point(223, 67); + this.PathNodeStreetNameLabel.Name = "PathNodeStreetNameLabel"; + this.PathNodeStreetNameLabel.Size = new System.Drawing.Size(73, 13); + this.PathNodeStreetNameLabel.TabIndex = 11; + this.PathNodeStreetNameLabel.Text = "Name: [None]"; + // + // PathNodePositionTextBox + // + this.PathNodePositionTextBox.Location = new System.Drawing.Point(78, 38); + this.PathNodePositionTextBox.Name = "PathNodePositionTextBox"; + this.PathNodePositionTextBox.Size = new System.Drawing.Size(138, 20); + this.PathNodePositionTextBox.TabIndex = 9; + this.PathNodePositionTextBox.TextChanged += new System.EventHandler(this.PathNodePositionTextBox_TextChanged); + // + // label55 + // + this.label55.AutoSize = true; + this.label55.Location = new System.Drawing.Point(25, 41); + this.label55.Name = "label55"; + this.label55.Size = new System.Drawing.Size(47, 13); + this.label55.TabIndex = 28; + this.label55.Text = "Position:"; + // + // PathNodeLinksTabPage + // + this.PathNodeLinksTabPage.Controls.Add(this.splitContainer2); + this.PathNodeLinksTabPage.Location = new System.Drawing.Point(4, 22); + this.PathNodeLinksTabPage.Name = "PathNodeLinksTabPage"; + this.PathNodeLinksTabPage.Padding = new System.Windows.Forms.Padding(3); + this.PathNodeLinksTabPage.Size = new System.Drawing.Size(511, 421); + this.PathNodeLinksTabPage.TabIndex = 0; + this.PathNodeLinksTabPage.Text = "Path Links"; + this.PathNodeLinksTabPage.UseVisualStyleBackColor = true; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.Location = new System.Drawing.Point(3, 3); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.PathNodeRemoveLinkButton); + this.splitContainer2.Panel1.Controls.Add(this.PathNodeAddLinkButton); + this.splitContainer2.Panel1.Controls.Add(this.PathNodeLinksListBox); + this.splitContainer2.Panel1.Controls.Add(this.PathNodeLinkCountLabel); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.PathNodeLinkPanel); + this.splitContainer2.Size = new System.Drawing.Size(505, 415); + this.splitContainer2.SplitterDistance = 168; + this.splitContainer2.TabIndex = 0; + // + // PathNodeRemoveLinkButton + // + this.PathNodeRemoveLinkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.PathNodeRemoveLinkButton.Location = new System.Drawing.Point(85, 389); + this.PathNodeRemoveLinkButton.Name = "PathNodeRemoveLinkButton"; + this.PathNodeRemoveLinkButton.Size = new System.Drawing.Size(76, 23); + this.PathNodeRemoveLinkButton.TabIndex = 2; + this.PathNodeRemoveLinkButton.Text = "Remove"; + this.PathNodeRemoveLinkButton.UseVisualStyleBackColor = true; + this.PathNodeRemoveLinkButton.Click += new System.EventHandler(this.PathNodeRemoveLinkButton_Click); + // + // PathNodeAddLinkButton + // + this.PathNodeAddLinkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.PathNodeAddLinkButton.Location = new System.Drawing.Point(3, 389); + this.PathNodeAddLinkButton.Name = "PathNodeAddLinkButton"; + this.PathNodeAddLinkButton.Size = new System.Drawing.Size(76, 23); + this.PathNodeAddLinkButton.TabIndex = 1; + this.PathNodeAddLinkButton.Text = "Add"; + this.PathNodeAddLinkButton.UseVisualStyleBackColor = true; + this.PathNodeAddLinkButton.Click += new System.EventHandler(this.PathNodeAddLinkButton_Click); + // + // PathNodeLinksListBox + // + this.PathNodeLinksListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PathNodeLinksListBox.FormattingEnabled = true; + this.PathNodeLinksListBox.Location = new System.Drawing.Point(0, 0); + this.PathNodeLinksListBox.Name = "PathNodeLinksListBox"; + this.PathNodeLinksListBox.Size = new System.Drawing.Size(165, 329); + this.PathNodeLinksListBox.TabIndex = 0; + this.PathNodeLinksListBox.SelectedIndexChanged += new System.EventHandler(this.PathNodeLinksListBox_SelectedIndexChanged); + // + // PathNodeLinkCountLabel + // + this.PathNodeLinkCountLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.PathNodeLinkCountLabel.AutoSize = true; + this.PathNodeLinkCountLabel.Location = new System.Drawing.Point(3, 373); + this.PathNodeLinkCountLabel.Name = "PathNodeLinkCountLabel"; + this.PathNodeLinkCountLabel.Size = new System.Drawing.Size(70, 13); + this.PathNodeLinkCountLabel.TabIndex = 31; + this.PathNodeLinkCountLabel.Text = "Link Count: 0"; + // + // PathNodeLinkPanel + // + this.PathNodeLinkPanel.Controls.Add(this.PathLinkFlags2GroupBox); + this.PathNodeLinkPanel.Controls.Add(this.PathLinkFlags1GroupBox); + this.PathNodeLinkPanel.Controls.Add(this.PathLinkFlags0GroupBox); + this.PathNodeLinkPanel.Controls.Add(this.PathNodeLinkageStatusLabel); + this.PathNodeLinkPanel.Controls.Add(this.PathNodeLinkLengthUpDown); + this.PathNodeLinkPanel.Controls.Add(this.label57); + this.PathNodeLinkPanel.Controls.Add(this.PathNodeLinkNodeIDUpDown); + this.PathNodeLinkPanel.Controls.Add(this.label51); + this.PathNodeLinkPanel.Controls.Add(this.PathNodeLinkAreaIDUpDown); + this.PathNodeLinkPanel.Controls.Add(this.label54); + this.PathNodeLinkPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.PathNodeLinkPanel.Enabled = false; + this.PathNodeLinkPanel.Location = new System.Drawing.Point(0, 0); + this.PathNodeLinkPanel.Name = "PathNodeLinkPanel"; + this.PathNodeLinkPanel.Size = new System.Drawing.Size(333, 415); + this.PathNodeLinkPanel.TabIndex = 0; + // + // PathLinkFlags2GroupBox + // + this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkFlags21CheckBox); + this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkFlags22CheckBox); + this.PathLinkFlags2GroupBox.Controls.Add(this.label53); + this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkFwdLanesUpDown); + this.PathLinkFlags2GroupBox.Controls.Add(this.label56); + this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkBackLanesUpDown); + this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkFlags2UpDown); + this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkFlags2Label); + this.PathLinkFlags2GroupBox.Location = new System.Drawing.Point(13, 240); + this.PathLinkFlags2GroupBox.Name = "PathLinkFlags2GroupBox"; + this.PathLinkFlags2GroupBox.Size = new System.Drawing.Size(141, 145); + this.PathLinkFlags2GroupBox.TabIndex = 18; + this.PathLinkFlags2GroupBox.TabStop = false; + this.PathLinkFlags2GroupBox.Text = "Flags 2"; + // + // PathNodeLinkFlags21CheckBox + // + this.PathNodeLinkFlags21CheckBox.AutoSize = true; + this.PathNodeLinkFlags21CheckBox.Location = new System.Drawing.Point(6, 45); + this.PathNodeLinkFlags21CheckBox.Name = "PathNodeLinkFlags21CheckBox"; + this.PathNodeLinkFlags21CheckBox.Size = new System.Drawing.Size(123, 17); + this.PathNodeLinkFlags21CheckBox.TabIndex = 33; + this.PathNodeLinkFlags21CheckBox.Text = "Angled/merged links"; + this.PathNodeLinkFlags21CheckBox.UseVisualStyleBackColor = true; + this.PathNodeLinkFlags21CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags21CheckBox_CheckedChanged); + // + // PathNodeLinkFlags22CheckBox + // + this.PathNodeLinkFlags22CheckBox.AutoSize = true; + this.PathNodeLinkFlags22CheckBox.Location = new System.Drawing.Point(6, 66); + this.PathNodeLinkFlags22CheckBox.Name = "PathNodeLinkFlags22CheckBox"; + this.PathNodeLinkFlags22CheckBox.Size = new System.Drawing.Size(129, 17); + this.PathNodeLinkFlags22CheckBox.TabIndex = 34; + this.PathNodeLinkFlags22CheckBox.Text = "Lane change / U-turn"; + this.PathNodeLinkFlags22CheckBox.UseVisualStyleBackColor = true; + this.PathNodeLinkFlags22CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags22CheckBox_CheckedChanged); + // + // label53 + // + this.label53.AutoSize = true; + this.label53.Location = new System.Drawing.Point(7, 118); + this.label53.Name = "label53"; + this.label53.Size = new System.Drawing.Size(58, 13); + this.label53.TabIndex = 37; + this.label53.Text = "Fwd lanes:"; + // + // PathNodeLinkFwdLanesUpDown + // + this.PathNodeLinkFwdLanesUpDown.Location = new System.Drawing.Point(71, 116); + this.PathNodeLinkFwdLanesUpDown.Maximum = new decimal(new int[] { + 7, + 0, + 0, + 0}); + this.PathNodeLinkFwdLanesUpDown.Name = "PathNodeLinkFwdLanesUpDown"; + this.PathNodeLinkFwdLanesUpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeLinkFwdLanesUpDown.TabIndex = 38; + this.PathNodeLinkFwdLanesUpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFwdLanesUpDown_ValueChanged); + // + // label56 + // + this.label56.AutoSize = true; + this.label56.Location = new System.Drawing.Point(3, 92); + this.label56.Name = "label56"; + this.label56.Size = new System.Drawing.Size(63, 13); + this.label56.TabIndex = 35; + this.label56.Text = "Back lanes:"; + // + // PathNodeLinkBackLanesUpDown + // + this.PathNodeLinkBackLanesUpDown.Location = new System.Drawing.Point(72, 90); + this.PathNodeLinkBackLanesUpDown.Maximum = new decimal(new int[] { + 7, + 0, + 0, + 0}); + this.PathNodeLinkBackLanesUpDown.Name = "PathNodeLinkBackLanesUpDown"; + this.PathNodeLinkBackLanesUpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeLinkBackLanesUpDown.TabIndex = 36; + this.PathNodeLinkBackLanesUpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkBackLanesUpDown_ValueChanged); + // + // PathNodeLinkFlags2UpDown + // + this.PathNodeLinkFlags2UpDown.Location = new System.Drawing.Point(6, 19); + this.PathNodeLinkFlags2UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PathNodeLinkFlags2UpDown.Name = "PathNodeLinkFlags2UpDown"; + this.PathNodeLinkFlags2UpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeLinkFlags2UpDown.TabIndex = 31; + this.PathNodeLinkFlags2UpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFlags2UpDown_ValueChanged); + // + // PathNodeLinkFlags2Label + // + this.PathNodeLinkFlags2Label.AutoSize = true; + this.PathNodeLinkFlags2Label.Location = new System.Drawing.Point(74, 21); + this.PathNodeLinkFlags2Label.Name = "PathNodeLinkFlags2Label"; + this.PathNodeLinkFlags2Label.Size = new System.Drawing.Size(30, 13); + this.PathNodeLinkFlags2Label.TabIndex = 32; + this.PathNodeLinkFlags2Label.Text = "0x00"; + // + // PathLinkFlags1GroupBox + // + this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkOffsetSizeUpDown); + this.PathLinkFlags1GroupBox.Controls.Add(this.label61); + this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags11CheckBox); + this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags18CheckBox); + this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags12CheckBox); + this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags13CheckBox); + this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags14CheckBox); + this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags1UpDown); + this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags1Label); + this.PathLinkFlags1GroupBox.Location = new System.Drawing.Point(165, 93); + this.PathLinkFlags1GroupBox.Name = "PathLinkFlags1GroupBox"; + this.PathLinkFlags1GroupBox.Size = new System.Drawing.Size(133, 181); + this.PathLinkFlags1GroupBox.TabIndex = 17; + this.PathLinkFlags1GroupBox.TabStop = false; + this.PathLinkFlags1GroupBox.Text = "Flags 1"; + // + // PathNodeLinkOffsetSizeUpDown + // + this.PathNodeLinkOffsetSizeUpDown.Location = new System.Drawing.Point(70, 152); + this.PathNodeLinkOffsetSizeUpDown.Maximum = new decimal(new int[] { + 7, + 0, + 0, + 0}); + this.PathNodeLinkOffsetSizeUpDown.Name = "PathNodeLinkOffsetSizeUpDown"; + this.PathNodeLinkOffsetSizeUpDown.Size = new System.Drawing.Size(57, 20); + this.PathNodeLinkOffsetSizeUpDown.TabIndex = 39; + this.PathNodeLinkOffsetSizeUpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkOffsetSizeUpDown_ValueChanged); + // + // label61 + // + this.label61.AutoSize = true; + this.label61.Location = new System.Drawing.Point(6, 154); + this.label61.Name = "label61"; + this.label61.Size = new System.Drawing.Size(59, 13); + this.label61.TabIndex = 38; + this.label61.Text = "Offset size:"; + // + // PathNodeLinkFlags11CheckBox + // + this.PathNodeLinkFlags11CheckBox.AutoSize = true; + this.PathNodeLinkFlags11CheckBox.Location = new System.Drawing.Point(6, 45); + this.PathNodeLinkFlags11CheckBox.Name = "PathNodeLinkFlags11CheckBox"; + this.PathNodeLinkFlags11CheckBox.Size = new System.Drawing.Size(72, 17); + this.PathNodeLinkFlags11CheckBox.TabIndex = 30; + this.PathNodeLinkFlags11CheckBox.Text = "Unused 1"; + this.PathNodeLinkFlags11CheckBox.UseVisualStyleBackColor = true; + this.PathNodeLinkFlags11CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags11CheckBox_CheckedChanged); + // + // PathNodeLinkFlags18CheckBox + // + this.PathNodeLinkFlags18CheckBox.AutoSize = true; + this.PathNodeLinkFlags18CheckBox.Location = new System.Drawing.Point(6, 129); + this.PathNodeLinkFlags18CheckBox.Name = "PathNodeLinkFlags18CheckBox"; + this.PathNodeLinkFlags18CheckBox.Size = new System.Drawing.Size(98, 17); + this.PathNodeLinkFlags18CheckBox.TabIndex = 37; + this.PathNodeLinkFlags18CheckBox.Text = "Negative offset"; + this.PathNodeLinkFlags18CheckBox.UseVisualStyleBackColor = true; + this.PathNodeLinkFlags18CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags18CheckBox_CheckedChanged); + // + // PathNodeLinkFlags12CheckBox + // + this.PathNodeLinkFlags12CheckBox.AutoSize = true; + this.PathNodeLinkFlags12CheckBox.Location = new System.Drawing.Point(6, 66); + this.PathNodeLinkFlags12CheckBox.Name = "PathNodeLinkFlags12CheckBox"; + this.PathNodeLinkFlags12CheckBox.Size = new System.Drawing.Size(81, 17); + this.PathNodeLinkFlags12CheckBox.TabIndex = 31; + this.PathNodeLinkFlags12CheckBox.Text = "Unknown 1"; + this.PathNodeLinkFlags12CheckBox.UseVisualStyleBackColor = true; + this.PathNodeLinkFlags12CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags12CheckBox_CheckedChanged); + // + // PathNodeLinkFlags13CheckBox + // + this.PathNodeLinkFlags13CheckBox.AutoSize = true; + this.PathNodeLinkFlags13CheckBox.Location = new System.Drawing.Point(6, 87); + this.PathNodeLinkFlags13CheckBox.Name = "PathNodeLinkFlags13CheckBox"; + this.PathNodeLinkFlags13CheckBox.Size = new System.Drawing.Size(73, 17); + this.PathNodeLinkFlags13CheckBox.TabIndex = 32; + this.PathNodeLinkFlags13CheckBox.Text = "Dead end"; + this.PathNodeLinkFlags13CheckBox.UseVisualStyleBackColor = true; + this.PathNodeLinkFlags13CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags13CheckBox_CheckedChanged); + // + // PathNodeLinkFlags14CheckBox + // + this.PathNodeLinkFlags14CheckBox.AutoSize = true; + this.PathNodeLinkFlags14CheckBox.Location = new System.Drawing.Point(6, 108); + this.PathNodeLinkFlags14CheckBox.Name = "PathNodeLinkFlags14CheckBox"; + this.PathNodeLinkFlags14CheckBox.Size = new System.Drawing.Size(92, 17); + this.PathNodeLinkFlags14CheckBox.TabIndex = 33; + this.PathNodeLinkFlags14CheckBox.Text = "Dead end exit"; + this.PathNodeLinkFlags14CheckBox.UseVisualStyleBackColor = true; + this.PathNodeLinkFlags14CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags14CheckBox_CheckedChanged); + // + // PathNodeLinkFlags1UpDown + // + this.PathNodeLinkFlags1UpDown.Location = new System.Drawing.Point(6, 19); + this.PathNodeLinkFlags1UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PathNodeLinkFlags1UpDown.Name = "PathNodeLinkFlags1UpDown"; + this.PathNodeLinkFlags1UpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeLinkFlags1UpDown.TabIndex = 28; + this.PathNodeLinkFlags1UpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFlags1UpDown_ValueChanged); + // + // PathNodeLinkFlags1Label + // + this.PathNodeLinkFlags1Label.AutoSize = true; + this.PathNodeLinkFlags1Label.Location = new System.Drawing.Point(74, 21); + this.PathNodeLinkFlags1Label.Name = "PathNodeLinkFlags1Label"; + this.PathNodeLinkFlags1Label.Size = new System.Drawing.Size(30, 13); + this.PathNodeLinkFlags1Label.TabIndex = 29; + this.PathNodeLinkFlags1Label.Text = "0x00"; + // + // PathLinkFlags0GroupBox + // + this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags04UpDown); + this.PathLinkFlags0GroupBox.Controls.Add(this.label60); + this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags03UpDown); + this.PathLinkFlags0GroupBox.Controls.Add(this.label58); + this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags01CheckBox); + this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags02CheckBox); + this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags0UpDown); + this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags0Label); + this.PathLinkFlags0GroupBox.Location = new System.Drawing.Point(13, 93); + this.PathLinkFlags0GroupBox.Name = "PathLinkFlags0GroupBox"; + this.PathLinkFlags0GroupBox.Size = new System.Drawing.Size(141, 141); + this.PathLinkFlags0GroupBox.TabIndex = 16; + this.PathLinkFlags0GroupBox.TabStop = false; + this.PathLinkFlags0GroupBox.Text = "Flags 0"; + // + // PathNodeLinkFlags04UpDown + // + this.PathNodeLinkFlags04UpDown.Location = new System.Drawing.Point(71, 112); + this.PathNodeLinkFlags04UpDown.Maximum = new decimal(new int[] { + 7, + 0, + 0, + 0}); + this.PathNodeLinkFlags04UpDown.Name = "PathNodeLinkFlags04UpDown"; + this.PathNodeLinkFlags04UpDown.Size = new System.Drawing.Size(57, 20); + this.PathNodeLinkFlags04UpDown.TabIndex = 32; + this.PathNodeLinkFlags04UpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFlags04UpDown_ValueChanged); + // + // label60 + // + this.label60.AutoSize = true; + this.label60.Location = new System.Drawing.Point(26, 114); + this.label60.Name = "label60"; + this.label60.Size = new System.Drawing.Size(39, 13); + this.label60.TabIndex = 31; + this.label60.Text = "Unk 2:"; + // + // PathNodeLinkFlags03UpDown + // + this.PathNodeLinkFlags03UpDown.Location = new System.Drawing.Point(71, 88); + this.PathNodeLinkFlags03UpDown.Maximum = new decimal(new int[] { + 7, + 0, + 0, + 0}); + this.PathNodeLinkFlags03UpDown.Name = "PathNodeLinkFlags03UpDown"; + this.PathNodeLinkFlags03UpDown.Size = new System.Drawing.Size(57, 20); + this.PathNodeLinkFlags03UpDown.TabIndex = 30; + this.PathNodeLinkFlags03UpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFlags03UpDown_ValueChanged); + // + // label58 + // + this.label58.AutoSize = true; + this.label58.Location = new System.Drawing.Point(26, 90); + this.label58.Name = "label58"; + this.label58.Size = new System.Drawing.Size(39, 13); + this.label58.TabIndex = 29; + this.label58.Text = "Unk 1:"; + // + // PathNodeLinkFlags01CheckBox + // + this.PathNodeLinkFlags01CheckBox.AutoSize = true; + this.PathNodeLinkFlags01CheckBox.Location = new System.Drawing.Point(6, 45); + this.PathNodeLinkFlags01CheckBox.Name = "PathNodeLinkFlags01CheckBox"; + this.PathNodeLinkFlags01CheckBox.Size = new System.Drawing.Size(70, 17); + this.PathNodeLinkFlags01CheckBox.TabIndex = 27; + this.PathNodeLinkFlags01CheckBox.Text = "Special 1"; + this.PathNodeLinkFlags01CheckBox.UseVisualStyleBackColor = true; + this.PathNodeLinkFlags01CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags01CheckBox_CheckedChanged); + // + // PathNodeLinkFlags02CheckBox + // + this.PathNodeLinkFlags02CheckBox.AutoSize = true; + this.PathNodeLinkFlags02CheckBox.Location = new System.Drawing.Point(6, 66); + this.PathNodeLinkFlags02CheckBox.Name = "PathNodeLinkFlags02CheckBox"; + this.PathNodeLinkFlags02CheckBox.Size = new System.Drawing.Size(86, 17); + this.PathNodeLinkFlags02CheckBox.TabIndex = 28; + this.PathNodeLinkFlags02CheckBox.Text = "Scripted unk"; + this.PathNodeLinkFlags02CheckBox.UseVisualStyleBackColor = true; + this.PathNodeLinkFlags02CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags02CheckBox_CheckedChanged); + // + // PathNodeLinkFlags0UpDown + // + this.PathNodeLinkFlags0UpDown.Location = new System.Drawing.Point(6, 19); + this.PathNodeLinkFlags0UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PathNodeLinkFlags0UpDown.Name = "PathNodeLinkFlags0UpDown"; + this.PathNodeLinkFlags0UpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeLinkFlags0UpDown.TabIndex = 25; + this.PathNodeLinkFlags0UpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFlags0UpDown_ValueChanged); + // + // PathNodeLinkFlags0Label + // + this.PathNodeLinkFlags0Label.AutoSize = true; + this.PathNodeLinkFlags0Label.Location = new System.Drawing.Point(74, 21); + this.PathNodeLinkFlags0Label.Name = "PathNodeLinkFlags0Label"; + this.PathNodeLinkFlags0Label.Size = new System.Drawing.Size(30, 13); + this.PathNodeLinkFlags0Label.TabIndex = 26; + this.PathNodeLinkFlags0Label.Text = "0x00"; + // + // PathNodeLinkageStatusLabel + // + this.PathNodeLinkageStatusLabel.AutoSize = true; + this.PathNodeLinkageStatusLabel.Location = new System.Drawing.Point(74, 33); + this.PathNodeLinkageStatusLabel.Name = "PathNodeLinkageStatusLabel"; + this.PathNodeLinkageStatusLabel.Size = new System.Drawing.Size(10, 13); + this.PathNodeLinkageStatusLabel.TabIndex = 13; + this.PathNodeLinkageStatusLabel.Text = "-"; + // + // PathNodeLinkLengthUpDown + // + this.PathNodeLinkLengthUpDown.Location = new System.Drawing.Point(74, 57); + this.PathNodeLinkLengthUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PathNodeLinkLengthUpDown.Name = "PathNodeLinkLengthUpDown"; + this.PathNodeLinkLengthUpDown.Size = new System.Drawing.Size(74, 20); + this.PathNodeLinkLengthUpDown.TabIndex = 15; + // + // label57 + // + this.label57.AutoSize = true; + this.label57.Location = new System.Drawing.Point(6, 59); + this.label57.Name = "label57"; + this.label57.Size = new System.Drawing.Size(62, 13); + this.label57.TabIndex = 14; + this.label57.Text = "Link length:"; + // + // PathNodeLinkNodeIDUpDown + // + this.PathNodeLinkNodeIDUpDown.Location = new System.Drawing.Point(219, 8); + this.PathNodeLinkNodeIDUpDown.Maximum = new decimal(new int[] { + 100000, + 0, + 0, + 0}); + this.PathNodeLinkNodeIDUpDown.Name = "PathNodeLinkNodeIDUpDown"; + this.PathNodeLinkNodeIDUpDown.Size = new System.Drawing.Size(74, 20); + this.PathNodeLinkNodeIDUpDown.TabIndex = 12; + this.PathNodeLinkNodeIDUpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkNodeIDUpDown_ValueChanged); + // + // label51 + // + this.label51.AutoSize = true; + this.label51.Location = new System.Drawing.Point(163, 10); + this.label51.Name = "label51"; + this.label51.Size = new System.Drawing.Size(50, 13); + this.label51.TabIndex = 11; + this.label51.Text = "Node ID:"; + // + // PathNodeLinkAreaIDUpDown + // + this.PathNodeLinkAreaIDUpDown.Location = new System.Drawing.Point(74, 8); + this.PathNodeLinkAreaIDUpDown.Maximum = new decimal(new int[] { + 1023, + 0, + 0, + 0}); + this.PathNodeLinkAreaIDUpDown.Name = "PathNodeLinkAreaIDUpDown"; + this.PathNodeLinkAreaIDUpDown.Size = new System.Drawing.Size(74, 20); + this.PathNodeLinkAreaIDUpDown.TabIndex = 10; + this.PathNodeLinkAreaIDUpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkAreaIDUpDown_ValueChanged); + // + // label54 + // + this.label54.AutoSize = true; + this.label54.Location = new System.Drawing.Point(22, 10); + this.label54.Name = "label54"; + this.label54.Size = new System.Drawing.Size(46, 13); + this.label54.TabIndex = 9; + this.label54.Text = "Area ID:"; + // + // PathNodeJunctionTabPage + // + this.PathNodeJunctionTabPage.Controls.Add(this.label78); + this.PathNodeJunctionTabPage.Controls.Add(this.PathNodeJunctionPanel); + this.PathNodeJunctionTabPage.Controls.Add(this.PathNodeJunctionEnableCheckBox); + this.PathNodeJunctionTabPage.Location = new System.Drawing.Point(4, 22); + this.PathNodeJunctionTabPage.Name = "PathNodeJunctionTabPage"; + this.PathNodeJunctionTabPage.Padding = new System.Windows.Forms.Padding(3); + this.PathNodeJunctionTabPage.Size = new System.Drawing.Size(511, 421); + this.PathNodeJunctionTabPage.TabIndex = 1; + this.PathNodeJunctionTabPage.Text = "Junction"; + this.PathNodeJunctionTabPage.UseVisualStyleBackColor = true; + // + // label78 + // + this.label78.AutoSize = true; + this.label78.Location = new System.Drawing.Point(182, 7); + this.label78.Name = "label78"; + this.label78.Size = new System.Drawing.Size(113, 13); + this.label78.TabIndex = 51; + this.label78.Text = "Height map byte array:"; + // + // PathNodeJunctionPanel + // + this.PathNodeJunctionPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionPosYUpDown); + this.PathNodeJunctionPanel.Controls.Add(this.label59); + this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionPosXUpDown); + this.PathNodeJunctionPanel.Controls.Add(this.label69); + this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionHeightmapBytesTextBox); + this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionHeightmapDimYUpDown); + this.PathNodeJunctionPanel.Controls.Add(this.label77); + this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionHeightmapDimXUpDown); + this.PathNodeJunctionPanel.Controls.Add(this.label76); + this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionMinZUpDown); + this.PathNodeJunctionPanel.Controls.Add(this.label67); + this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionMaxZUpDown); + this.PathNodeJunctionPanel.Controls.Add(this.label65); + this.PathNodeJunctionPanel.Enabled = false; + this.PathNodeJunctionPanel.Location = new System.Drawing.Point(6, 29); + this.PathNodeJunctionPanel.Name = "PathNodeJunctionPanel"; + this.PathNodeJunctionPanel.Size = new System.Drawing.Size(490, 379); + this.PathNodeJunctionPanel.TabIndex = 1; + // + // PathNodeJunctionPosYUpDown + // + this.PathNodeJunctionPosYUpDown.Location = new System.Drawing.Point(57, 81); + this.PathNodeJunctionPosYUpDown.Maximum = new decimal(new int[] { + 32767, + 0, + 0, + 0}); + this.PathNodeJunctionPosYUpDown.Minimum = new decimal(new int[] { + 32768, + 0, + 0, + -2147483648}); + this.PathNodeJunctionPosYUpDown.Name = "PathNodeJunctionPosYUpDown"; + this.PathNodeJunctionPosYUpDown.Size = new System.Drawing.Size(86, 20); + this.PathNodeJunctionPosYUpDown.TabIndex = 53; + this.PathNodeJunctionPosYUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionPosYUpDown_ValueChanged); + // + // label59 + // + this.label59.AutoSize = true; + this.label59.Location = new System.Drawing.Point(13, 83); + this.label59.Name = "label59"; + this.label59.Size = new System.Drawing.Size(38, 13); + this.label59.TabIndex = 54; + this.label59.Text = "Pos Y:"; + // + // PathNodeJunctionPosXUpDown + // + this.PathNodeJunctionPosXUpDown.Location = new System.Drawing.Point(57, 55); + this.PathNodeJunctionPosXUpDown.Maximum = new decimal(new int[] { + 32767, + 0, + 0, + 0}); + this.PathNodeJunctionPosXUpDown.Minimum = new decimal(new int[] { + 32768, + 0, + 0, + -2147483648}); + this.PathNodeJunctionPosXUpDown.Name = "PathNodeJunctionPosXUpDown"; + this.PathNodeJunctionPosXUpDown.Size = new System.Drawing.Size(86, 20); + this.PathNodeJunctionPosXUpDown.TabIndex = 51; + this.PathNodeJunctionPosXUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionPosXUpDown_ValueChanged); + // + // label69 + // + this.label69.AutoSize = true; + this.label69.Location = new System.Drawing.Point(13, 57); + this.label69.Name = "label69"; + this.label69.Size = new System.Drawing.Size(38, 13); + this.label69.TabIndex = 52; + this.label69.Text = "Pos X:"; + // + // PathNodeJunctionHeightmapBytesTextBox + // + this.PathNodeJunctionHeightmapBytesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PathNodeJunctionHeightmapBytesTextBox.Location = new System.Drawing.Point(159, 3); + this.PathNodeJunctionHeightmapBytesTextBox.Multiline = true; + this.PathNodeJunctionHeightmapBytesTextBox.Name = "PathNodeJunctionHeightmapBytesTextBox"; + this.PathNodeJunctionHeightmapBytesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.PathNodeJunctionHeightmapBytesTextBox.Size = new System.Drawing.Size(328, 373); + this.PathNodeJunctionHeightmapBytesTextBox.TabIndex = 50; + this.PathNodeJunctionHeightmapBytesTextBox.WordWrap = false; + this.PathNodeJunctionHeightmapBytesTextBox.TextChanged += new System.EventHandler(this.PathNodeJunctionHeightmapBytesTextBox_TextChanged); + // + // PathNodeJunctionHeightmapDimYUpDown + // + this.PathNodeJunctionHeightmapDimYUpDown.Location = new System.Drawing.Point(57, 133); + this.PathNodeJunctionHeightmapDimYUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PathNodeJunctionHeightmapDimYUpDown.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.PathNodeJunctionHeightmapDimYUpDown.Name = "PathNodeJunctionHeightmapDimYUpDown"; + this.PathNodeJunctionHeightmapDimYUpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeJunctionHeightmapDimYUpDown.TabIndex = 49; + this.PathNodeJunctionHeightmapDimYUpDown.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.PathNodeJunctionHeightmapDimYUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionHeightmapDimYUpDown_ValueChanged); + // + // label77 + // + this.label77.AutoSize = true; + this.label77.Location = new System.Drawing.Point(11, 135); + this.label77.Name = "label77"; + this.label77.Size = new System.Drawing.Size(40, 13); + this.label77.TabIndex = 48; + this.label77.Text = "Size Y:"; + // + // PathNodeJunctionHeightmapDimXUpDown + // + this.PathNodeJunctionHeightmapDimXUpDown.Location = new System.Drawing.Point(57, 107); + this.PathNodeJunctionHeightmapDimXUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.PathNodeJunctionHeightmapDimXUpDown.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.PathNodeJunctionHeightmapDimXUpDown.Name = "PathNodeJunctionHeightmapDimXUpDown"; + this.PathNodeJunctionHeightmapDimXUpDown.Size = new System.Drawing.Size(62, 20); + this.PathNodeJunctionHeightmapDimXUpDown.TabIndex = 47; + this.PathNodeJunctionHeightmapDimXUpDown.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.PathNodeJunctionHeightmapDimXUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionHeightmapDimXUpDown_ValueChanged); + // + // label76 + // + this.label76.AutoSize = true; + this.label76.Location = new System.Drawing.Point(11, 109); + this.label76.Name = "label76"; + this.label76.Size = new System.Drawing.Size(40, 13); + this.label76.TabIndex = 46; + this.label76.Text = "Size X:"; + // + // PathNodeJunctionMinZUpDown + // + this.PathNodeJunctionMinZUpDown.Location = new System.Drawing.Point(57, 29); + this.PathNodeJunctionMinZUpDown.Maximum = new decimal(new int[] { + 32767, + 0, + 0, + 0}); + this.PathNodeJunctionMinZUpDown.Minimum = new decimal(new int[] { + 32768, + 0, + 0, + -2147483648}); + this.PathNodeJunctionMinZUpDown.Name = "PathNodeJunctionMinZUpDown"; + this.PathNodeJunctionMinZUpDown.Size = new System.Drawing.Size(86, 20); + this.PathNodeJunctionMinZUpDown.TabIndex = 32; + this.PathNodeJunctionMinZUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionMinZUpDown_ValueChanged); + // + // label67 + // + this.label67.AutoSize = true; + this.label67.Location = new System.Drawing.Point(14, 32); + this.label67.Name = "label67"; + this.label67.Size = new System.Drawing.Size(37, 13); + this.label67.TabIndex = 33; + this.label67.Text = "Min Z:"; + // + // PathNodeJunctionMaxZUpDown + // + this.PathNodeJunctionMaxZUpDown.Location = new System.Drawing.Point(57, 3); + this.PathNodeJunctionMaxZUpDown.Maximum = new decimal(new int[] { + 32767, + 0, + 0, + 0}); + this.PathNodeJunctionMaxZUpDown.Minimum = new decimal(new int[] { + 32768, + 0, + 0, + -2147483648}); + this.PathNodeJunctionMaxZUpDown.Name = "PathNodeJunctionMaxZUpDown"; + this.PathNodeJunctionMaxZUpDown.Size = new System.Drawing.Size(86, 20); + this.PathNodeJunctionMaxZUpDown.TabIndex = 30; + this.PathNodeJunctionMaxZUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionMaxZUpDown_ValueChanged); + // + // label65 + // + this.label65.AutoSize = true; + this.label65.Location = new System.Drawing.Point(11, 5); + this.label65.Name = "label65"; + this.label65.Size = new System.Drawing.Size(40, 13); + this.label65.TabIndex = 31; + this.label65.Text = "Max Z:"; + // + // PathNodeJunctionEnableCheckBox + // + this.PathNodeJunctionEnableCheckBox.AutoSize = true; + this.PathNodeJunctionEnableCheckBox.Location = new System.Drawing.Point(6, 6); + this.PathNodeJunctionEnableCheckBox.Name = "PathNodeJunctionEnableCheckBox"; + this.PathNodeJunctionEnableCheckBox.Size = new System.Drawing.Size(156, 17); + this.PathNodeJunctionEnableCheckBox.TabIndex = 0; + this.PathNodeJunctionEnableCheckBox.Text = "Enable Junction Heightmap"; + this.PathNodeJunctionEnableCheckBox.UseVisualStyleBackColor = true; + this.PathNodeJunctionEnableCheckBox.CheckedChanged += new System.EventHandler(this.PathNodeJunctionEnableCheckBox_CheckedChanged); + // + // EditYndNodePanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(522, 451); + this.Controls.Add(this.PathNodeTabControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditYndNodePanel"; + this.Text = "Edit Ynd Node"; + this.PathNodeTabControl.ResumeLayout(false); + this.PathNodePropertiesTabPage.ResumeLayout(false); + this.PathNodePropertiesTabPage.PerformLayout(); + this.PathNodeFlags5GroupBox.ResumeLayout(false); + this.PathNodeFlags5GroupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags5UpDown)).EndInit(); + this.PathNodeFlags4GroupBox.ResumeLayout(false); + this.PathNodeFlags4GroupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags42UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags4UpDown)).EndInit(); + this.PathNodeFlags3GroupBox.ResumeLayout(false); + this.PathNodeFlags3GroupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags32UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags3UpDown)).EndInit(); + this.PathNodeFlags2GroupBox.ResumeLayout(false); + this.PathNodeFlags2GroupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags2UpDown)).EndInit(); + this.PathNodeFlags1GroupBox.ResumeLayout(false); + this.PathNodeFlags1GroupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags1UpDown)).EndInit(); + this.PathNodeFlags0GroupBox.ResumeLayout(false); + this.PathNodeFlags0GroupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags0UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeAreaIDUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeNodeIDUpDown)).EndInit(); + this.PathNodeLinksTabPage.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.PathNodeLinkPanel.ResumeLayout(false); + this.PathNodeLinkPanel.PerformLayout(); + this.PathLinkFlags2GroupBox.ResumeLayout(false); + this.PathLinkFlags2GroupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFwdLanesUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkBackLanesUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags2UpDown)).EndInit(); + this.PathLinkFlags1GroupBox.ResumeLayout(false); + this.PathLinkFlags1GroupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkOffsetSizeUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags1UpDown)).EndInit(); + this.PathLinkFlags0GroupBox.ResumeLayout(false); + this.PathLinkFlags0GroupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags04UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags03UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags0UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkLengthUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkNodeIDUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkAreaIDUpDown)).EndInit(); + this.PathNodeJunctionTabPage.ResumeLayout(false); + this.PathNodeJunctionTabPage.PerformLayout(); + this.PathNodeJunctionPanel.ResumeLayout(false); + this.PathNodeJunctionPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionPosYUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionPosXUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionHeightmapDimYUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionHeightmapDimXUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionMinZUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionMaxZUpDown)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl PathNodeTabControl; + private System.Windows.Forms.TabPage PathNodePropertiesTabPage; + private System.Windows.Forms.GroupBox PathNodeFlags5GroupBox; + private System.Windows.Forms.CheckBox PathNodeFlags52CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags53CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags51CheckBox; + private System.Windows.Forms.NumericUpDown PathNodeFlags5UpDown; + private System.Windows.Forms.GroupBox PathNodeFlags4GroupBox; + private System.Windows.Forms.CheckBox PathNodeFlags45CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags46CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags47CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags48CheckBox; + private System.Windows.Forms.NumericUpDown PathNodeFlags42UpDown; + private System.Windows.Forms.Label label71; + private System.Windows.Forms.CheckBox PathNodeFlags41CheckBox; + private System.Windows.Forms.NumericUpDown PathNodeFlags4UpDown; + private System.Windows.Forms.Label PathNodeFlags4Label; + private System.Windows.Forms.GroupBox PathNodeFlags3GroupBox; + private System.Windows.Forms.NumericUpDown PathNodeFlags32UpDown; + private System.Windows.Forms.Label label70; + private System.Windows.Forms.CheckBox PathNodeFlags31CheckBox; + private System.Windows.Forms.NumericUpDown PathNodeFlags3UpDown; + private System.Windows.Forms.Label PathNodeFlags3Label; + private System.Windows.Forms.GroupBox PathNodeFlags2GroupBox; + private System.Windows.Forms.CheckBox PathNodeFlags21CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags28CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags22CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags27CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags23CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags26CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags24CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags25CheckBox; + private System.Windows.Forms.NumericUpDown PathNodeFlags2UpDown; + private System.Windows.Forms.Label PathNodeFlags2Label; + private System.Windows.Forms.GroupBox PathNodeFlags1GroupBox; + private System.Windows.Forms.CheckBox PathNodeFlags11CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags18CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags12CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags17CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags13CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags16CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags14CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags15CheckBox; + private System.Windows.Forms.NumericUpDown PathNodeFlags1UpDown; + private System.Windows.Forms.Label PathNodeFlags1Label; + private System.Windows.Forms.GroupBox PathNodeFlags0GroupBox; + private System.Windows.Forms.CheckBox PathNodeFlags01CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags08CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags02CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags07CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags03CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags06CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags04CheckBox; + private System.Windows.Forms.CheckBox PathNodeFlags05CheckBox; + private System.Windows.Forms.NumericUpDown PathNodeFlags0UpDown; + private System.Windows.Forms.Label PathNodeFlags0Label; + private System.Windows.Forms.Button PathNodeDeleteButton; + private System.Windows.Forms.NumericUpDown PathNodeAreaIDUpDown; + private System.Windows.Forms.Button PathNodeAddToProjectButton; + private System.Windows.Forms.Label label49; + private System.Windows.Forms.Label label50; + private System.Windows.Forms.Label label68; + private System.Windows.Forms.NumericUpDown PathNodeNodeIDUpDown; + private System.Windows.Forms.Label label52; + private System.Windows.Forms.TextBox PathNodeStreetHashTextBox; + private System.Windows.Forms.Button PathNodeGoToButton; + private System.Windows.Forms.Label PathNodeStreetNameLabel; + private System.Windows.Forms.TextBox PathNodePositionTextBox; + private System.Windows.Forms.Label label55; + private System.Windows.Forms.TabPage PathNodeLinksTabPage; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.Button PathNodeRemoveLinkButton; + private System.Windows.Forms.Button PathNodeAddLinkButton; + private System.Windows.Forms.ListBox PathNodeLinksListBox; + private System.Windows.Forms.Label PathNodeLinkCountLabel; + private System.Windows.Forms.Panel PathNodeLinkPanel; + private System.Windows.Forms.GroupBox PathLinkFlags2GroupBox; + private System.Windows.Forms.CheckBox PathNodeLinkFlags21CheckBox; + private System.Windows.Forms.CheckBox PathNodeLinkFlags22CheckBox; + private System.Windows.Forms.Label label53; + private System.Windows.Forms.NumericUpDown PathNodeLinkFwdLanesUpDown; + private System.Windows.Forms.Label label56; + private System.Windows.Forms.NumericUpDown PathNodeLinkBackLanesUpDown; + private System.Windows.Forms.NumericUpDown PathNodeLinkFlags2UpDown; + private System.Windows.Forms.Label PathNodeLinkFlags2Label; + private System.Windows.Forms.GroupBox PathLinkFlags1GroupBox; + private System.Windows.Forms.NumericUpDown PathNodeLinkOffsetSizeUpDown; + private System.Windows.Forms.Label label61; + private System.Windows.Forms.CheckBox PathNodeLinkFlags11CheckBox; + private System.Windows.Forms.CheckBox PathNodeLinkFlags18CheckBox; + private System.Windows.Forms.CheckBox PathNodeLinkFlags12CheckBox; + private System.Windows.Forms.CheckBox PathNodeLinkFlags13CheckBox; + private System.Windows.Forms.CheckBox PathNodeLinkFlags14CheckBox; + private System.Windows.Forms.NumericUpDown PathNodeLinkFlags1UpDown; + private System.Windows.Forms.Label PathNodeLinkFlags1Label; + private System.Windows.Forms.GroupBox PathLinkFlags0GroupBox; + private System.Windows.Forms.NumericUpDown PathNodeLinkFlags04UpDown; + private System.Windows.Forms.Label label60; + private System.Windows.Forms.NumericUpDown PathNodeLinkFlags03UpDown; + private System.Windows.Forms.Label label58; + private System.Windows.Forms.CheckBox PathNodeLinkFlags01CheckBox; + private System.Windows.Forms.CheckBox PathNodeLinkFlags02CheckBox; + private System.Windows.Forms.NumericUpDown PathNodeLinkFlags0UpDown; + private System.Windows.Forms.Label PathNodeLinkFlags0Label; + private System.Windows.Forms.Label PathNodeLinkageStatusLabel; + private System.Windows.Forms.NumericUpDown PathNodeLinkLengthUpDown; + private System.Windows.Forms.Label label57; + private System.Windows.Forms.NumericUpDown PathNodeLinkNodeIDUpDown; + private System.Windows.Forms.Label label51; + private System.Windows.Forms.NumericUpDown PathNodeLinkAreaIDUpDown; + private System.Windows.Forms.Label label54; + private System.Windows.Forms.TabPage PathNodeJunctionTabPage; + private System.Windows.Forms.Label label78; + private System.Windows.Forms.Panel PathNodeJunctionPanel; + private System.Windows.Forms.NumericUpDown PathNodeJunctionPosYUpDown; + private System.Windows.Forms.Label label59; + private System.Windows.Forms.NumericUpDown PathNodeJunctionPosXUpDown; + private System.Windows.Forms.Label label69; + private WinForms.TextBoxFix PathNodeJunctionHeightmapBytesTextBox; + private System.Windows.Forms.NumericUpDown PathNodeJunctionHeightmapDimYUpDown; + private System.Windows.Forms.Label label77; + private System.Windows.Forms.NumericUpDown PathNodeJunctionHeightmapDimXUpDown; + private System.Windows.Forms.Label label76; + private System.Windows.Forms.NumericUpDown PathNodeJunctionMinZUpDown; + private System.Windows.Forms.Label label67; + private System.Windows.Forms.NumericUpDown PathNodeJunctionMaxZUpDown; + private System.Windows.Forms.Label label65; + private System.Windows.Forms.CheckBox PathNodeJunctionEnableCheckBox; + } +} \ No newline at end of file diff --git a/Project/Panels/EditYndNodePanel.cs b/Project/Panels/EditYndNodePanel.cs new file mode 100644 index 0000000..34682c1 --- /dev/null +++ b/Project/Panels/EditYndNodePanel.cs @@ -0,0 +1,1256 @@ +using CodeWalker.GameFiles; +using SharpDX; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditYndNodePanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public YndNode CurrentPathNode { get; set; } + public YndLink CurrentPathLink { get; set; } + public YndFile CurrentYndFile { get; set; } + + private bool populatingui = false; + + public EditYndNodePanel(ProjectForm2 projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + } + + public void SetPathNode(YndNode node) + { + CurrentPathNode = node; + CurrentPathLink = null; + CurrentYndFile = node?.Ynd; + Tag = node; + UpdateFormTitle(); + UpdateYndNodeUI(); + } + + private void UpdateFormTitle() + { + var sn = CurrentPathNode.StreetName.Hash == 0 ? "Path node" : CurrentPathNode.StreetName.ToString(); + Text = sn + " " + CurrentPathNode.NodeID.ToString(); + } + + public void UpdateYndNodeUI() + { + LoadPathNodeTabPage(); + + LoadPathNodeJunctionPage(); + + LoadPathNodeLinkPage(); + } + + + private void LoadPathNodeTabPage() + { + + CurrentPathLink = null; + + if (CurrentPathNode == null) + { + //YndNodePanel.Enabled = false; + PathNodeDeleteButton.Enabled = false; + PathNodeAddToProjectButton.Enabled = false; + PathNodeAreaIDUpDown.Value = 0; + PathNodeNodeIDUpDown.Value = 0; + PathNodePositionTextBox.Text = string.Empty; + PathNodeStreetHashTextBox.Text = string.Empty; + PathNodeStreetNameLabel.Text = "Name: [None]"; + + UpdatePathNodeFlagsUI(true, true); + + PathNodeLinkCountLabel.Text = "Link Count: 0"; + PathNodeLinksListBox.Items.Clear(); + + } + else + { + populatingui = true; + var n = CurrentPathNode.RawData; + //YndNodePanel.Enabled = true; + PathNodeDeleteButton.Enabled = ProjectForm.YndExistsInProject(CurrentYndFile); + PathNodeAddToProjectButton.Enabled = !PathNodeDeleteButton.Enabled; + var streetname = GlobalText.TryGetString(n.StreetName.Hash); + PathNodeAreaIDUpDown.Value = n.AreaID; + PathNodeNodeIDUpDown.Value = n.NodeID; + PathNodePositionTextBox.Text = FloatUtil.GetVector3String(CurrentPathNode.Position); + PathNodeStreetHashTextBox.Text = n.StreetName.Hash.ToString(); + PathNodeStreetNameLabel.Text = "Name: " + ((n.StreetName.Hash == 0) ? "[None]" : (string.IsNullOrEmpty(streetname) ? "[Not found]" : streetname)); + + UpdatePathNodeFlagsUI(true, true); + + PathNodeLinkCountLabel.Text = "Link Count: " + CurrentPathNode.LinkCount.ToString(); + PathNodeLinksListBox.Items.Clear(); + if (CurrentPathNode.Links != null) + { + foreach (var link in CurrentPathNode.Links) + { + PathNodeLinksListBox.Items.Add(link); + } + } + populatingui = false; + + + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SelectPathNode(CurrentPathNode); + } + + } + } + + private void LoadPathNodeLinkPage() + { + if (CurrentPathLink == null) + { + PathNodeLinkPanel.Enabled = false; + PathNodeLinkAreaIDUpDown.Value = 0; + PathNodeLinkNodeIDUpDown.Value = 0; + + UpdatePathNodeLinkFlagsUI(true, true); + + PathNodeLinkLengthUpDown.Value = 0; + PathNodeLinkageStatusLabel.Text = ""; + } + else + { + populatingui = true; + PathNodeLinkPanel.Enabled = true; + PathNodeLinkAreaIDUpDown.Value = CurrentPathLink._RawData.AreaID; + PathNodeLinkNodeIDUpDown.Value = CurrentPathLink._RawData.NodeID; + + UpdatePathNodeLinkFlagsUI(true, true); + + PathNodeLinkLengthUpDown.Value = CurrentPathLink.LinkLength.Value; + PathNodeLinkageStatusLabel.Text = ""; + populatingui = false; + + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SelectPathLink(CurrentPathLink); + } + } + + } + + private void LoadPathNodeJunctionPage() + { + + var junc = CurrentPathNode?.Junction; + if (junc == null) + { + PathNodeJunctionEnableCheckBox.Checked = false; + PathNodeJunctionPanel.Enabled = false; + PathNodeJunctionMaxZUpDown.Value = 0; + PathNodeJunctionMinZUpDown.Value = 0; + PathNodeJunctionPosXUpDown.Value = 0; + PathNodeJunctionPosYUpDown.Value = 0; + PathNodeJunctionHeightmapDimXUpDown.Value = 1; + PathNodeJunctionHeightmapDimYUpDown.Value = 1; + PathNodeJunctionHeightmapBytesTextBox.Text = string.Empty; + } + else + { + populatingui = true; + PathNodeJunctionEnableCheckBox.Checked = CurrentPathNode.HasJunction; + PathNodeJunctionPanel.Enabled = PathNodeJunctionEnableCheckBox.Checked; + PathNodeJunctionMaxZUpDown.Value = junc.MaxZ; + PathNodeJunctionMinZUpDown.Value = junc.MinZ; + PathNodeJunctionPosXUpDown.Value = junc.PositionX; + PathNodeJunctionPosYUpDown.Value = junc.PositionY; + PathNodeJunctionHeightmapDimXUpDown.Value = junc.Heightmap.CountX; + PathNodeJunctionHeightmapDimYUpDown.Value = junc.Heightmap.CountY; + PathNodeJunctionHeightmapBytesTextBox.Text = junc.Heightmap?.GetDataString() ?? ""; + populatingui = false; + } + + + } + + private void UpdatePathNodeFlagsUI(bool updateCheckboxes, bool updateUpDowns) + { + + var flags0 = CurrentPathNode?.Flags0.Value ?? 0; + var flags1 = CurrentPathNode?.Flags1.Value ?? 0; + var flags2 = CurrentPathNode?.Flags2.Value ?? 0; + var flags3 = CurrentPathNode?.Flags3.Value ?? 0; + var flags4 = CurrentPathNode?.Flags4.Value ?? 0; + var flags5 = (uint)(CurrentPathNode?.LinkCountUnk ?? 0); + + + if (updateCheckboxes) + { + PathNodeFlags01CheckBox.Checked = BitUtil.IsBitSet(flags0, 0); + PathNodeFlags02CheckBox.Checked = BitUtil.IsBitSet(flags0, 1); + PathNodeFlags03CheckBox.Checked = BitUtil.IsBitSet(flags0, 2); + PathNodeFlags04CheckBox.Checked = BitUtil.IsBitSet(flags0, 3); + PathNodeFlags05CheckBox.Checked = BitUtil.IsBitSet(flags0, 4); + PathNodeFlags06CheckBox.Checked = BitUtil.IsBitSet(flags0, 5); + PathNodeFlags07CheckBox.Checked = BitUtil.IsBitSet(flags0, 6); + PathNodeFlags08CheckBox.Checked = BitUtil.IsBitSet(flags0, 7); + + PathNodeFlags11CheckBox.Checked = BitUtil.IsBitSet(flags1, 0); + PathNodeFlags12CheckBox.Checked = BitUtil.IsBitSet(flags1, 1); + PathNodeFlags13CheckBox.Checked = BitUtil.IsBitSet(flags1, 2); + PathNodeFlags14CheckBox.Checked = BitUtil.IsBitSet(flags1, 3); + PathNodeFlags15CheckBox.Checked = BitUtil.IsBitSet(flags1, 4); + PathNodeFlags16CheckBox.Checked = BitUtil.IsBitSet(flags1, 5); + PathNodeFlags17CheckBox.Checked = BitUtil.IsBitSet(flags1, 6); + PathNodeFlags18CheckBox.Checked = BitUtil.IsBitSet(flags1, 7); + + PathNodeFlags21CheckBox.Checked = BitUtil.IsBitSet(flags2, 0); + PathNodeFlags22CheckBox.Checked = BitUtil.IsBitSet(flags2, 1); + PathNodeFlags23CheckBox.Checked = BitUtil.IsBitSet(flags2, 2); + PathNodeFlags24CheckBox.Checked = BitUtil.IsBitSet(flags2, 3); + PathNodeFlags25CheckBox.Checked = BitUtil.IsBitSet(flags2, 4); + PathNodeFlags26CheckBox.Checked = BitUtil.IsBitSet(flags2, 5); + PathNodeFlags27CheckBox.Checked = BitUtil.IsBitSet(flags2, 6); + PathNodeFlags28CheckBox.Checked = BitUtil.IsBitSet(flags2, 7); + + PathNodeFlags31CheckBox.Checked = BitUtil.IsBitSet(flags3, 0); + PathNodeFlags32UpDown.Value = (flags3 >> 1) & 127; + + PathNodeFlags41CheckBox.Checked = BitUtil.IsBitSet(flags4, 0); + PathNodeFlags42UpDown.Value = (flags4 >> 1) & 7; + PathNodeFlags45CheckBox.Checked = BitUtil.IsBitSet(flags4, 4); + PathNodeFlags46CheckBox.Checked = BitUtil.IsBitSet(flags4, 5); + PathNodeFlags47CheckBox.Checked = BitUtil.IsBitSet(flags4, 6); + PathNodeFlags48CheckBox.Checked = BitUtil.IsBitSet(flags4, 7); + + PathNodeFlags51CheckBox.Checked = BitUtil.IsBitSet(flags5, 0); + PathNodeFlags52CheckBox.Checked = BitUtil.IsBitSet(flags5, 1); + PathNodeFlags53CheckBox.Checked = BitUtil.IsBitSet(flags5, 2); + } + if (updateUpDowns) + { + PathNodeFlags0UpDown.Value = flags0; + PathNodeFlags1UpDown.Value = flags1; + PathNodeFlags2UpDown.Value = flags2; + PathNodeFlags3UpDown.Value = flags3; + PathNodeFlags4UpDown.Value = flags4; + PathNodeFlags5UpDown.Value = flags5; + } + + var n = CurrentPathNode; + if (n != null) + { + PathNodeFlags0Label.Text = n.Flags0.ToHexString(); + PathNodeFlags1Label.Text = n.Flags1.ToHexString(); + PathNodeFlags2Label.Text = n.Flags2.ToHexString(); + PathNodeFlags3Label.Text = n.Flags3.ToHexString(); + PathNodeFlags4Label.Text = n.Flags4.ToHexString(); + } + else + { + PathNodeFlags0Label.Text = "0x00"; + PathNodeFlags1Label.Text = "0x00"; + PathNodeFlags2Label.Text = "0x00"; + PathNodeFlags3Label.Text = "0x00"; + PathNodeFlags4Label.Text = "0x00"; + } + } + + private void UpdatePathNodeLinkFlagsUI(bool updateCheckboxes, bool updateUpDowns) + { + var flags0 = CurrentPathLink?.Flags0.Value ?? 0; + var flags1 = CurrentPathLink?.Flags1.Value ?? 0; + var flags2 = CurrentPathLink?.Flags2.Value ?? 0; + + + if (updateCheckboxes) + { + PathNodeLinkFlags01CheckBox.Checked = BitUtil.IsBitSet(flags0, 0); + PathNodeLinkFlags02CheckBox.Checked = BitUtil.IsBitSet(flags0, 1); + PathNodeLinkFlags03UpDown.Value = (flags0 >> 2) & 7; + PathNodeLinkFlags04UpDown.Value = (flags0 >> 5) & 7; + + PathNodeLinkFlags11CheckBox.Checked = BitUtil.IsBitSet(flags1, 0); + PathNodeLinkFlags12CheckBox.Checked = BitUtil.IsBitSet(flags1, 1); + PathNodeLinkFlags13CheckBox.Checked = BitUtil.IsBitSet(flags1, 2); + PathNodeLinkFlags14CheckBox.Checked = BitUtil.IsBitSet(flags1, 3); + PathNodeLinkOffsetSizeUpDown.Value = (flags1 >> 4) & 7; + PathNodeLinkFlags18CheckBox.Checked = BitUtil.IsBitSet(flags1, 7); + + PathNodeLinkFlags21CheckBox.Checked = BitUtil.IsBitSet(flags2, 0); + PathNodeLinkFlags22CheckBox.Checked = BitUtil.IsBitSet(flags2, 1); + PathNodeLinkBackLanesUpDown.Value = (flags2 >> 2) & 7; + PathNodeLinkFwdLanesUpDown.Value = (flags2 >> 5) & 7; + } + if (updateUpDowns) + { + PathNodeLinkFlags0UpDown.Value = flags0; + PathNodeLinkFlags1UpDown.Value = flags1; + PathNodeLinkFlags2UpDown.Value = flags2; + } + + var l = CurrentPathLink; + if (l != null) + { + PathNodeLinkFlags0Label.Text = l.Flags0.ToHexString(); + PathNodeLinkFlags1Label.Text = l.Flags1.ToHexString(); + PathNodeLinkFlags2Label.Text = l.Flags2.ToHexString(); + } + else + { + PathNodeLinkFlags0Label.Text = "0x00"; + PathNodeLinkFlags1Label.Text = "0x00"; + PathNodeLinkFlags2Label.Text = "0x00"; + } + } + + private void SetPathNodeFlagsFromCheckBoxes() + { + if (populatingui) return; + if (CurrentPathNode == null) return; + + uint flags0 = 0; + uint flags1 = 0; + uint flags2 = 0; + uint flags3 = 0; + uint flags4 = 0; + uint flags5 = 0; + flags0 = BitUtil.UpdateBit(flags0, 0, PathNodeFlags01CheckBox.Checked); + flags0 = BitUtil.UpdateBit(flags0, 1, PathNodeFlags02CheckBox.Checked); + flags0 = BitUtil.UpdateBit(flags0, 2, PathNodeFlags03CheckBox.Checked); + flags0 = BitUtil.UpdateBit(flags0, 3, PathNodeFlags04CheckBox.Checked); + flags0 = BitUtil.UpdateBit(flags0, 4, PathNodeFlags05CheckBox.Checked); + flags0 = BitUtil.UpdateBit(flags0, 5, PathNodeFlags06CheckBox.Checked); + flags0 = BitUtil.UpdateBit(flags0, 6, PathNodeFlags07CheckBox.Checked); + flags0 = BitUtil.UpdateBit(flags0, 7, PathNodeFlags08CheckBox.Checked); + + flags1 = BitUtil.UpdateBit(flags1, 0, PathNodeFlags11CheckBox.Checked); + flags1 = BitUtil.UpdateBit(flags1, 1, PathNodeFlags12CheckBox.Checked); + flags1 = BitUtil.UpdateBit(flags1, 2, PathNodeFlags13CheckBox.Checked); + flags1 = BitUtil.UpdateBit(flags1, 3, PathNodeFlags14CheckBox.Checked); + flags1 = BitUtil.UpdateBit(flags1, 4, PathNodeFlags15CheckBox.Checked); + flags1 = BitUtil.UpdateBit(flags1, 5, PathNodeFlags16CheckBox.Checked); + flags1 = BitUtil.UpdateBit(flags1, 6, PathNodeFlags17CheckBox.Checked); + flags1 = BitUtil.UpdateBit(flags1, 7, PathNodeFlags18CheckBox.Checked); + + flags2 = BitUtil.UpdateBit(flags2, 0, PathNodeFlags21CheckBox.Checked); + flags2 = BitUtil.UpdateBit(flags2, 1, PathNodeFlags22CheckBox.Checked); + flags2 = BitUtil.UpdateBit(flags2, 2, PathNodeFlags23CheckBox.Checked); + flags2 = BitUtil.UpdateBit(flags2, 3, PathNodeFlags24CheckBox.Checked); + flags2 = BitUtil.UpdateBit(flags2, 4, PathNodeFlags25CheckBox.Checked); + flags2 = BitUtil.UpdateBit(flags2, 5, PathNodeFlags26CheckBox.Checked); + flags2 = BitUtil.UpdateBit(flags2, 6, PathNodeFlags27CheckBox.Checked); + flags2 = BitUtil.UpdateBit(flags2, 7, PathNodeFlags28CheckBox.Checked); + + flags3 = BitUtil.UpdateBit(flags3, 0, PathNodeFlags31CheckBox.Checked); + flags3 += (((uint)PathNodeFlags32UpDown.Value & 127u) << 1); + + flags4 = BitUtil.UpdateBit(flags4, 0, PathNodeFlags41CheckBox.Checked); + flags4 += (((uint)PathNodeFlags42UpDown.Value & 7u) << 1); + flags4 = BitUtil.UpdateBit(flags4, 4, PathNodeFlags45CheckBox.Checked); + flags4 = BitUtil.UpdateBit(flags4, 5, PathNodeFlags46CheckBox.Checked); + flags4 = BitUtil.UpdateBit(flags4, 6, PathNodeFlags47CheckBox.Checked); + flags4 = BitUtil.UpdateBit(flags4, 7, PathNodeFlags48CheckBox.Checked); + + flags5 = BitUtil.UpdateBit(flags5, 0, PathNodeFlags51CheckBox.Checked); + flags5 = BitUtil.UpdateBit(flags5, 1, PathNodeFlags52CheckBox.Checked); + flags5 = BitUtil.UpdateBit(flags5, 2, PathNodeFlags53CheckBox.Checked); + + + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.Flags0.Value != flags0) + { + CurrentPathNode.Flags0 = (byte)flags0; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathNode.Flags1.Value != flags1) + { + CurrentPathNode.Flags1 = (byte)flags1; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathNode.Flags2.Value != flags2) + { + CurrentPathNode.Flags2 = (byte)flags2; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathNode.Flags3.Value != flags3) + { + CurrentPathNode.Flags3 = (byte)flags3; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathNode.Flags4.Value != flags4) + { + CurrentPathNode.Flags4 = (byte)flags4; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathNode.LinkCountUnk != flags5) + { + CurrentPathNode.LinkCountUnk = (byte)flags5; + ProjectForm.SetYndHasChanged(true); + } + } + + populatingui = true; + UpdatePathNodeFlagsUI(false, true); //update updowns + populatingui = false; + } + + private void SetPathNodeFlagsFromUpDowns() + { + if (populatingui) return; + if (CurrentPathNode == null) return; + + uint flags0 = (uint)PathNodeFlags0UpDown.Value; + uint flags1 = (uint)PathNodeFlags1UpDown.Value; + uint flags2 = (uint)PathNodeFlags2UpDown.Value; + uint flags3 = (uint)PathNodeFlags3UpDown.Value; + uint flags4 = (uint)PathNodeFlags4UpDown.Value; + uint flags5 = (uint)PathNodeFlags5UpDown.Value; + + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.Flags0.Value != flags0) + { + CurrentPathNode.Flags0 = (byte)flags0; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathNode.Flags1.Value != flags1) + { + CurrentPathNode.Flags1 = (byte)flags1; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathNode.Flags2.Value != flags2) + { + CurrentPathNode.Flags2 = (byte)flags2; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathNode.Flags3.Value != flags3) + { + CurrentPathNode.Flags3 = (byte)flags3; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathNode.Flags4.Value != flags4) + { + CurrentPathNode.Flags4 = (byte)flags4; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathNode.LinkCountUnk != flags5) + { + CurrentPathNode.LinkCountUnk = (byte)flags5; + ProjectForm.SetYndHasChanged(true); + } + } + + populatingui = true; + UpdatePathNodeFlagsUI(true, false); //update checkboxes + populatingui = false; + } + + private void SetPathNodeLinkFlagsFromCheckBoxes() + { + if (populatingui) return; + if (CurrentPathLink == null) return; + + uint flags0 = 0; + uint flags1 = 0; + uint flags2 = 0; + flags0 = BitUtil.UpdateBit(flags0, 0, PathNodeLinkFlags01CheckBox.Checked); + flags0 = BitUtil.UpdateBit(flags0, 1, PathNodeLinkFlags02CheckBox.Checked); + flags0 += (((uint)PathNodeLinkFlags03UpDown.Value & 7u) << 2); + flags0 += (((uint)PathNodeLinkFlags04UpDown.Value & 7u) << 5); + + flags1 = BitUtil.UpdateBit(flags1, 0, PathNodeLinkFlags11CheckBox.Checked); + flags1 = BitUtil.UpdateBit(flags1, 1, PathNodeLinkFlags12CheckBox.Checked); + flags1 = BitUtil.UpdateBit(flags1, 2, PathNodeLinkFlags13CheckBox.Checked); + flags1 = BitUtil.UpdateBit(flags1, 3, PathNodeLinkFlags14CheckBox.Checked); + flags1 += (((uint)PathNodeLinkOffsetSizeUpDown.Value & 7u) << 4); + flags1 = BitUtil.UpdateBit(flags1, 7, PathNodeLinkFlags18CheckBox.Checked); + + flags2 = BitUtil.UpdateBit(flags2, 0, PathNodeLinkFlags21CheckBox.Checked); + flags2 = BitUtil.UpdateBit(flags2, 1, PathNodeLinkFlags22CheckBox.Checked); + flags2 += (((uint)PathNodeLinkBackLanesUpDown.Value & 7u) << 2); + flags2 += (((uint)PathNodeLinkFwdLanesUpDown.Value & 7u) << 5); + + bool updgfx = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathLink.Flags0.Value != flags0) + { + CurrentPathLink.Flags0 = (byte)flags0; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathLink.Flags1.Value != flags1) + { + CurrentPathLink.Flags1 = (byte)flags1; + ProjectForm.SetYndHasChanged(true); + updgfx = true; + } + if (CurrentPathLink.Flags2.Value != flags2) + { + CurrentPathLink.Flags2 = (byte)flags2; + ProjectForm.SetYndHasChanged(true); + updgfx = true; + } + } + + populatingui = true; + UpdatePathNodeLinkFlagsUI(false, true); //update updowns + populatingui = false; + + if (updgfx && (ProjectForm.WorldForm != null) && (CurrentYndFile != null)) + { + ProjectForm.WorldForm.UpdatePathYndGraphics(CurrentYndFile, false); + } + } + + private void SetPathNodeLinkFlagsFromUpDowns() + { + if (populatingui) return; + if (CurrentPathLink == null) return; + + uint flags0 = (uint)PathNodeLinkFlags0UpDown.Value; + uint flags1 = (uint)PathNodeLinkFlags1UpDown.Value; + uint flags2 = (uint)PathNodeLinkFlags2UpDown.Value; + + bool updgfx = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathLink.Flags0.Value != flags0) + { + CurrentPathLink.Flags0 = (byte)flags0; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathLink.Flags1.Value != flags1) + { + CurrentPathLink.Flags1 = (byte)flags1; + ProjectForm.SetYndHasChanged(true); + } + if (CurrentPathLink.Flags2.Value != flags2) + { + CurrentPathLink.Flags2 = (byte)flags2; + ProjectForm.SetYndHasChanged(true); + updgfx = true; + } + } + + populatingui = true; + UpdatePathNodeLinkFlagsUI(true, false); //update checkboxes + populatingui = false; + + if (updgfx && (ProjectForm.WorldForm != null) && (CurrentYndFile != null)) + { + ProjectForm.WorldForm.UpdatePathYndGraphics(CurrentYndFile, false); + } + } + + + private void AddPathLink() + { + if (CurrentPathNode == null) return; + + var l = CurrentPathNode.AddLink(); + + LoadPathNodeTabPage(); + + PathNodeLinksListBox.SelectedItem = l; + + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.UpdatePathNodeGraphics(CurrentPathNode, false); + } + } + + private void RemovePathLink() + { + if (CurrentPathLink == null) return; + if (CurrentPathNode == null) return; + + var r = CurrentPathNode.RemoveLink(CurrentPathLink); + + if (!r) return; + + LoadPathNodeTabPage(); + + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.UpdatePathNodeGraphics(CurrentPathNode, false); + } + } + + private void UpdatePathNodeLinkage() + { + if (CurrentPathLink == null) return; + if (CurrentYndFile == null) return; + + YndNode linknode = null; + ushort areaid = CurrentPathLink._RawData.AreaID; + ushort nodeid = CurrentPathLink._RawData.NodeID; + if (areaid == CurrentYndFile.AreaID) + { + //link to the same ynd. find the new node in the current ynd. + if ((CurrentYndFile.Nodes != null) && (nodeid < CurrentYndFile.Nodes.Length)) + { + linknode = CurrentYndFile.Nodes[nodeid]; + } + } + else + { + //try lookup the link node from the space. + if (ProjectForm.WorldForm != null) + { + linknode = ProjectForm.WorldForm.GetPathNodeFromSpace(areaid, nodeid); + } + } + + if (linknode == null) + { + PathNodeLinkageStatusLabel.Text = "Unable to find node " + areaid.ToString() + ":" + nodeid.ToString() + "."; + } + else + { + PathNodeLinkageStatusLabel.Text = ""; + } + + CurrentPathLink.Node2 = linknode; + CurrentPathLink.UpdateLength(); + + + ////need to rebuild the link verts.. updating the graphics should do it... + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.UpdatePathYndGraphics(CurrentYndFile, false); + } + } + + + + + + + + private void PathNodeAreaIDUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + ushort areaid = (ushort)PathNodeAreaIDUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.AreaID != areaid) + { + CurrentPathNode.AreaID = areaid; + ProjectForm.SetYndHasChanged(true); + } + } + + ProjectForm.ProjectExplorer?.UpdatePathNodeTreeNode(CurrentPathNode); + } + + private void PathNodeNodeIDUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + ushort nodeid = (ushort)PathNodeNodeIDUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.NodeID != nodeid) + { + CurrentPathNode.NodeID = nodeid; + ProjectForm.SetYndHasChanged(true); + } + } + + ProjectForm.ProjectExplorer?.UpdatePathNodeTreeNode(CurrentPathNode); + } + + private void PathNodePositionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + Vector3 v = FloatUtil.ParseVector3String(PathNodePositionTextBox.Text); + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.Position != v) + { + CurrentPathNode.SetPosition(v); + ProjectForm.SetYndHasChanged(true); + change = true; + } + } + if (change) + { + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SetWidgetPosition(CurrentPathNode.Position); + ProjectForm.WorldForm.UpdatePathNodeGraphics(CurrentPathNode, false); + } + //PathNodePositionTextBox.Text = FloatUtil.GetVector3String(CurrentPathNode.Position); + } + } + + private void PathNodeGoToButton_Click(object sender, EventArgs e) + { + if (CurrentPathNode == null) return; + if (ProjectForm.WorldForm == null) return; + ProjectForm.WorldForm.GoToPosition(CurrentPathNode.Position); + } + + private void PathNodeAddToProjectButton_Click(object sender, EventArgs e) + { + if (CurrentPathNode?.Ynd != null) + { + ProjectForm.AddYndToProject(CurrentPathNode.Ynd); + + } + } + + private void PathNodeDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentPathNode); + ProjectForm.DeletePathNode(); + } + + private void PathNodeStreetHashTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + uint hash; + uint.TryParse(PathNodeStreetHashTextBox.Text, out hash); + var streetname = GlobalText.TryGetString(hash); + PathNodeStreetNameLabel.Text = "Name: " + ((hash == 0) ? "[None]" : (string.IsNullOrEmpty(streetname) ? "[Not found]" : streetname)); + + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.StreetName.Hash != hash) + { + CurrentPathNode.StreetName = hash; + ProjectForm.SetYndHasChanged(true); + } + } + + ProjectForm.ProjectExplorer?.UpdatePathNodeTreeNode(CurrentPathNode); + } + + private void PathNodeFlags0UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromUpDowns(); + } + + private void PathNodeFlags1UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromUpDowns(); + } + + private void PathNodeFlags2UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromUpDowns(); + } + + private void PathNodeFlags3UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromUpDowns(); + } + + private void PathNodeFlags4UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromUpDowns(); + } + + private void PathNodeFlags5UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromUpDowns(); + } + + private void PathNodeFlags01CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags02CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags03CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags04CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags05CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags06CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags07CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags08CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags11CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags12CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags13CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags14CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags15CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags16CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags17CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags18CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags21CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags22CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags23CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags24CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags25CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags26CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags27CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags28CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags31CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags32UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); //treat this one like checkboxes + } + + private void PathNodeFlags51CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags41CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags45CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags46CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags47CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags48CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags42UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); //treat this one like checkboxes + } + + private void PathNodeFlags52CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + private void PathNodeFlags53CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeFlagsFromCheckBoxes(); + } + + + private void PathNodeLinksListBox_SelectedIndexChanged(object sender, EventArgs e) + { + CurrentPathLink = PathNodeLinksListBox.SelectedItem as YndLink; + LoadPathNodeLinkPage(); + } + + private void PathNodeAddLinkButton_Click(object sender, EventArgs e) + { + AddPathLink(); + } + + private void PathNodeRemoveLinkButton_Click(object sender, EventArgs e) + { + RemovePathLink(); + } + + private void PathNodeLinkAreaIDUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathLink == null) return; + ushort areaid = (ushort)PathNodeLinkAreaIDUpDown.Value; + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathLink._RawData.AreaID != areaid) + { + CurrentPathLink._RawData.AreaID = areaid; + ProjectForm.SetYndHasChanged(true); + change = true; + } + } + if (change) + { + UpdatePathNodeLinkage(); + + //refresh the selected item in the list box, to update the text, and the other controls. + PathNodeLinksListBox.Items[PathNodeLinksListBox.SelectedIndex] = PathNodeLinksListBox.SelectedItem; + } + } + + private void PathNodeLinkNodeIDUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathLink == null) return; + ushort nodeid = (ushort)PathNodeLinkNodeIDUpDown.Value; + bool change = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathLink._RawData.NodeID != nodeid) + { + CurrentPathLink._RawData.NodeID = nodeid; + ProjectForm.SetYndHasChanged(true); + change = true; + } + } + if (change) + { + UpdatePathNodeLinkage(); + + //refresh the selected item in the list box, to update the text, and the other controls. + PathNodeLinksListBox.Items[PathNodeLinksListBox.SelectedIndex] = PathNodeLinksListBox.SelectedItem; + } + } + + private void PathNodeLinkFlags0UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromUpDowns(); + } + + private void PathNodeLinkFlags1UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromUpDowns(); + } + + private void PathNodeLinkFlags2UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromUpDowns(); + } + + private void PathNodeLinkFlags01CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkFlags02CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkFlags03UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkFlags04UpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkFlags11CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkFlags12CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkFlags13CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkFlags14CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkFlags18CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkOffsetSizeUpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkFlags21CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkFlags22CheckBox_CheckedChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkFwdLanesUpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkBackLanesUpDown_ValueChanged(object sender, EventArgs e) + { + SetPathNodeLinkFlagsFromCheckBoxes(); + } + + private void PathNodeLinkLengthUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathLink == null) return; + byte length = (byte)PathNodeLinkLengthUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathLink.LinkLength.Value != length) + { + CurrentPathLink.LinkLength = length; + CurrentPathLink._RawData.LinkLength = length; + ProjectForm.SetYndHasChanged(true); + } + } + } + + + private void PathNodeJunctionEnableCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.HasJunction != PathNodeJunctionEnableCheckBox.Checked) + { + CurrentPathNode.HasJunction = PathNodeJunctionEnableCheckBox.Checked; + if (CurrentPathNode.HasJunction && (CurrentPathNode.Junction == null)) + { + var j = new YndJunction(); + //init new junction + j._RawData.HeightmapDimX = 1; + j._RawData.HeightmapDimY = 1; + j.Heightmap = new YndJunctionHeightmap(new byte[] { 255 }, j); + j.RefData = new NodeJunctionRef() { AreaID = (ushort)CurrentPathNode.AreaID, NodeID = (ushort)CurrentPathNode.NodeID }; + + CurrentPathNode.Junction = j; + } + ProjectForm.SetYndHasChanged(true); + } + } + LoadPathNodeJunctionPage(); + } + + private void PathNodeJunctionMaxZUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + if (CurrentPathNode.Junction == null) return; + short val = (short)PathNodeJunctionMaxZUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.Junction.MaxZ != val) + { + CurrentPathNode.Junction.MaxZ = val; + CurrentPathNode.Junction._RawData.MaxZ = val; + ProjectForm.SetYndHasChanged(true); + } + } + } + + private void PathNodeJunctionMinZUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + if (CurrentPathNode.Junction == null) return; + short val = (short)PathNodeJunctionMinZUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.Junction.MinZ != val) + { + CurrentPathNode.Junction.MinZ = val; + CurrentPathNode.Junction._RawData.MinZ = val; + ProjectForm.SetYndHasChanged(true); + } + } + } + + private void PathNodeJunctionPosXUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + if (CurrentPathNode.Junction == null) return; + short val = (short)PathNodeJunctionPosXUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.Junction.PositionX != val) + { + CurrentPathNode.Junction.PositionX = val; + CurrentPathNode.Junction._RawData.PositionX = val; + ProjectForm.SetYndHasChanged(true); + } + } + } + + private void PathNodeJunctionPosYUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + if (CurrentPathNode.Junction == null) return; + short val = (short)PathNodeJunctionPosYUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.Junction.PositionY != val) + { + CurrentPathNode.Junction.PositionY = val; + CurrentPathNode.Junction._RawData.PositionY = val; + ProjectForm.SetYndHasChanged(true); + } + } + } + + private void PathNodeJunctionHeightmapDimXUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + if (CurrentPathNode.Junction == null) return; + byte val = (byte)PathNodeJunctionHeightmapDimXUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.Junction._RawData.HeightmapDimX != val) + { + CurrentPathNode.Junction._RawData.HeightmapDimX = val; + CurrentPathNode.Junction.ResizeHeightmap(); + ProjectForm.SetYndHasChanged(true); + } + } + LoadPathNodeJunctionPage(); + } + + private void PathNodeJunctionHeightmapDimYUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + if (CurrentPathNode.Junction == null) return; + byte val = (byte)PathNodeJunctionHeightmapDimYUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentPathNode.Junction._RawData.HeightmapDimY != val) + { + CurrentPathNode.Junction._RawData.HeightmapDimY = val; + CurrentPathNode.Junction.ResizeHeightmap(); + ProjectForm.SetYndHasChanged(true); + } + } + LoadPathNodeJunctionPage(); + } + + private void PathNodeJunctionHeightmapBytesTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentPathNode == null) return; + if (CurrentPathNode.Junction == null) return; + lock (ProjectForm.ProjectSyncRoot) + { + CurrentPathNode.Junction.SetHeightmap(PathNodeJunctionHeightmapBytesTextBox.Text); + ProjectForm.SetYndHasChanged(true); + } + //LoadPathNodeJunctionPage(); + } + } +} diff --git a/Project/Panels/EditYndNodePanel.resx b/Project/Panels/EditYndNodePanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditYndNodePanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditYndPanel.Designer.cs b/Project/Panels/EditYndPanel.Designer.cs new file mode 100644 index 0000000..f660921 --- /dev/null +++ b/Project/Panels/EditYndPanel.Designer.cs @@ -0,0 +1,281 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditYndPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYndPanel)); + this.label88 = new System.Windows.Forms.Label(); + this.YndAreaIDYUpDown = new System.Windows.Forms.NumericUpDown(); + this.label87 = new System.Windows.Forms.Label(); + this.YndAreaIDXUpDown = new System.Windows.Forms.NumericUpDown(); + this.label48 = new System.Windows.Forms.Label(); + this.YndProjectPathTextBox = new System.Windows.Forms.TextBox(); + this.label46 = new System.Windows.Forms.Label(); + this.YndFilePathTextBox = new System.Windows.Forms.TextBox(); + this.label47 = new System.Windows.Forms.Label(); + this.YndTotalNodesLabel = new System.Windows.Forms.Label(); + this.YndPedNodesUpDown = new System.Windows.Forms.NumericUpDown(); + this.label45 = new System.Windows.Forms.Label(); + this.YndVehicleNodesUpDown = new System.Windows.Forms.NumericUpDown(); + this.label40 = new System.Windows.Forms.Label(); + this.YndAreaIDInfoLabel = new System.Windows.Forms.Label(); + this.label33 = new System.Windows.Forms.Label(); + this.YndRpfPathTextBox = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.YndAreaIDYUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.YndAreaIDXUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.YndPedNodesUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.YndVehicleNodesUpDown)).BeginInit(); + this.SuspendLayout(); + // + // label88 + // + this.label88.AutoSize = true; + this.label88.Location = new System.Drawing.Point(183, 20); + this.label88.Name = "label88"; + this.label88.Size = new System.Drawing.Size(17, 13); + this.label88.TabIndex = 36; + this.label88.Text = "Y:"; + // + // YndAreaIDYUpDown + // + this.YndAreaIDYUpDown.Location = new System.Drawing.Point(206, 18); + this.YndAreaIDYUpDown.Maximum = new decimal(new int[] { + 31, + 0, + 0, + 0}); + this.YndAreaIDYUpDown.Name = "YndAreaIDYUpDown"; + this.YndAreaIDYUpDown.Size = new System.Drawing.Size(48, 20); + this.YndAreaIDYUpDown.TabIndex = 35; + this.YndAreaIDYUpDown.ValueChanged += new System.EventHandler(this.YndAreaIDYUpDown_ValueChanged); + // + // label87 + // + this.label87.AutoSize = true; + this.label87.Location = new System.Drawing.Point(101, 20); + this.label87.Name = "label87"; + this.label87.Size = new System.Drawing.Size(17, 13); + this.label87.TabIndex = 34; + this.label87.Text = "X:"; + // + // YndAreaIDXUpDown + // + this.YndAreaIDXUpDown.Location = new System.Drawing.Point(124, 18); + this.YndAreaIDXUpDown.Maximum = new decimal(new int[] { + 31, + 0, + 0, + 0}); + this.YndAreaIDXUpDown.Name = "YndAreaIDXUpDown"; + this.YndAreaIDXUpDown.Size = new System.Drawing.Size(48, 20); + this.YndAreaIDXUpDown.TabIndex = 33; + this.YndAreaIDXUpDown.ValueChanged += new System.EventHandler(this.YndAreaIDXUpDown_ValueChanged); + // + // label48 + // + this.label48.AutoSize = true; + this.label48.Location = new System.Drawing.Point(23, 216); + this.label48.Name = "label48"; + this.label48.Size = new System.Drawing.Size(68, 13); + this.label48.TabIndex = 32; + this.label48.Text = "Project Path:"; + // + // YndProjectPathTextBox + // + this.YndProjectPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YndProjectPathTextBox.Location = new System.Drawing.Point(97, 213); + this.YndProjectPathTextBox.Name = "YndProjectPathTextBox"; + this.YndProjectPathTextBox.ReadOnly = true; + this.YndProjectPathTextBox.Size = new System.Drawing.Size(450, 20); + this.YndProjectPathTextBox.TabIndex = 31; + // + // label46 + // + this.label46.AutoSize = true; + this.label46.Location = new System.Drawing.Point(23, 190); + this.label46.Name = "label46"; + this.label46.Size = new System.Drawing.Size(51, 13); + this.label46.TabIndex = 30; + this.label46.Text = "File Path:"; + // + // YndFilePathTextBox + // + this.YndFilePathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YndFilePathTextBox.Location = new System.Drawing.Point(97, 187); + this.YndFilePathTextBox.Name = "YndFilePathTextBox"; + this.YndFilePathTextBox.ReadOnly = true; + this.YndFilePathTextBox.Size = new System.Drawing.Size(450, 20); + this.YndFilePathTextBox.TabIndex = 29; + // + // label47 + // + this.label47.AutoSize = true; + this.label47.Location = new System.Drawing.Point(23, 164); + this.label47.Name = "label47"; + this.label47.Size = new System.Drawing.Size(52, 13); + this.label47.TabIndex = 28; + this.label47.Text = "Rpf Path:"; + // + // YndTotalNodesLabel + // + this.YndTotalNodesLabel.AutoSize = true; + this.YndTotalNodesLabel.Location = new System.Drawing.Point(23, 59); + this.YndTotalNodesLabel.Name = "YndTotalNodesLabel"; + this.YndTotalNodesLabel.Size = new System.Drawing.Size(77, 13); + this.YndTotalNodesLabel.TabIndex = 27; + this.YndTotalNodesLabel.Text = "Total Nodes: 0"; + // + // YndPedNodesUpDown + // + this.YndPedNodesUpDown.Location = new System.Drawing.Point(377, 57); + this.YndPedNodesUpDown.Maximum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.YndPedNodesUpDown.Name = "YndPedNodesUpDown"; + this.YndPedNodesUpDown.Size = new System.Drawing.Size(74, 20); + this.YndPedNodesUpDown.TabIndex = 26; + this.YndPedNodesUpDown.ValueChanged += new System.EventHandler(this.YndPedNodesUpDown_ValueChanged); + // + // label45 + // + this.label45.AutoSize = true; + this.label45.Location = new System.Drawing.Point(308, 59); + this.label45.Name = "label45"; + this.label45.Size = new System.Drawing.Size(63, 13); + this.label45.TabIndex = 25; + this.label45.Text = "Ped Nodes:"; + // + // YndVehicleNodesUpDown + // + this.YndVehicleNodesUpDown.Location = new System.Drawing.Point(206, 57); + this.YndVehicleNodesUpDown.Maximum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.YndVehicleNodesUpDown.Name = "YndVehicleNodesUpDown"; + this.YndVehicleNodesUpDown.Size = new System.Drawing.Size(74, 20); + this.YndVehicleNodesUpDown.TabIndex = 24; + this.YndVehicleNodesUpDown.ValueChanged += new System.EventHandler(this.YndVehicleNodesUpDown_ValueChanged); + // + // label40 + // + this.label40.AutoSize = true; + this.label40.Location = new System.Drawing.Point(121, 59); + this.label40.Name = "label40"; + this.label40.Size = new System.Drawing.Size(79, 13); + this.label40.TabIndex = 23; + this.label40.Text = "Vehicle Nodes:"; + // + // YndAreaIDInfoLabel + // + this.YndAreaIDInfoLabel.AutoSize = true; + this.YndAreaIDInfoLabel.Location = new System.Drawing.Point(271, 20); + this.YndAreaIDInfoLabel.Name = "YndAreaIDInfoLabel"; + this.YndAreaIDInfoLabel.Size = new System.Drawing.Size(30, 13); + this.YndAreaIDInfoLabel.TabIndex = 22; + this.YndAreaIDInfoLabel.Text = "ID: 0"; + // + // label33 + // + this.label33.AutoSize = true; + this.label33.Location = new System.Drawing.Point(45, 20); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(46, 13); + this.label33.TabIndex = 21; + this.label33.Text = "Area ID:"; + // + // YndRpfPathTextBox + // + this.YndRpfPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.YndRpfPathTextBox.Location = new System.Drawing.Point(97, 161); + this.YndRpfPathTextBox.Name = "YndRpfPathTextBox"; + this.YndRpfPathTextBox.ReadOnly = true; + this.YndRpfPathTextBox.Size = new System.Drawing.Size(450, 20); + this.YndRpfPathTextBox.TabIndex = 20; + // + // EditYndPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(574, 499); + this.Controls.Add(this.label88); + this.Controls.Add(this.YndAreaIDYUpDown); + this.Controls.Add(this.label87); + this.Controls.Add(this.YndAreaIDXUpDown); + this.Controls.Add(this.label48); + this.Controls.Add(this.YndProjectPathTextBox); + this.Controls.Add(this.label46); + this.Controls.Add(this.YndFilePathTextBox); + this.Controls.Add(this.label47); + this.Controls.Add(this.YndTotalNodesLabel); + this.Controls.Add(this.YndPedNodesUpDown); + this.Controls.Add(this.label45); + this.Controls.Add(this.YndVehicleNodesUpDown); + this.Controls.Add(this.label40); + this.Controls.Add(this.YndAreaIDInfoLabel); + this.Controls.Add(this.label33); + this.Controls.Add(this.YndRpfPathTextBox); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditYndPanel"; + this.Text = "Edit Ynd"; + ((System.ComponentModel.ISupportInitialize)(this.YndAreaIDYUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.YndAreaIDXUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.YndPedNodesUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.YndVehicleNodesUpDown)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label88; + private System.Windows.Forms.NumericUpDown YndAreaIDYUpDown; + private System.Windows.Forms.Label label87; + private System.Windows.Forms.NumericUpDown YndAreaIDXUpDown; + private System.Windows.Forms.Label label48; + private System.Windows.Forms.TextBox YndProjectPathTextBox; + private System.Windows.Forms.Label label46; + private System.Windows.Forms.TextBox YndFilePathTextBox; + private System.Windows.Forms.Label label47; + private System.Windows.Forms.Label YndTotalNodesLabel; + private System.Windows.Forms.NumericUpDown YndPedNodesUpDown; + private System.Windows.Forms.Label label45; + private System.Windows.Forms.NumericUpDown YndVehicleNodesUpDown; + private System.Windows.Forms.Label label40; + private System.Windows.Forms.Label YndAreaIDInfoLabel; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.TextBox YndRpfPathTextBox; + } +} \ No newline at end of file diff --git a/Project/Panels/EditYndPanel.cs b/Project/Panels/EditYndPanel.cs new file mode 100644 index 0000000..717b444 --- /dev/null +++ b/Project/Panels/EditYndPanel.cs @@ -0,0 +1,157 @@ +using CodeWalker.GameFiles; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditYndPanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public YndFile Ynd { get; set; } + + private bool populatingui = false; + private bool waschanged = false; + + public EditYndPanel(ProjectForm2 projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + } + + public void SetYnd(YndFile ynd) + { + Ynd = ynd; + Tag = ynd; + UpdateFormTitle(); + UpdateYndUI(); + waschanged = ynd?.HasChanged ?? false; + } + + public void UpdateFormTitleYndChanged() + { + bool changed = Ynd.HasChanged; + if (!waschanged && changed) + { + UpdateFormTitle(); + waschanged = true; + } + else if (waschanged && !changed) + { + UpdateFormTitle(); + waschanged = false; + } + } + private void UpdateFormTitle() + { + string fn = Ynd.RpfFileEntry?.Name ?? Ynd.Name; + if (string.IsNullOrEmpty(fn)) fn = "untitled.ynd"; + Text = fn + (Ynd.HasChanged ? "*" : ""); + } + + + public void UpdateYndUI() + { + if (Ynd == null) + { + //YndPanel.Enabled = false; + YndRpfPathTextBox.Text = string.Empty; + YndFilePathTextBox.Text = string.Empty; + YndProjectPathTextBox.Text = string.Empty; + YndAreaIDXUpDown.Value = 0; + YndAreaIDYUpDown.Value = 0; + YndAreaIDInfoLabel.Text = "ID: 0"; + YndTotalNodesLabel.Text = "Total Nodes: 0"; + YndVehicleNodesUpDown.Value = 0; + YndVehicleNodesUpDown.Maximum = 0; + YndPedNodesUpDown.Value = 0; + YndPedNodesUpDown.Maximum = 0; + } + else + { + populatingui = true; + var nd = Ynd.NodeDictionary; + //YndPanel.Enabled = true; + YndRpfPathTextBox.Text = Ynd.RpfFileEntry.Path; + YndFilePathTextBox.Text = Ynd.FilePath; + YndProjectPathTextBox.Text = (Ynd != null) ? ProjectForm.CurrentProjectFile.GetRelativePath(Ynd.FilePath) : Ynd.FilePath; + YndAreaIDXUpDown.Value = Ynd.CellX; + YndAreaIDYUpDown.Value = Ynd.CellY; + YndAreaIDInfoLabel.Text = "ID: " + Ynd.AreaID.ToString(); + YndTotalNodesLabel.Text = "Total Nodes: " + (nd?.NodesCount.ToString() ?? "0"); + YndVehicleNodesUpDown.Maximum = nd?.NodesCount ?? 0; + YndVehicleNodesUpDown.Value = Math.Min(nd?.NodesCountVehicle ?? 0, YndVehicleNodesUpDown.Maximum); + YndPedNodesUpDown.Maximum = nd?.NodesCount ?? 0; + YndPedNodesUpDown.Value = Math.Min(nd?.NodesCountPed ?? 0, YndPedNodesUpDown.Maximum); + populatingui = false; + } + } + + private void YndAreaIDUpDownChange() + { + if (populatingui) return; + if (Ynd == null) return; + int x = (int)YndAreaIDXUpDown.Value; + int y = (int)YndAreaIDYUpDown.Value; + lock (ProjectForm.ProjectSyncRoot) + { + var areaid = y * 32 + x; + if (Ynd.AreaID != areaid) + { + Ynd.AreaID = areaid; + Ynd.Name = "nodes" + areaid.ToString() + ".ynd"; + YndAreaIDInfoLabel.Text = "ID: " + areaid.ToString(); + ProjectForm.SetYndHasChanged(true); + } + } + } + + private void YndAreaIDXUpDown_ValueChanged(object sender, EventArgs e) + { + YndAreaIDUpDownChange(); + } + + private void YndAreaIDYUpDown_ValueChanged(object sender, EventArgs e) + { + YndAreaIDUpDownChange(); + } + + private void YndVehicleNodesUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (Ynd == null) return; + if (Ynd.NodeDictionary == null) return; + lock (ProjectForm.ProjectSyncRoot) + { + var vehnodes = (int)YndVehicleNodesUpDown.Value; + if (Ynd.NodeDictionary.NodesCountVehicle != vehnodes) + { + Ynd.NodeDictionary.NodesCountVehicle = (uint)vehnodes; + ProjectForm.SetYndHasChanged(true); + } + } + } + + private void YndPedNodesUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (Ynd == null) return; + if (Ynd.NodeDictionary == null) return; + lock (ProjectForm.ProjectSyncRoot) + { + var pednodes = (int)YndPedNodesUpDown.Value; + if (Ynd.NodeDictionary.NodesCountPed != pednodes) + { + Ynd.NodeDictionary.NodesCountPed = (uint)pednodes; + ProjectForm.SetYndHasChanged(true); + } + } + } + } +} diff --git a/Project/Panels/EditYndPanel.resx b/Project/Panels/EditYndPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditYndPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditYnvPanel.Designer.cs b/Project/Panels/EditYnvPanel.Designer.cs new file mode 100644 index 0000000..5356664 --- /dev/null +++ b/Project/Panels/EditYnvPanel.Designer.cs @@ -0,0 +1,154 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditYnvPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYnvPanel)); + this.YnvAABBSizeTextBox = new System.Windows.Forms.TextBox(); + this.label91 = new System.Windows.Forms.Label(); + this.label89 = new System.Windows.Forms.Label(); + this.YnvAreaIDYUpDown = new System.Windows.Forms.NumericUpDown(); + this.label90 = new System.Windows.Forms.Label(); + this.YnvAreaIDXUpDown = new System.Windows.Forms.NumericUpDown(); + this.YnvAreaIDInfoLabel = new System.Windows.Forms.Label(); + this.label92 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.YnvAreaIDYUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.YnvAreaIDXUpDown)).BeginInit(); + this.SuspendLayout(); + // + // YnvAABBSizeTextBox + // + this.YnvAABBSizeTextBox.Location = new System.Drawing.Point(110, 66); + this.YnvAABBSizeTextBox.Name = "YnvAABBSizeTextBox"; + this.YnvAABBSizeTextBox.Size = new System.Drawing.Size(138, 20); + this.YnvAABBSizeTextBox.TabIndex = 37; + // + // label91 + // + this.label91.AutoSize = true; + this.label91.Location = new System.Drawing.Point(43, 69); + this.label91.Name = "label91"; + this.label91.Size = new System.Drawing.Size(61, 13); + this.label91.TabIndex = 38; + this.label91.Text = "AABB Size:"; + // + // label89 + // + this.label89.AutoSize = true; + this.label89.Location = new System.Drawing.Point(169, 32); + this.label89.Name = "label89"; + this.label89.Size = new System.Drawing.Size(17, 13); + this.label89.TabIndex = 36; + this.label89.Text = "Y:"; + // + // YnvAreaIDYUpDown + // + this.YnvAreaIDYUpDown.Location = new System.Drawing.Point(192, 30); + this.YnvAreaIDYUpDown.Maximum = new decimal(new int[] { + 31, + 0, + 0, + 0}); + this.YnvAreaIDYUpDown.Name = "YnvAreaIDYUpDown"; + this.YnvAreaIDYUpDown.Size = new System.Drawing.Size(48, 20); + this.YnvAreaIDYUpDown.TabIndex = 35; + // + // label90 + // + this.label90.AutoSize = true; + this.label90.Location = new System.Drawing.Point(87, 32); + this.label90.Name = "label90"; + this.label90.Size = new System.Drawing.Size(17, 13); + this.label90.TabIndex = 34; + this.label90.Text = "X:"; + // + // YnvAreaIDXUpDown + // + this.YnvAreaIDXUpDown.Location = new System.Drawing.Point(110, 30); + this.YnvAreaIDXUpDown.Maximum = new decimal(new int[] { + 31, + 0, + 0, + 0}); + this.YnvAreaIDXUpDown.Name = "YnvAreaIDXUpDown"; + this.YnvAreaIDXUpDown.Size = new System.Drawing.Size(48, 20); + this.YnvAreaIDXUpDown.TabIndex = 33; + // + // YnvAreaIDInfoLabel + // + this.YnvAreaIDInfoLabel.AutoSize = true; + this.YnvAreaIDInfoLabel.Location = new System.Drawing.Point(257, 32); + this.YnvAreaIDInfoLabel.Name = "YnvAreaIDInfoLabel"; + this.YnvAreaIDInfoLabel.Size = new System.Drawing.Size(30, 13); + this.YnvAreaIDInfoLabel.TabIndex = 32; + this.YnvAreaIDInfoLabel.Text = "ID: 0"; + // + // label92 + // + this.label92.AutoSize = true; + this.label92.Location = new System.Drawing.Point(31, 32); + this.label92.Name = "label92"; + this.label92.Size = new System.Drawing.Size(46, 13); + this.label92.TabIndex = 31; + this.label92.Text = "Area ID:"; + // + // EditYnvPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(513, 427); + this.Controls.Add(this.YnvAABBSizeTextBox); + this.Controls.Add(this.label91); + this.Controls.Add(this.label89); + this.Controls.Add(this.YnvAreaIDYUpDown); + this.Controls.Add(this.label90); + this.Controls.Add(this.YnvAreaIDXUpDown); + this.Controls.Add(this.YnvAreaIDInfoLabel); + this.Controls.Add(this.label92); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditYnvPanel"; + this.Text = "Edit Ynv"; + ((System.ComponentModel.ISupportInitialize)(this.YnvAreaIDYUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.YnvAreaIDXUpDown)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox YnvAABBSizeTextBox; + private System.Windows.Forms.Label label91; + private System.Windows.Forms.Label label89; + private System.Windows.Forms.NumericUpDown YnvAreaIDYUpDown; + private System.Windows.Forms.Label label90; + private System.Windows.Forms.NumericUpDown YnvAreaIDXUpDown; + private System.Windows.Forms.Label YnvAreaIDInfoLabel; + private System.Windows.Forms.Label label92; + } +} \ No newline at end of file diff --git a/Project/Panels/EditYnvPanel.cs b/Project/Panels/EditYnvPanel.cs new file mode 100644 index 0000000..4307406 --- /dev/null +++ b/Project/Panels/EditYnvPanel.cs @@ -0,0 +1,64 @@ +using CodeWalker.GameFiles; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditYnvPanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public YnvFile Ynv { get; set; } + + //private bool populatingui = false; + private bool waschanged = false; + + public EditYnvPanel(ProjectForm2 projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + } + + public void SetYnv(YnvFile ynv) + { + Ynv = ynv; + Tag = ynv; + UpdateFormTitle(); + UpdateYnvUI(); + waschanged = ynv?.HasChanged ?? false; + } + + public void UpdateFormTitleYnvChanged() + { + bool changed = Ynv.HasChanged; + if (!waschanged && changed) + { + UpdateFormTitle(); + waschanged = true; + } + else if (waschanged && !changed) + { + UpdateFormTitle(); + waschanged = false; + } + } + private void UpdateFormTitle() + { + string fn = Ynv.RpfFileEntry?.Name ?? Ynv.Name; + if (string.IsNullOrEmpty(fn)) fn = "untitled.ynv"; + Text = fn + (Ynv.HasChanged ? "*" : ""); + } + + + public void UpdateYnvUI() + { + } + + } +} diff --git a/Project/Panels/EditYnvPanel.resx b/Project/Panels/EditYnvPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditYnvPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditYnvPolyPanel.Designer.cs b/Project/Panels/EditYnvPolyPanel.Designer.cs new file mode 100644 index 0000000..5c06460 --- /dev/null +++ b/Project/Panels/EditYnvPolyPanel.Designer.cs @@ -0,0 +1,62 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditYnvPolyPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYnvPolyPanel)); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(48, 56); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(121, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Nav Poly editing TODO!"; + // + // EditYnvPolyPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(557, 396); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditYnvPolyPanel"; + this.Text = "Edit Ynv Poly"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/Project/Panels/EditYnvPolyPanel.cs b/Project/Panels/EditYnvPolyPanel.cs new file mode 100644 index 0000000..168010b --- /dev/null +++ b/Project/Panels/EditYnvPolyPanel.cs @@ -0,0 +1,46 @@ +using CodeWalker.GameFiles; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditYnvPolyPanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public YnvPoly YnvPoly { get; set; } + + //private bool populatingui = false; + + public EditYnvPolyPanel(ProjectForm2 projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + } + + public void SetYnvPoly(YnvPoly ynvPoly) + { + YnvPoly = ynvPoly; + Tag = ynvPoly; + UpdateFormTitle(); + UpdateYnvUI(); + } + + private void UpdateFormTitle() + { + Text = "Nav Poly " + YnvPoly.Index.ToString(); + } + + + public void UpdateYnvUI() + { + } + + } +} diff --git a/Project/Panels/EditYnvPolyPanel.resx b/Project/Panels/EditYnvPolyPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditYnvPolyPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditYtypPanel.Designer.cs b/Project/Panels/EditYtypPanel.Designer.cs new file mode 100644 index 0000000..8b545b4 --- /dev/null +++ b/Project/Panels/EditYtypPanel.Designer.cs @@ -0,0 +1,62 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditYtypPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYtypPanel)); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(58, 52); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(99, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Ytyp editing TODO!"; + // + // EditYtypPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(469, 292); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditYtypPanel"; + this.Text = "Edit Ytyp"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/Project/Panels/EditYtypPanel.cs b/Project/Panels/EditYtypPanel.cs new file mode 100644 index 0000000..0a34f1a --- /dev/null +++ b/Project/Panels/EditYtypPanel.cs @@ -0,0 +1,63 @@ +using CodeWalker.GameFiles; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditYtypPanel : ProjectPanel + { + public ProjectForm2 ProjectForm; + public YtypFile Ytyp { get; set; } + + //private bool populatingui = false; + private bool waschanged = false; + + public EditYtypPanel(ProjectForm2 projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + } + + public void SetYtyp(YtypFile ytyp) + { + Ytyp = ytyp; + Tag = ytyp; + UpdateFormTitle(); + UpdateYtypUI(); + waschanged = ytyp?.HasChanged ?? false; + } + + public void UpdateFormTitleYtypChanged() + { + bool changed = Ytyp.HasChanged; + if (!waschanged && changed) + { + UpdateFormTitle(); + waschanged = true; + } + else if (waschanged && !changed) + { + UpdateFormTitle(); + waschanged = false; + } + } + private void UpdateFormTitle() + { + string fn = Ytyp.RpfFileEntry?.Name ?? Ytyp.Name; + if (string.IsNullOrEmpty(fn)) fn = "untitled.ytyp"; + Text = fn + (Ytyp.HasChanged ? "*" : ""); + } + + + public void UpdateYtypUI() + { + } + } +} diff --git a/Project/Panels/EditYtypPanel.resx b/Project/Panels/EditYtypPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditYtypPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/ProjectExplorerPanel.Designer.cs b/Project/Panels/ProjectExplorerPanel.Designer.cs new file mode 100644 index 0000000..5bebe08 --- /dev/null +++ b/Project/Panels/ProjectExplorerPanel.Designer.cs @@ -0,0 +1,71 @@ +namespace CodeWalker.Project.Panels +{ + partial class ProjectExplorerPanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProjectExplorerPanel)); + this.ProjectTreeView = new System.Windows.Forms.TreeView(); + this.SuspendLayout(); + // + // ProjectTreeView + // + this.ProjectTreeView.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ProjectTreeView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProjectTreeView.FullRowSelect = true; + this.ProjectTreeView.HideSelection = false; + this.ProjectTreeView.Location = new System.Drawing.Point(0, 0); + this.ProjectTreeView.Name = "ProjectTreeView"; + this.ProjectTreeView.ShowLines = false; + this.ProjectTreeView.ShowRootLines = false; + this.ProjectTreeView.Size = new System.Drawing.Size(270, 559); + this.ProjectTreeView.TabIndex = 0; + this.ProjectTreeView.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.ProjectTreeView_BeforeCollapse); + this.ProjectTreeView.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.ProjectTreeView_BeforeExpand); + this.ProjectTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.ProjectTreeView_AfterSelect); + this.ProjectTreeView.DoubleClick += new System.EventHandler(this.ProjectTreeView_DoubleClick); + this.ProjectTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ProjectTreeView_MouseDown); + // + // ProjectExplorerPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(270, 559); + this.Controls.Add(this.ProjectTreeView); + this.HideOnClose = true; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ProjectExplorerPanel"; + this.Text = "Project Explorer"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TreeView ProjectTreeView; + } +} \ No newline at end of file diff --git a/Project/Panels/ProjectExplorerPanel.cs b/Project/Panels/ProjectExplorerPanel.cs new file mode 100644 index 0000000..93cf354 --- /dev/null +++ b/Project/Panels/ProjectExplorerPanel.cs @@ -0,0 +1,880 @@ +using CodeWalker.GameFiles; +using CodeWalker.World; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using WeifenLuo.WinFormsUI.Docking; + +namespace CodeWalker.Project.Panels +{ + public partial class ProjectExplorerPanel : ProjectPanel + { + public ProjectForm2 ProjectForm { get; set; } + public ProjectFile CurrentProjectFile { get; set; } + + private bool inDoubleClick = false; //used in disabling double-click to expand tree nodes + + public ProjectExplorerPanel(ProjectForm2 projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + } + + public override void SetTheme(ThemeBase theme) + { + base.SetTheme(theme); + if (theme is VS2015DarkTheme) + { + ProjectTreeView.BackColor = theme.ColorPalette.MainWindowActive.Background; + ProjectTreeView.ForeColor = Color.White; + ProjectTreeView.LineColor = Color.White; + } + else + { + ProjectTreeView.BackColor = SystemColors.Window; + ProjectTreeView.ForeColor = SystemColors.WindowText; + ProjectTreeView.LineColor = Color.Black; + } + } + + + + public void LoadProjectTree(ProjectFile projectFile) + { + ProjectTreeView.Nodes.Clear(); + + CurrentProjectFile = projectFile; + if (CurrentProjectFile == null) return; + + var pcstr = CurrentProjectFile.HasChanged ? "*" : ""; + + var projnode = ProjectTreeView.Nodes.Add(pcstr + CurrentProjectFile.Name); + projnode.Tag = CurrentProjectFile; + + + if (CurrentProjectFile.YmapFiles.Count > 0) + { + var ymapsnode = projnode.Nodes.Add("Ymap Files"); + ymapsnode.Name = "Ymap"; + + foreach (var ymapfile in CurrentProjectFile.YmapFiles) + { + var ycstr = ymapfile.HasChanged ? "*" : ""; + string name = ymapfile.Name; + if (ymapfile.RpfFileEntry != null) + { + name = ymapfile.RpfFileEntry.Name; + } + var ymapnode = ymapsnode.Nodes.Add(ycstr + name); + ymapnode.Tag = ymapfile; + + LoadYmapTreeNodes(ymapfile, ymapnode); + + JenkIndex.Ensure(name); + JenkIndex.Ensure(Path.GetFileNameWithoutExtension(name)); + } + ymapsnode.Expand(); + } + + if (CurrentProjectFile.YtypFiles.Count > 0) + { + var ytypsnode = projnode.Nodes.Add("Ytyp Files"); + ytypsnode.Name = "Ytyp"; + + foreach (var ytypfile in CurrentProjectFile.YtypFiles) + { + var ycstr = ytypfile.HasChanged ? "*" : ""; + string name = ytypfile.Name; + if (ytypfile.RpfFileEntry != null) + { + name = ytypfile.RpfFileEntry.Name; + } + var ytypnode = ytypsnode.Nodes.Add(ycstr + name); + ytypnode.Tag = ytypfile; + + LoadYtypTreeNodes(ytypfile, ytypnode); + + JenkIndex.Ensure(name); + JenkIndex.Ensure(Path.GetFileNameWithoutExtension(name)); + } + ytypsnode.Expand(); + } + + if (CurrentProjectFile.YndFiles.Count > 0) + { + var yndsnode = projnode.Nodes.Add("Ynd Files"); + yndsnode.Name = "Ynd"; + + foreach (var yndfile in CurrentProjectFile.YndFiles) + { + var ycstr = yndfile.HasChanged ? "*" : ""; + string name = yndfile.Name; + if (yndfile.RpfFileEntry != null) + { + name = yndfile.RpfFileEntry.Name; + } + var yndnode = yndsnode.Nodes.Add(ycstr + name); + yndnode.Tag = yndfile; + + LoadYndTreeNodes(yndfile, yndnode); + } + yndsnode.Expand(); + } + + if (CurrentProjectFile.YnvFiles.Count > 0) + { + var ynvsnode = projnode.Nodes.Add("Ynv Files"); + ynvsnode.Name = "Ynv"; + + foreach (var ynvfile in CurrentProjectFile.YnvFiles) + { + var ycstr = ynvfile.HasChanged ? "*" : ""; + string name = ynvfile.Name; + if (ynvfile.RpfFileEntry != null) + { + name = ynvfile.RpfFileEntry.Name; + } + var ynvnode = ynvsnode.Nodes.Add(ycstr + name); + ynvnode.Tag = ynvfile; + + LoadYnvTreeNodes(ynvfile, ynvnode); + } + ynvsnode.Expand(); + } + + if (CurrentProjectFile.TrainsFiles.Count > 0) + { + var trainsnode = projnode.Nodes.Add("Trains Files"); + trainsnode.Name = "Trains"; + + foreach (var trainfile in CurrentProjectFile.TrainsFiles) + { + var tcstr = trainfile.HasChanged ? "*" : ""; + string name = trainfile.Name; + if (trainfile.RpfFileEntry != null) + { + name = trainfile.RpfFileEntry.Name; + } + var trainnode = trainsnode.Nodes.Add(tcstr + name); + trainnode.Tag = trainfile; + + LoadTrainTrackTreeNodes(trainfile, trainnode); + } + trainsnode.Expand(); + } + + if (CurrentProjectFile.ScenarioFiles.Count > 0) + { + var scenariosnode = projnode.Nodes.Add("Scenario Files"); + scenariosnode.Name = "Scenarios"; + + foreach (var scenariofile in CurrentProjectFile.ScenarioFiles) + { + var scstr = scenariofile.HasChanged ? "*" : ""; + string name = scenariofile.Name; + if (scenariofile.RpfFileEntry != null) + { + name = scenariofile.RpfFileEntry.Name; + } + var scenarionode = scenariosnode.Nodes.Add(scstr + name); + scenarionode.Tag = scenariofile; + + LoadScenarioTreeNodes(scenariofile, scenarionode); + } + scenariosnode.Expand(); + } + + projnode.Expand(); + + } + + private void LoadYmapTreeNodes(YmapFile ymap, TreeNode node) + { + if (ymap == null) return; + + if (!string.IsNullOrEmpty(node.Name)) return; //named nodes are eg Entities and CarGens + + node.Nodes.Clear(); + + if ((ymap.AllEntities != null) && (ymap.AllEntities.Length > 0)) + { + var entsnode = node.Nodes.Add("Entities (" + ymap.AllEntities.Length.ToString() + ")"); + entsnode.Name = "Entities"; + entsnode.Tag = ymap; + var ents = ymap.AllEntities; + for (int i = 0; i < ents.Length; i++) + { + var ent = ents[i]; + var edef = ent.CEntityDef; + var enode = entsnode.Nodes.Add(edef.archetypeName.ToString()); + enode.Tag = ent; + } + } + if ((ymap.CarGenerators != null) && (ymap.CarGenerators.Length > 0)) + { + var cargensnode = node.Nodes.Add("Car Generators (" + ymap.CarGenerators.Length.ToString() + ")"); + cargensnode.Name = "CarGens"; + cargensnode.Tag = ymap; + var cargens = ymap.CarGenerators; + for (int i = 0; i < cargens.Length; i++) + { + var cargen = cargens[i]; + var ccgnode = cargensnode.Nodes.Add(cargen.ToString()); + ccgnode.Tag = cargen; + } + } + if ((ymap.GrassInstanceBatches != null) && (ymap.GrassInstanceBatches.Length > 0)) + { + var grassbatchesnodes = node.Nodes.Add("Grass Batches (" + ymap.GrassInstanceBatches.Length.ToString() + ")"); + grassbatchesnodes.Name = "GrassBatches"; + grassbatchesnodes.Tag = ymap; + var grassbatches = ymap.GrassInstanceBatches; + for (int i = 0; i < grassbatches.Length; i++) + { + var batch = grassbatches[i]; + var gbnode = grassbatchesnodes.Nodes.Add(batch.ToString()); + gbnode.Tag = batch; + } + } + + } + private void LoadYtypTreeNodes(YtypFile ytyp, TreeNode node)//TODO! + { + } + private void LoadYndTreeNodes(YndFile ynd, TreeNode node) + { + if (ynd == null) return; + + if (!string.IsNullOrEmpty(node.Name)) return; //named nodes are eg Nodes + + node.Nodes.Clear(); + + + + if ((ynd.Nodes != null) && (ynd.Nodes.Length > 0)) + { + var nodesnode = node.Nodes.Add("Nodes (" + ynd.Nodes.Length.ToString() + ")"); + nodesnode.Name = "Nodes"; + nodesnode.Tag = ynd; + var nodes = ynd.Nodes; + for (int i = 0; i < nodes.Length; i++) + { + var ynode = nodes[i]; + var nnode = ynode.RawData; + var tnode = nodesnode.Nodes.Add(nnode.ToString()); + tnode.Tag = ynode; + } + } + + } + private void LoadYnvTreeNodes(YnvFile ynv, TreeNode node)//TODO! + { + } + private void LoadTrainTrackTreeNodes(TrainTrack track, TreeNode node) + { + if (track == null) return; + + if (!string.IsNullOrEmpty(node.Name)) return; //named nodes are eg Nodes + + node.Nodes.Clear(); + + + + if ((track.Nodes != null) && (track.Nodes.Count > 0)) + { + var nodesnode = node.Nodes.Add("Nodes (" + track.Nodes.Count.ToString() + ")"); + nodesnode.Name = "Nodes"; + nodesnode.Tag = track; + var nodes = track.Nodes; + for (int i = 0; i < nodes.Count; i++) + { + var ynode = nodes[i]; + var tnode = nodesnode.Nodes.Add(ynode.ToString()); + tnode.Tag = ynode; + } + } + + } + private void LoadScenarioTreeNodes(YmtFile ymt, TreeNode node) + { + if (!string.IsNullOrEmpty(node.Name)) return; //named nodes are eg Points + + node.Nodes.Clear(); + + var region = ymt?.ScenarioRegion; + + if (region == null) return; + + var nodes = region.Nodes; + if ((nodes == null) || (nodes.Count == 0)) return; + + var pointsnode = node.Nodes.Add("Points (" + nodes.Count.ToString() + ")"); + pointsnode.Name = "Points"; + pointsnode.Tag = ymt; + for (int i = 0; i < nodes.Count; i++) + { + var snode = nodes[i]; + var tnode = pointsnode.Nodes.Add(snode.MedTypeName + ": " + snode.StringText); + tnode.Tag = snode; + } + + //var sr = region.Region; + //if (sr == null) return; + //int pointCount = (sr.Points?.LoadSavePoints?.Length ?? 0) + (sr.Points?.MyPoints?.Length ?? 0); + //int entityOverrideCount = (sr.EntityOverrides?.Length ?? 0); + //int chainCount = (sr.Paths?.Chains?.Length ?? 0); + //int clusterCount = (sr.Clusters?.Length ?? 0); + //TreeNode pointsNode = null; + //TreeNode entityOverridesNode = null; + //TreeNode chainsNode = null; + //TreeNode clustersNode = null; + //if (pointCount > 0) + //{ + // pointsNode = node.Nodes.Add("Points (" + pointCount.ToString() + ")"); + //} + //if (entityOverrideCount > 0) + //{ + // entityOverridesNode = node.Nodes.Add("Entity Overrides (" + entityOverrideCount.ToString() + ")"); + //} + //if (chainCount > 0) + //{ + // chainsNode = node.Nodes.Add("Chains (" + chainsNode.ToString() + ")"); + //} + //if (clusterCount > 0) + //{ + // clustersNode = node.Nodes.Add("Clusters (" + clusterCount.ToString() + ")"); + //} + //for (int i = 0; i < nodes.Count; i++) + //{ + // var snode = nodes[i]; + // if (snode == null) continue; + // if ((pointsNode != null) && ((snode.LoadSavePoint != null) || (snode.MyPoint != null))) + // { + // pointsNode.Nodes.Add(snode.ToString()).Tag = snode; + // } + // if ((entityOverridesNode != null) && ((snode.EntityOverride != null) || (snode.EntityPoint != null))) + // { + // entityOverridesNode.Nodes.Add(snode.ToString()).Tag = snode; + // } + // if ((chainsNode != null) && (snode.ChainingNode != null)) + // { + // chainsNode.Nodes.Add(snode.ToString()).Tag = snode; + // } + // if ((clustersNode != null) && ((snode.Cluster != null) || (snode.ClusterLoadSavePoint != null) || (snode.ClusterMyPoint != null))) + // { + // clustersNode.Nodes.Add(snode.ToString()).Tag = snode; + // } + //} + + } + + + + public void SetProjectHasChanged(bool changed) + { + if ((ProjectTreeView.Nodes.Count > 0) && (CurrentProjectFile != null)) + { + //first node is the project... + string changestr = changed ? "*" : ""; + ProjectTreeView.Nodes[0].Text = changestr + CurrentProjectFile.Name; + } + } + public void SetYmapHasChanged(YmapFile ymap, bool changed) + { + if (ProjectTreeView.Nodes.Count > 0) + { + var pnode = ProjectTreeView.Nodes[0]; + var ymnode = GetChildTreeNode(pnode, "Ymap"); + if (ymnode == null) return; + string changestr = changed ? "*" : ""; + for (int i = 0; i < ymnode.Nodes.Count; i++) + { + var ynode = ymnode.Nodes[i]; + if (ynode.Tag == ymap) + { + string name = ymap.Name; + if (ymap.RpfFileEntry != null) + { + name = ymap.RpfFileEntry.Name; + } + ynode.Text = changestr + name; + break; + } + } + } + } + public void SetYtypHasChanged(YtypFile ytyp, bool changed) + { + if (ProjectTreeView.Nodes.Count > 0) + { + var pnode = ProjectTreeView.Nodes[0]; + var ytnode = GetChildTreeNode(pnode, "Ytyp"); + if (ytnode == null) return; + string changestr = changed ? "*" : ""; + for (int i = 0; i < ytnode.Nodes.Count; i++) + { + var ynode = ytnode.Nodes[i]; + if (ynode.Tag == ytyp) + { + string name = ytyp.Name; + if (ytyp.RpfFileEntry != null) + { + name = ytyp.RpfFileEntry.Name; + } + ynode.Text = changestr + name; + break; + } + } + } + } + public void SetYndHasChanged(YndFile ynd, bool changed) + { + if (ProjectTreeView.Nodes.Count > 0) + { + var pnode = ProjectTreeView.Nodes[0]; + var ynnode = GetChildTreeNode(pnode, "Ynd"); + if (ynnode == null) return; + string changestr = changed ? "*" : ""; + for (int i = 0; i < ynnode.Nodes.Count; i++) + { + var ynode = ynnode.Nodes[i]; + if (ynode.Tag == ynd) + { + string name = ynd.Name; + if (ynd.RpfFileEntry != null) + { + name = ynd.RpfFileEntry.Name; + } + ynode.Text = changestr + name; + break; + } + } + } + } + public void SetYnvHasChanged(YnvFile ynv, bool changed)//TODO! + { + } + public void SetTrainTrackHasChanged(TrainTrack track, bool changed) + { + if (ProjectTreeView.Nodes.Count > 0) + { + var pnode = ProjectTreeView.Nodes[0]; + var trnode = GetChildTreeNode(pnode, "Trains"); + if (trnode == null) return; + string changestr = changed ? "*" : ""; + for (int i = 0; i < trnode.Nodes.Count; i++) + { + var tnode = trnode.Nodes[i]; + if (tnode.Tag == track) + { + string name = track.Name; + if (track.RpfFileEntry != null) + { + name = track.RpfFileEntry.Name; + } + tnode.Text = changestr + name; + break; + } + } + } + } + public void SetScenarioHasChanged(YmtFile scenario, bool changed) + { + if (ProjectTreeView.Nodes.Count > 0) + { + var pnode = ProjectTreeView.Nodes[0]; + var scnode = GetChildTreeNode(pnode, "Scenarios"); + if (scnode == null) return; + string changestr = changed ? "*" : ""; + for (int i = 0; i < scnode.Nodes.Count; i++) + { + var snode = scnode.Nodes[i]; + if (snode.Tag == scenario) + { + string name = scenario.Name; + if (scenario.RpfFileEntry != null) + { + name = scenario.RpfFileEntry.Name; + } + snode.Text = changestr + name; + break; + } + } + } + } + + + + + + + + + + private TreeNode GetChildTreeNode(TreeNode node, string name) + { + if (node == null) return null; + var nodes = node.Nodes.Find(name, false); + if ((nodes == null) || (nodes.Length != 1)) return null; + return nodes[0]; + } + public TreeNode FindYmapTreeNode(YmapFile ymap) + { + if (ProjectTreeView.Nodes.Count <= 0) return null; + var projnode = ProjectTreeView.Nodes[0]; + var ymapsnode = GetChildTreeNode(projnode, "Ymap"); + if (ymapsnode == null) return null; + for (int i = 0; i < ymapsnode.Nodes.Count; i++) + { + var ymapnode = ymapsnode.Nodes[i]; + if (ymapnode.Tag == ymap) return ymapnode; + } + return null; + } + public TreeNode FindEntityTreeNode(YmapEntityDef ent) + { + if (ent == null) return null; + TreeNode ymapnode = FindYmapTreeNode(ent.Ymap); + if (ymapnode == null) return null; + var entsnode = GetChildTreeNode(ymapnode, "Entities"); + if (entsnode == null) return null; + for (int i = 0; i < entsnode.Nodes.Count; i++) + { + TreeNode entnode = entsnode.Nodes[i]; + if (entnode.Tag == ent) return entnode; + } + return null; + } + public TreeNode FindCarGenTreeNode(YmapCarGen cargen) + { + if (cargen == null) return null; + TreeNode ymapnode = FindYmapTreeNode(cargen.Ymap); + if (ymapnode == null) return null; + var cargensnode = GetChildTreeNode(ymapnode, "CarGens"); + if (cargensnode == null) return null; + for (int i = 0; i < cargensnode.Nodes.Count; i++) + { + TreeNode cargennode = cargensnode.Nodes[i]; + if (cargennode.Tag == cargen) return cargennode; + } + return null; + } + public TreeNode FindYndTreeNode(YndFile ynd) + { + if (ProjectTreeView.Nodes.Count <= 0) return null; + var projnode = ProjectTreeView.Nodes[0]; + var yndsnode = GetChildTreeNode(projnode, "Ynd"); + if (yndsnode == null) return null; + for (int i = 0; i < yndsnode.Nodes.Count; i++) + { + var yndnode = yndsnode.Nodes[i]; + if (yndnode.Tag == ynd) return yndnode; + } + return null; + } + public TreeNode FindPathNodeTreeNode(YndNode n) + { + if (n == null) return null; + TreeNode yndnode = FindYndTreeNode(n.Ynd); + var nodesnode = GetChildTreeNode(yndnode, "Nodes"); + if (nodesnode == null) return null; + for (int i = 0; i < nodesnode.Nodes.Count; i++) + { + TreeNode nnode = nodesnode.Nodes[i]; + if (nnode.Tag == n) return nnode; + } + return null; + } + public TreeNode FindYnvTreeNode(YnvFile ynv) + { + if (ProjectTreeView.Nodes.Count <= 0) return null; + var projnode = ProjectTreeView.Nodes[0]; + var ynvsnode = GetChildTreeNode(projnode, "Ynv"); + if (ynvsnode == null) return null; + for (int i = 0; i < ynvsnode.Nodes.Count; i++) + { + var yndnode = ynvsnode.Nodes[i]; + if (yndnode.Tag == ynv) return yndnode; + } + return null; + } + public TreeNode FindNavPolyTreeNode(YnvPoly p) + { + if (p == null) return null; + TreeNode ynvnode = FindYnvTreeNode(p.Ynv); + var polysnode = GetChildTreeNode(ynvnode, "Polygons"); + if (polysnode == null) return null; + for (int i = 0; i < polysnode.Nodes.Count; i++) + { + TreeNode pnode = polysnode.Nodes[i]; + if (pnode.Tag == p) return pnode; + } + return null; + } + public TreeNode FindTrainTrackTreeNode(TrainTrack track) + { + if (ProjectTreeView.Nodes.Count <= 0) return null; + var projnode = ProjectTreeView.Nodes[0]; + var trainsnode = GetChildTreeNode(projnode, "Trains"); + if (trainsnode == null) return null; + for (int i = 0; i < trainsnode.Nodes.Count; i++) + { + var trainnode = trainsnode.Nodes[i]; + if (trainnode.Tag == track) return trainnode; + } + return null; + } + public TreeNode FindTrainNodeTreeNode(TrainTrackNode n) + { + if (n == null) return null; + TreeNode tracknode = FindTrainTrackTreeNode(n.Track); + var nodesnode = GetChildTreeNode(tracknode, "Nodes"); + if (nodesnode == null) return null; + for (int i = 0; i < nodesnode.Nodes.Count; i++) + { + TreeNode nnode = nodesnode.Nodes[i]; + if (nnode.Tag == n) return nnode; + } + return null; + } + public TreeNode FindScenarioTreeNode(YmtFile ymt) + { + if (ProjectTreeView.Nodes.Count <= 0) return null; + var projnode = ProjectTreeView.Nodes[0]; + var scenariosnode = GetChildTreeNode(projnode, "Scenarios"); + if (scenariosnode == null) return null; + for (int i = 0; i < scenariosnode.Nodes.Count; i++) + { + var ymtnode = scenariosnode.Nodes[i]; + if (ymtnode.Tag == ymt) return ymtnode; + } + return null; + } + public TreeNode FindScenarioNodeTreeNode(ScenarioNode p) + { + if (p == null) return null; + TreeNode ymtnode = FindScenarioTreeNode(p.Ymt); + var pointsnode = GetChildTreeNode(ymtnode, "Points"); + if (pointsnode == null) return null; + for (int i = 0; i < pointsnode.Nodes.Count; i++) + { + TreeNode pnode = pointsnode.Nodes[i]; + if (pnode.Tag == p) return pnode; + } + return null; + } + + + + + + public void DeselectNode() + { + ProjectTreeView.SelectedNode = null; + } + public void TrySelectEntityTreeNode(YmapEntityDef ent) + { + TreeNode entnode = FindEntityTreeNode(ent); + if (entnode != null) + { + ProjectTreeView.SelectedNode = entnode; + } + } + public void TrySelectCarGenTreeNode(YmapCarGen cargen) + { + TreeNode cargennode = FindCarGenTreeNode(cargen); + if (cargennode != null) + { + ProjectTreeView.SelectedNode = cargennode; + } + } + public void TrySelectPathNodeTreeNode(YndNode node) + { + TreeNode tnode = FindPathNodeTreeNode(node); + if (tnode == null) + { + tnode = FindYndTreeNode(node?.Ynd); + } + if (tnode != null) + { + ProjectTreeView.SelectedNode = tnode; + } + } + public void TrySelectNavPolyTreeNode(YnvPoly poly) + { + TreeNode tnode = FindNavPolyTreeNode(poly); + if (tnode == null) + { + tnode = FindYnvTreeNode(poly?.Ynv); + } + if (tnode != null) + { + ProjectTreeView.SelectedNode = tnode; + } + } + public void TrySelectTrainNodeTreeNode(TrainTrackNode node) + { + TreeNode tnode = FindTrainNodeTreeNode(node); + if (tnode == null) + { + tnode = FindTrainTrackTreeNode(node?.Track); + } + if (tnode != null) + { + ProjectTreeView.SelectedNode = tnode; + } + } + public void TrySelectScenarioTreeNode(YmtFile scenario) + { + TreeNode tnode = FindScenarioTreeNode(scenario); + if (tnode != null) + { + ProjectTreeView.SelectedNode = tnode; + } + } + public void TrySelectScenarioNodeTreeNode(ScenarioNode node) + { + TreeNode tnode = FindScenarioNodeTreeNode(node); + if (tnode == null) + { + tnode = FindScenarioTreeNode(node?.Ymt); + } + if (tnode != null) + { + ProjectTreeView.SelectedNode = tnode; + } + } + + public void UpdateCarGenTreeNode(YmapCarGen cargen) + { + var tn = FindCarGenTreeNode(cargen); + if (tn != null) + { + tn.Text = cargen.ToString(); + } + } + public void UpdatePathNodeTreeNode(YndNode node) + { + var tn = FindPathNodeTreeNode(node); + if (tn != null) + { + tn.Text = node._RawData.ToString(); + } + } + public void UpdateNavPolyTreeNode(YnvPoly poly) + { + var tn = FindNavPolyTreeNode(poly); + if (tn != null) + { + tn.Text = poly._RawData.ToString(); + } + } + public void UpdateTrainNodeTreeNode(TrainTrackNode node) + { + var tn = FindTrainNodeTreeNode(node); + if (tn != null) + { + tn.Text = node.ToString(); + } + } + public void UpdateScenarioNodeTreeNode(ScenarioNode node) + { + var tn = FindScenarioNodeTreeNode(node); + if (tn != null) + { + tn.Text = node.MedTypeName + ": " + node.StringText; + } + } + + public void RemoveEntityTreeNode(YmapEntityDef ent) + { + var tn = FindEntityTreeNode(ent); + if ((tn != null) && (tn.Parent != null)) + { + tn.Parent.Text = "Entities (" + ent.Ymap.AllEntities.Length.ToString() + ")"; + tn.Parent.Nodes.Remove(tn); + } + } + public void RemoveCarGenTreeNode(YmapCarGen cargen) + { + var tn = FindCarGenTreeNode(cargen); + if ((tn != null) && (tn.Parent != null)) + { + tn.Parent.Text = "Car Generators (" + cargen.Ymap.CarGenerators.Length.ToString() + ")"; + tn.Parent.Nodes.Remove(tn); + } + } + public void RemovePathNodeTreeNode(YndNode node) + { + var tn = FindPathNodeTreeNode(node); + if ((tn != null) && (tn.Parent != null)) + { + tn.Parent.Text = "Nodes (" + node.Ynd.Nodes.Length.ToString() + ")"; + tn.Parent.Nodes.Remove(tn); + } + } + public void RemoveTrainNodeTreeNode(TrainTrackNode node) + { + var tn = FindTrainNodeTreeNode(node); + if ((tn != null) && (tn.Parent != null)) + { + tn.Parent.Text = "Nodes (" + node.Track.Nodes.Count.ToString() + ")"; + tn.Parent.Nodes.Remove(tn); + } + } + public void RemoveScenarioNodeTreeNode(ScenarioNode node) + { + var tn = FindScenarioNodeTreeNode(node); + if ((tn != null) && (tn.Parent != null)) + { + tn.Parent.Text = "Points (" + (node.Ymt?.ScenarioRegion?.Nodes?.Count ?? 0).ToString() + ")"; + tn.Parent.Nodes.Remove(tn); + } + } + + + + + + public event ProjectExplorerItemSelectHandler OnItemSelected; + public event ProjectExplorerItemActivateHandler OnItemActivated; + + + + private void ProjectTreeView_AfterSelect(object sender, TreeViewEventArgs e) + { + OnItemSelected?.Invoke(ProjectTreeView.SelectedNode?.Tag); + } + private void ProjectTreeView_DoubleClick(object sender, EventArgs e) + { + if (ProjectTreeView.SelectedNode != null) + { + OnItemActivated?.Invoke(ProjectTreeView.SelectedNode.Tag); + } + } + + private void ProjectTreeView_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + //if (e.Node.Tag != CurrentProjectFile) return; //disabling doubleclick expand/collapse only for project node + if (inDoubleClick == true && e.Action == TreeViewAction.Collapse) e.Cancel = true; + } + private void ProjectTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) + { + //if (e.Node.Tag != CurrentProjectFile) return; //disabling doubleclick expand/collapse only for project node + if (inDoubleClick == true && e.Action == TreeViewAction.Expand) e.Cancel = true; + } + private void ProjectTreeView_MouseDown(object sender, MouseEventArgs e) + { + inDoubleClick = (e.Clicks > 1); //disabling doubleclick expand/collapse + } + } + public delegate void ProjectExplorerItemSelectHandler(object item); + public delegate void ProjectExplorerItemActivateHandler(object item); +} diff --git a/Project/Panels/ProjectExplorerPanel.resx b/Project/Panels/ProjectExplorerPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/ProjectExplorerPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/WelcomePanel.Designer.cs b/Project/Panels/WelcomePanel.Designer.cs new file mode 100644 index 0000000..70febbf --- /dev/null +++ b/Project/Panels/WelcomePanel.Designer.cs @@ -0,0 +1,77 @@ +namespace CodeWalker.Project.Panels +{ + partial class WelcomePanel + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WelcomePanel)); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(23, 20); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(266, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Welcome to the CodeWalker Project Window!"; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label2.Location = new System.Drawing.Point(37, 49); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(534, 329); + this.label2.TabIndex = 1; + this.label2.Text = resources.GetString("label2.Text"); + // + // WelcomePanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(613, 401); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "WelcomePanel"; + this.Text = "Welcome"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + } +} \ No newline at end of file diff --git a/Project/Panels/WelcomePanel.cs b/Project/Panels/WelcomePanel.cs new file mode 100644 index 0000000..aff2272 --- /dev/null +++ b/Project/Panels/WelcomePanel.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using WeifenLuo.WinFormsUI.Docking; + +namespace CodeWalker.Project.Panels +{ + public partial class WelcomePanel : ProjectPanel + { + public WelcomePanel() + { + InitializeComponent(); + } + + } +} diff --git a/Project/Panels/WelcomePanel.resx b/Project/Panels/WelcomePanel.resx new file mode 100644 index 0000000..b0c0824 --- /dev/null +++ b/Project/Panels/WelcomePanel.resx @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + This window is the starting point for modding using CodeWalker. It allows editing of various different file types often used in creating map mods. + +To get started, create a new project or open an existing one using the File menu. + +Items can be edited in the CodeWalker World View using the various tools, and modified items in the World View will have their containing files added to the project automatically. The selected item in World View can also have its properties modified directly on its property page. + + + + + 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 + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/ProjectFile.cs b/Project/ProjectFile.cs index 8622e13..daf7850 100644 --- a/Project/ProjectFile.cs +++ b/Project/ProjectFile.cs @@ -16,6 +16,7 @@ namespace CodeWalker.Project public string Name { get; set; } //friendly name for this project public int Version { get; set; } public List YmapFilenames { get; set; } = new List(); + public List YtypFilenames { get; set; } = new List(); public List YndFilenames { get; set; } = new List(); public List YnvFilenames { get; set; } = new List(); public List TrainsFilenames { get; set; } = new List(); @@ -27,6 +28,7 @@ namespace CodeWalker.Project public bool HasChanged { get; set; } //flag for use by the UI public List YmapFiles { get; set; } = new List(); + public List YtypFiles { get; set; } = new List(); public List YndFiles { get; set; } = new List(); public List YnvFiles { get; set; } = new List(); public List TrainsFiles { get; set; } = new List(); @@ -49,6 +51,12 @@ namespace CodeWalker.Project Xml.AddChildWithInnerText(doc, ymapselem, "Item", ymapfilename); } + var ytypselem = Xml.AddChild(doc, projelem, "YtypFilenames"); + foreach (string ytypfilename in YtypFilenames) + { + Xml.AddChildWithInnerText(doc, ytypselem, "Item", ytypfilename); + } + var yndselem = Xml.AddChild(doc, projelem, "YndFilenames"); foreach (string yndfilename in YndFilenames) { @@ -106,6 +114,21 @@ namespace CodeWalker.Project } + YtypFilenames.Clear(); + YtypFiles.Clear(); + var ytypselem = Xml.GetChild(projelem, "YtypFilenames"); + if (ytypselem != null) + { + foreach (var node in ytypselem.SelectNodes("Item")) + { + XmlElement ytypel = node as XmlElement; + if (ytypel != null) + { + AddYtypFile(ytypel.InnerText); + } + } + } + YndFilenames.Clear(); YndFiles.Clear(); @@ -182,6 +205,10 @@ namespace CodeWalker.Project { YmapFilenames[i] = GetUpdatedFilePath(YmapFilenames[i], oldprojpath); } + for (int i = 0; i < YtypFilenames.Count; i++) + { + YtypFilenames[i] = GetUpdatedFilePath(YtypFilenames[i], oldprojpath); + } for (int i = 0; i < YndFilenames.Count; i++) { YndFilenames[i] = GetUpdatedFilePath(YndFilenames[i], oldprojpath); @@ -264,7 +291,7 @@ namespace CodeWalker.Project { YmapFile ymap = new YmapFile(); ymap.RpfFileEntry = new RpfResourceFileEntry(); - ymap.RpfFileEntry.Name = new FileInfo(filename).Name; + ymap.RpfFileEntry.Name = Path.GetFileName(filename); ymap.FilePath = GetFullFilePath(filename); ymap.Name = ymap.RpfFileEntry.Name; JenkIndex.Ensure(ymap.Name); @@ -330,11 +357,81 @@ namespace CodeWalker.Project } + public YtypFile AddYtypFile(string filename) + { + YtypFile ytyp = new YtypFile(); + ytyp.RpfFileEntry = new RpfResourceFileEntry(); + ytyp.RpfFileEntry.Name = Path.GetFileName(filename); + ytyp.FilePath = GetFullFilePath(filename); + ytyp.Name = ytyp.RpfFileEntry.Name; + JenkIndex.Ensure(ytyp.Name); + JenkIndex.Ensure(Path.GetFileNameWithoutExtension(ytyp.Name)); + JenkIndex.Ensure(filename); + if (!AddYtypFile(ytyp)) return null; + return ytyp; + } + public bool AddYtypFile(YtypFile ytyp) + { + string relpath = GetRelativePath(ytyp.FilePath); + if (string.IsNullOrEmpty(relpath)) relpath = ytyp.Name; + if (YtypFilenames.Contains(relpath)) return false; + YtypFilenames.Add(relpath); + YtypFiles.Add(ytyp); + return true; + } + public void RemoveYtypFile(YtypFile ytyp) + { + if (ytyp == null) return; + var relpath = GetRelativePath(ytyp.FilePath); + if (string.IsNullOrEmpty(relpath)) relpath = ytyp.Name; + YtypFiles.Remove(ytyp); + YtypFilenames.Remove(relpath); + HasChanged = true; + } + public bool ContainsYtyp(string filename) + { + bool found = false; + filename = filename.ToLowerInvariant(); + foreach (var ytypfn in YtypFilenames) + { + if (ytypfn == filename) + { + found = true; + break; + } + } + return found; + } + public bool ContainsYtyp(YtypFile ytyp) + { + foreach (var f in YtypFiles) + { + if (f == ytyp) return true; + } + return false; + } + public bool RenameYtyp(string oldfilename, string newfilename) + { + oldfilename = oldfilename.ToLowerInvariant(); + newfilename = newfilename.ToLowerInvariant(); + for (int i = 0; i < YtypFilenames.Count; i++) + { + if (YtypFilenames[i] == oldfilename) + { + YtypFilenames[i] = newfilename; + HasChanged = true; + return true; + } + } + return false; + } + + public YndFile AddYndFile(string filename) { YndFile ynd = new YndFile(); ynd.RpfFileEntry = new RpfResourceFileEntry(); - ynd.RpfFileEntry.Name = new FileInfo(filename).Name; + ynd.RpfFileEntry.Name = Path.GetFileName(filename); ynd.FilePath = GetFullFilePath(filename); ynd.Name = ynd.RpfFileEntry.Name; if (!AddYndFile(ynd)) return null; @@ -401,7 +498,7 @@ namespace CodeWalker.Project { YnvFile ynv = new YnvFile(); ynv.RpfFileEntry = new RpfResourceFileEntry(); - ynv.RpfFileEntry.Name = new FileInfo(filename).Name; + ynv.RpfFileEntry.Name = Path.GetFileName(filename); ynv.FilePath = GetFullFilePath(filename); ynv.Name = ynv.RpfFileEntry.Name; if (!AddYnvFile(ynv)) return null; @@ -468,7 +565,7 @@ namespace CodeWalker.Project { TrainTrack track = new TrainTrack(); track.RpfFileEntry = new RpfResourceFileEntry(); - track.RpfFileEntry.Name = new FileInfo(filename).Name; + track.RpfFileEntry.Name = Path.GetFileName(filename); track.FilePath = GetFullFilePath(filename); track.Name = track.RpfFileEntry.Name; if (!AddTrainsFile(track)) return null; @@ -535,7 +632,7 @@ namespace CodeWalker.Project { YmtFile scenario = new YmtFile(); scenario.RpfFileEntry = new RpfResourceFileEntry(); - scenario.RpfFileEntry.Name = new FileInfo(filename).Name; + scenario.RpfFileEntry.Name = Path.GetFileName(filename); scenario.FilePath = GetFullFilePath(filename); scenario.Name = scenario.RpfFileEntry.Name; scenario.ContentType = YmtFileContentType.ScenarioPointRegion; diff --git a/Project/ProjectForm2.Designer.cs b/Project/ProjectForm2.Designer.cs new file mode 100644 index 0000000..f11056b --- /dev/null +++ b/Project/ProjectForm2.Designer.cs @@ -0,0 +1,1318 @@ +namespace CodeWalker.Project +{ + partial class ProjectForm2 + { + /// + /// 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(ProjectForm2)); + this.MainMenu = new System.Windows.Forms.MenuStrip(); + this.FileMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileNewMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileNewProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.FileNewYmapMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileNewYtypMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileNewYndMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileNewYnvMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileNewTrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileNewScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileOpenMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileOpenProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); + this.FileOpenYmapMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileOpenYtypMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileOpenYndMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileOpenYnvMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileOpenTrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileOpenScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.FileCloseProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.FileSaveProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileSaveProjectAsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileSaveItemMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileSaveItemAsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ViewMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ViewProjectExplorerMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.ViewThemeMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ViewThemeBlueMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ViewThemeLightMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ViewThemeDarkMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolsManifestGeneratorMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.ToolsImportMenyooXmlMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.RenderMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.RenderShowGtavMapMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.RenderShowProjectItemsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.MainDockPanel = new WeifenLuo.WinFormsUI.Docking.DockPanel(); + this.VSExtender = new WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender(this.components); + this.SaveFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.OpenFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.MainToolbar = new System.Windows.Forms.ToolStrip(); + this.ToolbarNewButton = new CodeWalker.WinForms.ToolStripSplitButtonFix(); + this.ToolbarNewProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.ToolbarNewYmapMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarNewYtypMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarNewYndMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarNewYnvMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarNewTrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarNewScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarOpenButton = new CodeWalker.WinForms.ToolStripSplitButtonFix(); + this.ToolbarOpenProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.ToolbarOpenYmapMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarOpenYtypMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarOpenYndMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarOpenYnvMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarOpenTrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarOpenScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarSaveButton = new System.Windows.Forms.ToolStripButton(); + this.ToolbarSaveAllButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.EditUndoMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditRedoMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); + this.EditCutMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditCopyMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditPasteMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditDeleteMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditCloneMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YndMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YnvMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.TrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); + this.YmapNewEntityMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapNewCarGenMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); + this.YmapAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); + this.YtypNewArchetypeMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YndNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator(); + this.YtypAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YndNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator16 = new System.Windows.Forms.ToolStripSeparator(); + this.YndAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YndRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YnvNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator17 = new System.Windows.Forms.ToolStripSeparator(); + this.YnvNewPolygonMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator18 = new System.Windows.Forms.ToolStripSeparator(); + this.YnvAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YnvRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.TrainsNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator19 = new System.Windows.Forms.ToolStripSeparator(); + this.TrainsNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator20 = new System.Windows.Forms.ToolStripSeparator(); + this.TrainsAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.TrainsRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator21 = new System.Windows.Forms.ToolStripSeparator(); + this.ScenarioNewPointMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewPointFromSelectedMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewEntityOverrideMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewChainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewClusterMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioImportChainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator22 = new System.Windows.Forms.ToolStripSeparator(); + this.ScenarioAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.MainMenu.SuspendLayout(); + this.MainToolbar.SuspendLayout(); + this.SuspendLayout(); + // + // MainMenu + // + this.MainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.FileMenu, + this.EditMenu, + this.ViewMenu, + this.YmapMenu, + this.YtypMenu, + this.YndMenu, + this.YnvMenu, + this.TrainsMenu, + this.ScenarioMenu, + this.ToolsMenu, + this.RenderMenu}); + this.MainMenu.Location = new System.Drawing.Point(0, 0); + this.MainMenu.Name = "MainMenu"; + this.MainMenu.Size = new System.Drawing.Size(813, 24); + this.MainMenu.TabIndex = 0; + this.MainMenu.Text = "Main Menu"; + // + // FileMenu + // + this.FileMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.FileNewMenu, + this.FileOpenMenu, + this.toolStripSeparator3, + this.FileCloseProjectMenu, + this.toolStripSeparator4, + this.FileSaveProjectMenu, + this.FileSaveProjectAsMenu, + this.FileSaveItemMenu, + this.FileSaveItemAsMenu}); + this.FileMenu.Name = "FileMenu"; + this.FileMenu.Size = new System.Drawing.Size(37, 20); + this.FileMenu.Text = "File"; + // + // FileNewMenu + // + this.FileNewMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.FileNewProjectMenu, + this.toolStripSeparator8, + this.FileNewYmapMenu, + this.FileNewYtypMenu, + this.FileNewYndMenu, + this.FileNewYnvMenu, + this.FileNewTrainsMenu, + this.FileNewScenarioMenu}); + this.FileNewMenu.Name = "FileNewMenu"; + this.FileNewMenu.Size = new System.Drawing.Size(163, 22); + this.FileNewMenu.Text = "New"; + // + // FileNewProjectMenu + // + this.FileNewProjectMenu.Name = "FileNewProjectMenu"; + this.FileNewProjectMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewProjectMenu.Text = "Project"; + this.FileNewProjectMenu.Click += new System.EventHandler(this.FileNewProjectMenu_Click); + // + // toolStripSeparator8 + // + this.toolStripSeparator8.Name = "toolStripSeparator8"; + this.toolStripSeparator8.Size = new System.Drawing.Size(137, 6); + // + // FileNewYmapMenu + // + this.FileNewYmapMenu.Name = "FileNewYmapMenu"; + this.FileNewYmapMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewYmapMenu.Text = "Ymap File"; + this.FileNewYmapMenu.Click += new System.EventHandler(this.FileNewYmapMenu_Click); + // + // FileNewYtypMenu + // + this.FileNewYtypMenu.Name = "FileNewYtypMenu"; + this.FileNewYtypMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewYtypMenu.Text = "Ytyp File"; + this.FileNewYtypMenu.Click += new System.EventHandler(this.FileNewYtypMenu_Click); + // + // FileNewYndMenu + // + this.FileNewYndMenu.Name = "FileNewYndMenu"; + this.FileNewYndMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewYndMenu.Text = "Ynd File"; + this.FileNewYndMenu.Click += new System.EventHandler(this.FileNewYndMenu_Click); + // + // FileNewYnvMenu + // + this.FileNewYnvMenu.Name = "FileNewYnvMenu"; + this.FileNewYnvMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewYnvMenu.Text = "Ynv File"; + this.FileNewYnvMenu.Click += new System.EventHandler(this.FileNewYnvMenu_Click); + // + // FileNewTrainsMenu + // + this.FileNewTrainsMenu.Name = "FileNewTrainsMenu"; + this.FileNewTrainsMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewTrainsMenu.Text = "Trains File"; + this.FileNewTrainsMenu.Click += new System.EventHandler(this.FileNewTrainsMenu_Click); + // + // FileNewScenarioMenu + // + this.FileNewScenarioMenu.Name = "FileNewScenarioMenu"; + this.FileNewScenarioMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewScenarioMenu.Text = "Scenario File"; + this.FileNewScenarioMenu.Click += new System.EventHandler(this.FileNewScenarioMenu_Click); + // + // FileOpenMenu + // + this.FileOpenMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.FileOpenProjectMenu, + this.toolStripSeparator9, + this.FileOpenYmapMenu, + this.FileOpenYtypMenu, + this.FileOpenYndMenu, + this.FileOpenYnvMenu, + this.FileOpenTrainsMenu, + this.FileOpenScenarioMenu}); + this.FileOpenMenu.Name = "FileOpenMenu"; + this.FileOpenMenu.Size = new System.Drawing.Size(163, 22); + this.FileOpenMenu.Text = "Open"; + // + // FileOpenProjectMenu + // + this.FileOpenProjectMenu.Name = "FileOpenProjectMenu"; + this.FileOpenProjectMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenProjectMenu.Text = "Project..."; + this.FileOpenProjectMenu.Click += new System.EventHandler(this.FileOpenProjectMenu_Click); + // + // toolStripSeparator9 + // + this.toolStripSeparator9.Name = "toolStripSeparator9"; + this.toolStripSeparator9.Size = new System.Drawing.Size(146, 6); + // + // FileOpenYmapMenu + // + this.FileOpenYmapMenu.Name = "FileOpenYmapMenu"; + this.FileOpenYmapMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYmapMenu.Text = "Ymap File..."; + this.FileOpenYmapMenu.Click += new System.EventHandler(this.FileOpenYmapMenu_Click); + // + // FileOpenYtypMenu + // + this.FileOpenYtypMenu.Name = "FileOpenYtypMenu"; + this.FileOpenYtypMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYtypMenu.Text = "Ytyp File..."; + this.FileOpenYtypMenu.Click += new System.EventHandler(this.FileOpenYtypMenu_Click); + // + // FileOpenYndMenu + // + this.FileOpenYndMenu.Name = "FileOpenYndMenu"; + this.FileOpenYndMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYndMenu.Text = "Ynd File..."; + this.FileOpenYndMenu.Click += new System.EventHandler(this.FileOpenYndMenu_Click); + // + // FileOpenYnvMenu + // + this.FileOpenYnvMenu.Name = "FileOpenYnvMenu"; + this.FileOpenYnvMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYnvMenu.Text = "Ynv File..."; + this.FileOpenYnvMenu.Click += new System.EventHandler(this.FileOpenYnvMenu_Click); + // + // FileOpenTrainsMenu + // + this.FileOpenTrainsMenu.Name = "FileOpenTrainsMenu"; + this.FileOpenTrainsMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenTrainsMenu.Text = "Trains File..."; + this.FileOpenTrainsMenu.Click += new System.EventHandler(this.FileOpenTrainsMenu_Click); + // + // FileOpenScenarioMenu + // + this.FileOpenScenarioMenu.Name = "FileOpenScenarioMenu"; + this.FileOpenScenarioMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenScenarioMenu.Text = "Scenario File..."; + this.FileOpenScenarioMenu.Click += new System.EventHandler(this.FileOpenScenarioMenu_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(160, 6); + // + // FileCloseProjectMenu + // + this.FileCloseProjectMenu.Enabled = false; + this.FileCloseProjectMenu.Name = "FileCloseProjectMenu"; + this.FileCloseProjectMenu.Size = new System.Drawing.Size(163, 22); + this.FileCloseProjectMenu.Text = "Close Project"; + this.FileCloseProjectMenu.Click += new System.EventHandler(this.FileCloseProjectMenu_Click); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(160, 6); + // + // FileSaveProjectMenu + // + this.FileSaveProjectMenu.Enabled = false; + this.FileSaveProjectMenu.Name = "FileSaveProjectMenu"; + this.FileSaveProjectMenu.Size = new System.Drawing.Size(163, 22); + this.FileSaveProjectMenu.Text = "Save Project"; + this.FileSaveProjectMenu.Click += new System.EventHandler(this.FileSaveProjectMenu_Click); + // + // FileSaveProjectAsMenu + // + this.FileSaveProjectAsMenu.Enabled = false; + this.FileSaveProjectAsMenu.Name = "FileSaveProjectAsMenu"; + this.FileSaveProjectAsMenu.Size = new System.Drawing.Size(163, 22); + this.FileSaveProjectAsMenu.Text = "Save Project As..."; + this.FileSaveProjectAsMenu.Click += new System.EventHandler(this.FileSaveProjectAsMenu_Click); + // + // FileSaveItemMenu + // + this.FileSaveItemMenu.Enabled = false; + this.FileSaveItemMenu.Name = "FileSaveItemMenu"; + this.FileSaveItemMenu.Size = new System.Drawing.Size(163, 22); + this.FileSaveItemMenu.Text = "Save Item"; + this.FileSaveItemMenu.Visible = false; + this.FileSaveItemMenu.Click += new System.EventHandler(this.FileSaveItemMenu_Click); + // + // FileSaveItemAsMenu + // + this.FileSaveItemAsMenu.Enabled = false; + this.FileSaveItemAsMenu.Name = "FileSaveItemAsMenu"; + this.FileSaveItemAsMenu.Size = new System.Drawing.Size(163, 22); + this.FileSaveItemAsMenu.Text = "Save Item As..."; + this.FileSaveItemAsMenu.Visible = false; + this.FileSaveItemAsMenu.Click += new System.EventHandler(this.FileSaveItemAsMenu_Click); + // + // EditMenu + // + this.EditMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.EditUndoMenu, + this.EditRedoMenu, + this.toolStripSeparator10, + this.EditCutMenu, + this.EditCopyMenu, + this.EditPasteMenu, + this.EditCloneMenu, + this.EditDeleteMenu}); + this.EditMenu.Name = "EditMenu"; + this.EditMenu.Size = new System.Drawing.Size(39, 20); + this.EditMenu.Text = "Edit"; + // + // ViewMenu + // + this.ViewMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ViewProjectExplorerMenu, + this.toolStripSeparator1, + this.ViewThemeMenu}); + this.ViewMenu.Name = "ViewMenu"; + this.ViewMenu.Size = new System.Drawing.Size(44, 20); + this.ViewMenu.Text = "View"; + // + // ViewProjectExplorerMenu + // + this.ViewProjectExplorerMenu.Name = "ViewProjectExplorerMenu"; + this.ViewProjectExplorerMenu.Size = new System.Drawing.Size(156, 22); + this.ViewProjectExplorerMenu.Text = "Project Explorer"; + this.ViewProjectExplorerMenu.Click += new System.EventHandler(this.ViewProjectExplorerMenu_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(153, 6); + // + // ViewThemeMenu + // + this.ViewThemeMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ViewThemeBlueMenu, + this.ViewThemeLightMenu, + this.ViewThemeDarkMenu}); + this.ViewThemeMenu.Name = "ViewThemeMenu"; + this.ViewThemeMenu.Size = new System.Drawing.Size(156, 22); + this.ViewThemeMenu.Text = "Theme"; + // + // ViewThemeBlueMenu + // + this.ViewThemeBlueMenu.Checked = true; + this.ViewThemeBlueMenu.CheckState = System.Windows.Forms.CheckState.Checked; + this.ViewThemeBlueMenu.Name = "ViewThemeBlueMenu"; + this.ViewThemeBlueMenu.Size = new System.Drawing.Size(101, 22); + this.ViewThemeBlueMenu.Text = "Blue"; + this.ViewThemeBlueMenu.Click += new System.EventHandler(this.ViewThemeBlueMenu_Click); + // + // ViewThemeLightMenu + // + this.ViewThemeLightMenu.Name = "ViewThemeLightMenu"; + this.ViewThemeLightMenu.Size = new System.Drawing.Size(101, 22); + this.ViewThemeLightMenu.Text = "Light"; + this.ViewThemeLightMenu.Click += new System.EventHandler(this.ViewThemeLightMenu_Click); + // + // ViewThemeDarkMenu + // + this.ViewThemeDarkMenu.Name = "ViewThemeDarkMenu"; + this.ViewThemeDarkMenu.Size = new System.Drawing.Size(101, 22); + this.ViewThemeDarkMenu.Text = "Dark"; + this.ViewThemeDarkMenu.Click += new System.EventHandler(this.ViewThemeDarkMenu_Click); + // + // ToolsMenu + // + this.ToolsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ToolsManifestGeneratorMenu, + this.toolStripSeparator2, + this.ToolsImportMenyooXmlMenu}); + this.ToolsMenu.Name = "ToolsMenu"; + this.ToolsMenu.Size = new System.Drawing.Size(47, 20); + this.ToolsMenu.Text = "Tools"; + // + // ToolsManifestGeneratorMenu + // + this.ToolsManifestGeneratorMenu.Name = "ToolsManifestGeneratorMenu"; + this.ToolsManifestGeneratorMenu.Size = new System.Drawing.Size(193, 22); + this.ToolsManifestGeneratorMenu.Text = "Manifest Generator..."; + this.ToolsManifestGeneratorMenu.Click += new System.EventHandler(this.ToolsManifestGeneratorMenu_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(190, 6); + // + // ToolsImportMenyooXmlMenu + // + this.ToolsImportMenyooXmlMenu.Name = "ToolsImportMenyooXmlMenu"; + this.ToolsImportMenyooXmlMenu.Size = new System.Drawing.Size(193, 22); + this.ToolsImportMenyooXmlMenu.Text = "Import Menyoo XML..."; + this.ToolsImportMenyooXmlMenu.Click += new System.EventHandler(this.ToolsImportMenyooXmlMenu_Click); + // + // RenderMenu + // + this.RenderMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.RenderShowGtavMapMenu, + this.RenderShowProjectItemsMenu}); + this.RenderMenu.Name = "RenderMenu"; + this.RenderMenu.Size = new System.Drawing.Size(56, 20); + this.RenderMenu.Text = "Render"; + // + // RenderShowGtavMapMenu + // + this.RenderShowGtavMapMenu.Checked = true; + this.RenderShowGtavMapMenu.CheckState = System.Windows.Forms.CheckState.Checked; + this.RenderShowGtavMapMenu.Name = "RenderShowGtavMapMenu"; + this.RenderShowGtavMapMenu.Size = new System.Drawing.Size(175, 22); + this.RenderShowGtavMapMenu.Text = "Show GTAV Map"; + this.RenderShowGtavMapMenu.Click += new System.EventHandler(this.RenderShowGtavMapMenu_Click); + // + // RenderShowProjectItemsMenu + // + this.RenderShowProjectItemsMenu.Checked = true; + this.RenderShowProjectItemsMenu.CheckState = System.Windows.Forms.CheckState.Checked; + this.RenderShowProjectItemsMenu.Name = "RenderShowProjectItemsMenu"; + this.RenderShowProjectItemsMenu.Size = new System.Drawing.Size(175, 22); + this.RenderShowProjectItemsMenu.Text = "Show Project Items"; + this.RenderShowProjectItemsMenu.Click += new System.EventHandler(this.RenderShowProjectItemsMenu_Click); + // + // MainDockPanel + // + this.MainDockPanel.BackColor = System.Drawing.SystemColors.AppWorkspace; + this.MainDockPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainDockPanel.DockLeftPortion = 0.3D; + this.MainDockPanel.DockRightPortion = 0.3D; + this.MainDockPanel.Location = new System.Drawing.Point(0, 49); + this.MainDockPanel.Name = "MainDockPanel"; + this.MainDockPanel.Size = new System.Drawing.Size(813, 481); + this.MainDockPanel.TabIndex = 1; + this.MainDockPanel.ActiveContentChanged += new System.EventHandler(this.MainDockPanel_ActiveContentChanged); + this.MainDockPanel.DocumentDragged += new System.EventHandler(this.MainDockPanel_DocumentDragged); + // + // VSExtender + // + this.VSExtender.DefaultRenderer = null; + // + // SaveFileDialog + // + this.SaveFileDialog.Filter = "CodeWalker Projects|*.cwproj"; + // + // OpenFileDialog + // + this.OpenFileDialog.Filter = "CodeWalker Projects|*.cwproj"; + // + // MainToolbar + // + this.MainToolbar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ToolbarNewButton, + this.ToolbarOpenButton, + this.ToolbarSaveButton, + this.ToolbarSaveAllButton, + this.toolStripSeparator5}); + this.MainToolbar.Location = new System.Drawing.Point(0, 24); + this.MainToolbar.Name = "MainToolbar"; + this.MainToolbar.Size = new System.Drawing.Size(813, 25); + this.MainToolbar.TabIndex = 4; + // + // ToolbarNewButton + // + this.ToolbarNewButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.ToolbarNewButton.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ToolbarNewProjectMenu, + this.toolStripSeparator7, + this.ToolbarNewYmapMenu, + this.ToolbarNewYtypMenu, + this.ToolbarNewYndMenu, + this.ToolbarNewYnvMenu, + this.ToolbarNewTrainsMenu, + this.ToolbarNewScenarioMenu}); + this.ToolbarNewButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarNewButton.Image"))); + this.ToolbarNewButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.ToolbarNewButton.Name = "ToolbarNewButton"; + this.ToolbarNewButton.Size = new System.Drawing.Size(32, 22); + this.ToolbarNewButton.Text = "New"; + this.ToolbarNewButton.ButtonClick += new System.EventHandler(this.ToolbarNewButton_ButtonClick); + // + // ToolbarNewProjectMenu + // + this.ToolbarNewProjectMenu.Name = "ToolbarNewProjectMenu"; + this.ToolbarNewProjectMenu.Size = new System.Drawing.Size(167, 22); + this.ToolbarNewProjectMenu.Text = "New Project"; + this.ToolbarNewProjectMenu.Click += new System.EventHandler(this.ToolbarNewProjectMenu_Click); + // + // toolStripSeparator7 + // + this.toolStripSeparator7.Name = "toolStripSeparator7"; + this.toolStripSeparator7.Size = new System.Drawing.Size(164, 6); + // + // ToolbarNewYmapMenu + // + this.ToolbarNewYmapMenu.Name = "ToolbarNewYmapMenu"; + this.ToolbarNewYmapMenu.Size = new System.Drawing.Size(167, 22); + this.ToolbarNewYmapMenu.Text = "New Ymap File"; + this.ToolbarNewYmapMenu.Click += new System.EventHandler(this.ToolbarNewYmapMenu_Click); + // + // ToolbarNewYtypMenu + // + this.ToolbarNewYtypMenu.Name = "ToolbarNewYtypMenu"; + this.ToolbarNewYtypMenu.Size = new System.Drawing.Size(167, 22); + this.ToolbarNewYtypMenu.Text = "New Ytyp File"; + this.ToolbarNewYtypMenu.Click += new System.EventHandler(this.ToolbarNewYtypMenu_Click); + // + // ToolbarNewYndMenu + // + this.ToolbarNewYndMenu.Name = "ToolbarNewYndMenu"; + this.ToolbarNewYndMenu.Size = new System.Drawing.Size(167, 22); + this.ToolbarNewYndMenu.Text = "New Ynd File"; + this.ToolbarNewYndMenu.Click += new System.EventHandler(this.ToolbarNewYndMenu_Click); + // + // ToolbarNewYnvMenu + // + this.ToolbarNewYnvMenu.Name = "ToolbarNewYnvMenu"; + this.ToolbarNewYnvMenu.Size = new System.Drawing.Size(167, 22); + this.ToolbarNewYnvMenu.Text = "New Ynv File"; + this.ToolbarNewYnvMenu.Click += new System.EventHandler(this.ToolbarNewYnvMenu_Click); + // + // ToolbarNewTrainsMenu + // + this.ToolbarNewTrainsMenu.Name = "ToolbarNewTrainsMenu"; + this.ToolbarNewTrainsMenu.Size = new System.Drawing.Size(167, 22); + this.ToolbarNewTrainsMenu.Text = "New Trains File"; + this.ToolbarNewTrainsMenu.Click += new System.EventHandler(this.ToolbarNewTrainsMenu_Click); + // + // ToolbarNewScenarioMenu + // + this.ToolbarNewScenarioMenu.Name = "ToolbarNewScenarioMenu"; + this.ToolbarNewScenarioMenu.Size = new System.Drawing.Size(167, 22); + this.ToolbarNewScenarioMenu.Text = "New Scenario File"; + this.ToolbarNewScenarioMenu.Click += new System.EventHandler(this.ToolbarNewScenarioMenu_Click); + // + // ToolbarOpenButton + // + this.ToolbarOpenButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.ToolbarOpenButton.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ToolbarOpenProjectMenu, + this.toolStripSeparator6, + this.ToolbarOpenYmapMenu, + this.ToolbarOpenYtypMenu, + this.ToolbarOpenYndMenu, + this.ToolbarOpenYnvMenu, + this.ToolbarOpenTrainsMenu, + this.ToolbarOpenScenarioMenu}); + this.ToolbarOpenButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarOpenButton.Image"))); + this.ToolbarOpenButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.ToolbarOpenButton.Name = "ToolbarOpenButton"; + this.ToolbarOpenButton.Size = new System.Drawing.Size(32, 22); + this.ToolbarOpenButton.Text = "Open..."; + this.ToolbarOpenButton.ButtonClick += new System.EventHandler(this.ToolbarOpenButton_ButtonClick); + // + // ToolbarOpenProjectMenu + // + this.ToolbarOpenProjectMenu.Name = "ToolbarOpenProjectMenu"; + this.ToolbarOpenProjectMenu.Size = new System.Drawing.Size(181, 22); + this.ToolbarOpenProjectMenu.Text = "Open Project..."; + this.ToolbarOpenProjectMenu.Click += new System.EventHandler(this.ToolbarOpenProjectMenu_Click); + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(178, 6); + // + // ToolbarOpenYmapMenu + // + this.ToolbarOpenYmapMenu.Name = "ToolbarOpenYmapMenu"; + this.ToolbarOpenYmapMenu.Size = new System.Drawing.Size(181, 22); + this.ToolbarOpenYmapMenu.Text = "Open Ymap File..."; + this.ToolbarOpenYmapMenu.Click += new System.EventHandler(this.ToolbarOpenYmapMenu_Click); + // + // ToolbarOpenYtypMenu + // + this.ToolbarOpenYtypMenu.Name = "ToolbarOpenYtypMenu"; + this.ToolbarOpenYtypMenu.Size = new System.Drawing.Size(181, 22); + this.ToolbarOpenYtypMenu.Text = "Open Ytyp File..."; + this.ToolbarOpenYtypMenu.Click += new System.EventHandler(this.ToolbarOpenYtypMenu_Click); + // + // ToolbarOpenYndMenu + // + this.ToolbarOpenYndMenu.Name = "ToolbarOpenYndMenu"; + this.ToolbarOpenYndMenu.Size = new System.Drawing.Size(181, 22); + this.ToolbarOpenYndMenu.Text = "Open Ynd File..."; + this.ToolbarOpenYndMenu.Click += new System.EventHandler(this.ToolbarOpenYndMenu_Click); + // + // ToolbarOpenYnvMenu + // + this.ToolbarOpenYnvMenu.Name = "ToolbarOpenYnvMenu"; + this.ToolbarOpenYnvMenu.Size = new System.Drawing.Size(181, 22); + this.ToolbarOpenYnvMenu.Text = "Open Ynv File..."; + this.ToolbarOpenYnvMenu.Click += new System.EventHandler(this.ToolbarOpenYnvMenu_Click); + // + // ToolbarOpenTrainsMenu + // + this.ToolbarOpenTrainsMenu.Name = "ToolbarOpenTrainsMenu"; + this.ToolbarOpenTrainsMenu.Size = new System.Drawing.Size(181, 22); + this.ToolbarOpenTrainsMenu.Text = "Open Trains File..."; + this.ToolbarOpenTrainsMenu.Click += new System.EventHandler(this.ToolbarOpenTrainsMenu_Click); + // + // ToolbarOpenScenarioMenu + // + this.ToolbarOpenScenarioMenu.Name = "ToolbarOpenScenarioMenu"; + this.ToolbarOpenScenarioMenu.Size = new System.Drawing.Size(181, 22); + this.ToolbarOpenScenarioMenu.Text = "Open Scenario File..."; + this.ToolbarOpenScenarioMenu.Click += new System.EventHandler(this.ToolbarOpenScenarioMenu_Click); + // + // ToolbarSaveButton + // + this.ToolbarSaveButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.ToolbarSaveButton.Enabled = false; + this.ToolbarSaveButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSaveButton.Image"))); + this.ToolbarSaveButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.ToolbarSaveButton.Name = "ToolbarSaveButton"; + this.ToolbarSaveButton.Size = new System.Drawing.Size(23, 22); + this.ToolbarSaveButton.Text = "Save"; + this.ToolbarSaveButton.Click += new System.EventHandler(this.ToolbarSaveButton_Click); + // + // ToolbarSaveAllButton + // + this.ToolbarSaveAllButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.ToolbarSaveAllButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSaveAllButton.Image"))); + this.ToolbarSaveAllButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.ToolbarSaveAllButton.Name = "ToolbarSaveAllButton"; + this.ToolbarSaveAllButton.Size = new System.Drawing.Size(23, 22); + this.ToolbarSaveAllButton.Text = "Save All"; + this.ToolbarSaveAllButton.Click += new System.EventHandler(this.ToolbarSaveAllButton_Click); + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25); + // + // EditUndoMenu + // + this.EditUndoMenu.Enabled = false; + this.EditUndoMenu.Name = "EditUndoMenu"; + this.EditUndoMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); + this.EditUndoMenu.Size = new System.Drawing.Size(190, 22); + this.EditUndoMenu.Text = "Undo"; + // + // EditRedoMenu + // + this.EditRedoMenu.Enabled = false; + this.EditRedoMenu.Name = "EditRedoMenu"; + this.EditRedoMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); + this.EditRedoMenu.Size = new System.Drawing.Size(190, 22); + this.EditRedoMenu.Text = "Redo"; + // + // toolStripSeparator10 + // + this.toolStripSeparator10.Name = "toolStripSeparator10"; + this.toolStripSeparator10.Size = new System.Drawing.Size(187, 6); + // + // EditCutMenu + // + this.EditCutMenu.Enabled = false; + this.EditCutMenu.Name = "EditCutMenu"; + this.EditCutMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); + this.EditCutMenu.Size = new System.Drawing.Size(190, 22); + this.EditCutMenu.Text = "Cut Item"; + // + // EditCopyMenu + // + this.EditCopyMenu.Enabled = false; + this.EditCopyMenu.Name = "EditCopyMenu"; + this.EditCopyMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); + this.EditCopyMenu.Size = new System.Drawing.Size(190, 22); + this.EditCopyMenu.Text = "Copy Item"; + // + // EditPasteMenu + // + this.EditPasteMenu.Enabled = false; + this.EditPasteMenu.Name = "EditPasteMenu"; + this.EditPasteMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); + this.EditPasteMenu.Size = new System.Drawing.Size(190, 22); + this.EditPasteMenu.Text = "Paste Item"; + // + // EditDeleteMenu + // + this.EditDeleteMenu.Enabled = false; + this.EditDeleteMenu.Name = "EditDeleteMenu"; + this.EditDeleteMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Shift | System.Windows.Forms.Keys.Delete))); + this.EditDeleteMenu.Size = new System.Drawing.Size(190, 22); + this.EditDeleteMenu.Text = "Delete Item"; + // + // EditCloneMenu + // + this.EditCloneMenu.Enabled = false; + this.EditCloneMenu.Name = "EditCloneMenu"; + this.EditCloneMenu.Size = new System.Drawing.Size(190, 22); + this.EditCloneMenu.Text = "Clone Item"; + // + // YmapMenu + // + this.YmapMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YmapNameMenu, + this.toolStripSeparator11, + this.YmapNewEntityMenu, + this.YmapNewCarGenMenu, + this.toolStripSeparator12, + this.YmapAddToProjectMenu, + this.YmapRemoveFromProjectMenu}); + this.YmapMenu.Name = "YmapMenu"; + this.YmapMenu.Size = new System.Drawing.Size(49, 20); + this.YmapMenu.Text = "Ymap"; + this.YmapMenu.Visible = false; + // + // YtypMenu + // + this.YtypMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YtypNameMenu, + this.toolStripSeparator13, + this.YtypNewArchetypeMenu, + this.toolStripSeparator15, + this.YtypAddToProjectMenu, + this.YtypRemoveFromProjectMenu}); + this.YtypMenu.Name = "YtypMenu"; + this.YtypMenu.Size = new System.Drawing.Size(43, 20); + this.YtypMenu.Text = "Ytyp"; + this.YtypMenu.Visible = false; + // + // YndMenu + // + this.YndMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YndNameMenu, + this.toolStripSeparator14, + this.YndNewNodeMenu, + this.toolStripSeparator16, + this.YndAddToProjectMenu, + this.YndRemoveFromProjectMenu}); + this.YndMenu.Name = "YndMenu"; + this.YndMenu.Size = new System.Drawing.Size(39, 20); + this.YndMenu.Text = "Ynd"; + this.YndMenu.Visible = false; + // + // YnvMenu + // + this.YnvMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YnvNameMenu, + this.toolStripSeparator17, + this.YnvNewPolygonMenu, + this.toolStripSeparator18, + this.YnvAddToProjectMenu, + this.YnvRemoveFromProjectMenu}); + this.YnvMenu.Name = "YnvMenu"; + this.YnvMenu.Size = new System.Drawing.Size(38, 20); + this.YnvMenu.Text = "Ynv"; + this.YnvMenu.Visible = false; + // + // TrainsMenu + // + this.TrainsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.TrainsNameMenu, + this.toolStripSeparator19, + this.TrainsNewNodeMenu, + this.toolStripSeparator20, + this.TrainsAddToProjectMenu, + this.TrainsRemoveFromProjectMenu}); + this.TrainsMenu.Name = "TrainsMenu"; + this.TrainsMenu.Size = new System.Drawing.Size(50, 20); + this.TrainsMenu.Text = "Trains"; + this.TrainsMenu.Visible = false; + // + // ScenarioMenu + // + this.ScenarioMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ScenarioNameMenu, + this.toolStripSeparator21, + this.ScenarioNewPointMenu, + this.ScenarioNewPointFromSelectedMenu, + this.ScenarioNewEntityOverrideMenu, + this.ScenarioNewChainMenu, + this.ScenarioNewClusterMenu, + this.ScenarioImportChainMenu, + this.toolStripSeparator22, + this.ScenarioAddToProjectMenu, + this.ScenarioRemoveFromProjectMenu}); + this.ScenarioMenu.Name = "ScenarioMenu"; + this.ScenarioMenu.Size = new System.Drawing.Size(64, 20); + this.ScenarioMenu.Text = "Scenario"; + this.ScenarioMenu.Visible = false; + // + // YmapNameMenu + // + this.YmapNameMenu.Enabled = false; + this.YmapNameMenu.Name = "YmapNameMenu"; + this.YmapNameMenu.Size = new System.Drawing.Size(199, 22); + this.YmapNameMenu.Text = "(No .ymap file selected)"; + // + // toolStripSeparator11 + // + this.toolStripSeparator11.Name = "toolStripSeparator11"; + this.toolStripSeparator11.Size = new System.Drawing.Size(196, 6); + // + // YmapNewEntityMenu + // + this.YmapNewEntityMenu.Enabled = false; + this.YmapNewEntityMenu.Name = "YmapNewEntityMenu"; + this.YmapNewEntityMenu.Size = new System.Drawing.Size(199, 22); + this.YmapNewEntityMenu.Text = "New Entity"; + this.YmapNewEntityMenu.Click += new System.EventHandler(this.YmapNewEntityMenu_Click); + // + // YmapNewCarGenMenu + // + this.YmapNewCarGenMenu.Enabled = false; + this.YmapNewCarGenMenu.Name = "YmapNewCarGenMenu"; + this.YmapNewCarGenMenu.Size = new System.Drawing.Size(199, 22); + this.YmapNewCarGenMenu.Text = "New Car Generator"; + this.YmapNewCarGenMenu.Click += new System.EventHandler(this.YmapNewCarGenMenu_Click); + // + // toolStripSeparator12 + // + this.toolStripSeparator12.Name = "toolStripSeparator12"; + this.toolStripSeparator12.Size = new System.Drawing.Size(196, 6); + // + // YmapAddToProjectMenu + // + this.YmapAddToProjectMenu.Enabled = false; + this.YmapAddToProjectMenu.Name = "YmapAddToProjectMenu"; + this.YmapAddToProjectMenu.Size = new System.Drawing.Size(199, 22); + this.YmapAddToProjectMenu.Text = "Add to Project"; + this.YmapAddToProjectMenu.Click += new System.EventHandler(this.YmapAddToProjectMenu_Click); + // + // YmapRemoveFromProjectMenu + // + this.YmapRemoveFromProjectMenu.Enabled = false; + this.YmapRemoveFromProjectMenu.Name = "YmapRemoveFromProjectMenu"; + this.YmapRemoveFromProjectMenu.Size = new System.Drawing.Size(199, 22); + this.YmapRemoveFromProjectMenu.Text = "Remove from Project"; + this.YmapRemoveFromProjectMenu.Click += new System.EventHandler(this.YmapRemoveFromProjectMenu_Click); + // + // YtypNameMenu + // + this.YtypNameMenu.Enabled = false; + this.YtypNameMenu.Name = "YtypNameMenu"; + this.YtypNameMenu.Size = new System.Drawing.Size(192, 22); + this.YtypNameMenu.Text = "(No .ytyp file selected)"; + // + // toolStripSeparator13 + // + this.toolStripSeparator13.Name = "toolStripSeparator13"; + this.toolStripSeparator13.Size = new System.Drawing.Size(189, 6); + // + // YtypNewArchetypeMenu + // + this.YtypNewArchetypeMenu.Enabled = false; + this.YtypNewArchetypeMenu.Name = "YtypNewArchetypeMenu"; + this.YtypNewArchetypeMenu.Size = new System.Drawing.Size(192, 22); + this.YtypNewArchetypeMenu.Text = "New Archetype"; + this.YtypNewArchetypeMenu.Click += new System.EventHandler(this.YtypNewArchetypeMenu_Click); + // + // YndNameMenu + // + this.YndNameMenu.Enabled = false; + this.YndNameMenu.Name = "YndNameMenu"; + this.YndNameMenu.Size = new System.Drawing.Size(189, 22); + this.YndNameMenu.Text = "(No .ynd file selected)"; + // + // toolStripSeparator14 + // + this.toolStripSeparator14.Name = "toolStripSeparator14"; + this.toolStripSeparator14.Size = new System.Drawing.Size(186, 6); + // + // toolStripSeparator15 + // + this.toolStripSeparator15.Name = "toolStripSeparator15"; + this.toolStripSeparator15.Size = new System.Drawing.Size(189, 6); + // + // YtypAddToProjectMenu + // + this.YtypAddToProjectMenu.Enabled = false; + this.YtypAddToProjectMenu.Name = "YtypAddToProjectMenu"; + this.YtypAddToProjectMenu.Size = new System.Drawing.Size(192, 22); + this.YtypAddToProjectMenu.Text = "Add to Project"; + this.YtypAddToProjectMenu.Click += new System.EventHandler(this.YtypAddToProjectMenu_Click); + // + // YtypRemoveFromProjectMenu + // + this.YtypRemoveFromProjectMenu.Enabled = false; + this.YtypRemoveFromProjectMenu.Name = "YtypRemoveFromProjectMenu"; + this.YtypRemoveFromProjectMenu.Size = new System.Drawing.Size(192, 22); + this.YtypRemoveFromProjectMenu.Text = "Remove from Project"; + this.YtypRemoveFromProjectMenu.Click += new System.EventHandler(this.YtypRemoveFromProjectMenu_Click); + // + // YndNewNodeMenu + // + this.YndNewNodeMenu.Enabled = false; + this.YndNewNodeMenu.Name = "YndNewNodeMenu"; + this.YndNewNodeMenu.Size = new System.Drawing.Size(189, 22); + this.YndNewNodeMenu.Text = "New Node"; + this.YndNewNodeMenu.Click += new System.EventHandler(this.YndNewNodeMenu_Click); + // + // toolStripSeparator16 + // + this.toolStripSeparator16.Name = "toolStripSeparator16"; + this.toolStripSeparator16.Size = new System.Drawing.Size(186, 6); + // + // YndAddToProjectMenu + // + this.YndAddToProjectMenu.Enabled = false; + this.YndAddToProjectMenu.Name = "YndAddToProjectMenu"; + this.YndAddToProjectMenu.Size = new System.Drawing.Size(189, 22); + this.YndAddToProjectMenu.Text = "Add to Project"; + this.YndAddToProjectMenu.Click += new System.EventHandler(this.YndAddToProjectMenu_Click); + // + // YndRemoveFromProjectMenu + // + this.YndRemoveFromProjectMenu.Enabled = false; + this.YndRemoveFromProjectMenu.Name = "YndRemoveFromProjectMenu"; + this.YndRemoveFromProjectMenu.Size = new System.Drawing.Size(189, 22); + this.YndRemoveFromProjectMenu.Text = "Remove from Project"; + this.YndRemoveFromProjectMenu.Click += new System.EventHandler(this.YndRemoveFromProjectMenu_Click); + // + // YnvNameMenu + // + this.YnvNameMenu.Enabled = false; + this.YnvNameMenu.Name = "YnvNameMenu"; + this.YnvNameMenu.Size = new System.Drawing.Size(188, 22); + this.YnvNameMenu.Text = "(No .ynv file selected)"; + // + // toolStripSeparator17 + // + this.toolStripSeparator17.Name = "toolStripSeparator17"; + this.toolStripSeparator17.Size = new System.Drawing.Size(185, 6); + // + // YnvNewPolygonMenu + // + this.YnvNewPolygonMenu.Enabled = false; + this.YnvNewPolygonMenu.Name = "YnvNewPolygonMenu"; + this.YnvNewPolygonMenu.Size = new System.Drawing.Size(188, 22); + this.YnvNewPolygonMenu.Text = "New Polygon"; + this.YnvNewPolygonMenu.Click += new System.EventHandler(this.YnvNewPolygonMenu_Click); + // + // toolStripSeparator18 + // + this.toolStripSeparator18.Name = "toolStripSeparator18"; + this.toolStripSeparator18.Size = new System.Drawing.Size(185, 6); + // + // YnvAddToProjectMenu + // + this.YnvAddToProjectMenu.Enabled = false; + this.YnvAddToProjectMenu.Name = "YnvAddToProjectMenu"; + this.YnvAddToProjectMenu.Size = new System.Drawing.Size(188, 22); + this.YnvAddToProjectMenu.Text = "Add to Project"; + this.YnvAddToProjectMenu.Click += new System.EventHandler(this.YnvAddToProjectMenu_Click); + // + // YnvRemoveFromProjectMenu + // + this.YnvRemoveFromProjectMenu.Enabled = false; + this.YnvRemoveFromProjectMenu.Name = "YnvRemoveFromProjectMenu"; + this.YnvRemoveFromProjectMenu.Size = new System.Drawing.Size(188, 22); + this.YnvRemoveFromProjectMenu.Text = "Remove from Project"; + this.YnvRemoveFromProjectMenu.Click += new System.EventHandler(this.YnvRemoveFromProjectMenu_Click); + // + // TrainsNameMenu + // + this.TrainsNameMenu.Enabled = false; + this.TrainsNameMenu.Name = "TrainsNameMenu"; + this.TrainsNameMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsNameMenu.Text = "(No train track selected)"; + // + // toolStripSeparator19 + // + this.toolStripSeparator19.Name = "toolStripSeparator19"; + this.toolStripSeparator19.Size = new System.Drawing.Size(197, 6); + // + // TrainsNewNodeMenu + // + this.TrainsNewNodeMenu.Enabled = false; + this.TrainsNewNodeMenu.Name = "TrainsNewNodeMenu"; + this.TrainsNewNodeMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsNewNodeMenu.Text = "New Node"; + this.TrainsNewNodeMenu.Click += new System.EventHandler(this.TrainsNewNodeMenu_Click); + // + // toolStripSeparator20 + // + this.toolStripSeparator20.Name = "toolStripSeparator20"; + this.toolStripSeparator20.Size = new System.Drawing.Size(197, 6); + // + // TrainsAddToProjectMenu + // + this.TrainsAddToProjectMenu.Enabled = false; + this.TrainsAddToProjectMenu.Name = "TrainsAddToProjectMenu"; + this.TrainsAddToProjectMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsAddToProjectMenu.Text = "Add to Project"; + this.TrainsAddToProjectMenu.Click += new System.EventHandler(this.TrainsAddToProjectMenu_Click); + // + // TrainsRemoveFromProjectMenu + // + this.TrainsRemoveFromProjectMenu.Enabled = false; + this.TrainsRemoveFromProjectMenu.Name = "TrainsRemoveFromProjectMenu"; + this.TrainsRemoveFromProjectMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsRemoveFromProjectMenu.Text = "Remove from Project"; + this.TrainsRemoveFromProjectMenu.Click += new System.EventHandler(this.TrainsRemoveFromProjectMenu_Click); + // + // ScenarioNameMenu + // + this.ScenarioNameMenu.Enabled = false; + this.ScenarioNameMenu.Name = "ScenarioNameMenu"; + this.ScenarioNameMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNameMenu.Text = "(No scenario region selected)"; + // + // toolStripSeparator21 + // + this.toolStripSeparator21.Name = "toolStripSeparator21"; + this.toolStripSeparator21.Size = new System.Drawing.Size(225, 6); + // + // ScenarioNewPointMenu + // + this.ScenarioNewPointMenu.Enabled = false; + this.ScenarioNewPointMenu.Name = "ScenarioNewPointMenu"; + this.ScenarioNewPointMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewPointMenu.Text = "New Point (Blank)"; + this.ScenarioNewPointMenu.Click += new System.EventHandler(this.ScenarioNewPointMenu_Click); + // + // ScenarioNewPointFromSelectedMenu + // + this.ScenarioNewPointFromSelectedMenu.Enabled = false; + this.ScenarioNewPointFromSelectedMenu.Name = "ScenarioNewPointFromSelectedMenu"; + this.ScenarioNewPointFromSelectedMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewPointFromSelectedMenu.Text = "New Point (from Selected)"; + this.ScenarioNewPointFromSelectedMenu.Click += new System.EventHandler(this.ScenarioNewPointFromSelectedMenu_Click); + // + // ScenarioNewEntityOverrideMenu + // + this.ScenarioNewEntityOverrideMenu.Enabled = false; + this.ScenarioNewEntityOverrideMenu.Name = "ScenarioNewEntityOverrideMenu"; + this.ScenarioNewEntityOverrideMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewEntityOverrideMenu.Text = "New Entity Override"; + this.ScenarioNewEntityOverrideMenu.Click += new System.EventHandler(this.ScenarioNewEntityOverrideMenu_Click); + // + // ScenarioNewChainMenu + // + this.ScenarioNewChainMenu.Enabled = false; + this.ScenarioNewChainMenu.Name = "ScenarioNewChainMenu"; + this.ScenarioNewChainMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewChainMenu.Text = "New Chain"; + this.ScenarioNewChainMenu.Click += new System.EventHandler(this.ScenarioNewChainMenu_Click); + // + // ScenarioNewClusterMenu + // + this.ScenarioNewClusterMenu.Enabled = false; + this.ScenarioNewClusterMenu.Name = "ScenarioNewClusterMenu"; + this.ScenarioNewClusterMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewClusterMenu.Text = "New Cluster"; + this.ScenarioNewClusterMenu.Click += new System.EventHandler(this.ScenarioNewClusterMenu_Click); + // + // ScenarioImportChainMenu + // + this.ScenarioImportChainMenu.Enabled = false; + this.ScenarioImportChainMenu.Name = "ScenarioImportChainMenu"; + this.ScenarioImportChainMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioImportChainMenu.Text = "Import Chain..."; + this.ScenarioImportChainMenu.Click += new System.EventHandler(this.ScenarioImportChainMenu_Click); + // + // toolStripSeparator22 + // + this.toolStripSeparator22.Name = "toolStripSeparator22"; + this.toolStripSeparator22.Size = new System.Drawing.Size(225, 6); + // + // ScenarioAddToProjectMenu + // + this.ScenarioAddToProjectMenu.Enabled = false; + this.ScenarioAddToProjectMenu.Name = "ScenarioAddToProjectMenu"; + this.ScenarioAddToProjectMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioAddToProjectMenu.Text = "Add to Project"; + this.ScenarioAddToProjectMenu.Click += new System.EventHandler(this.ScenarioAddToProjectMenu_Click); + // + // ScenarioRemoveFromProjectMenu + // + this.ScenarioRemoveFromProjectMenu.Enabled = false; + this.ScenarioRemoveFromProjectMenu.Name = "ScenarioRemoveFromProjectMenu"; + this.ScenarioRemoveFromProjectMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioRemoveFromProjectMenu.Text = "Remove from Project"; + this.ScenarioRemoveFromProjectMenu.Click += new System.EventHandler(this.ScenarioRemoveFromProjectMenu_Click); + // + // ProjectForm2 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(813, 530); + this.Controls.Add(this.MainDockPanel); + this.Controls.Add(this.MainToolbar); + this.Controls.Add(this.MainMenu); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.IsMdiContainer = true; + this.MainMenuStrip = this.MainMenu; + this.Name = "ProjectForm2"; + this.Text = "Project - CodeWalker by dexyfex"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ProjectForm_FormClosing); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ProjectForm_FormClosed); + this.MainMenu.ResumeLayout(false); + this.MainMenu.PerformLayout(); + this.MainToolbar.ResumeLayout(false); + this.MainToolbar.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip MainMenu; + private System.Windows.Forms.ToolStripMenuItem FileMenu; + private System.Windows.Forms.ToolStripMenuItem EditMenu; + private System.Windows.Forms.ToolStripMenuItem RenderMenu; + private System.Windows.Forms.ToolStripMenuItem RenderShowGtavMapMenu; + private System.Windows.Forms.ToolStripMenuItem RenderShowProjectItemsMenu; + private System.Windows.Forms.ToolStripMenuItem ToolsMenu; + private System.Windows.Forms.ToolStripMenuItem ToolsImportMenyooXmlMenu; + private WeifenLuo.WinFormsUI.Docking.DockPanel MainDockPanel; + private System.Windows.Forms.ToolStripMenuItem ViewMenu; + private System.Windows.Forms.ToolStripMenuItem ViewProjectExplorerMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem ViewThemeMenu; + private System.Windows.Forms.ToolStripMenuItem ViewThemeBlueMenu; + private System.Windows.Forms.ToolStripMenuItem ViewThemeLightMenu; + private System.Windows.Forms.ToolStripMenuItem ViewThemeDarkMenu; + private WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender VSExtender; + private System.Windows.Forms.ToolStripMenuItem ToolsManifestGeneratorMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem FileNewMenu; + private System.Windows.Forms.ToolStripMenuItem FileNewProjectMenu; + private System.Windows.Forms.ToolStripMenuItem FileOpenMenu; + private System.Windows.Forms.ToolStripMenuItem FileOpenProjectMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem FileCloseProjectMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem FileSaveProjectMenu; + private System.Windows.Forms.ToolStripMenuItem FileSaveProjectAsMenu; + private System.Windows.Forms.ToolStripMenuItem FileNewYmapMenu; + private System.Windows.Forms.ToolStripMenuItem FileSaveItemMenu; + private System.Windows.Forms.ToolStripMenuItem FileSaveItemAsMenu; + private System.Windows.Forms.ToolStripMenuItem FileNewYndMenu; + private System.Windows.Forms.ToolStripMenuItem FileNewYnvMenu; + private System.Windows.Forms.ToolStripMenuItem FileNewTrainsMenu; + private System.Windows.Forms.ToolStripMenuItem FileNewScenarioMenu; + private System.Windows.Forms.ToolStripMenuItem FileOpenYmapMenu; + private System.Windows.Forms.ToolStripMenuItem FileOpenYndMenu; + private System.Windows.Forms.ToolStripMenuItem FileOpenYnvMenu; + private System.Windows.Forms.ToolStripMenuItem FileOpenTrainsMenu; + private System.Windows.Forms.ToolStripMenuItem FileOpenScenarioMenu; + private System.Windows.Forms.ToolStripMenuItem FileNewYtypMenu; + private System.Windows.Forms.ToolStripMenuItem FileOpenYtypMenu; + private System.Windows.Forms.SaveFileDialog SaveFileDialog; + private System.Windows.Forms.OpenFileDialog OpenFileDialog; + private System.Windows.Forms.ToolStrip MainToolbar; + private WinForms.ToolStripSplitButtonFix ToolbarNewButton; + private System.Windows.Forms.ToolStripButton ToolbarSaveButton; + private System.Windows.Forms.ToolStripButton ToolbarSaveAllButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripMenuItem ToolbarNewProjectMenu; + private WinForms.ToolStripSplitButtonFix ToolbarOpenButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + private System.Windows.Forms.ToolStripMenuItem ToolbarNewYmapMenu; + private System.Windows.Forms.ToolStripMenuItem ToolbarNewYtypMenu; + private System.Windows.Forms.ToolStripMenuItem ToolbarNewYndMenu; + private System.Windows.Forms.ToolStripMenuItem ToolbarNewYnvMenu; + private System.Windows.Forms.ToolStripMenuItem ToolbarNewTrainsMenu; + private System.Windows.Forms.ToolStripMenuItem ToolbarNewScenarioMenu; + private System.Windows.Forms.ToolStripMenuItem ToolbarOpenProjectMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripMenuItem ToolbarOpenYmapMenu; + private System.Windows.Forms.ToolStripMenuItem ToolbarOpenYtypMenu; + private System.Windows.Forms.ToolStripMenuItem ToolbarOpenYndMenu; + private System.Windows.Forms.ToolStripMenuItem ToolbarOpenYnvMenu; + private System.Windows.Forms.ToolStripMenuItem ToolbarOpenTrainsMenu; + private System.Windows.Forms.ToolStripMenuItem ToolbarOpenScenarioMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; + private System.Windows.Forms.ToolStripMenuItem EditUndoMenu; + private System.Windows.Forms.ToolStripMenuItem EditRedoMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator10; + private System.Windows.Forms.ToolStripMenuItem EditCutMenu; + private System.Windows.Forms.ToolStripMenuItem EditCopyMenu; + private System.Windows.Forms.ToolStripMenuItem EditPasteMenu; + private System.Windows.Forms.ToolStripMenuItem EditCloneMenu; + private System.Windows.Forms.ToolStripMenuItem EditDeleteMenu; + private System.Windows.Forms.ToolStripMenuItem YmapMenu; + private System.Windows.Forms.ToolStripMenuItem YtypMenu; + private System.Windows.Forms.ToolStripMenuItem YndMenu; + private System.Windows.Forms.ToolStripMenuItem YnvMenu; + private System.Windows.Forms.ToolStripMenuItem TrainsMenu; + private System.Windows.Forms.ToolStripMenuItem ScenarioMenu; + private System.Windows.Forms.ToolStripMenuItem YmapNameMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator11; + private System.Windows.Forms.ToolStripMenuItem YmapNewEntityMenu; + private System.Windows.Forms.ToolStripMenuItem YmapNewCarGenMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; + private System.Windows.Forms.ToolStripMenuItem YmapAddToProjectMenu; + private System.Windows.Forms.ToolStripMenuItem YmapRemoveFromProjectMenu; + private System.Windows.Forms.ToolStripMenuItem YtypNameMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator13; + private System.Windows.Forms.ToolStripMenuItem YtypNewArchetypeMenu; + private System.Windows.Forms.ToolStripMenuItem YndNameMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator14; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator15; + private System.Windows.Forms.ToolStripMenuItem YtypAddToProjectMenu; + private System.Windows.Forms.ToolStripMenuItem YtypRemoveFromProjectMenu; + private System.Windows.Forms.ToolStripMenuItem YndNewNodeMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator16; + private System.Windows.Forms.ToolStripMenuItem YndAddToProjectMenu; + private System.Windows.Forms.ToolStripMenuItem YndRemoveFromProjectMenu; + private System.Windows.Forms.ToolStripMenuItem YnvNameMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator17; + private System.Windows.Forms.ToolStripMenuItem YnvNewPolygonMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator18; + private System.Windows.Forms.ToolStripMenuItem YnvAddToProjectMenu; + private System.Windows.Forms.ToolStripMenuItem YnvRemoveFromProjectMenu; + private System.Windows.Forms.ToolStripMenuItem TrainsNameMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator19; + private System.Windows.Forms.ToolStripMenuItem TrainsNewNodeMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator20; + private System.Windows.Forms.ToolStripMenuItem TrainsAddToProjectMenu; + private System.Windows.Forms.ToolStripMenuItem TrainsRemoveFromProjectMenu; + private System.Windows.Forms.ToolStripMenuItem ScenarioNameMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator21; + private System.Windows.Forms.ToolStripMenuItem ScenarioNewPointMenu; + private System.Windows.Forms.ToolStripMenuItem ScenarioNewPointFromSelectedMenu; + private System.Windows.Forms.ToolStripMenuItem ScenarioNewEntityOverrideMenu; + private System.Windows.Forms.ToolStripMenuItem ScenarioNewChainMenu; + private System.Windows.Forms.ToolStripMenuItem ScenarioNewClusterMenu; + private System.Windows.Forms.ToolStripMenuItem ScenarioImportChainMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator22; + private System.Windows.Forms.ToolStripMenuItem ScenarioAddToProjectMenu; + private System.Windows.Forms.ToolStripMenuItem ScenarioRemoveFromProjectMenu; + } +} \ No newline at end of file diff --git a/Project/ProjectForm2.cs b/Project/ProjectForm2.cs new file mode 100644 index 0000000..6ba0bab --- /dev/null +++ b/Project/ProjectForm2.cs @@ -0,0 +1,4772 @@ +using CodeWalker.GameFiles; +using CodeWalker.Project.Panels; +using CodeWalker.Properties; +using CodeWalker.World; +using SharpDX; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using WeifenLuo.WinFormsUI.Docking; + +namespace CodeWalker.Project +{ + public partial class ProjectForm2 : Form + { + public WorldForm WorldForm { get; private set; } + public ThemeBase Theme { get; private set; } + public ProjectExplorerPanel ProjectExplorer { get; set; } + public ProjectPanel PreviewPanel { get; set; } + + + public GameFileCache GameFileCache { get; private set; } + public RpfManager RpfMan { get; private set; } + + + public bool IsProjectLoaded + { + get { return CurrentProjectFile != null; } + } + public ProjectFile CurrentProjectFile; + + private YmapFile CurrentYmapFile; + private YmapEntityDef CurrentEntity; + private YmapCarGen CurrentCarGen; + private YmapGrassInstanceBatch CurrentGrassBatch; + + private YtypFile CurrentYtypFile; + //private Archetype CurrentArchetype; + + private YndFile CurrentYndFile; + private YndNode CurrentPathNode; + private YndLink CurrentPathLink; + + private YnvFile CurrentYnvFile; + private YnvPoly CurrentNavPoly; + + private TrainTrack CurrentTrainTrack; + private TrainTrackNode CurrentTrainNode; + + private YmtFile CurrentScenario; + private ScenarioNode CurrentScenarioNode; + private MCScenarioChainingEdge CurrentScenarioChainEdge; + + private bool renderitems = true; + private bool hidegtavmap = false; + + private object projectsyncroot = new object(); + public object ProjectSyncRoot { get { return projectsyncroot; } } + + private Dictionary visibleynds = new Dictionary(); + private Dictionary visibleynvs = new Dictionary(); + private Dictionary visibletrains = new Dictionary(); + private Dictionary visiblescenarios = new Dictionary(); + + private bool ShowProjectItemInProcess = false; + + + public ProjectForm2(WorldForm worldForm = null) + { + WorldForm = worldForm; + + InitializeComponent(); + + SetTheme(Settings.Default.ProjectWindowTheme, false); + ShowDefaultPanels(); + + + if ((WorldForm != null) && (WorldForm.GameFileCache != null)) + { + GameFileCache = WorldForm.GameFileCache; + RpfMan = GameFileCache.RpfMan; + } + else + { + GameFileCache = GameFileCacheFactory.Create(); + new Thread(new ThreadStart(() => { + GTA5Keys.LoadFromPath(GTAFolder.CurrentGTAFolder, Settings.Default.Key); + GameFileCache.Init(UpdateStatus, UpdateError); + RpfMan = GameFileCache.RpfMan; + })).Start(); + } + + } + + private void UpdateStatus(string text) + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { UpdateStatus(text); })); + } + else + { + //TODO: status text + //StatusLabel.Text = text; + } + } + catch { } + } + private void UpdateError(string text) + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { UpdateError(text); })); + } + else + { + //TODO: error text + //ErrorLabel.Text = text; + } + } + catch { } + } + + + private void SetTheme(string themestr, bool changing = true) + { + if (changing && (CurrentProjectFile != null)) + { + if (MessageBox.Show("Project will be closed before changing the theme. Are you sure you want to continue?", "Theme change", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + } + + + CloseProject(); + + //string configFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "DockPanel.temp.config"); + //MainDockPanel.SaveAsXml(configFile); + CloseAllContents(); + + ProjectExplorer = null; + PreviewPanel = null; + + + foreach (ToolStripMenuItem menu in ViewThemeMenu.DropDownItems) + { + menu.Checked = false; + } + + Theme = null; + + switch (themestr) + { + default: + case "Blue": + Theme = new VS2015BlueTheme(); + ViewThemeBlueMenu.Checked = true; + break; + case "Light": + Theme = new VS2015LightTheme(); + ViewThemeLightMenu.Checked = true; + break; + case "Dark": + Theme = new VS2015DarkTheme(); + ViewThemeDarkMenu.Checked = true; + break; + } + + Settings.Default.ProjectWindowTheme = themestr; + Settings.Default.Save(); + + + Theme.Extender.FloatWindowFactory = new ProjectFloatWindowFactory(); + + MainDockPanel.Theme = Theme; + + var version = VisualStudioToolStripExtender.VsVersion.Vs2015; + VSExtender.SetStyle(MainMenu, version, Theme); + VSExtender.SetStyle(MainToolbar, version, Theme); + //VSExtender.SetStyle(MainStatusBar, version, theme); + + + //if (File.Exists(configFile)) MainDockPanel.LoadFromXml(configFile, m_deserializeDockContent); + + + if (changing) + { + ShowDefaultPanels(); + } + + + } + + private T FindPanel(Func findFunc) where T : ProjectPanel + { + foreach (var pane in MainDockPanel.Panes) + { + foreach (var content in pane.Contents) + { + var test = content as T; + if ((test != null) && findFunc(test)) + { + return test; + } + } + } + return null; + } + private void ShowDefaultPanels() + { + ShowProjectExplorer(); + ShowWelcomePanel(); + } + private void ShowProjectExplorer() + { + if ((ProjectExplorer == null) || (ProjectExplorer.IsDisposed) || (ProjectExplorer.Disposing)) + { + ProjectExplorer = new ProjectExplorerPanel(this); + ProjectExplorer.OnItemSelected += ProjectExplorer_OnItemSelected; + ProjectExplorer.OnItemActivated += ProjectExplorer_OnItemActivated; + ProjectExplorer.SetTheme(Theme); + ProjectExplorer.Show(MainDockPanel, DockState.DockLeft); + } + else + { + ProjectExplorer.Show(); + } + } + private void ShowWelcomePanel() + { + ShowPreviewPanel(() => { return new WelcomePanel(); }); + } + private void ShowPreviewPanel(Func createFunc, Action updateAction = null) where T : ProjectPanel + { + if ((PreviewPanel != null) && (PreviewPanel is T)) + { + PreviewPanel.BringToFront();//.Show(); + updateAction?.Invoke(PreviewPanel as T); + } + else + { + var panel = createFunc(); + panel.HideOnClose = true; + panel.SetTheme(Theme); + panel.Show(MainDockPanel, DockState.Document); + updateAction?.Invoke(panel); + if (PreviewPanel != null) + { + PreviewPanel.Close(); + } + PreviewPanel = panel; + } + } + private void ShowPanel(bool promote, Func createFunc, Action updateAction, Func findFunc) where T : ProjectPanel + { + T found = FindPanel(findFunc); + if ((found != null) && (found != PreviewPanel)) + { + found.BringToFront();//.Show(); + updateAction?.Invoke(found); + } + else + { + if (promote) + { + PromoteIfPreviewPanel(PreviewPanel); + if (found != null) + { + found.BringToFront();//.Show(); + updateAction?.Invoke(found); + } + else + { + ShowPreviewPanel(createFunc, updateAction); + PreviewPanel = null; + } + } + else + { + ShowPreviewPanel(createFunc, updateAction); + } + } + } + private void ShowEditProjectPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditProjectPanel(this); }, //createFunc + (panel) => { panel.SetProject(CurrentProjectFile); }, //updateFunc + (panel) => { return true; }); //findFunc + } + private void ShowEditProjectManifestPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditProjectManifestPanel(this); }, //createFunc + (panel) => { panel.SetProject(CurrentProjectFile); }, //updateFunc + (panel) => { return true; }); //findFunc + } + private void ShowEditYmapPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditYmapPanel(this); }, //createFunc + (panel) => { panel.SetYmap(CurrentYmapFile); }, //updateFunc + (panel) => { return panel.Ymap == CurrentYmapFile; }); //findFunc + } + private void ShowEditYmapEntityPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditYmapEntityPanel(this); }, //createFunc + (panel) => { panel.SetEntity(CurrentEntity); }, //updateFunc + (panel) => { return panel.CurrentEntity == CurrentEntity; }); //findFunc + } + private void ShowEditYmapCarGenPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditYmapCarGenPanel(this); }, //createFunc + (panel) => { panel.SetCarGen(CurrentCarGen); }, //updateFunc + (panel) => { return panel.CurrentCarGen == CurrentCarGen; }); //findFunc + } + private void ShowEditYmapGrassBatchPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditYmapGrassPanel(this); }, //createFunc + (panel) => { panel.SetBatch(CurrentGrassBatch); }, //updateFunc + (panel) => { return panel.CurrentBatch == CurrentGrassBatch; }); //findFunc + } + private void ShowEditYtypPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditYtypPanel(this); }, //createFunc + (panel) => { panel.SetYtyp(CurrentYtypFile); }, //updateFunc + (panel) => { return panel.Ytyp == CurrentYtypFile; }); //findFunc + } + private void ShowEditYndPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditYndPanel(this); }, //createFunc + (panel) => { panel.SetYnd(CurrentYndFile); }, //updateFunc + (panel) => { return panel.Ynd == CurrentYndFile; }); //findFunc + } + private void ShowEditYndNodePanel(bool promote) + { + ShowPanel(promote, + () => { return new EditYndNodePanel(this); }, //createFunc + (panel) => { panel.SetPathNode(CurrentPathNode); }, //updateFunc + (panel) => { return panel.CurrentPathNode == CurrentPathNode; }); //findFunc + } + private void ShowEditYnvPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditYnvPanel(this); }, //createFunc + (panel) => { panel.SetYnv(CurrentYnvFile); }, //updateFunc + (panel) => { return panel.Ynv == CurrentYnvFile; }); //findFunc + } + private void ShowEditYnvPolyPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditYnvPolyPanel(this); }, //createFunc + (panel) => { panel.SetYnvPoly(CurrentNavPoly); }, //updateFunc + (panel) => { return panel.YnvPoly == CurrentNavPoly; }); //findFunc + } + private void ShowEditTrainTrackPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditTrainTrackPanel(this); }, //createFunc + (panel) => { panel.SetTrainTrack(CurrentTrainTrack); }, //updateFunc + (panel) => { return panel.Track == CurrentTrainTrack; }); //findFunc + } + private void ShowEditTrainNodePanel(bool promote) + { + ShowPanel(promote, + () => { return new EditTrainNodePanel(this); }, //createFunc + (panel) => { panel.SetTrainNode(CurrentTrainNode); }, //updateFunc + (panel) => { return panel.TrainNode == CurrentTrainNode; }); //findFunc + } + private void ShowEditScenarioYmtPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditScenarioYmtPanel(this); }, //createFunc + (panel) => { panel.SetScenarioYmt(CurrentScenario); }, //updateFunc + (panel) => { return panel.CurrentScenario == CurrentScenario; }); //findFunc + } + private void ShowEditScenarioNodePanel(bool promote) + { + ShowPanel(promote, + () => { return new EditScenarioNodePanel(this); }, //createFunc + (panel) => { panel.SetScenarioNode(CurrentScenarioNode); }, //updateFunc + (panel) => { return panel.CurrentScenarioNode == CurrentScenarioNode; }); //findFunc + } + + private void ShowCurrentProjectItem(bool promote) + { + if (CurrentEntity != null) + { + ShowEditYmapEntityPanel(promote); + } + else if (CurrentCarGen != null) + { + ShowEditYmapCarGenPanel(promote); + } + else if (CurrentGrassBatch != null) + { + ShowEditYmapGrassBatchPanel(promote); + } + else if (CurrentYmapFile != null) + { + ShowEditYmapPanel(promote); + } + if (CurrentYtypFile != null) + { + ShowEditYtypPanel(promote); + } + if (CurrentPathNode != null) + { + ShowEditYndNodePanel(promote); + } + else if (CurrentYndFile != null) + { + ShowEditYndPanel(promote); + } + if (CurrentNavPoly != null) + { + ShowEditYnvPolyPanel(promote); + } + else if (CurrentYnvFile != null) + { + ShowEditYnvPanel(promote); + } + if (CurrentTrainNode != null) + { + ShowEditTrainNodePanel(promote); + } + else if (CurrentTrainTrack != null) + { + ShowEditTrainTrackPanel(promote); + } + if (CurrentScenarioNode != null) + { + ShowEditScenarioNodePanel(promote); + } + else if (CurrentScenario != null) + { + ShowEditScenarioYmtPanel(promote); + } + } + public void ShowProjectItem(object item, bool promote) + { + ShowProjectItemInProcess = true; + + SetProjectItem(item); + + if (item == CurrentProjectFile) + { + ShowEditProjectPanel(promote); + } + else + { + ShowCurrentProjectItem(promote); + } + + ShowProjectItemInProcess = false; + } + public void SetProjectItem(object item) + { + CurrentYmapFile = item as YmapFile; + CurrentEntity = item as YmapEntityDef; + CurrentCarGen = item as YmapCarGen; + CurrentGrassBatch = item as YmapGrassInstanceBatch; + CurrentYtypFile = item as YtypFile; + CurrentYndFile = item as YndFile; + CurrentPathNode = item as YndNode; + CurrentYnvFile = item as YnvFile; + CurrentNavPoly = item as YnvPoly; + CurrentTrainTrack = item as TrainTrack; + CurrentTrainNode = item as TrainTrackNode; + CurrentScenario = item as YmtFile; + CurrentScenarioNode = item as ScenarioNode; + CurrentScenarioChainEdge = item as MCScenarioChainingEdge; + + if (CurrentEntity != null) + { + CurrentYmapFile = CurrentEntity.Ymap; + } + else if (CurrentCarGen != null) + { + CurrentYmapFile = CurrentCarGen.Ymap; + } + else if (CurrentGrassBatch != null) + { + CurrentYmapFile = CurrentGrassBatch.Ymap; + } + if (CurrentPathNode != null) + { + CurrentYndFile = CurrentPathNode.Ynd; + } + if (CurrentNavPoly != null) + { + CurrentYnvFile = CurrentNavPoly.Ynv; + } + if (CurrentTrainNode != null) + { + CurrentTrainTrack = CurrentTrainNode.Track; + } + if ((CurrentScenario != null) && (CurrentScenario.ScenarioRegion == null)) + { + CurrentScenario = null;//incase other types of ymt files make it into the project... + } + if (CurrentScenarioNode != null) + { + CurrentScenario = CurrentScenarioNode.Ymt; + } + if (CurrentScenarioChainEdge != null) + { + CurrentScenario = CurrentScenarioChainEdge.Region?.Ymt; + } + + RefreshUI(); + + } + + private void ClosePanel(Func findFunc) where T : ProjectPanel + { + var panel = FindPanel(findFunc); + if (PreviewPanel == panel) + { + PreviewPanel = null; + } + panel?.Close(); + } + private void CloseAllDocuments() + { + if (MainDockPanel.DocumentStyle == DocumentStyle.SystemMdi) + { + foreach (Form form in MdiChildren) form.Close(); + } + else + { + foreach (IDockContent document in MainDockPanel.DocumentsToArray()) + { + // IMPORANT: dispose all panes. + document.DockHandler.DockPanel = null; + document.DockHandler.Close(); + } + } + } + private void CloseAllContents() + { + // we don't want to create another instance of tool window, set DockPanel to null + if (ProjectExplorer != null) ProjectExplorer.DockPanel = null; + if (PreviewPanel != null) PreviewPanel.DockPanel = null; + + // Close all other document windows + CloseAllDocuments(); + + // IMPORTANT: dispose all float windows. + foreach (var window in MainDockPanel.FloatWindows.ToList()) window.Dispose(); + + System.Diagnostics.Debug.Assert(MainDockPanel.Panes.Count == 0); + System.Diagnostics.Debug.Assert(MainDockPanel.Contents.Count == 0); + System.Diagnostics.Debug.Assert(MainDockPanel.FloatWindows.Count == 0); + } + private void CloseAllProjectItems() + { + foreach (var pane in MainDockPanel.Panes.ToArray()) + { + foreach (var content in pane.Contents.ToArray()) + { + var panel = content as ProjectPanel; + if (panel?.Tag != null) + { + panel.Close(); + } + } + } + } + + private void PromoteIfPreviewPanel(IDockContent panel) + { + if (panel == PreviewPanel) + { + if (PreviewPanel != null) + { + PreviewPanel.HideOnClose = false; + } + PreviewPanel = null; + } + } + private void PromoteIfPreviewPanelActive() + { + PromoteIfPreviewPanel(MainDockPanel.ActiveContent); + } + + + + //######## Public methods + + public void NewProject() + { + if (CurrentProjectFile != null) + { + ////unload current project first + CloseProject(); + } + + CurrentProjectFile = new ProjectFile(); + CurrentProjectFile.Name = "New CodeWalker Project"; + CurrentProjectFile.Version = 1; + CurrentProjectFile.HasChanged = true; + LoadProjectUI(); + } + public void OpenProject() + { + string file = ShowOpenDialog("CodeWalker Projects|*.cwproj", string.Empty); + if (string.IsNullOrEmpty(file)) + { + return; + } + + CloseProject(); + + CurrentProjectFile = new ProjectFile(); + CurrentProjectFile.Load(file); + + string cpath = new FileInfo(CurrentProjectFile.Filepath).Directory.FullName; + + foreach (var ymap in CurrentProjectFile.YmapFiles) + { + string filename = ymap.FilePath; + if (!File.Exists(filename)) + { + filename = cpath + "\\" + filename; + } + if (File.Exists(filename)) + { + LoadYmapFromFile(ymap, filename); + } + else + { + MessageBox.Show("Couldn't find file: " + filename); + } + } + + foreach (var ytyp in CurrentProjectFile.YtypFiles) + { + string filename = ytyp.FilePath; + if (!File.Exists(filename)) + { + filename = cpath + "\\" + filename; + } + if (File.Exists(filename)) + { + LoadYtypFromFile(ytyp, filename); + } + else + { + MessageBox.Show("Couldn't find file: " + filename); + } + } + + foreach (var ynd in CurrentProjectFile.YndFiles) + { + string filename = ynd.FilePath; + if (!File.Exists(filename)) + { + filename = cpath + "\\" + filename; + } + if (File.Exists(filename)) + { + LoadYndFromFile(ynd, filename); + } + else + { + MessageBox.Show("Couldn't find file: " + filename); + } + } + + foreach (var ynv in CurrentProjectFile.YnvFiles) + { + string filename = ynv.FilePath; + if (!File.Exists(filename)) + { + filename = cpath + "\\" + filename; + } + if (File.Exists(filename)) + { + LoadYnvFromFile(ynv, filename); + } + else + { + MessageBox.Show("Couldn't find file: " + filename); + } + } + + foreach (var track in CurrentProjectFile.TrainsFiles) + { + string filename = track.FilePath; + if (!File.Exists(filename)) + { + filename = cpath + "\\" + filename; + } + if (File.Exists(filename)) + { + LoadTrainTrackFromFile(track, filename); + } + else + { + MessageBox.Show("Couldn't find file: " + filename); + } + } + + foreach (var scenario in CurrentProjectFile.ScenarioFiles) + { + string filename = scenario.FilePath; + if (!File.Exists(filename)) + { + filename = cpath + "\\" + filename; + } + if (File.Exists(filename)) + { + LoadScenarioFromFile(scenario, filename); + } + else + { + MessageBox.Show("Couldn't find file: " + filename); + } + } + + + LoadProjectUI(); + } + public void CloseProject() + { + if (CurrentProjectFile == null) return; + + foreach (var ymap in CurrentProjectFile.YmapFiles) + { + if ((ymap != null) && (ymap.HasChanged)) + { + //save the current ymap first? + if (MessageBox.Show("Would you like to save " + ymap.Name + " before closing?", "Save .ymap before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + CurrentYmapFile = ymap; + SaveYmap(); + } + } + } + + foreach (var ytyp in CurrentProjectFile.YtypFiles) + { + if ((ytyp != null) && (ytyp.HasChanged)) + { + //save the current ytyp first? + if (MessageBox.Show("Would you like to save " + ytyp.Name + " before closing?", "Save .ytyp before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + CurrentYtypFile = ytyp; + SaveYtyp(); + } + } + } + + foreach (var ynd in CurrentProjectFile.YndFiles) + { + if ((ynd != null) && (ynd.HasChanged)) + { + //save the current ynd first? + if (MessageBox.Show("Would you like to save " + ynd.Name + " before closing?", "Save .ynd before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + CurrentYndFile = ynd; + SaveYnd(); + } + } + } + + foreach (var ynv in CurrentProjectFile.YnvFiles) + { + if ((ynv != null) && (ynv.HasChanged)) + { + //save the current ynv first? + if (MessageBox.Show("Would you like to save " + ynv.Name + " before closing?", "Save .ynv before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + CurrentYnvFile = ynv; + SaveYnv(); + } + } + } + + foreach (var trains in CurrentProjectFile.TrainsFiles) + { + if ((trains != null) && (trains.HasChanged)) + { + //save the current trains file first? + if (MessageBox.Show("Would you like to save " + trains.Name + " before closing?", "Save trains file before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + CurrentTrainTrack = trains; + SaveTrainTrack(); + } + } + } + + foreach (var scenario in CurrentProjectFile.ScenarioFiles) + { + if ((scenario != null) && (scenario.HasChanged)) + { + //save the current scenario file first? + if (MessageBox.Show("Would you like to save " + scenario.Name + " before closing?", "Save scenario file before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + CurrentScenario = scenario; + SaveScenario(); + } + } + } + + + if (CurrentProjectFile.HasChanged) + { + //save the current project first? + if (MessageBox.Show("Would you like to save the current project before closing?", "Save project before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + SaveProject(); + } + } + + CloseAllProjectItems(); + + CurrentProjectFile = null; + CurrentYmapFile = null; + CurrentYtypFile = null; + CurrentYndFile = null; + CurrentYnvFile = null; + CurrentTrainTrack = null; + CurrentScenario = null; + + LoadProjectUI(); + + + if (WorldForm != null) + { + WorldForm.SelectItem(null);//make sure current selected item isn't still selected... + } + } + public void SaveProject(bool saveas = false) + { + if (CurrentProjectFile == null) return; + if (string.IsNullOrEmpty(CurrentProjectFile.Filepath) || saveas) + { + string fileName = ShowSaveDialog("CodeWalker Projects|*.cwproj", CurrentProjectFile.Filepath); + if (string.IsNullOrEmpty(fileName)) + { return; } //user cancelled + + string oldpath = CurrentProjectFile.Filepath; + CurrentProjectFile.Filepath = fileName; + CurrentProjectFile.Filename = new FileInfo(fileName).Name; + CurrentProjectFile.UpdateFilenames(oldpath); + } + + CurrentProjectFile.Save(); + + SetProjectHasChanged(false); + } + + public void Save() + { + if (CurrentYmapFile != null) + { + SaveYmap(); + } + else if (CurrentYtypFile != null) + { + SaveYtyp(); + } + else if (CurrentYndFile != null) + { + SaveYnd(); + } + else if (CurrentYnvFile != null) + { + SaveYnv(); + } + else if (CurrentTrainTrack != null) + { + SaveTrainTrack(); + } + else if (CurrentScenario != null) + { + SaveScenario(); + } + else if (CurrentProjectFile != null) + { + SaveProject(); + } + } + public void SaveAll() + { + if (CurrentProjectFile != null) + { + if (CurrentProjectFile.YmapFiles != null) + { + var cymap = CurrentYmapFile; + foreach (var ymap in CurrentProjectFile.YmapFiles) + { + CurrentYmapFile = ymap; + SaveYmap(); + } + CurrentYmapFile = cymap; + //ShowEditYmapPanel(false); + } + + if (CurrentProjectFile.YtypFiles != null) + { + var cytyp = CurrentYtypFile; + foreach (var ytyp in CurrentProjectFile.YtypFiles) + { + CurrentYtypFile = ytyp; + SaveYtyp(); + } + CurrentYtypFile = cytyp; + //ShowEditYtypPanel(false); + } + + if (CurrentProjectFile.YndFiles != null) + { + var cynd = CurrentYndFile; + foreach (var ynd in CurrentProjectFile.YndFiles) + { + CurrentYndFile = ynd; + SaveYnd(); + } + CurrentYndFile = cynd; + //ShowEditYndPanel(false); + } + + if (CurrentProjectFile.YnvFiles != null) + { + var cynv = CurrentYnvFile; + foreach (var ynv in CurrentProjectFile.YnvFiles) + { + CurrentYnvFile = ynv; + SaveYnv(); + } + CurrentYnvFile = cynv; + //ShowEditYnvPanel(false); + } + + if (CurrentProjectFile.TrainsFiles != null) + { + var ctrack = CurrentTrainTrack; + foreach (var track in CurrentProjectFile.TrainsFiles) + { + CurrentTrainTrack = track; + SaveYnd(); + } + CurrentTrainTrack = ctrack; + //ShowEditTrainTrackPanel(false); + } + + if (CurrentProjectFile.ScenarioFiles != null) + { + var cscen = CurrentScenario; + foreach (var scen in CurrentProjectFile.ScenarioFiles) + { + CurrentScenario = scen; + SaveScenario(); + } + CurrentScenario = cscen; + //ShowEditScenarioPanel(false); + } + + + SaveProject(); + } + } + public void SaveCurrentItem(bool saveas = false) + { + if (CurrentYmapFile != null) + { + SaveYmap(saveas); + } + else if (CurrentYtypFile != null) + { + SaveYtyp(saveas); + } + else if (CurrentYndFile != null) + { + SaveYnd(saveas); + } + else if (CurrentYnvFile != null) + { + SaveYnv(saveas); + } + else if (CurrentTrainTrack != null) + { + SaveTrainTrack(saveas); + } + else if (CurrentScenario != null) + { + SaveScenario(saveas); + } + } + + + + public void NewYmap() + { + if (CurrentProjectFile == null) + { + NewProject(); + } + if (CurrentProjectFile == null) return; + + int testi = 1; + string fname = string.Empty; + bool filenameok = false; + while (!filenameok) + { + fname = "map" + testi.ToString() + ".ymap"; + filenameok = !CurrentProjectFile.ContainsYmap(fname); + testi++; + } + + lock (projectsyncroot) + { + YmapFile ymap = CurrentProjectFile.AddYmapFile(fname); + if (ymap != null) + { + ymap.Loaded = true; + ymap.HasChanged = true; //new ymap, flag as not saved + ymap._CMapData.contentFlags = 65; //stream flags value + } + } + + CurrentProjectFile.HasChanged = true; + + LoadProjectTree(); + } + public void OpenYmap() + { + string[] files = ShowOpenDialogMulti("Ymap files|*.ymap", string.Empty); + if (files == null) + { + return; + } + + if (CurrentProjectFile == null) + { + NewProject(); + } + + foreach (string file in files) + { + if (!File.Exists(file)) continue; + + var ymap = CurrentProjectFile.AddYmapFile(file); + + if (ymap != null) + { + SetProjectHasChanged(true); + + LoadYmapFromFile(ymap, file); + + LoadProjectTree(); + } + else + { + MessageBox.Show("Couldn't add\n" + file + "\n - the file already exists in the project."); + } + + } + } + public void SaveYmap(bool saveas = false) + { + if (CurrentYmapFile == null) return; + string ymapname = CurrentYmapFile.Name; + string filepath = CurrentYmapFile.FilePath; + if (string.IsNullOrEmpty(filepath)) + { + filepath = ymapname; + } + string origfile = filepath; + if (!File.Exists(filepath)) + { + saveas = true; + } + + + byte[] data; + lock (projectsyncroot) //need to sync writes to ymap objects... + { + saveas = saveas || string.IsNullOrEmpty(filepath); + if (saveas) + { + filepath = ShowSaveDialog("Ymap files|*.ymap", filepath); + if (string.IsNullOrEmpty(filepath)) + { return; } + + string newname = Path.GetFileNameWithoutExtension(filepath); + JenkIndex.Ensure(newname); + CurrentYmapFile.FilePath = filepath; + CurrentYmapFile.RpfFileEntry.Name = new FileInfo(filepath).Name; + CurrentYmapFile.Name = CurrentYmapFile.RpfFileEntry.Name; + CurrentYmapFile._CMapData.name = new MetaHash(JenkHash.GenHash(newname)); + } + + data = CurrentYmapFile.Save(); + } + + + if (data != null) + { + File.WriteAllBytes(filepath, data); + } + + SetYmapHasChanged(false); + + if (saveas) + { + //ShowEditYmapPanel(false); + if (CurrentProjectFile != null) + { + string origpath = CurrentProjectFile.GetRelativePath(origfile); + string newpath = CurrentProjectFile.GetRelativePath(CurrentYmapFile.FilePath); + + if (!CurrentProjectFile.RenameYmap(origpath, newpath)) + { //couldn't rename it in the project? + MessageBox.Show("Couldn't rename ymap in project! This shouldn't happen - check the project file XML."); + } + } + SetProjectHasChanged(true); + SetCurrentSaveItem(); + } + + if (CurrentYmapFile.SaveWarnings != null) + { + string w = string.Join("\n", CurrentYmapFile.SaveWarnings); + MessageBox.Show(CurrentYmapFile.SaveWarnings.Count.ToString() + " warnings were generated while saving the ymap:\n" + w); + CurrentYmapFile.SaveWarnings = null;//clear it out for next time.. + } + } + public void AddYmapToProject(YmapFile ymap) + { + if (ymap == null) return; + if (CurrentProjectFile == null) + { + NewProject(); + } + if (YmapExistsInProject(ymap)) return; + if (CurrentProjectFile.AddYmapFile(ymap)) + { + ymap.HasChanged = true; + CurrentProjectFile.HasChanged = true; + LoadProjectTree(); + } + CurrentYmapFile = ymap; + RefreshUI(); + if (CurrentEntity != null) + { + ProjectExplorer?.TrySelectEntityTreeNode(CurrentEntity); + } + else if (CurrentCarGen != null) + { + ProjectExplorer?.TrySelectCarGenTreeNode(CurrentCarGen); + } + } + public void RemoveYmapFromProject() + { + if (CurrentYmapFile == null) return; + if (CurrentProjectFile == null) return; + CurrentProjectFile.RemoveYmapFile(CurrentYmapFile); + CurrentYmapFile = null; + LoadProjectTree(); + RefreshUI(); + } + public bool YmapExistsInProject(YmapFile ymap) + { + if (ymap == null) return false; + if (CurrentProjectFile == null) return false; + return CurrentProjectFile.ContainsYmap(ymap); + } + + public void NewEntity(YmapEntityDef copy = null, bool copyPosition = false) + { + if (CurrentYmapFile == null) return; + + float spawndist = 5.0f; //use archetype BSradius if starting with a copy... + if (copy != null) + { + spawndist = copy.BSRadius * 2.5f; + } + bool cp = copyPosition && (copy != null); + Vector3 pos = cp ? copy.Position : GetSpawnPos(spawndist); + + + CEntityDef cent = new CEntityDef(); + + if (copy != null) + { + cent = copy.CEntityDef; + //TODO: copy entity extensions! + } + else + { + cent.archetypeName = new MetaHash(JenkHash.GenHash("prop_alien_egg_01")); + cent.rotation = new Vector4(0, 0, 0, 1); + cent.scaleXY = 1.0f; + cent.scaleZ = 1.0f; + cent.flags = 1572872; + cent.parentIndex = -1; + cent.lodDist = 200.0f; + cent.lodLevel = Unk_1264241711.LODTYPES_DEPTH_ORPHANHD; + cent.priorityLevel = Unk_648413703.PRI_REQUIRED; + cent.ambientOcclusionMultiplier = 255; + cent.artificialAmbientOcclusion = 255; + } + + cent.position = pos; + + + YmapEntityDef ent = new YmapEntityDef(CurrentYmapFile, 0, ref cent); + + ent.SetArchetype(GameFileCache.GetArchetype(cent.archetypeName)); + + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + CurrentYmapFile.AddEntity(ent); + } + } + else + { + CurrentYmapFile.AddEntity(ent); + } + + + LoadProjectTree(); + + ProjectExplorer?.TrySelectEntityTreeNode(ent); + CurrentEntity = ent; + ShowEditYmapEntityPanel(false); + } + public void AddEntityToProject() + { + if (CurrentEntity == null) return; + + if (CurrentEntity.Ymap == null) + { + MessageBox.Show("Sorry, interior entities cannot currently be added to the project."); + return; + } + + CurrentYmapFile = CurrentEntity.Ymap; + if (!YmapExistsInProject(CurrentYmapFile)) + { + var ent = CurrentEntity; + CurrentYmapFile.HasChanged = true; + AddYmapToProject(CurrentYmapFile); + + CurrentEntity = ent; //bug fix for some reason the treeview selects the project node here. + CurrentYmapFile = ent.Ymap; + ProjectExplorer?.TrySelectEntityTreeNode(ent); + } + } + public bool DeleteEntity() + { + if (CurrentYmapFile == null) return false; + if (CurrentEntity == null) return false; + if (CurrentEntity.Ymap != CurrentYmapFile) return false; + if (CurrentYmapFile.AllEntities == null) return false; //nothing to delete.. + if (CurrentYmapFile.RootEntities == null) return false; //nothing to delete.. + + if (CurrentEntity._CEntityDef.numChildren != 0) + { + MessageBox.Show("This entity's numChildren is not 0 - deleting entities with children is not currently supported by CodeWalker."); + return true; + } + + int idx = CurrentEntity.Index; + for (int i = idx + 1; i < CurrentYmapFile.AllEntities.Length; i++) + { + var ent = CurrentYmapFile.AllEntities[i]; + if (ent._CEntityDef.numChildren != 0) + { + MessageBox.Show("There are other entities present in this .ymap that have children. Deleting this entity is not currently supported by CodeWalker."); + return true; + } + } + + if (MessageBox.Show("Are you sure you want to delete this entity?\n" + CurrentEntity._CEntityDef.archetypeName.ToString() + "\n" + CurrentEntity.Position.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentYmapFile.RemoveEntity(CurrentEntity); + //WorldForm.SelectItem(null, null, null); + } + } + else + { + res = CurrentYmapFile.RemoveEntity(CurrentEntity); + } + if (!res) + { + MessageBox.Show("Entity.Index didn't match the index of the entity in the ymap. This shouldn't happen, check LOD linkages!"); + } + + var delent = CurrentEntity; + var delymap = CurrentYmapFile; + + ProjectExplorer?.RemoveEntityTreeNode(delent); + ProjectExplorer?.SetYmapHasChanged(delymap, true); + + ClosePanel((EditYmapEntityPanel p) => { return p.Tag == delent; }); + + CurrentEntity = null; + + return true; + } + public bool IsCurrentEntity(YmapEntityDef ent) + { + return CurrentEntity == ent; + } + + public void NewCarGen(YmapCarGen copy = null, bool copyPosition = false) + { + if (CurrentYmapFile == null) return; + + Vector3 pos = GetSpawnPos(10.0f); + + CCarGen ccg = new CCarGen(); + + if (copy != null) + { + ccg = copy.CCarGen; + } + else + { + ccg.flags = 3680; + ccg.orientX = 5.0f; + ccg.perpendicularLength = 2.6f; + //TODO: set default values for cargen + } + + if (!copyPosition || (copy == null)) + { + ccg.position = pos; + } + + + YmapCarGen cg = new YmapCarGen(CurrentYmapFile, ccg); + + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + CurrentYmapFile.AddCarGen(cg); + } + } + else + { + CurrentYmapFile.AddCarGen(cg); + } + + + LoadProjectTree(); + + ProjectExplorer?.TrySelectCarGenTreeNode(cg); + CurrentCarGen = cg; + ShowEditYmapCarGenPanel(false); + } + public void AddCarGenToProject() + { + if (CurrentCarGen == null) return; + + CurrentYmapFile = CurrentCarGen.Ymap; + if (!YmapExistsInProject(CurrentYmapFile)) + { + var cargen = CurrentCarGen; + CurrentYmapFile.HasChanged = true; + AddYmapToProject(CurrentYmapFile); + + CurrentCarGen = cargen; //bug fix for some reason the treeview selects the project node here. + CurrentYmapFile = cargen.Ymap; + ProjectExplorer?.TrySelectCarGenTreeNode(cargen); + } + } + public bool DeleteCarGen() + { + if (CurrentYmapFile == null) return false; + if (CurrentCarGen == null) return false; + if (CurrentCarGen.Ymap != CurrentYmapFile) return false; + if (CurrentYmapFile.CarGenerators == null) return false; //nothing to delete.. + + if (MessageBox.Show("Are you sure you want to delete this car generator?\n" + CurrentCarGen.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentYmapFile.RemoveCarGen(CurrentCarGen); + //WorldForm.SelectItem(null, null, null); + } + } + else + { + res = CurrentYmapFile.RemoveCarGen(CurrentCarGen); + } + if (!res) + { + MessageBox.Show("Unable to delete the car generator. This shouldn't happen!"); + } + + var delgen = CurrentCarGen; + + ProjectExplorer?.RemoveCarGenTreeNode(CurrentCarGen); + ProjectExplorer?.SetYmapHasChanged(CurrentYmapFile, true); + + ClosePanel((EditYmapCarGenPanel p) => { return p.Tag == delgen; }); + + CurrentCarGen = null; + + return true; + } + public bool IsCurrentCarGen(YmapCarGen cargen) + { + return CurrentCarGen == cargen; + } + + + + public void NewYtyp() + { + if (CurrentProjectFile == null) + { + NewProject(); + } + if (CurrentProjectFile == null) return; + + int testi = 1; + string fname = string.Empty; + bool filenameok = false; + while (!filenameok) + { + fname = "types" + testi.ToString() + ".ytyp"; + filenameok = !CurrentProjectFile.ContainsYtyp(fname); + testi++; + } + + lock (projectsyncroot) + { + YtypFile ytyp = CurrentProjectFile.AddYtypFile(fname); + if (ytyp != null) + { + //ytyp.Loaded = true; + ytyp.HasChanged = true; //new ytyp, flag as not saved + } + } + + CurrentProjectFile.HasChanged = true; + + LoadProjectTree(); + } + public void OpenYtyp() + { + string[] files = ShowOpenDialogMulti("Ytyp files|*.ytyp", string.Empty); + if (files == null) + { + return; + } + + if (CurrentProjectFile == null) + { + NewProject(); + } + + foreach (string file in files) + { + if (!File.Exists(file)) continue; + + var ytyp = CurrentProjectFile.AddYtypFile(file); + + if (ytyp != null) + { + SetProjectHasChanged(true); + + LoadYtypFromFile(ytyp, file); + + LoadProjectTree(); + } + else + { + MessageBox.Show("Couldn't add\n" + file + "\n - the file already exists in the project."); + } + + } + } + public void SaveYtyp(bool saveas = false) //TODO! + { + } + public void AddYtypToProject(YtypFile ytyp) + { + if (ytyp == null) return; + if (CurrentProjectFile == null) + { + NewProject(); + } + if (YtypExistsInProject(ytyp)) return; + if (CurrentProjectFile.AddYtypFile(ytyp)) + { + ytyp.HasChanged = true; + CurrentProjectFile.HasChanged = true; + LoadProjectTree(); + } + CurrentYtypFile = ytyp; + RefreshUI(); + } + public void RemoveYtypFromProject() + { + if (CurrentYtypFile == null) return; + if (CurrentProjectFile == null) return; + CurrentProjectFile.RemoveYtypFile(CurrentYtypFile); + CurrentYtypFile = null; + LoadProjectTree(); + RefreshUI(); + } + public bool YtypExistsInProject(YtypFile ytyp) + { + if (ytyp == null) return false; + if (CurrentProjectFile == null) return false; + return CurrentProjectFile.ContainsYtyp(ytyp); + } + + + public void NewYnd() + { + if (CurrentProjectFile == null) + { + NewProject(); + } + if (CurrentProjectFile == null) return; + + int testi = 1; + string fname = string.Empty; + bool filenameok = false; + while (!filenameok) + { + fname = "nodes" + testi.ToString() + ".ynd"; + filenameok = !CurrentProjectFile.ContainsYnd(fname); + testi++; + } + + lock (projectsyncroot) + { + YndFile ynd = CurrentProjectFile.AddYndFile(fname); + if (ynd != null) + { + ynd.Loaded = true; + ynd.HasChanged = true; //new ynd, flag as not saved + + //TODO: set new ynd default values... + ynd.NodeDictionary = new NodeDictionary(); + } + } + + CurrentProjectFile.HasChanged = true; + + LoadProjectTree(); + } + public void OpenYnd() + { + string[] files = ShowOpenDialogMulti("Ynd files|*.ynd", string.Empty); + if (files == null) + { + return; + } + + if (CurrentProjectFile == null) + { + NewProject(); + } + + foreach (string file in files) + { + if (!File.Exists(file)) continue; + + var ynd = CurrentProjectFile.AddYndFile(file); + + if (ynd != null) + { + SetProjectHasChanged(true); + + LoadYndFromFile(ynd, file); + + LoadProjectTree(); + } + else + { + MessageBox.Show("Couldn't add\n" + file + "\n - the file already exists in the project."); + } + + } + } + public void SaveYnd(bool saveas = false) + { + if ((CurrentYndFile == null) && (CurrentPathNode != null)) CurrentYndFile = CurrentPathNode.Ynd; + if (CurrentYndFile == null) return; + string yndname = CurrentYndFile.Name; + string filepath = CurrentYndFile.FilePath; + if (string.IsNullOrEmpty(filepath)) + { + filepath = yndname; + } + string origfile = filepath; + if (!File.Exists(filepath)) + { + saveas = true; + } + + + byte[] data; + lock (projectsyncroot) //need to sync writes to ynd objects... + { + saveas = saveas || string.IsNullOrEmpty(filepath); + if (saveas) + { + filepath = ShowSaveDialog("Ynd files|*.ynd", filepath); + if (string.IsNullOrEmpty(filepath)) + { return; } + + string newname = Path.GetFileNameWithoutExtension(filepath); + JenkIndex.Ensure(newname); + CurrentYndFile.FilePath = filepath; + CurrentYndFile.RpfFileEntry.Name = new FileInfo(filepath).Name; + CurrentYndFile.Name = CurrentYndFile.RpfFileEntry.Name; + } + + + data = CurrentYndFile.Save(); + } + + + if (data != null) + { + File.WriteAllBytes(filepath, data); + } + + SetYndHasChanged(false); + + if (saveas) + { + //ShowEditYndPanel(false); + if (CurrentProjectFile != null) + { + string origpath = CurrentProjectFile.GetRelativePath(origfile); + string newpath = CurrentProjectFile.GetRelativePath(CurrentYndFile.FilePath); + if (!CurrentProjectFile.RenameYnd(origpath, newpath)) + { //couldn't rename it in the project? happens when project not saved yet... + //MessageBox.Show("Couldn't rename ynd in project! This shouldn't happen - check the project file XML."); + } + } + SetProjectHasChanged(true); + SetCurrentSaveItem(); + } + + } + public void AddYndToProject(YndFile ynd) + { + if (ynd == null) return; + if (CurrentProjectFile == null) + { + NewProject(); + } + if (YndExistsInProject(ynd)) return; + if (CurrentProjectFile.AddYndFile(ynd)) + { + ynd.HasChanged = true; + CurrentProjectFile.HasChanged = true; + LoadProjectTree(); + } + CurrentYndFile = ynd; + RefreshUI(); + if (CurrentPathNode != null) + { + ProjectExplorer?.TrySelectPathNodeTreeNode(CurrentPathNode); + } + } + public void RemoveYndFromProject() + { + if (CurrentYndFile == null) return; + if (CurrentProjectFile == null) return; + CurrentProjectFile.RemoveYndFile(CurrentYndFile); + CurrentYndFile = null; + LoadProjectTree(); + RefreshUI(); + } + public bool YndExistsInProject(YndFile ynd) + { + if (ynd == null) return false; + if (CurrentProjectFile == null) return false; + return CurrentProjectFile.ContainsYnd(ynd); + } + + public void NewPathNode(YndNode copy = null, bool copyPosition = false) + { + if (CurrentYndFile == null) return; + + var n = CurrentYndFile.AddNode(); + var areaid = n.AreaID; + var nodeid = n.NodeID; + if (copy == null) + { + copy = CurrentPathNode; + } + if (copy != null) + { + n.Init(CurrentYndFile, copy.RawData); + n.LinkCountUnk = copy.LinkCountUnk; + } + n.AreaID = areaid; + n.NodeID = nodeid; + + bool cp = copyPosition && (copy != null); + Vector3 pos = cp ? copy.Position : GetSpawnPos(10.0f); + n.SetPosition(pos); + + + if (copy != null) + { + var link1 = n.AddLink(copy); + var link2 = copy.AddLink(n); + if ((copy.Links != null) && (copy.Links.Length > 0)) + { + var clink = copy.Links[0]; + link1.CopyFlags(clink); + var clnode = clink.Node2; + if (clnode.Links != null) + { + for (int i = 0; i < clnode.Links.Length; i++) + { + var clnlink = clnode.Links[i]; + if (clnlink.Node2 == copy) + { + link2.CopyFlags(clnlink); + break; + } + } + } + } + } + + CurrentYndFile.UpdateAllNodePositions(); //for the graphics... + CurrentYndFile.BuildBVH(); + + + LoadProjectTree(); + + ProjectExplorer?.TrySelectPathNodeTreeNode(n); + CurrentPathNode = n; + //ShowEditYndPanel(false);; + ShowEditYndNodePanel(false); + + + if (WorldForm != null) + { + WorldForm.UpdatePathYndGraphics(CurrentYndFile, false); + } + } + public bool DeletePathNode() + { + if (CurrentYndFile == null) return false; + if (CurrentPathNode == null) return false; + if (CurrentPathNode.Ynd != CurrentYndFile) return false; + if (CurrentYndFile.Nodes == null) return false; //nothing to delete.. + + if (MessageBox.Show("Are you sure you want to delete this path node?\n" + CurrentPathNode.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentYndFile.RemoveNode(CurrentPathNode); + + //WorldForm.SelectItem(null, null, null); + } + } + else + { + res = CurrentYndFile.RemoveNode(CurrentPathNode); + } + if (!res) + { + MessageBox.Show("Unable to delete the path node. This shouldn't happen!"); + } + + var delnode = CurrentPathNode; + + ProjectExplorer?.RemovePathNodeTreeNode(CurrentPathNode); + ProjectExplorer?.SetYndHasChanged(CurrentYndFile, true); + + ClosePanel((EditYndNodePanel p) => { return p.Tag == delnode; }); + + CurrentPathNode = null; + + if (WorldForm != null) + { + WorldForm.UpdatePathYndGraphics(CurrentYndFile, false); + } + + return true; + } + public bool IsCurrentPathNode(YndNode pathnode) + { + return CurrentPathNode == pathnode; + } + + + + public void NewYnv()//TODO! + { + } + public void OpenYnv()//TODO! + { + } + public void SaveYnv(bool saveas = false)//TODO! + { + } + public void AddYnvToProject(YnvFile ynv) + { + if (ynv == null) return; + if (CurrentProjectFile == null) + { + NewProject(); + } + if (YnvExistsInProject(ynv)) return; + if (CurrentProjectFile.AddYnvFile(ynv)) + { + ynv.HasChanged = true; + CurrentProjectFile.HasChanged = true; + LoadProjectTree(); + } + CurrentYnvFile = ynv; + RefreshUI(); + if (CurrentNavPoly != null) + { + ProjectExplorer?.TrySelectNavPolyTreeNode(CurrentNavPoly); + } + } + public void RemoveYnvFromProject() + { + if (CurrentYnvFile == null) return; + if (CurrentProjectFile == null) return; + CurrentProjectFile.RemoveYnvFile(CurrentYnvFile); + CurrentYnvFile = null; + LoadProjectTree(); + RefreshUI(); + } + public bool YnvExistsInProject(YnvFile ynv) + { + if (ynv == null) return false; + if (CurrentProjectFile == null) return false; + return CurrentProjectFile.ContainsYnv(ynv); + } + + public void NewNavPoly(YnvPoly copy = null, bool copyposition = false)//TODO! + { + } + public bool DeleteNavPoly()//TODO! + { + return false; + } + public bool IsCurrentNavPoly(YnvPoly poly) + { + return false;// poly == CurrentNavPoly; + } + + + + public void NewTrainTrack() + { + if (CurrentProjectFile == null) + { + NewProject(); + } + if (CurrentProjectFile == null) return; + + int testi = 13; + string fname = string.Empty; + bool filenameok = false; + while (!filenameok) + { + fname = "trains" + testi.ToString() + ".dat"; + filenameok = !CurrentProjectFile.ContainsTrainTrack(fname); + testi++; + } + + lock (projectsyncroot) + { + TrainTrack track = CurrentProjectFile.AddTrainsFile(fname); + if (track != null) + { + track.Loaded = true; + track.HasChanged = true; //new track, flag as not saved + + //TODO: set new train track default values... + + } + } + + CurrentProjectFile.HasChanged = true; + + LoadProjectTree(); + } + public void OpenTrainTrack() + { + string[] files = ShowOpenDialogMulti("Dat files|*.dat", string.Empty); + if (files == null) + { + return; + } + + if (CurrentProjectFile == null) + { + NewProject(); + } + + foreach (string file in files) + { + if (!File.Exists(file)) continue; + + var track = CurrentProjectFile.AddTrainsFile(file); + + if (track != null) + { + SetProjectHasChanged(true); + + LoadTrainTrackFromFile(track, file); + + LoadProjectTree(); + } + else + { + MessageBox.Show("Couldn't add\n" + file + "\n - the file already exists in the project."); + } + + } + } + public void SaveTrainTrack(bool saveas = false) + { + if ((CurrentTrainTrack == null) && (CurrentTrainNode != null)) CurrentTrainTrack = CurrentTrainNode.Track; + if (CurrentTrainTrack == null) return; + string trackname = CurrentTrainTrack.Name; + string filepath = CurrentTrainTrack.FilePath; + if (string.IsNullOrEmpty(filepath)) + { + filepath = trackname; + } + string origfile = filepath; + if (!File.Exists(filepath)) + { + saveas = true; + } + + + byte[] data; + lock (projectsyncroot) //need to sync writes to objects... + { + saveas = saveas || string.IsNullOrEmpty(filepath); + if (saveas) + { + filepath = ShowSaveDialog("Dat files|*.dat", filepath); + if (string.IsNullOrEmpty(filepath)) + { return; } + + string newname = Path.GetFileNameWithoutExtension(filepath); + //////JenkIndex.Ensure(newname); + CurrentTrainTrack.FilePath = filepath; + CurrentTrainTrack.RpfFileEntry.Name = new FileInfo(filepath).Name; + CurrentTrainTrack.Name = CurrentTrainTrack.RpfFileEntry.Name; + } + + + data = CurrentTrainTrack.Save(); + } + + + if (data != null) + { + File.WriteAllBytes(filepath, data); + } + + SetTrainTrackHasChanged(false); + + if (saveas) + { + //ShowEditTrainTrackPanel(false); + if (CurrentProjectFile != null) + { + string origpath = CurrentProjectFile.GetRelativePath(origfile); + string newpath = CurrentProjectFile.GetRelativePath(CurrentTrainTrack.FilePath); + if (!CurrentProjectFile.RenameTrainTrack(origpath, newpath)) + { //couldn't rename it in the project? happens when project not saved yet... + //MessageBox.Show("Couldn't rename train track in project! This shouldn't happen - check the project file XML."); + } + } + SetProjectHasChanged(true); + SetCurrentSaveItem(); + } + + } + public void AddTrainTrackToProject(TrainTrack track) + { + if (track == null) return; + if (CurrentProjectFile == null) + { + NewProject(); + } + if (TrainTrackExistsInProject(track)) return; + if (CurrentProjectFile.AddTrainsFile(track)) + { + track.HasChanged = true; + CurrentProjectFile.HasChanged = true; + LoadProjectTree(); + } + CurrentTrainTrack = track; + RefreshUI(); + if (CurrentTrainNode != null) + { + ProjectExplorer?.TrySelectTrainNodeTreeNode(CurrentTrainNode); + } + } + public void RemoveTrainTrackFromProject() + { + if (CurrentTrainTrack == null) return; + if (CurrentProjectFile == null) return; + CurrentProjectFile.RemoveTrainsFile(CurrentTrainTrack); + CurrentTrainTrack = null; + LoadProjectTree(); + RefreshUI(); + } + public bool TrainTrackExistsInProject(TrainTrack track) + { + if (track == null) return false; + if (CurrentProjectFile == null) return false; + return CurrentProjectFile.ContainsTrainTrack(track); + } + + public void NewTrainNode(TrainTrackNode copy = null, bool copyPosition = false) + { + if (CurrentTrainTrack == null) return; + + var afternode = copyPosition ? copy : null; + + var n = CurrentTrainTrack.AddNode(afternode); + if (copy == null) + { + copy = CurrentTrainNode; + } + if (copy != null) + { + n.NodeType = copy.NodeType; + } + + bool cp = copyPosition && (copy != null); + Vector3 pos = cp ? copy.Position : GetSpawnPos(10.0f); + n.SetPosition(pos); + + + //CurrentTrainTrack.BuildVertices(); //for the graphics... + CurrentTrainTrack.BuildBVH(); + + + LoadProjectTree(); + + ProjectExplorer?.TrySelectTrainNodeTreeNode(n); + CurrentTrainNode = n; + ShowEditTrainNodePanel(false); + + + if (WorldForm != null) + { + WorldForm.UpdateTrainTrackGraphics(CurrentTrainTrack, false); + } + } + public bool DeleteTrainNode() + { + if (CurrentTrainTrack == null) return false; + if (CurrentTrainNode == null) return false; + if (CurrentTrainNode.Track != CurrentTrainTrack) return false; + if (CurrentTrainTrack.Nodes == null) return false; //nothing to delete.. + + if (MessageBox.Show("Are you sure you want to delete this train track node?\n" + CurrentTrainNode.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentTrainTrack.RemoveNode(CurrentTrainNode); + + //WorldForm.SelectItem(null, null, null); + } + } + else + { + res = CurrentTrainTrack.RemoveNode(CurrentTrainNode); + } + if (!res) + { + MessageBox.Show("Unable to delete the train track node. This shouldn't happen!"); + } + + var delnode = CurrentTrainNode; + + ProjectExplorer?.RemoveTrainNodeTreeNode(CurrentTrainNode); + ProjectExplorer?.SetTrainTrackHasChanged(CurrentTrainTrack, true); + + ClosePanel((EditTrainNodePanel p) => { return p.Tag == delnode; }); + + CurrentTrainNode = null; + + if (WorldForm != null) + { + WorldForm.UpdateTrainTrackGraphics(CurrentTrainTrack, false); + } + + return true; + } + public bool IsCurrentTrainNode(TrainTrackNode node) + { + return node == CurrentTrainNode; + } + + + + public void NewScenario() + { + if (CurrentProjectFile == null) + { + NewProject(); + } + if (CurrentProjectFile == null) return; + + int testi = 1; + string fname = string.Empty; + bool filenameok = false; + while (!filenameok) + { + fname = "scenario" + testi.ToString() + ".ymt"; + filenameok = !CurrentProjectFile.ContainsScenario(fname); + testi++; + } + + lock (projectsyncroot) + { + YmtFile ymt = CurrentProjectFile.AddScenarioFile(fname); + if (ymt != null) + { + ymt.CScenarioPointRegion = new MCScenarioPointRegion(); + ymt.CScenarioPointRegion.Ymt = ymt; + ymt.CScenarioPointRegion.Points = new MCScenarioPointContainer(ymt.CScenarioPointRegion); + ymt.CScenarioPointRegion.Paths = new MUnk_4023740759(ymt.CScenarioPointRegion); + ymt.CScenarioPointRegion.LookUps = new MCScenarioPointLookUps(ymt.CScenarioPointRegion); + + ymt.ScenarioRegion = new ScenarioRegion(); + ymt.ScenarioRegion.Region = ymt.CScenarioPointRegion; + ymt.ScenarioRegion.Ymt = ymt; + + ymt.ScenarioRegion.BuildNodes(); //should be empty + ymt.ScenarioRegion.BuildBVH(); //should be empty + ymt.ScenarioRegion.BuildVertices(); //should be empty + + ymt.HasChanged = true; //new ymt, flag as not saved + ymt.Loaded = true; + } + } + + CurrentProjectFile.HasChanged = true; + + LoadProjectTree(); + } + public void OpenScenario() + { + string[] files = ShowOpenDialogMulti("Ymt files|*.ymt", string.Empty); + if (files == null) + { + return; + } + + if (CurrentProjectFile == null) + { + NewProject(); + } + + foreach (string file in files) + { + if (!File.Exists(file)) continue; + + var ymt = CurrentProjectFile.AddScenarioFile(file); + + if (ymt != null) + { + SetProjectHasChanged(true); + + LoadScenarioFromFile(ymt, file); + + LoadProjectTree(); + } + else + { + MessageBox.Show("Couldn't add\n" + file + "\n - the file already exists in the project."); + } + + } + } + public void SaveScenario(bool saveas = false) + { + if ((CurrentScenario == null) && (CurrentScenarioNode != null)) CurrentScenario = CurrentScenarioNode.Ymt; + if (CurrentScenario == null) return; + string ymtname = CurrentScenario.Name; + string filepath = CurrentScenario.FilePath; + if (string.IsNullOrEmpty(filepath)) + { + filepath = ymtname; + } + string origfile = filepath; + if (!File.Exists(filepath)) + { + saveas = true; + } + + + byte[] data; + lock (projectsyncroot) //need to sync writes to scenario... + { + saveas = saveas || string.IsNullOrEmpty(filepath); + if (saveas) + { + filepath = ShowSaveDialog("Ymt files|*.ymt", filepath); + if (string.IsNullOrEmpty(filepath)) + { return; } + + string newname = Path.GetFileNameWithoutExtension(filepath); + JenkIndex.Ensure(newname); + CurrentScenario.FilePath = filepath; + CurrentScenario.RpfFileEntry.Name = new FileInfo(filepath).Name; + CurrentScenario.Name = CurrentScenario.RpfFileEntry.Name; + } + + + CurrentScenario.ContentType = YmtFileContentType.ScenarioPointRegion;//just to be sure.. + + data = CurrentScenario.Save(); + } + + + if (data != null) + { + File.WriteAllBytes(filepath, data); + } + + SetScenarioHasChanged(false); + + if (saveas) + { + //ShowEditScenarioPanel(false); + if (CurrentProjectFile != null) + { + string origpath = CurrentProjectFile.GetRelativePath(origfile); + string newpath = CurrentProjectFile.GetRelativePath(CurrentScenario.FilePath); + if (!CurrentProjectFile.RenameScenario(origpath, newpath)) + { //couldn't rename it in the project? happens when project not saved yet... + //MessageBox.Show("Couldn't rename scenario in project! This shouldn't happen - check the project file XML."); + } + } + SetProjectHasChanged(true); + SetCurrentSaveItem(); + } + } + public void AddScenarioToProject(YmtFile ymt) + { + if (ymt == null) return; + if (CurrentProjectFile == null) + { + NewProject(); + } + if (ScenarioExistsInProject(ymt)) return; + if (CurrentProjectFile.AddScenarioFile(ymt)) + { + ymt.HasChanged = true; + CurrentProjectFile.HasChanged = true; + LoadProjectTree(); + } + CurrentScenario = ymt; + RefreshUI(); + if (CurrentScenarioNode != null) + { + ProjectExplorer?.TrySelectScenarioNodeTreeNode(CurrentScenarioNode); + } + } + public void RemoveScenarioFromProject() + { + if (CurrentScenario == null) return; + if (CurrentProjectFile == null) return; + CurrentProjectFile.RemoveScenarioFile(CurrentScenario); + CurrentScenario = null; + LoadProjectTree(); + RefreshUI(); + } + public bool ScenarioExistsInProject(YmtFile ymt) + { + if (ymt == null) return false; + if (CurrentProjectFile == null) return false; + return CurrentProjectFile.ContainsScenario(ymt); + } + + public void NewScenarioNode(ScenarioNode copy = null, bool copyPosition = false) + { + if (CurrentScenario == null) return; + if (CurrentScenario.ScenarioRegion == null) return; + + if (copy == null) + { + copy = CurrentScenarioNode; + } + + var n = CurrentScenario.ScenarioRegion.AddNode(copy); + + bool cp = copyPosition && (copy != null); + Vector3 pos = cp ? copy.Position : GetSpawnPos(10.0f); + Quaternion ori = cp ? copy.Orientation : Quaternion.Identity; + n.SetPosition(pos); + n.SetOrientation(ori); + + + LoadProjectTree(); + + ProjectExplorer?.TrySelectScenarioNodeTreeNode(n); + CurrentScenarioNode = n; + //ShowEditScenarioPanel(false); + ShowEditScenarioNodePanel(false); + + + if (WorldForm != null) + { + WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + else + { + CurrentScenario.ScenarioRegion.BuildBVH(); + CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... + } + } + public bool DeleteScenarioNode() + { + if (CurrentScenario == null) return false; + if (CurrentScenario.ScenarioRegion == null) return false; + if (CurrentScenarioNode == null) return false; + + + if (MessageBox.Show("Are you sure you want to delete this scenario node?\n" + CurrentScenarioNode.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentScenario.ScenarioRegion.RemoveNode(CurrentScenarioNode); + } + } + else + { + res = CurrentScenario.ScenarioRegion.RemoveNode(CurrentScenarioNode); + } + if (!res) + { + MessageBox.Show("Unable to delete the scenario node. This shouldn't happen!"); + } + + var delnode = CurrentScenarioNode; + + ProjectExplorer?.RemoveScenarioNodeTreeNode(CurrentScenarioNode); + ProjectExplorer?.SetScenarioHasChanged(CurrentScenario, true); + + ClosePanel((EditScenarioNodePanel p) => { return p.Tag == delnode; }); + + CurrentScenarioNode = null; + + if (WorldForm != null) + { + WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + + + return true; + } + public bool IsCurrentScenarioNode(ScenarioNode node) + { + return node == CurrentScenarioNode; + } + + + public void SetScenarioChainEdge(MCScenarioChainingEdge e) + { + CurrentScenarioChainEdge = e; + } + + public void AddScenarioChain() + { + if (CurrentScenario.ScenarioRegion == null) return; + var paths = CurrentScenario?.CScenarioPointRegion?.Paths; + if (paths == null) return; + + var copy = CurrentScenarioNode?.ChainingNode?.Chain; + var copyn = CurrentScenarioNode?.ChainingNode; + var copyp = CurrentScenarioNode?.MyPoint; + var copye = CurrentScenarioChainEdge; + var copycl = CurrentScenarioNode?.Cluster; + + MCScenarioChain chain = new MCScenarioChain(); + chain.Unk1 = 1; //default value + if (copy != null) + { + chain.Data = copy.Data; + chain._Data.EdgeIds = new Array_ushort(); //start empty.. not really necessary + } + + paths.AddChain(chain); + + + //add 2 new nodes to the new chain. + var pos1 = GetSpawnPos(10.0f); + var pos2 = pos1 + Vector3.UnitX; + + ScenarioNode n1 = null;// CurrentScenario.ScenarioRegion.AddNode(); + + if (copycl != null) + { + ScenarioNode copyclnode = new ScenarioNode(CurrentScenario); + copyclnode.Cluster = copycl; + copyclnode.ClusterMyPoint = new MCScenarioPoint(CurrentScenario.CScenarioPointRegion); + copyclnode.ClusterMyPoint.InteriorName = 493038497; //JenkHash.GenHash("none"); + copyclnode.ClusterMyPoint.GroupName = 493038497; + copyclnode.ClusterMyPoint.IMapName = 493038497; + copyclnode.ClusterMyPoint.TimeStart = 0; + copyclnode.ClusterMyPoint.TimeEnd = 24; + n1 = CurrentScenario.ScenarioRegion.AddNode(copyclnode); + } + else + { + n1 = CurrentScenario.ScenarioRegion.AddNode(); + } + + ScenarioNode n2 = CurrentScenario.ScenarioRegion.AddNode(); + + if (copyp != null) + { + n1.MyPoint.CopyFrom(copyp); + n2.MyPoint.CopyFrom(copyp); + } + + n1.ChainingNode = new MCScenarioChainingNode(); + n2.ChainingNode = new MCScenarioChainingNode(); + + if (copyn != null) + { + n1.ChainingNode.CopyFrom(copyn); + n2.ChainingNode.CopyFrom(copyn); + } + + n1.ChainingNode.NotLast = true; + n2.ChainingNode.NotFirst = true; + + n1.ChainingNode.ScenarioNode = n1; + n2.ChainingNode.ScenarioNode = n2; + + paths.AddNode(n1.ChainingNode); + paths.AddNode(n2.ChainingNode); + + n1.ChainingNode.Chain = chain; + n2.ChainingNode.Chain = chain; + + var ed = new MCScenarioChainingEdge(); + + if (copye != null) + { + ed.Data = copye.Data; + } + + ed.NodeFrom = n1.ChainingNode; + ed.NodeTo = n2.ChainingNode; + ed.NodeIndexFrom = (ushort)n1.ChainingNode.NodeIndex; + ed.NodeIndexTo = (ushort)n2.ChainingNode.NodeIndex; + + paths.AddEdge(ed); + chain.AddEdge(ed); + + + + n1.SetPosition(pos1); + n2.SetPosition(pos2); + + + + + + + ProjectExplorer?.LoadProjectTree(CurrentProjectFile); + + ProjectExplorer?.TrySelectScenarioNodeTreeNode(n1); + + CurrentScenarioNode = n1; + CurrentScenarioChainEdge = ed; + //LoadScenarioChainTabPage(); + ////LoadScenarioTabPage(); + ////LoadScenarioNodeTabPages(); + + + if (WorldForm != null) + { + WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + else + { + CurrentScenario.ScenarioRegion.BuildBVH(); + CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... + } + } + public void AddScenarioCluster()//TODO: add defualt cluster points to new cluster + { + if (CurrentScenario == null) return; + + var sr = CurrentScenario.ScenarioRegion; + if (sr == null) return; + + var rgn = CurrentScenario.CScenarioPointRegion; + if (rgn == null) return; + + var copy = CurrentScenarioNode?.Cluster; + + + MCScenarioPointCluster cluster = new MCScenarioPointCluster(rgn, copy); + List clusterpoints = new List(); + + if (copy != null) + { + if (copy.Points?.MyPoints != null) + { + clusterpoints.AddRange(copy.Points.MyPoints); + } + } + + + + rgn.AddCluster(cluster); //add the base cluster to the region. + + + var pos1 = GetSpawnPos(10.0f); + + var ncopy = new ScenarioNode(CurrentScenario);//copy an empty node to start with, to avoid creating default MyPoint + var nc = sr.AddNode(ncopy); //add the base cluster's display node. + nc.Cluster = cluster; + + nc.SetPosition(pos1); + + if (cluster.Points != null) + { + foreach (var cpt in clusterpoints) + { + //TODO: copy cluster points.... + //or create some default points! + } + } + + + + + + + + + ProjectExplorer?.LoadProjectTree(CurrentProjectFile); + + ProjectExplorer?.TrySelectScenarioNodeTreeNode(nc); + + CurrentScenarioNode = nc; + //LoadScenarioClusterTabPage(); + + + if (WorldForm != null) + { + WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + else + { + CurrentScenario.ScenarioRegion.BuildBVH(); + CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... + } + + } + public void AddScenarioClusterPoint() + { + if (CurrentScenario == null) return; + + var sr = CurrentScenario.ScenarioRegion; + if (sr == null) return; + + var rgn = CurrentScenario.CScenarioPointRegion; + if (rgn == null) return; + + var cluster = CurrentScenarioNode?.Cluster; + if (cluster == null) return; + + if (cluster.Points == null) + { + cluster.Points = new MCScenarioPointContainer(rgn); + cluster.Points.Parent = cluster; + } + + var copy = CurrentScenarioNode?.ClusterMyPoint; + + var pos1 = GetSpawnPos(10.0f); + var ori1 = copy?.Orientation ?? Quaternion.Identity; + + var cn = new ScenarioNode(CurrentScenario);//copy a blank node + var n = sr.AddNode(cn); + + var np = new MCScenarioPoint(rgn, copy); + cluster.Points.AddMyPoint(np); + + n.ClusterMyPoint = np; + n.Cluster = cluster; + + n.SetPosition(pos1); + n.SetOrientation(ori1); + + + ProjectExplorer?.LoadProjectTree(CurrentProjectFile); + + ProjectExplorer?.TrySelectScenarioNodeTreeNode(n); + + CurrentScenarioNode = n; + //LoadScenarioClusterTabPage(); + //LoadScenarioClusterPointTabPage(); + ////LoadScenarioTabPage(); + ////LoadScenarioNodeTabPages(); + + + if (WorldForm != null) + { + WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + else + { + CurrentScenario.ScenarioRegion.BuildBVH(); + CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... + } + } + public void AddScenarioEntity()//TODO: add default entity point(s) to entity + { + if (CurrentScenario == null) return; + + var sr = CurrentScenario.ScenarioRegion; + if (sr == null) return; + + var rgn = CurrentScenario.CScenarioPointRegion; + if (rgn == null) return; + + var copy = CurrentScenarioNode?.Entity; + + + MCScenarioEntityOverride entity = new MCScenarioEntityOverride(rgn, copy); + List entpoints = new List(); + + if (copy != null) + { + if (copy.ScenarioPoints != null) + { + entpoints.AddRange(copy.ScenarioPoints); + } + } + + + + + + + rgn.AddEntity(entity); //add the base entity to the region. + + + var pos1 = GetSpawnPos(10.0f); + + var ncopy = new ScenarioNode(CurrentScenario);//copy an empty node to start with, to avoid creating default MyPoint + var ne = sr.AddNode(ncopy); //add the base entity's display node. + ne.Entity = entity; + + ne.SetPosition(pos1); + + if (entity.ScenarioPoints != null) + { + foreach (var cpt in entpoints) + { + //TODO: copy entity points.... + //or create some default points! + } + } + + + + + + + + + ProjectExplorer?.LoadProjectTree(CurrentProjectFile); + + ProjectExplorer?.TrySelectScenarioNodeTreeNode(ne); + + CurrentScenarioNode = ne; + //LoadScenarioEntityTabPage(); + + + if (WorldForm != null) + { + WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + else + { + CurrentScenario.ScenarioRegion.BuildBVH(); + CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... + } + + } + public void AddScenarioEntityPoint() + { + if (CurrentScenario == null) return; + + var sr = CurrentScenario.ScenarioRegion; + if (sr == null) return; + + var rgn = CurrentScenario.CScenarioPointRegion; + if (rgn == null) return; + + var entity = CurrentScenarioNode?.Entity; + if (entity == null) return; + + var copy = CurrentScenarioNode?.EntityPoint; + + var pos1 = GetSpawnPos(10.0f); + var ori1 = copy?.Orientation ?? Quaternion.Identity; + + var cn = new ScenarioNode(CurrentScenario);//copy a blank node + var n = sr.AddNode(cn); + + var np = new MCExtensionDefSpawnPoint(rgn, copy); + entity.AddScenarioPoint(np); + + n.EntityPoint = np; + n.Entity = entity; + + n.SetPosition(pos1); + n.SetOrientation(ori1); + + + ProjectExplorer?.LoadProjectTree(CurrentProjectFile); + + ProjectExplorer?.TrySelectScenarioNodeTreeNode(n); + + CurrentScenarioNode = n; + //LoadScenarioEntityTabPage(); + //LoadScenarioEntityPointTabPage(); + ////LoadScenarioTabPage(); + ////LoadScenarioNodeTabPages(); + + + if (WorldForm != null) + { + WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + else + { + CurrentScenario.ScenarioRegion.BuildBVH(); + CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... + } + } + + public void DeleteScenarioChain() + { + if (CurrentScenario == null) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.ChainingNode == null) return; + if (CurrentScenarioNode.ChainingNode.Chain == null) return; + + var chain = CurrentScenarioNode.ChainingNode.Chain; + + var paths = CurrentScenario.CScenarioPointRegion?.Paths; + if (paths == null) return; + + var rgn = CurrentScenario.ScenarioRegion; + if (rgn == null) return; + + + if (MessageBox.Show("Are you sure you want to delete this scenario chain?\n" + chain.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + bool delpoints = false; + if (MessageBox.Show("Delete all Scenario Points for this chain as well?", "Confirm delete points", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + delpoints = true; + } + + + + Dictionary ndict = new Dictionary(); + + var edges = chain.Edges; + if (edges != null) + { + foreach (var edge in edges) + { + //paths.RemoveEdge(edge); //removing nodes also removes edges! + paths.RemoveNode(edge.NodeFrom); + paths.RemoveNode(edge.NodeTo); + + ndict[edge.NodeFrom] = 1; + ndict[edge.NodeTo] = 1; + } + } + + paths.RemoveChain(chain); + + + + + List delnodes = new List(); + foreach (var node in rgn.Nodes) + { + if ((node.ChainingNode != null) && (ndict.ContainsKey(node.ChainingNode))) + { + delnodes.Add(node); + } + } + foreach (var delnode in delnodes) + { + delnode.ChainingNode = null;//this chaining node has been removed from the region. remove this association. + if (delpoints) + { + rgn.RemoveNode(delnode); + } + } + + + + var cn = CurrentScenarioNode; + var cs = CurrentScenario; + + ProjectExplorer?.LoadProjectTree(CurrentProjectFile); + + if (!delpoints && (cn != null)) + { + ProjectExplorer?.TrySelectScenarioNodeTreeNode(cn); + } + else + { + ProjectExplorer?.TrySelectScenarioTreeNode(cs); + } + + ClosePanel((EditScenarioNodePanel p) => { return p.Tag == cn; }); + + if (WorldForm != null) + { + WorldForm.UpdateScenarioGraphics(cs, false); + if (delpoints) + { + WorldForm.SelectItem(null); + } + } + else if (cs?.ScenarioRegion != null) + { + cs.ScenarioRegion.BuildBVH(); + cs.ScenarioRegion.BuildVertices(); //for the graphics... + } + } + public void DeleteScenarioCluster() + { + if (CurrentScenario == null) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.Cluster == null) return; + + var cluster = CurrentScenarioNode.Cluster; + + var rgn = CurrentScenario.ScenarioRegion; + if (rgn == null) return; + + var crgn = CurrentScenario.CScenarioPointRegion; + if (crgn == null) return; + + + if (MessageBox.Show("Are you sure you want to delete this scenario cluster?\n" + cluster.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + bool delpoints = false; + if (MessageBox.Show("Delete all Scenario Points for this cluster as well?", "Confirm delete points", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + delpoints = true; + } + + + crgn.RemoveCluster(cluster); + + + + + + Dictionary ndict = new Dictionary(); + if (cluster?.Points?.MyPoints != null) + { + foreach (var point in cluster.Points.MyPoints) + { + ndict[point] = 1; + } + } + List delnodes = new List(); + foreach (var node in rgn.Nodes) + { + if ((node.ClusterMyPoint != null) && (ndict.ContainsKey(node.ClusterMyPoint))) + { + delnodes.Add(node); + } + else if (node.Cluster == cluster) + { + delnodes.Add(node); + } + } + foreach (var delnode in delnodes) + { + if (!delpoints && (crgn.Points != null) && (delnode.ClusterMyPoint != null)) + { + var copypt = new MCScenarioPoint(crgn, delnode.ClusterMyPoint); + crgn.Points.AddMyPoint(copypt); + delnode.MyPoint = copypt; + } + bool iscl = false; + if ((delnode.Cluster != null) && (delnode.ClusterMyPoint == null) && (delnode.ClusterLoadSavePoint == null)) + { + iscl = true; + } + delnode.Cluster = null; + delnode.ClusterMyPoint = null;//this cluster point has been removed from the region. remove this association. + delnode.ClusterLoadSavePoint = null; + if (delpoints) + { + //if ((delnode.ChainingNode == null) && (delnode.EntityPoint == null)) + { + rgn.RemoveNode(delnode); + } + } + else if (iscl) + { + rgn.RemoveNode(delnode); //remove the cluster node itself. + } + } + + + + var cn = CurrentScenarioNode; + var cs = CurrentScenario; + + ProjectExplorer?.LoadProjectTree(CurrentProjectFile); + + if (!delpoints && (cn != null)) + { + ProjectExplorer?.TrySelectScenarioNodeTreeNode(cn); + } + else + { + ProjectExplorer?.TrySelectScenarioTreeNode(cs); + } + + ClosePanel((EditScenarioNodePanel p) => { return p.Tag == cn; }); + + if (WorldForm != null) + { + WorldForm.UpdateScenarioGraphics(cs, false); + if (delpoints || ((cn != null) && (cn.MyPoint == null))) + { + WorldForm.SelectItem(null); + } + } + else if (cs?.ScenarioRegion != null) + { + cs.ScenarioRegion.BuildBVH(); + cs.ScenarioRegion.BuildVertices(); //for the graphics... + } + + } + public void DeleteScenarioEntity() + { + if (CurrentScenario == null) return; + if (CurrentScenarioNode == null) return; + if (CurrentScenarioNode.Entity == null) return; + + var entity = CurrentScenarioNode.Entity; + + var rgn = CurrentScenario.ScenarioRegion; + if (rgn == null) return; + + var crgn = CurrentScenario.CScenarioPointRegion; + if (crgn == null) return; + + + if (MessageBox.Show("Are you sure you want to delete this scenario entity override, and all its override points?\n" + entity.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + //bool delpoints = false; + //if (MessageBox.Show("Delete all Scenario Points for this entity override as well?", "Confirm delete points", MessageBoxButtons.YesNo) == DialogResult.Yes) + //{ + // delpoints = true; + //} + + + crgn.RemoveEntity(entity); + + + + + + Dictionary ndict = new Dictionary(); + if (entity.ScenarioPoints != null) + { + foreach (var point in entity.ScenarioPoints) + { + ndict[point] = 1; + } + } + List delnodes = new List(); + foreach (var node in rgn.Nodes) + { + if ((node.EntityPoint != null) && (ndict.ContainsKey(node.EntityPoint))) + { + delnodes.Add(node); + } + else if (node.Entity == entity) + { + delnodes.Add(node); + } + } + foreach (var delnode in delnodes) + { + delnode.Entity = null; + delnode.EntityPoint = null;//this entity point has been removed from the region. remove this association. + rgn.RemoveNode(delnode); + } + + + + var cn = CurrentScenarioNode; + var cs = CurrentScenario; + + ProjectExplorer?.LoadProjectTree(CurrentProjectFile); + + ProjectExplorer?.TrySelectScenarioTreeNode(cs); + + ClosePanel((EditScenarioNodePanel p) => { return p.Tag == cn; }); + + if (WorldForm != null) + { + WorldForm.UpdateScenarioGraphics(cs, false); + WorldForm.SelectItem(null); + } + else if (cs?.ScenarioRegion != null) + { + cs.ScenarioRegion.BuildBVH(); + cs.ScenarioRegion.BuildVertices(); //for the graphics... + } + } + + public void ImportScenarioChain() + { + var paths = CurrentScenario?.CScenarioPointRegion?.Paths; + if (paths == null) return; + var rgn = CurrentScenario.ScenarioRegion; + if (rgn == null) return; + + TextInputForm f = new TextInputForm(); + f.TitleText = "Import scenario chain points"; + f.PromptText = "Input chain points in CSV (or TSV) format. Direction is in radians. NavSpeed is from 0 to 15. NavMode can be either Direct, NavMesh, or Roads. ScenarioType is the name of the scenario type to use."; + f.MainText = "X, Y, Z, Direction, NavSpeed, NavMode, ScenarioType, ModelSet, Flags"; + if (f.ShowDialog() == DialogResult.Cancel) return; + + var stypes = Scenarios.ScenarioTypes; //these are loaded by Scenarios.Init + ScenarioType defaulttype = null; + if (stypes != null) + { + defaulttype = stypes.GetScenarioType(1194480618); //"drive"; + } + + AmbientModelSet defaultmodelset = null; + uint defaultflags = 0; + + ScenarioNode thisnode = null; + ScenarioNode lastnode = null; + MCScenarioChainingEdge lastedge = null; + + var str = f.MainText; + var lines = str.Split('\n'); + + + if (lines.Length < 2) + { + return;//need at least 2 lines (1 point) to work with... + } + + + + MCScenarioChain chain = new MCScenarioChain(); + + paths.AddChain(chain); + + + for (int i = 0; i < lines.Length; i++) + { + var line = lines[i]; + var delim = line.Contains(",") ? "," : " "; + var vals = line.Split(new[] { delim }, StringSplitOptions.RemoveEmptyEntries); + if (vals.Length < 3) continue; + if (vals[0].StartsWith("X")) continue; + Vector3 pos = Vector3.Zero; + float dir = 0; + var action = Unk_3609807418.Move; + var navMode = Unk_3971773454.Direct; + var navSpeed = Unk_941086046.Unk_00_3279574318; + var stype = defaulttype; + var modelset = defaultmodelset; + var flags = defaultflags; + var ok = true; + ok = ok && FloatUtil.TryParse(vals[0].Trim(), out pos.X); + ok = ok && FloatUtil.TryParse(vals[1].Trim(), out pos.Y); + ok = ok && FloatUtil.TryParse(vals[2].Trim(), out pos.Z); + if (vals.Length > 3) + { + ok = ok && FloatUtil.TryParse(vals[3].Trim(), out dir); + while (dir > Math.PI) dir -= 2.0f * (float)Math.PI; + while (dir < -Math.PI) dir += 2.0f * (float)Math.PI; + } + if (vals.Length > 4) + { + byte nsb = 0; + byte.TryParse(vals[4].Trim(), out nsb); + if (nsb > 15) nsb = 15; + navSpeed = (Unk_941086046)nsb; + } + if (vals.Length > 5) + { + switch (vals[5].Trim()) + { + case "Direct": navMode = Unk_3971773454.Direct; break; + case "NavMesh": navMode = Unk_3971773454.NavMesh; break; + case "Roads": navMode = Unk_3971773454.Roads; break; + } + } + if (vals.Length > 6) + { + var sthash = JenkHash.GenHash(vals[6].Trim().ToLowerInvariant()); + stype = stypes?.GetScenarioType(sthash) ?? defaulttype; + } + if (vals.Length > 7) + { + var mshash = JenkHash.GenHash(vals[7].Trim().ToLowerInvariant()); + modelset = stypes?.GetPedModelSet(mshash) ?? null; + if (modelset == null) modelset = stypes?.GetVehicleModelSet(mshash) ?? null; + } + if (vals.Length > 8) + { + if (!uint.TryParse(vals[8].Trim(), out flags)) flags = defaultflags; + } + + if (!ok) continue; + + + + thisnode = rgn.AddNode(); + + thisnode.MyPoint.Direction = dir; + thisnode.MyPoint.Type = stype; + thisnode.MyPoint.ModelSet = modelset; + thisnode.MyPoint.Flags = (Unk_700327466)flags; + + thisnode.ChainingNode = new MCScenarioChainingNode(); + thisnode.ChainingNode.ScenarioNode = thisnode; + thisnode.ChainingNode.Chain = chain; + thisnode.ChainingNode.Type = stype; + thisnode.ChainingNode.TypeHash = stype?.NameHash ?? 0; + thisnode.ChainingNode.NotLast = (i < (lines.Length - 1)); + thisnode.ChainingNode.NotFirst = (lastnode != null); + + thisnode.SetPosition(pos); + thisnode.Orientation = thisnode.MyPoint.Orientation; + + paths.AddNode(thisnode.ChainingNode); + + + if (lastnode != null) + { + var edge = new MCScenarioChainingEdge(); + + edge.NodeFrom = lastnode.ChainingNode; + edge.NodeTo = thisnode.ChainingNode; + edge.NodeIndexFrom = (ushort)lastnode.ChainingNode.NodeIndex; + edge.NodeIndexTo = (ushort)thisnode.ChainingNode.NodeIndex; + + edge.Action = action; + edge.NavMode = navMode; + edge.NavSpeed = navSpeed; + + paths.AddEdge(edge); + chain.AddEdge(edge); + + lastedge = edge; + } + + + lastnode = thisnode; + } + + + + + + + LoadProjectTree(); + + if (lastnode != null) + { + ProjectExplorer?.TrySelectScenarioNodeTreeNode(lastnode); + CurrentScenarioNode = lastnode; + } + + //CurrentScenarioChainEdge = lastedge; + //LoadScenarioChainTabPage(); + //LoadScenarioTabPage(); + //LoadScenarioNodeTabPages(); + + + if (WorldForm != null) + { + WorldForm.UpdateScenarioGraphics(CurrentScenario, false); + } + else + { + CurrentScenario.ScenarioRegion.BuildBVH(); + CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... + } + + + } + + + + + + + public void GetVisibleYmaps(Camera camera, Dictionary ymaps) + { + if (hidegtavmap) + { + ymaps.Clear(); //remove all the gtav ymaps. + } + + if (renderitems && (CurrentProjectFile != null)) + { + lock (projectsyncroot) + { + for (int i = 0; i < CurrentProjectFile.YmapFiles.Count; i++) + { + var ymap = CurrentProjectFile.YmapFiles[i]; + if (ymap.Loaded) + { + ymaps[ymap._CMapData.name] = ymap; + } + } + } + } + } + public void GetVisibleCollisionMeshes(Camera camera, List items) + { + if (hidegtavmap) + { + items.Clear(); + } + } + public void GetVisibleWaterQuads(Camera camera, List quads) + { + if (hidegtavmap) + { + quads.Clear(); + } + } + public void GetVisibleYnds(Camera camera, List ynds) + { + if (hidegtavmap) + { + ynds.Clear(); + } + + if (CurrentProjectFile == null) return; + + lock (projectsyncroot) + { + visibleynds.Clear(); + for (int i = 0; i < ynds.Count; i++) + { + var ynd = ynds[i]; + visibleynds[ynd.AreaID] = ynd; + } + + for (int i = 0; i < CurrentProjectFile.YndFiles.Count; i++) + { + var ynd = CurrentProjectFile.YndFiles[i]; + if (ynd.Loaded) + { + visibleynds[ynd.AreaID] = ynd; + } + } + + ynds.Clear(); + foreach (var ynd in visibleynds.Values) + { + ynds.Add(ynd); + } + } + + } + public void GetVisibleYnvs(Camera camera, List ynvs) + { + if (hidegtavmap) + { + ynvs.Clear(); + } + + if (CurrentProjectFile == null) return; + + lock (projectsyncroot) + { + visibleynvs.Clear(); + for (int i = 0; i < ynvs.Count; i++) + { + var ynv = ynvs[i]; + visibleynvs[ynv.AreaID] = ynv; + } + + for (int i = 0; i < CurrentProjectFile.YnvFiles.Count; i++) + { + var ynv = CurrentProjectFile.YnvFiles[i]; + if (ynv.Loaded) + { + visibleynvs[ynv.AreaID] = ynv; + } + } + + ynvs.Clear(); + foreach (var ynv in visibleynvs.Values) + { + ynvs.Add(ynv); + } + } + + } + public void GetVisibleTrainTracks(Camera camera, List tracks) + { + if (hidegtavmap) + { + tracks.Clear(); + } + + + if (CurrentProjectFile == null) return; + + lock (projectsyncroot) + { + visibletrains.Clear(); + for (int i = 0; i < tracks.Count; i++) + { + var track = tracks[i]; + visibletrains[track.Name] = track; + } + + for (int i = 0; i < CurrentProjectFile.TrainsFiles.Count; i++) + { + var track = CurrentProjectFile.TrainsFiles[i]; + if (track.Loaded) + { + visibletrains[track.Name] = track; + } + } + + tracks.Clear(); + foreach (var track in visibletrains.Values) + { + tracks.Add(track); + } + } + + } + public void GetVisibleScenarios(Camera camera, List ymts) + { + if (hidegtavmap) + { + ymts.Clear(); + } + + + if (CurrentProjectFile == null) return; + + lock (projectsyncroot) + { + visiblescenarios.Clear(); + for (int i = 0; i < ymts.Count; i++) + { + var ymt = ymts[i]; + visiblescenarios[ymt.Name] = ymt; + } + + for (int i = 0; i < CurrentProjectFile.ScenarioFiles.Count; i++) + { + var scenario = CurrentProjectFile.ScenarioFiles[i]; + if (scenario.Loaded) + { + visiblescenarios[scenario.Name] = scenario; + } + } + + ymts.Clear(); + foreach (var ymt in visiblescenarios.Values) + { + ymts.Add(ymt); + } + } + + } + + + public void OnWorldSelectionChanged(MapSelection sel) + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { OnWorldSelectionChanged(sel); })); + } + else + { + var ent = sel.EntityDef; + var cargen = sel.CarGenerator; + var grassbatch = sel.GrassBatch; + var pathnode = sel.PathNode; + var pathlink = sel.PathLink; + var navpoly = sel.NavPoly; + var trainnode = sel.TrainTrackNode; + var scenariond = sel.ScenarioNode; + var scenarioedge = sel.ScenarioEdge; + YmapFile ymap = ent?.Ymap ?? cargen?.Ymap ?? grassbatch?.Ymap; + YndFile ynd = pathnode?.Ynd; + YnvFile ynv = navpoly?.Ynv; + TrainTrack traintrack = trainnode?.Track; + YmtFile scenario = scenariond?.Ymt ?? scenarioedge?.Region?.Ymt; + bool showcurrent = false; + + if (YmapExistsInProject(ymap)) + { + if (ent != CurrentEntity) + { + ProjectExplorer?.TrySelectEntityTreeNode(ent); + } + if (cargen != CurrentCarGen) + { + ProjectExplorer?.TrySelectCarGenTreeNode(cargen); + } + } + else if (YndExistsInProject(ynd)) + { + if (pathnode != CurrentPathNode) + { + ProjectExplorer?.TrySelectPathNodeTreeNode(pathnode); + } + } + else if (YnvExistsInProject(ynv)) + { + if (navpoly != CurrentNavPoly) + { + ProjectExplorer?.TrySelectNavPolyTreeNode(navpoly); + } + } + else if (TrainTrackExistsInProject(traintrack)) + { + if (trainnode != CurrentTrainNode) + { + ProjectExplorer?.TrySelectTrainNodeTreeNode(trainnode); + } + } + else if (ScenarioExistsInProject(scenario)) + { + if ((scenariond != null) && (scenariond != CurrentScenarioNode)) + { + ProjectExplorer?.TrySelectScenarioNodeTreeNode(scenariond); + } + } + else + { + ProjectExplorer?.DeselectNode(); + + showcurrent = true; + } + + CurrentYmapFile = ymap; + CurrentYtypFile = null;//TODO: interiors! + CurrentEntity = ent; + CurrentCarGen = cargen; + CurrentGrassBatch = grassbatch; + CurrentYndFile = ynd; + CurrentPathNode = pathnode; + CurrentPathLink = pathlink; + CurrentYnvFile = ynv; + CurrentNavPoly = navpoly; + CurrentTrainTrack = traintrack; + CurrentTrainNode = trainnode; + CurrentScenario = scenario; + CurrentScenarioNode = scenariond; + CurrentScenarioChainEdge = scenarioedge; + RefreshUI(); + if (showcurrent) + { + ShowProjectItemInProcess = true; + ShowCurrentProjectItem(false); + ShowProjectItemInProcess = false; + } + } + } + catch { } + } + public void OnWorldSelectionModified(MapSelection sel, List items) + { + if (sel.MultipleSelection) + { + //TODO!! + } + else if (sel.EntityDef != null) + { + OnWorldEntityModified(sel.EntityDef); + } + else if (sel.CarGenerator != null) + { + OnWorldCarGenModified(sel.CarGenerator); + } + else if (sel.PathNode != null) + { + OnWorldPathNodeModified(sel.PathNode, sel.PathLink); + } + else if (sel.NavPoly != null) + { + OnWorldNavPolyModified(sel.NavPoly); + } + else if (sel.TrainTrackNode != null) + { + OnWorldTrainNodeModified(sel.TrainTrackNode); + } + else if (sel.ScenarioNode != null) + { + OnWorldScenarioNodeModified(sel.ScenarioNode); + } + } + + private void OnWorldEntityModified(YmapEntityDef ent) + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { OnWorldEntityModified(ent); })); + } + else + { + if ((ent.Ymap == null) || (ent.MloParent != null)) + { + return;//TODO: properly handle interior entities! + } + + if (CurrentProjectFile == null) + { + NewProject(); + } + + if (!YmapExistsInProject(ent.Ymap)) + { + ent.Ymap.HasChanged = true; + AddYmapToProject(ent.Ymap); + ProjectExplorer?.TrySelectEntityTreeNode(ent); + } + + if (ent != CurrentEntity) + { + CurrentEntity = ent; + ProjectExplorer?.TrySelectEntityTreeNode(ent); + } + + if (ent == CurrentEntity) + { + ShowEditYmapEntityPanel(false); + + if (ent.Ymap != null) + { + SetYmapHasChanged(true); + } + } + } + } + catch { } + } + private void OnWorldCarGenModified(YmapCarGen cargen) + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { OnWorldCarGenModified(cargen); })); + } + else + { + if (cargen?.Ymap == null) return; + + if (CurrentProjectFile == null) + { + NewProject(); + } + + if (!YmapExistsInProject(cargen.Ymap)) + { + cargen.Ymap.HasChanged = true; + AddYmapToProject(cargen.Ymap); + ProjectExplorer?.TrySelectCarGenTreeNode(cargen); + } + + if (cargen != CurrentCarGen) + { + CurrentCarGen = cargen; + ProjectExplorer?.TrySelectCarGenTreeNode(cargen); + } + + if (cargen == CurrentCarGen) + { + ShowEditYmapCarGenPanel(false); + + ProjectExplorer?.UpdateCarGenTreeNode(cargen); + + if (cargen.Ymap != null) + { + SetYmapHasChanged(true); + } + } + + } + } + catch { } + } + private void OnWorldPathNodeModified(YndNode node, YndLink link) + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { OnWorldPathNodeModified(node, link); })); + } + else + { + if (node?.Ynd == null) return; + + if (CurrentProjectFile == null) + { + NewProject(); + } + + if (!YndExistsInProject(node.Ynd)) + { + node.Ynd.HasChanged = true; + AddYndToProject(node.Ynd); + ProjectExplorer?.TrySelectPathNodeTreeNode(node); + } + + if (node != CurrentPathNode) + { + CurrentPathNode = node; + ProjectExplorer?.TrySelectPathNodeTreeNode(node); + } + + //////if (link != CurrentPathLink) + //////{ + ////// CurrentPathLink = link; + ////// ShowEditYndLinkPanel(false); + //////} + + if (node == CurrentPathNode) + { + //////ShowEditYndPanel(false); + ShowEditYndNodePanel(false); + + //////UpdatePathNodeTreeNode(node); + + if (node.Ynd != null) + { + SetYndHasChanged(true); + } + } + + } + } + catch { } + } + private void OnWorldNavPolyModified(YnvPoly poly) + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { OnWorldNavPolyModified(poly); })); + } + else + { + if (poly?.Ynv == null) return; + + if (CurrentProjectFile == null) + { + NewProject(); + } + + if (!YnvExistsInProject(poly.Ynv)) + { + poly.Ynv.HasChanged = true; + AddYnvToProject(poly.Ynv); + ProjectExplorer?.TrySelectNavPolyTreeNode(poly); + } + + if (poly != CurrentNavPoly) + { + CurrentNavPoly = poly; + ProjectExplorer?.TrySelectNavPolyTreeNode(poly); + } + + if (poly == CurrentNavPoly) + { + ShowEditYnvPolyPanel(false); + + //////UpdateNavPolyTreeNode(poly); + + if (poly.Ynv != null) + { + SetYnvHasChanged(true); + } + } + + } + } + catch { } + } + private void OnWorldTrainNodeModified(TrainTrackNode node) + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { OnWorldTrainNodeModified(node); })); + } + else + { + if (node?.Track == null) return; + + if (CurrentProjectFile == null) + { + NewProject(); + } + + if (!TrainTrackExistsInProject(node.Track)) + { + node.Track.HasChanged = true; + AddTrainTrackToProject(node.Track); + ProjectExplorer?.TrySelectTrainNodeTreeNode(node); + } + + if (node != CurrentTrainNode) + { + CurrentTrainNode = node; + ProjectExplorer?.TrySelectTrainNodeTreeNode(node); + } + + if (node == CurrentTrainNode) + { + ShowEditTrainNodePanel(false); + + if (node.Track != null) + { + SetTrainTrackHasChanged(true); + } + } + } + } + catch { } + } + private void OnWorldScenarioNodeModified(ScenarioNode node) + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { OnWorldScenarioNodeModified(node); })); + } + else + { + if (node?.Ymt == null) return; + + if (CurrentProjectFile == null) + { + NewProject(); + } + + if (!ScenarioExistsInProject(node.Ymt)) + { + node.Ymt.HasChanged = true; + AddScenarioToProject(node.Ymt); + ProjectExplorer?.TrySelectScenarioNodeTreeNode(node); + } + + if (node != CurrentScenarioNode) + { + CurrentScenarioNode = node; + ProjectExplorer?.TrySelectScenarioNodeTreeNode(node); + } + + if (node == CurrentScenarioNode) + { + //ShowEditScenarioPanel(false); + ShowEditScenarioNodePanel(false); + + if (node?.Ymt != null) + { + SetScenarioHasChanged(true); + } + } + } + } + catch { } + } + + + + + + + public Vector3 GetSpawnPos(float dist) + { + Vector3 pos = Vector3.Zero; + if (WorldForm != null) + { + Vector3 campos = WorldForm.GetCameraPosition(); + Vector3 camdir = WorldForm.GetCameraViewDir(); + pos = campos + camdir * dist; + } + return pos; + } + + + + public void SetProjectHasChanged(bool changed) + { + if (CurrentProjectFile == null) return; + + CurrentProjectFile.HasChanged = changed; + + ProjectExplorer?.SetProjectHasChanged(changed); + + UpdateFormTitleText(); + } + public void SetYmapHasChanged(bool changed) + { + if (CurrentYmapFile == null) return; + + bool changechange = changed != CurrentYmapFile.HasChanged; + if (!changechange) return; + + CurrentYmapFile.HasChanged = changed; + + ProjectExplorer?.SetYmapHasChanged(CurrentYmapFile, changed); + + PromoteIfPreviewPanelActive(); + } + public void SetYtypHasChanged(bool changed) + { + if (CurrentYtypFile == null) return; + + bool changechange = changed != CurrentYtypFile.HasChanged; + if (!changechange) return; + + CurrentYtypFile.HasChanged = changed; + + ProjectExplorer?.SetYtypHasChanged(CurrentYtypFile, changed); + + PromoteIfPreviewPanelActive(); + } + public void SetYndHasChanged(bool changed) + { + if (CurrentYndFile == null) return; + + bool changechange = changed != CurrentYndFile.HasChanged; + if (!changechange) return; + + CurrentYndFile.HasChanged = changed; + + ProjectExplorer?.SetYndHasChanged(CurrentYndFile, changed); + + PromoteIfPreviewPanelActive(); + } + public void SetYnvHasChanged(bool changed) + { + if (CurrentYnvFile == null) return; + + bool changechange = changed != CurrentYnvFile.HasChanged; + if (!changechange) return; + + CurrentYnvFile.HasChanged = changed; + + ProjectExplorer?.SetYnvHasChanged(CurrentYnvFile, changed); + + PromoteIfPreviewPanelActive(); + } + public void SetTrainTrackHasChanged(bool changed) + { + if (CurrentTrainTrack == null) return; + + bool changechange = changed != CurrentTrainTrack.HasChanged; + if (!changechange) return; + + CurrentTrainTrack.HasChanged = changed; + + ProjectExplorer?.SetTrainTrackHasChanged(CurrentTrainTrack, changed); + + PromoteIfPreviewPanelActive(); + } + public void SetScenarioHasChanged(bool changed) + { + if (CurrentScenario == null) return; + + bool changechange = changed != CurrentScenario.HasChanged; + if (!changechange) return; + + CurrentScenario.HasChanged = changed; + + ProjectExplorer?.SetScenarioHasChanged(CurrentScenario, changed); + + PromoteIfPreviewPanelActive(); + } + + + public RpfFileEntry FindParentYmapEntry(uint hash) + { + if (CurrentProjectFile != null) + { + foreach (var ymap in CurrentProjectFile.YmapFiles) + { + if ((ymap._CMapData.name.Hash == hash) || (JenkHash.GenHash(Path.GetFileNameWithoutExtension(ymap.Name)) == hash)) + { + return ymap.RpfFileEntry; + } + } + } + + if ((GameFileCache != null) && (GameFileCache.IsInited)) + { + return GameFileCache.GetYmapEntry(hash); + } + + return null; + } + + + + + + + + + + //######## Private methods + + private void LoadYmapFromFile(YmapFile ymap, string filename) + { + byte[] data = File.ReadAllBytes(filename); + + ymap.Load(data); + + GameFileCache.InitYmapEntityArchetypes(ymap); //this needs to be done after calling YmapFile.Load() + } + private void LoadYtypFromFile(YtypFile ytyp, string filename) + { + byte[] data = File.ReadAllBytes(filename); + + ytyp.Load(data); + } + private void LoadYndFromFile(YndFile ynd, string filename) + { + byte[] data = File.ReadAllBytes(filename); + + ynd.Load(data); + + if (WorldForm != null) + { + WorldForm.UpdatePathYndGraphics(ynd, true); //links don't get drawn until something changes otherwise + //note: this is actually necessary to properly populate junctions data........ + } + } + private void LoadYnvFromFile(YnvFile ynv, string filename)//TODO! + { + } + private void LoadTrainTrackFromFile(TrainTrack track, string filename) + { + byte[] data = File.ReadAllBytes(filename); + + string fname = new FileInfo(filename).Name; + + track.Load(data); + track.Name = fname; + track.FilePath = filename; + track.RpfFileEntry.Name = fname; + track.RpfFileEntry.NameLower = fname.ToLowerInvariant(); + + if (WorldForm != null) + { + WorldForm.UpdateTrainTrackGraphics(track, true); //links don't get drawn until something changes otherwise + } + } + private void LoadScenarioFromFile(YmtFile ymt, string filename) + { + byte[] data = File.ReadAllBytes(filename); + + ymt.LoadRSC(data); + } + + + + private void LoadProjectUI() + { + RefreshProjectUI(); + UpdateFormTitleText(); + LoadProjectTree(); + RefreshUI(); + } + private void LoadProjectTree() + { + ProjectExplorer?.LoadProjectTree(CurrentProjectFile); + } + + + private void UpdateFormTitleText() + { + if (CurrentProjectFile == null) + { + Text = "Project - CodeWalker by dexyfex"; + } + else + { + Text = CurrentProjectFile.Name + " - CodeWalker by dexyfex"; + } + } + + private void RefreshProjectUI() + { + bool enable = (CurrentProjectFile != null); + FileCloseProjectMenu.Enabled = enable; + FileSaveProjectMenu.Enabled = enable; + FileSaveProjectAsMenu.Enabled = enable; + } + private void RefreshUI() + { + RefreshYmapUI(); + RefreshEntityUI(); + RefreshCarGenUI(); + RefreshYtypUI(); + RefreshYndUI(); + RefreshYnvUI(); + RefreshTrainTrackUI(); + RefreshScenarioUI(); + SetCurrentSaveItem(); + //ShowEditYmapPanel(false); + //ShowEditYmapEntityPanel(false); + //ShowEditYmapCarGenPanel(false); + //ShowEditYtypPanel(false); + //ShowEditYndPanel(false); + //ShowEditYnvPanel(false); + //ShowEditYndNodePanel(false); + //ShowEditTrainTrackPanel(false); + //ShowEditTrainNodePanel(false); + //ShowEditScenarioPanel(false); + //ShowEditScenarioNodePanel(false); + } + private void RefreshYmapUI() + { + bool enable = (CurrentYmapFile != null); + bool inproj = YmapExistsInProject(CurrentYmapFile); + + YmapNewEntityMenu.Enabled = enable && inproj; + YmapNewCarGenMenu.Enabled = enable && inproj; + + if (CurrentYmapFile != null) + { + YmapNameMenu.Text = "(" + CurrentYmapFile.Name + ")"; + } + else + { + YmapNameMenu.Text = "(No .ymap file selected)"; + } + + YmapAddToProjectMenu.Enabled = enable && !inproj; + YmapRemoveFromProjectMenu.Enabled = inproj; + YmapMenu.Visible = enable; + + if (WorldForm != null) + { + WorldForm.EnableYmapUI(enable, CurrentYmapFile?.Name ?? ""); + } + } + private void RefreshEntityUI() + { + //bool enable = (CurrentEntity != null); + //bool isinproj = false; + + //if (CurrentEntity != null) + //{ + // isinproj = YmapExistsInProject(CurrentEntity.Ymap); + //} + + //EntityAddToProjectButton.Enabled = !isinproj; + //EntityDeleteButton.Enabled = isinproj; + } + private void RefreshCarGenUI() + { + //bool enable = (CurrentCarGen != null); + //bool isinproj = false; + + //if (CurrentCarGen != null) + //{ + // isinproj = YmapExistsInProject(CurrentCarGen.Ymap); + //} + + //CarAddToProjectButton.Enabled = !isinproj; + //CarDeleteButton.Enabled = isinproj; + } + private void RefreshYtypUI() + { + bool enable = (CurrentYtypFile != null); + bool inproj = YtypExistsInProject(CurrentYtypFile); + + YtypNewArchetypeMenu.Enabled = enable && inproj; + + if (CurrentYtypFile != null) + { + YtypNameMenu.Text = "(" + CurrentYtypFile.Name + ")"; + } + else + { + YtypNameMenu.Text = "(No .ytyp file selected)"; + } + + YtypAddToProjectMenu.Enabled = enable && !inproj; + YtypRemoveFromProjectMenu.Enabled = inproj; + YtypMenu.Visible = enable; + + if (WorldForm != null) + { + //WorldForm.EnableYtypUI(enable, CurrentYtypFile?.Name ?? ""); + } + } + private void RefreshYndUI() + { + bool enable = (CurrentYndFile != null); + bool inproj = YndExistsInProject(CurrentYndFile); + + YndNewNodeMenu.Enabled = enable && inproj; + + if (CurrentYndFile != null) + { + YndNameMenu.Text = "(" + CurrentYndFile.Name + ")"; + } + else + { + YndNameMenu.Text = "(No .ynd file selected)"; + } + + YndAddToProjectMenu.Enabled = enable && !inproj; + YndRemoveFromProjectMenu.Enabled = inproj; + YndMenu.Visible = enable; + + if (WorldForm != null) + { + WorldForm.EnableYndUI(enable, CurrentYndFile?.Name ?? ""); + } + } + private void RefreshYnvUI() + { + bool enable = (CurrentYnvFile != null); + bool inproj = YnvExistsInProject(CurrentYnvFile); + + YnvNewPolygonMenu.Enabled = enable && inproj; + + if (CurrentYnvFile != null) + { + YnvNameMenu.Text = "(" + CurrentYnvFile.Name + ")"; + } + else + { + YnvNameMenu.Text = "(No .ynv file selected)"; + } + + YnvAddToProjectMenu.Enabled = enable && !inproj; + YnvRemoveFromProjectMenu.Enabled = inproj; + YnvMenu.Visible = enable; + + if (WorldForm != null) + { + WorldForm.EnableYnvUI(enable, CurrentYnvFile?.Name ?? ""); + } + } + private void RefreshTrainTrackUI() + { + bool enable = (CurrentTrainTrack != null); + bool inproj = TrainTrackExistsInProject(CurrentTrainTrack); + + TrainsNewNodeMenu.Enabled = enable && inproj; + + if (CurrentTrainTrack != null) + { + TrainsNameMenu.Text = "(" + CurrentTrainTrack.Name + ")"; + } + else + { + TrainsNameMenu.Text = "(No train track selected)"; + } + + TrainsAddToProjectMenu.Enabled = enable && !inproj; + TrainsRemoveFromProjectMenu.Enabled = inproj; + TrainsMenu.Visible = enable; + + if (WorldForm != null) + { + WorldForm.EnableTrainsUI(enable, CurrentTrainTrack?.Name ?? ""); + } + } + private void RefreshScenarioUI() + { + bool enable = (CurrentScenario != null); + bool inproj = ScenarioExistsInProject(CurrentScenario); + + ScenarioNewPointMenu.Enabled = enable && inproj; + ScenarioNewPointFromSelectedMenu.Enabled = enable && inproj && (CurrentScenarioNode != null); + ScenarioNewEntityOverrideMenu.Enabled = enable && inproj; + ScenarioNewChainMenu.Enabled = enable && inproj; + ScenarioNewClusterMenu.Enabled = enable && inproj; + ScenarioImportChainMenu.Enabled = enable && inproj; + + if (CurrentScenario != null) + { + ScenarioNameMenu.Text = "(" + CurrentScenario.Name + ")"; + } + else + { + ScenarioNameMenu.Text = "(No scenario region selected)"; + } + + ScenarioAddToProjectMenu.Enabled = enable && !inproj; + ScenarioRemoveFromProjectMenu.Enabled = inproj; + ScenarioMenu.Visible = enable; + + if (WorldForm != null) + { + WorldForm.EnableScenarioUI(enable, CurrentScenario?.Name ?? ""); + } + } + + + private void SetCurrentSaveItem() + { + string filename = null; + if (CurrentYmapFile != null) + { + filename = CurrentYmapFile.RpfFileEntry?.Name; + } + else if (CurrentYtypFile != null) + { + filename = CurrentYtypFile.RpfFileEntry?.Name; + } + else if (CurrentYndFile != null) + { + filename = CurrentYndFile.RpfFileEntry?.Name; + } + else if (CurrentYnvFile != null) + { + filename = CurrentYnvFile.RpfFileEntry?.Name; + } + else if (CurrentTrainTrack != null) + { + filename = CurrentTrainTrack.RpfFileEntry?.Name; + } + else if (CurrentScenario != null) + { + filename = CurrentScenario.RpfFileEntry?.Name; + } + + bool enable = !string.IsNullOrEmpty(filename); + + if (enable) + { + FileSaveItemMenu.Text = "Save " + filename; + FileSaveItemAsMenu.Text = "Save " + filename + " As..."; + ToolbarSaveButton.Text = "Save " + filename; + } + else + { + FileSaveItemMenu.Text = "Save"; + FileSaveItemAsMenu.Text = "Save As..."; + ToolbarSaveButton.Text = "Save"; + } + + FileSaveItemMenu.Tag = filename; + FileSaveItemAsMenu.Tag = filename; + + FileSaveItemMenu.Enabled = enable; + FileSaveItemMenu.Visible = enable; + FileSaveItemAsMenu.Enabled = enable; + FileSaveItemAsMenu.Visible = enable; + ToolbarSaveButton.Enabled = enable; + + if (WorldForm != null) + { + WorldForm.SetCurrentSaveItem(filename); + } + } + + + + + + + + + private string ShowSaveDialog(string filter, string filename) + { + SaveFileDialog.FileName = filename; + SaveFileDialog.Filter = filter; + if (SaveFileDialog.ShowDialog(this) != DialogResult.OK) + { + return string.Empty; + } + return SaveFileDialog.FileName; + } + private string ShowOpenDialog(string filter, string filename) + { + OpenFileDialog.FileName = filename; + OpenFileDialog.Filter = filter; + OpenFileDialog.Multiselect = false; + if (OpenFileDialog.ShowDialog(this) != DialogResult.OK) + { + return string.Empty; + } + return OpenFileDialog.FileName; + } + private string[] ShowOpenDialogMulti(string filter, string filename) + { + OpenFileDialog.FileName = filename; + OpenFileDialog.Filter = filter; + OpenFileDialog.Multiselect = true; + if (OpenFileDialog.ShowDialog(this) != DialogResult.OK) + { + return null; + } + return OpenFileDialog.FileNames; + } + + + + + + + + //######## events + + private void ProjectForm_FormClosing(object sender, FormClosingEventArgs e) + { + CloseProject(); + } + private void ProjectForm_FormClosed(object sender, FormClosedEventArgs e) + { + if (WorldForm != null) + { + WorldForm.OnProjectFormClosed(); + } + } + + private void ProjectExplorer_OnItemSelected(object item) + { + ShowProjectItem(item, false); + } + private void ProjectExplorer_OnItemActivated(object item) + { + //promote from preview panel to full panel... + ShowProjectItem(item, true); + } + + private void MainDockPanel_ActiveContentChanged(object sender, EventArgs e) + { + if (!ShowProjectItemInProcess) + { + var panel = MainDockPanel.ActiveContent as ProjectPanel; + if (panel != null) + { + MainDockPanel.DefaultFloatWindowSize = panel.Size; + } + if (panel?.Tag != null) + { + SetProjectItem(panel.Tag); + RefreshUI(); + } + } + } + private void MainDockPanel_DocumentDragged(object sender, EventArgs e) + { + PromoteIfPreviewPanel(MainDockPanel.ActiveContent); + } + + private void FileNewProjectMenu_Click(object sender, EventArgs e) + { + NewProject(); + } + private void FileNewYmapMenu_Click(object sender, EventArgs e) + { + NewYmap(); + } + private void FileNewYtypMenu_Click(object sender, EventArgs e) + { + NewYtyp(); + } + private void FileNewYndMenu_Click(object sender, EventArgs e) + { + NewYnd(); + } + private void FileNewYnvMenu_Click(object sender, EventArgs e) + { + NewYnv(); + } + private void FileNewTrainsMenu_Click(object sender, EventArgs e) + { + NewTrainTrack(); + } + private void FileNewScenarioMenu_Click(object sender, EventArgs e) + { + NewScenario(); + } + private void FileOpenProjectMenu_Click(object sender, EventArgs e) + { + OpenProject(); + } + private void FileOpenYmapMenu_Click(object sender, EventArgs e) + { + OpenYmap(); + } + private void FileOpenYtypMenu_Click(object sender, EventArgs e) + { + OpenYtyp(); + } + private void FileOpenYndMenu_Click(object sender, EventArgs e) + { + OpenYnd(); + } + private void FileOpenYnvMenu_Click(object sender, EventArgs e) + { + OpenYnv(); + } + private void FileOpenTrainsMenu_Click(object sender, EventArgs e) + { + OpenTrainTrack(); + } + private void FileOpenScenarioMenu_Click(object sender, EventArgs e) + { + OpenScenario(); + } + private void FileCloseProjectMenu_Click(object sender, EventArgs e) + { + CloseProject(); + } + private void FileSaveProjectMenu_Click(object sender, EventArgs e) + { + SaveProject(); + } + private void FileSaveProjectAsMenu_Click(object sender, EventArgs e) + { + SaveProject(true); + } + private void FileSaveItemMenu_Click(object sender, EventArgs e) + { + SaveCurrentItem(); + } + private void FileSaveItemAsMenu_Click(object sender, EventArgs e) + { + SaveCurrentItem(true); + } + + private void ViewProjectExplorerMenu_Click(object sender, EventArgs e) + { + ShowProjectExplorer(); + } + private void ViewThemeBlueMenu_Click(object sender, EventArgs e) + { + SetTheme("Blue"); + } + private void ViewThemeLightMenu_Click(object sender, EventArgs e) + { + SetTheme("Light"); + } + private void ViewThemeDarkMenu_Click(object sender, EventArgs e) + { + SetTheme("Dark"); + } + + private void ToolsManifestGeneratorMenu_Click(object sender, EventArgs e) + { + ShowEditProjectManifestPanel(false); + } + private void ToolsImportMenyooXmlMenu_Click(object sender, EventArgs e) + { + MessageBox.Show("TODO: rebuild this!"); + } + + private void RenderShowGtavMapMenu_Click(object sender, EventArgs e) + { + RenderShowGtavMapMenu.Checked = !RenderShowGtavMapMenu.Checked; + hidegtavmap = !RenderShowGtavMapMenu.Checked; + } + private void RenderShowProjectItemsMenu_Click(object sender, EventArgs e) + { + RenderShowProjectItemsMenu.Checked = !RenderShowProjectItemsMenu.Checked; + renderitems = RenderShowProjectItemsMenu.Checked; + } + + private void ToolbarNewButton_ButtonClick(object sender, EventArgs e) + { + if (CurrentProjectFile == null) + { + NewProject(); + } + else + { + NewYmap(); + } + } + private void ToolbarNewProjectMenu_Click(object sender, EventArgs e) + { + NewProject(); + } + private void ToolbarNewYmapMenu_Click(object sender, EventArgs e) + { + NewYmap(); + } + private void ToolbarNewYtypMenu_Click(object sender, EventArgs e) + { + NewYtyp(); + } + private void ToolbarNewYndMenu_Click(object sender, EventArgs e) + { + NewYnd(); + } + private void ToolbarNewYnvMenu_Click(object sender, EventArgs e) + { + NewYnv(); + } + private void ToolbarNewTrainsMenu_Click(object sender, EventArgs e) + { + NewTrainTrack(); + } + private void ToolbarNewScenarioMenu_Click(object sender, EventArgs e) + { + NewScenario(); + } + private void ToolbarOpenButton_ButtonClick(object sender, EventArgs e) + { + if (CurrentProjectFile == null) + { + OpenProject(); + } + else + { + OpenYmap(); + } + } + private void ToolbarOpenProjectMenu_Click(object sender, EventArgs e) + { + OpenProject(); + } + private void ToolbarOpenYmapMenu_Click(object sender, EventArgs e) + { + OpenYmap(); + } + private void ToolbarOpenYtypMenu_Click(object sender, EventArgs e) + { + OpenYtyp(); + } + private void ToolbarOpenYndMenu_Click(object sender, EventArgs e) + { + OpenYnd(); + } + private void ToolbarOpenYnvMenu_Click(object sender, EventArgs e) + { + OpenYnv(); + } + private void ToolbarOpenTrainsMenu_Click(object sender, EventArgs e) + { + OpenTrainTrack(); + } + private void ToolbarOpenScenarioMenu_Click(object sender, EventArgs e) + { + OpenScenario(); + } + private void ToolbarSaveButton_Click(object sender, EventArgs e) + { + Save(); + } + private void ToolbarSaveAllButton_Click(object sender, EventArgs e) + { + SaveAll(); + } + + private void YmapNewEntityMenu_Click(object sender, EventArgs e) + { + NewEntity(); + } + private void YmapNewCarGenMenu_Click(object sender, EventArgs e) + { + NewCarGen(); + } + private void YmapAddToProjectMenu_Click(object sender, EventArgs e) + { + AddYmapToProject(CurrentYmapFile); + } + private void YmapRemoveFromProjectMenu_Click(object sender, EventArgs e) + { + RemoveYmapFromProject(); + } + + private void YtypNewArchetypeMenu_Click(object sender, EventArgs e) + { + //NewArchetype(); + } + private void YtypAddToProjectMenu_Click(object sender, EventArgs e) + { + AddYtypToProject(CurrentYtypFile); + } + private void YtypRemoveFromProjectMenu_Click(object sender, EventArgs e) + { + RemoveYtypFromProject(); + } + + private void YndNewNodeMenu_Click(object sender, EventArgs e) + { + NewPathNode(); + } + private void YndAddToProjectMenu_Click(object sender, EventArgs e) + { + AddYndToProject(CurrentYndFile); + } + private void YndRemoveFromProjectMenu_Click(object sender, EventArgs e) + { + RemoveYndFromProject(); + } + + private void YnvNewPolygonMenu_Click(object sender, EventArgs e) + { + NewNavPoly(); + } + private void YnvAddToProjectMenu_Click(object sender, EventArgs e) + { + AddYnvToProject(CurrentYnvFile); + } + private void YnvRemoveFromProjectMenu_Click(object sender, EventArgs e) + { + RemoveYnvFromProject(); + } + + private void TrainsNewNodeMenu_Click(object sender, EventArgs e) + { + NewTrainNode(); + } + private void TrainsAddToProjectMenu_Click(object sender, EventArgs e) + { + AddTrainTrackToProject(CurrentTrainTrack); + } + private void TrainsRemoveFromProjectMenu_Click(object sender, EventArgs e) + { + RemoveTrainTrackFromProject(); + } + + private void ScenarioNewPointMenu_Click(object sender, EventArgs e) + { + CurrentScenarioNode = null; + NewScenarioNode(); + } + private void ScenarioNewPointFromSelectedMenu_Click(object sender, EventArgs e) + { + NewScenarioNode(); + } + private void ScenarioNewEntityOverrideMenu_Click(object sender, EventArgs e) + { + AddScenarioEntity(); + } + private void ScenarioNewChainMenu_Click(object sender, EventArgs e) + { + AddScenarioChain(); + } + private void ScenarioNewClusterMenu_Click(object sender, EventArgs e) + { + AddScenarioCluster(); + } + private void ScenarioImportChainMenu_Click(object sender, EventArgs e) + { + ImportScenarioChain(); + } + private void ScenarioAddToProjectMenu_Click(object sender, EventArgs e) + { + AddScenarioToProject(CurrentScenario); + } + private void ScenarioRemoveFromProjectMenu_Click(object sender, EventArgs e) + { + RemoveScenarioFromProject(); + } + } +} diff --git a/Project/ProjectForm2.resx b/Project/ProjectForm2.resx new file mode 100644 index 0000000..d228030 --- /dev/null +++ b/Project/ProjectForm2.resx @@ -0,0 +1,460 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 20, 22 + + + 513, 21 + + + 247, 21 + + + 378, 21 + + + 130, 20 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACMSURBVDhP7Y3BCYAwFEM7h1M4Q/fy2rUEp3AFT1UovSrR + /22orQpeDTxqNS8aToxxVeTVu7A4dM35DKRyHxbzUyr1oASmsd8lBXf9JtVyUGCxdCd8CKEV9QgXaqK1 + dsc5h3t5RKX8nP1yUh1BUcn/ng/wiOgpLKLIMoNv6Ih2zT+QBu54HHiD1L/EmA2wn/hWQ4oVCwAAAABJ + RU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEISURBVDhPlZC7CsIwFIZ9A30S8RF8B1d9B3F0000XdRcK + bg7iVrCggy5d1MFBEG1thyoqpqW3MfaEpjQm9RL4aHM4/3eS5GB5nlcKggBF4BQI6qThl0UlxcYE5ypD + XO0vfpdEjb14Kr48bPyXBMLj1QHnayMSeqc73dIrCQEBCcO0vXknRfiHMJwE9ke5KSQRQPNsfWbC8fEJ + NnI4GMH7CdKIwkBa0IPp9A2+BSmJIH7IJEgRhdIwVwBOSkvYmAUj0JQ2KXwCBjyvJi/wfV+yNmMuIMJU + JV4QhmHZuelccxZ3Y8cKYLmuqxvLAdcsQp93eEF0jfpDU7nmLKydTL6JACFUgM3/BPgFb2b9wUqYs/wA + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABRSURBVDhPY6AK+Pbt239S8NevX+dDtUIASJAheA4cf3j/ + EY6RxUB0zIR9mIaQYgAIwwyBaifdABAm2gBkjKyGtgYQg0cNGJQGkIOh2ikBDAwAR/4LjdUkCHIAAAAA + SUVORK5CYII= + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/ProjectForm.cs b/ProjectForm.cs index 91d5de9..0f5d8c7 100644 --- a/ProjectForm.cs +++ b/ProjectForm.cs @@ -951,10 +951,10 @@ namespace CodeWalker var ytyp = ent.Archetype?.Ytyp; if (ytyp != null) { - var ytypname = ytyp.FileEntry?.NameLower; + var ytypname = ytyp.RpfFileEntry?.NameLower; if (string.IsNullOrEmpty(ytypname)) { - ytypname = ytyp.FileEntry?.Name?.ToLowerInvariant(); + ytypname = ytyp.RpfFileEntry?.Name?.ToLowerInvariant(); if (ytypname == null) ytypname = ""; } if (ytypname.EndsWith(".ytyp")) diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs index 76621d0..1872fc0 100644 --- a/Properties/Settings.Designer.cs +++ b/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace CodeWalker.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -710,5 +710,17 @@ namespace CodeWalker.Properties { this["RememberGTAFolder"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Blue")] + public string ProjectWindowTheme { + get { + return ((string)(this["ProjectWindowTheme"])); + } + set { + this["ProjectWindowTheme"] = value; + } + } } } diff --git a/Properties/Settings.settings b/Properties/Settings.settings index f2aa187..d8b1065 100644 --- a/Properties/Settings.settings +++ b/Properties/Settings.settings @@ -186,5 +186,8 @@ True + + Blue + \ No newline at end of file diff --git a/Shaders/BasicPS.cso b/Shaders/BasicPS.cso index c9d9284..150d78b 100644 Binary files a/Shaders/BasicPS.cso and b/Shaders/BasicPS.cso differ diff --git a/Shaders/BasicVS_Box.cso b/Shaders/BasicVS_Box.cso index e71feed..598388d 100644 Binary files a/Shaders/BasicVS_Box.cso and b/Shaders/BasicVS_Box.cso differ diff --git a/Shaders/BasicVS_Capsule.cso b/Shaders/BasicVS_Capsule.cso index aff28b3..b977722 100644 Binary files a/Shaders/BasicVS_Capsule.cso and b/Shaders/BasicVS_Capsule.cso differ diff --git a/Shaders/BasicVS_Cylinder.cso b/Shaders/BasicVS_Cylinder.cso index fafd522..98e5a7f 100644 Binary files a/Shaders/BasicVS_Cylinder.cso and b/Shaders/BasicVS_Cylinder.cso differ diff --git a/Shaders/BasicVS_PNCCT.cso b/Shaders/BasicVS_PNCCT.cso index c047c7e..7e0f7f9 100644 Binary files a/Shaders/BasicVS_PNCCT.cso and b/Shaders/BasicVS_PNCCT.cso differ diff --git a/Shaders/BasicVS_PNCCTT.cso b/Shaders/BasicVS_PNCCTT.cso index 2956bf7..629acb6 100644 Binary files a/Shaders/BasicVS_PNCCTT.cso and b/Shaders/BasicVS_PNCCTT.cso differ diff --git a/Shaders/BasicVS_PNCCTTT.cso b/Shaders/BasicVS_PNCCTTT.cso index 189fb7a..d445c0d 100644 Binary files a/Shaders/BasicVS_PNCCTTT.cso and b/Shaders/BasicVS_PNCCTTT.cso differ diff --git a/Shaders/BasicVS_PNCCTTTX.cso b/Shaders/BasicVS_PNCCTTTX.cso index 7e63540..aa7cfa1 100644 Binary files a/Shaders/BasicVS_PNCCTTTX.cso and b/Shaders/BasicVS_PNCCTTTX.cso differ diff --git a/Shaders/BasicVS_PNCCTTX.cso b/Shaders/BasicVS_PNCCTTX.cso index 1d0be06..cef7b68 100644 Binary files a/Shaders/BasicVS_PNCCTTX.cso and b/Shaders/BasicVS_PNCCTTX.cso differ diff --git a/Shaders/BasicVS_PNCCTX.cso b/Shaders/BasicVS_PNCCTX.cso index 8f93137..7aa9079 100644 Binary files a/Shaders/BasicVS_PNCCTX.cso and b/Shaders/BasicVS_PNCCTX.cso differ diff --git a/Shaders/BasicVS_PNCT.cso b/Shaders/BasicVS_PNCT.cso index 551cd1a..6b18954 100644 Binary files a/Shaders/BasicVS_PNCT.cso and b/Shaders/BasicVS_PNCT.cso differ diff --git a/Shaders/BasicVS_PNCTTTX.cso b/Shaders/BasicVS_PNCTTTX.cso index d0d01cf..a3e9d3e 100644 Binary files a/Shaders/BasicVS_PNCTTTX.cso and b/Shaders/BasicVS_PNCTTTX.cso differ diff --git a/Shaders/BasicVS_PNCTTX.cso b/Shaders/BasicVS_PNCTTX.cso index bb3ba42..7fe4a85 100644 Binary files a/Shaders/BasicVS_PNCTTX.cso and b/Shaders/BasicVS_PNCTTX.cso differ diff --git a/Shaders/BasicVS_PNCTX.cso b/Shaders/BasicVS_PNCTX.cso index 7fec2ec..c68fcee 100644 Binary files a/Shaders/BasicVS_PNCTX.cso and b/Shaders/BasicVS_PNCTX.cso differ diff --git a/Shaders/BasicVS_Sphere.cso b/Shaders/BasicVS_Sphere.cso index 9a0faf7..14daffc 100644 Binary files a/Shaders/BasicVS_Sphere.cso and b/Shaders/BasicVS_Sphere.cso differ diff --git a/Shaders/BoundingBoxVS.cso b/Shaders/BoundingBoxVS.cso index 3d6b742..2436690 100644 Binary files a/Shaders/BoundingBoxVS.cso and b/Shaders/BoundingBoxVS.cso differ diff --git a/Shaders/BoundingSphereVS.cso b/Shaders/BoundingSphereVS.cso index 88dd121..7ad9c7c 100644 Binary files a/Shaders/BoundingSphereVS.cso and b/Shaders/BoundingSphereVS.cso differ diff --git a/Shaders/BoundsPS.cso b/Shaders/BoundsPS.cso index aa0a9da..be91335 100644 Binary files a/Shaders/BoundsPS.cso and b/Shaders/BoundsPS.cso differ diff --git a/Shaders/CablePS.cso b/Shaders/CablePS.cso index 92f24f7..8610770 100644 Binary files a/Shaders/CablePS.cso and b/Shaders/CablePS.cso differ diff --git a/Shaders/CableVS.cso b/Shaders/CableVS.cso index 6077bac..d4c2e88 100644 Binary files a/Shaders/CableVS.cso and b/Shaders/CableVS.cso differ diff --git a/Shaders/CloudsPS.cso b/Shaders/CloudsPS.cso index bb9cdf7..5fd090b 100644 Binary files a/Shaders/CloudsPS.cso and b/Shaders/CloudsPS.cso differ diff --git a/Shaders/CloudsVS.cso b/Shaders/CloudsVS.cso index db4431f..c678f6e 100644 Binary files a/Shaders/CloudsVS.cso and b/Shaders/CloudsVS.cso differ diff --git a/Shaders/DistantLightsPS.cso b/Shaders/DistantLightsPS.cso index 422b6e9..764a2dd 100644 Binary files a/Shaders/DistantLightsPS.cso and b/Shaders/DistantLightsPS.cso differ diff --git a/Shaders/DistantLightsVS.cso b/Shaders/DistantLightsVS.cso index df0188b..c181624 100644 Binary files a/Shaders/DistantLightsVS.cso and b/Shaders/DistantLightsVS.cso differ diff --git a/Shaders/MarkerPS.cso b/Shaders/MarkerPS.cso index 71e1845..9c56e53 100644 Binary files a/Shaders/MarkerPS.cso and b/Shaders/MarkerPS.cso differ diff --git a/Shaders/MarkerVS.cso b/Shaders/MarkerVS.cso index d9cc578..0648373 100644 Binary files a/Shaders/MarkerVS.cso and b/Shaders/MarkerVS.cso differ diff --git a/Shaders/PPBloomFilterBPHCS.cso b/Shaders/PPBloomFilterBPHCS.cso index 70bcf86..81bec7e 100644 Binary files a/Shaders/PPBloomFilterBPHCS.cso and b/Shaders/PPBloomFilterBPHCS.cso differ diff --git a/Shaders/PPBloomFilterVCS.cso b/Shaders/PPBloomFilterVCS.cso index c1c7273..84009ae 100644 Binary files a/Shaders/PPBloomFilterVCS.cso and b/Shaders/PPBloomFilterVCS.cso differ diff --git a/Shaders/PPCopyPixelsPS.cso b/Shaders/PPCopyPixelsPS.cso index 052c970..c366004 100644 Binary files a/Shaders/PPCopyPixelsPS.cso and b/Shaders/PPCopyPixelsPS.cso differ diff --git a/Shaders/PPFinalPassPS.cso b/Shaders/PPFinalPassPS.cso index 743bd5c..785c5b0 100644 Binary files a/Shaders/PPFinalPassPS.cso and b/Shaders/PPFinalPassPS.cso differ diff --git a/Shaders/PPFinalPassVS.cso b/Shaders/PPFinalPassVS.cso index d595a82..48bc563 100644 Binary files a/Shaders/PPFinalPassVS.cso and b/Shaders/PPFinalPassVS.cso differ diff --git a/Shaders/PPLumBlendCS.cso b/Shaders/PPLumBlendCS.cso index 4f217d3..2ff9649 100644 Binary files a/Shaders/PPLumBlendCS.cso and b/Shaders/PPLumBlendCS.cso differ diff --git a/Shaders/PPReduceTo0DCS.cso b/Shaders/PPReduceTo0DCS.cso index 6e0cb4d..3eb4e22 100644 Binary files a/Shaders/PPReduceTo0DCS.cso and b/Shaders/PPReduceTo0DCS.cso differ diff --git a/Shaders/PPReduceTo1DCS.cso b/Shaders/PPReduceTo1DCS.cso index 274c130..315c94c 100644 Binary files a/Shaders/PPReduceTo1DCS.cso and b/Shaders/PPReduceTo1DCS.cso differ diff --git a/Shaders/PathBoxPS.cso b/Shaders/PathBoxPS.cso index 7af9a97..710da2c 100644 Binary files a/Shaders/PathBoxPS.cso and b/Shaders/PathBoxPS.cso differ diff --git a/Shaders/PathBoxVS.cso b/Shaders/PathBoxVS.cso index 17aef3c..5f4e17a 100644 Binary files a/Shaders/PathBoxVS.cso and b/Shaders/PathBoxVS.cso differ diff --git a/Shaders/PathDynVS.cso b/Shaders/PathDynVS.cso index f1122fb..f2aa6f8 100644 Binary files a/Shaders/PathDynVS.cso and b/Shaders/PathDynVS.cso differ diff --git a/Shaders/PathPS.cso b/Shaders/PathPS.cso index c3c9eb4..ba5147d 100644 Binary files a/Shaders/PathPS.cso and b/Shaders/PathPS.cso differ diff --git a/Shaders/PathVS.cso b/Shaders/PathVS.cso index 0508de7..dfde981 100644 Binary files a/Shaders/PathVS.cso and b/Shaders/PathVS.cso differ diff --git a/Shaders/ShadowPS.cso b/Shaders/ShadowPS.cso index 78ab5de..2811039 100644 Binary files a/Shaders/ShadowPS.cso and b/Shaders/ShadowPS.cso differ diff --git a/Shaders/ShadowVS.cso b/Shaders/ShadowVS.cso index b1a5314..81f9ac2 100644 Binary files a/Shaders/ShadowVS.cso and b/Shaders/ShadowVS.cso differ diff --git a/Shaders/SkyMoonPS.cso b/Shaders/SkyMoonPS.cso index 6bdfcaa..cb0d99a 100644 Binary files a/Shaders/SkyMoonPS.cso and b/Shaders/SkyMoonPS.cso differ diff --git a/Shaders/SkyMoonVS.cso b/Shaders/SkyMoonVS.cso index ec98e70..1400347 100644 Binary files a/Shaders/SkyMoonVS.cso and b/Shaders/SkyMoonVS.cso differ diff --git a/Shaders/SkySunPS.cso b/Shaders/SkySunPS.cso index a6c9029..6b24c1c 100644 Binary files a/Shaders/SkySunPS.cso and b/Shaders/SkySunPS.cso differ diff --git a/Shaders/SkySunVS.cso b/Shaders/SkySunVS.cso index 7f5b4bf..1846ed0 100644 Binary files a/Shaders/SkySunVS.cso and b/Shaders/SkySunVS.cso differ diff --git a/Shaders/SkydomePS.cso b/Shaders/SkydomePS.cso index 514108f..5075227 100644 Binary files a/Shaders/SkydomePS.cso and b/Shaders/SkydomePS.cso differ diff --git a/Shaders/SkydomeVS.cso b/Shaders/SkydomeVS.cso index 779704b..d43260e 100644 Binary files a/Shaders/SkydomeVS.cso and b/Shaders/SkydomeVS.cso differ diff --git a/Shaders/TerrainPS.cso b/Shaders/TerrainPS.cso index bcc1d67..2f9779e 100644 Binary files a/Shaders/TerrainPS.cso and b/Shaders/TerrainPS.cso differ diff --git a/Shaders/TerrainVS_PNCCT.cso b/Shaders/TerrainVS_PNCCT.cso index e20d728..62ef52b 100644 Binary files a/Shaders/TerrainVS_PNCCT.cso and b/Shaders/TerrainVS_PNCCT.cso differ diff --git a/Shaders/TerrainVS_PNCCTT.cso b/Shaders/TerrainVS_PNCCTT.cso index 5bcc67b..dda97b6 100644 Binary files a/Shaders/TerrainVS_PNCCTT.cso and b/Shaders/TerrainVS_PNCCTT.cso differ diff --git a/Shaders/TerrainVS_PNCCTTTX.cso b/Shaders/TerrainVS_PNCCTTTX.cso index 3601f02..b8ff6b8 100644 Binary files a/Shaders/TerrainVS_PNCCTTTX.cso and b/Shaders/TerrainVS_PNCCTTTX.cso differ diff --git a/Shaders/TerrainVS_PNCCTTX.cso b/Shaders/TerrainVS_PNCCTTX.cso index fe73154..ec3884e 100644 Binary files a/Shaders/TerrainVS_PNCCTTX.cso and b/Shaders/TerrainVS_PNCCTTX.cso differ diff --git a/Shaders/TerrainVS_PNCCTX.cso b/Shaders/TerrainVS_PNCCTX.cso index df8b4bd..ce79f78 100644 Binary files a/Shaders/TerrainVS_PNCCTX.cso and b/Shaders/TerrainVS_PNCCTX.cso differ diff --git a/Shaders/TerrainVS_PNCTTTX.cso b/Shaders/TerrainVS_PNCTTTX.cso index fe03555..9655046 100644 Binary files a/Shaders/TerrainVS_PNCTTTX.cso and b/Shaders/TerrainVS_PNCTTTX.cso differ diff --git a/Shaders/TerrainVS_PNCTTX.cso b/Shaders/TerrainVS_PNCTTX.cso index 0c2ff0c..9ae7bd0 100644 Binary files a/Shaders/TerrainVS_PNCTTX.cso and b/Shaders/TerrainVS_PNCTTX.cso differ diff --git a/Shaders/TreesLodPS.cso b/Shaders/TreesLodPS.cso index d8645ac..7f68da8 100644 Binary files a/Shaders/TreesLodPS.cso and b/Shaders/TreesLodPS.cso differ diff --git a/Shaders/TreesLodVS.cso b/Shaders/TreesLodVS.cso index 7097374..0e34f0e 100644 Binary files a/Shaders/TreesLodVS.cso and b/Shaders/TreesLodVS.cso differ diff --git a/Shaders/WaterPS.cso b/Shaders/WaterPS.cso index d287c4c..a2c3cc6 100644 Binary files a/Shaders/WaterPS.cso and b/Shaders/WaterPS.cso differ diff --git a/Shaders/WaterVS_PCT.cso b/Shaders/WaterVS_PCT.cso index e9aecdd..4952ed2 100644 Binary files a/Shaders/WaterVS_PCT.cso and b/Shaders/WaterVS_PCT.cso differ diff --git a/Shaders/WaterVS_PNCT.cso b/Shaders/WaterVS_PNCT.cso index de99c26..c08bc46 100644 Binary files a/Shaders/WaterVS_PNCT.cso and b/Shaders/WaterVS_PNCT.cso differ diff --git a/Shaders/WaterVS_PNCTX.cso b/Shaders/WaterVS_PNCTX.cso index 8bb643c..d9694f5 100644 Binary files a/Shaders/WaterVS_PNCTX.cso and b/Shaders/WaterVS_PNCTX.cso differ diff --git a/Shaders/WaterVS_PT.cso b/Shaders/WaterVS_PT.cso index 32f23ac..3cbf359 100644 Binary files a/Shaders/WaterVS_PT.cso and b/Shaders/WaterVS_PT.cso differ diff --git a/Shaders/WidgetPS.cso b/Shaders/WidgetPS.cso index be37652..c90b77c 100644 Binary files a/Shaders/WidgetPS.cso and b/Shaders/WidgetPS.cso differ diff --git a/Shaders/WidgetVS.cso b/Shaders/WidgetVS.cso index b2ffd27..8d67974 100644 Binary files a/Shaders/WidgetVS.cso and b/Shaders/WidgetVS.cso differ diff --git a/WorldForm.cs b/WorldForm.cs index d016e75..7f8ca5f 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -163,7 +163,7 @@ namespace CodeWalker bool ShowWidget = true; - ProjectForm ProjectForm = null; + ProjectForm2 ProjectForm = null; Stack UndoSteps = new Stack(); Stack RedoSteps = new Stack(); @@ -3761,7 +3761,7 @@ namespace CodeWalker { if (ProjectForm == null) { - ProjectForm = new ProjectForm(this); + ProjectForm = new ProjectForm2(this); ProjectForm.Show(this); } else diff --git a/WorldSearchForm.cs b/WorldSearchForm.cs index d76d6e3..3ee7ec1 100644 --- a/WorldSearchForm.cs +++ b/WorldSearchForm.cs @@ -201,7 +201,7 @@ namespace CodeWalker sb.AppendLine("Name, AssetName, YtypFile"); foreach (var arch in ArchetypeResults) { - sb.AppendLine(string.Format("{0}, {1}, {2}", arch.Name, arch.AssetName, arch.Ytyp?.FileEntry?.Path ?? "")); + sb.AppendLine(string.Format("{0}, {1}, {2}", arch.Name, arch.AssetName, arch.Ytyp?.RpfFileEntry?.Path ?? "")); } File.WriteAllText(fname, sb.ToString()); @@ -212,7 +212,7 @@ namespace CodeWalker if (e.ItemIndex < ArchetypeResults.Count) { var arch = ArchetypeResults[e.ItemIndex]; - var li = new ListViewItem(new[] { arch.Name, arch.Ytyp?.FileEntry?.Path ?? "" }); + var li = new ListViewItem(new[] { arch.Name, arch.Ytyp?.RpfFileEntry?.Path ?? "" }); li.Tag = arch; e.Item = li; } @@ -239,7 +239,7 @@ namespace CodeWalker var arch = ArchetypeResults[li]; ArchetypeResultPanel.Enabled = true; ArchetypeResultNameTextBox.Text = arch.Name; - ArchetypeResultYtypTextBox.Text = arch.Ytyp?.FileEntry?.Path ?? ""; + ArchetypeResultYtypTextBox.Text = arch.Ytyp?.RpfFileEntry?.Path ?? ""; ArchetypeResultPropertyGrid.SelectedObject = arch; } } diff --git a/packages.config b/packages.config index c1709b5..51f22e4 100644 --- a/packages.config +++ b/packages.config @@ -1,5 +1,7 @@  + +