diff --git a/CodeWalker/Project/Panels/EditYmapEntityPanel.Designer.cs b/CodeWalker/Project/Panels/EditYmapEntityPanel.Designer.cs index c8fc7c837..72d6a8174 100644 --- a/CodeWalker/Project/Panels/EditYmapEntityPanel.Designer.cs +++ b/CodeWalker/Project/Panels/EditYmapEntityPanel.Designer.cs @@ -66,6 +66,7 @@ private void InitializeComponent() this.EntityGoToButton = new System.Windows.Forms.Button(); this.label17 = new System.Windows.Forms.Label(); this.EntityLodTabPage = new System.Windows.Forms.TabPage(); + this.parentEntityTextBox = new System.Windows.Forms.TextBox(); this.label20 = new System.Windows.Forms.Label(); this.EntityParentIndexTextBox = new System.Windows.Forms.TextBox(); this.EntityNumChildrenTextBox = new System.Windows.Forms.TextBox(); @@ -528,6 +529,7 @@ private void InitializeComponent() // // EntityLodTabPage // + this.EntityLodTabPage.Controls.Add(this.parentEntityTextBox); this.EntityLodTabPage.Controls.Add(this.label20); this.EntityLodTabPage.Controls.Add(this.EntityParentIndexTextBox); this.EntityLodTabPage.Controls.Add(this.EntityNumChildrenTextBox); @@ -540,6 +542,16 @@ private void InitializeComponent() this.EntityLodTabPage.Text = "LOD Hierarchy"; this.EntityLodTabPage.UseVisualStyleBackColor = true; // + // parentEntityTextBox + // + this.parentEntityTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.parentEntityTextBox.Location = new System.Drawing.Point(183, 13); + this.parentEntityTextBox.Name = "parentEntityTextBox"; + this.parentEntityTextBox.Size = new System.Drawing.Size(155, 20); + this.parentEntityTextBox.TabIndex = 36; + this.parentEntityTextBox.TextChanged += new System.EventHandler(this.parentEntityTextBox_TextChanged); + // // label20 // this.label20.AutoSize = true; @@ -555,7 +567,7 @@ private void InitializeComponent() | 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.Size = new System.Drawing.Size(84, 20); this.EntityParentIndexTextBox.TabIndex = 25; this.EntityParentIndexTextBox.TextChanged += new System.EventHandler(this.EntityParentIndexTextBox_TextChanged); // @@ -868,5 +880,6 @@ private void InitializeComponent() private System.Windows.Forms.Button EntityEditArchetypeButton; private WinForms.QuaternionBox EntityRotationQuatBox; private WinForms.QuaternionBox EntityPivotRotationQuatBox; + private System.Windows.Forms.TextBox parentEntityTextBox; } } \ No newline at end of file diff --git a/CodeWalker/Project/Panels/EditYmapEntityPanel.cs b/CodeWalker/Project/Panels/EditYmapEntityPanel.cs index f8738f59f..cf2f2d3c2 100644 --- a/CodeWalker/Project/Panels/EditYmapEntityPanel.cs +++ b/CodeWalker/Project/Panels/EditYmapEntityPanel.cs @@ -72,6 +72,7 @@ private void LoadEntity(bool sameEntity) EntityScaleXYTextBox.Text = string.Empty; EntityScaleZTextBox.Text = string.Empty; EntityParentIndexTextBox.Text = string.Empty; + parentEntityTextBox.Text = string.Empty; EntityLodDistTextBox.Text = string.Empty; EntityChildLodDistTextBox.Text = string.Empty; EntityLodLevelComboBox.SelectedIndex = 0;// Math.Max(EntityLodLevelComboBox.FindString(), 0); @@ -107,6 +108,7 @@ private void LoadEntity(bool sameEntity) EntityScaleXYTextBox.Text = FloatUtil.ToString(e.scaleXY); EntityScaleZTextBox.Text = FloatUtil.ToString(e.scaleZ); EntityParentIndexTextBox.Text = e.parentIndex.ToString(); + parentEntityTextBox.Text = CurrentEntity.Parent?.Name ?? string.Empty; EntityLodDistTextBox.Text = FloatUtil.ToString(e.lodDist); EntityChildLodDistTextBox.Text = FloatUtil.ToString(e.childLodDist); EntityLodLevelComboBox.SelectedIndex = Math.Max(EntityLodLevelComboBox.FindString(e.lodLevel.ToString()), 0); @@ -152,7 +154,7 @@ private void LoadEntity(bool sameEntity) MiloFlagsTextBox.Text = string.Empty; } - + SetupParentEntityAutoComplete(); populatingui = false; @@ -474,15 +476,30 @@ 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! + CurrentEntity._CEntityDef.parentIndex = pind; + if (CurrentMCEntity != null) CurrentMCEntity._Data.parentIndex = pind; + + string parentName = string.Empty; + var parentEntities = CurrentEntity.Ymap.Parent.AllEntities; + if (parentEntities != null && pind >= 0 && pind < parentEntities.Length) + { + parentName = parentEntities[pind]?.Name ?? string.Empty; + } + + populatingui = true; + parentEntityTextBox.Text = parentName; + populatingui = false; + ProjectItemChanged(); } } @@ -795,5 +812,60 @@ private void EntityEditArchetypeButton_Click(object sender, EventArgs e) } } + private void parentEntityTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity == null) return; + + string parentName = parentEntityTextBox.Text?.Trim(); + if (string.IsNullOrEmpty(parentName)) return; + + var parentEntities = CurrentEntity.Ymap.Parent.AllEntities; + int newIndex = -1; + + for (int i = 0; i < parentEntities.Length; i++) + { + if (parentEntities[i]?.Name == parentName) + { + newIndex = i; + break; + } + } + + if (newIndex >= 0 && CurrentEntity._CEntityDef.parentIndex != newIndex) + { + lock (ProjectForm.ProjectSyncRoot) + { + CurrentEntity._CEntityDef.parentIndex = newIndex; + + if (CurrentMCEntity != null) + CurrentMCEntity._Data.parentIndex = newIndex; + + populatingui = true; + EntityParentIndexTextBox.Text = newIndex.ToString(); + populatingui = false; + + ProjectItemChanged(); + } + } + } + private void SetupParentEntityAutoComplete() + { + if (CurrentEntity?.Ymap?.Parent?.AllEntities == null) return; + + var autoComplete = new AutoCompleteStringCollection(); + + foreach (var entity in CurrentEntity.Ymap.Parent.AllEntities) + { + if (!string.IsNullOrEmpty(entity?.Name)) + { + autoComplete.Add(entity.Name); + } + } + + parentEntityTextBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend; + parentEntityTextBox.AutoCompleteSource = AutoCompleteSource.CustomSource; + parentEntityTextBox.AutoCompleteCustomSource = autoComplete; + } } }