From 997b6e50492d2805b9e5e71f5dd372a16eef68ed Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 14 Dec 2025 04:54:12 +0100 Subject: [PATCH] Core - Add AbstractColorContainer.cs --- PCK-Studio/Controls/RawAssetsEditor.cs | 10 +- .../Forms/Additional-Popups/FilterPrompt.cs | 21 +- PCK-Studio/Forms/Editor/COLEditor.Designer.cs | 184 ++------- PCK-Studio/Forms/Editor/COLEditor.cs | 204 ++++----- PCK-Studio/Forms/Editor/COLEditor.resx | 389 ++++-------------- .../Colors/AbstractColorContainer.cs | 37 ++ PckStudio.Core/DLC/DLCManager.cs | 13 +- PckStudio.Core/DLC/DLCTexturePackage.cs | 13 +- PckStudio.Core/PckStudio.Core.csproj | 1 + 9 files changed, 290 insertions(+), 582 deletions(-) create mode 100644 PckStudio.Core/Colors/AbstractColorContainer.cs diff --git a/PCK-Studio/Controls/RawAssetsEditor.cs b/PCK-Studio/Controls/RawAssetsEditor.cs index d038e05d..dbc18309 100644 --- a/PCK-Studio/Controls/RawAssetsEditor.cs +++ b/PCK-Studio/Controls/RawAssetsEditor.cs @@ -48,6 +48,7 @@ using PckStudio.Core.IO.PckAudio; using PckStudio.Core.IO._3DST; using PckStudio.Core.Misc; using PckStudio.Core.DLC; +using PckStudio.Core.Colors; namespace PckStudio.Controls { @@ -484,12 +485,15 @@ namespace PckStudio.Controls private void HandleColourFile(PckAsset asset) { - ColorContainer colorContainer = asset.GetData(new COLFileReader()); - ISaveContext saveContext = new DelegatedSaveContext(Settings.Default.AutoSaveChanges, (colorContainer) => + AbstractColorContainer abstractColorContainer = AbstractColorContainer.FromColorContainer(asset.GetData(new COLFileReader())); + ISaveContext saveContext = new DelegatedSaveContext(Settings.Default.AutoSaveChanges, (newColorContainer) => { + ColorContainer colorContainer = new ColorContainer(); + colorContainer.Colors.AddRange(newColorContainer.Colors.Select(kv => new ColorContainer.Color() { Name = kv.Key, ColorPallette = kv.Value })); + colorContainer.WaterColors.AddRange(newColorContainer.WaterColors.Select(kv => new ColorContainer.WaterColor() { Name = kv.Key, SurfaceColor = kv.Value.Surface, FogColor = kv.Value.Fog, UnderwaterColor = kv.Value.Underwater })); asset.SetData(new COLFileWriter(colorContainer)); }); - using COLEditor diag = new COLEditor(colorContainer, saveContext); + using COLEditor diag = new COLEditor(abstractColorContainer, saveContext); _wasModified = diag.ShowDialog(this) == DialogResult.OK; } diff --git a/PCK-Studio/Forms/Additional-Popups/FilterPrompt.cs b/PCK-Studio/Forms/Additional-Popups/FilterPrompt.cs index eecb8efc..37428cd9 100644 --- a/PCK-Studio/Forms/Additional-Popups/FilterPrompt.cs +++ b/PCK-Studio/Forms/Additional-Popups/FilterPrompt.cs @@ -17,6 +17,7 @@ **/ using System; using System.Drawing; +using System.Reflection; using System.Windows.Forms; using PckStudio.Core.Extensions; @@ -24,8 +25,6 @@ namespace PckStudio.Forms.Additional_Popups.Animation { internal partial class FilterPrompt : UserControl { - public Color PageBackColor { get; set; } = Color.FromArgb(64, 64, 64); - private object _selectedItem; public object SelectedItem => _selectedItem; @@ -53,15 +52,21 @@ namespace PckStudio.Forms.Additional_Popups.Animation continue; pageView.BeginUpdate(); + pageView.ContextMenuStrip = backingView.ContextMenuStrip; + pageView.ImageList = backingView.ImageList; pageView.Nodes.Clear(); - FilterPredicate filerPredicate = tabpage.Tag as FilterPredicate; + pageView.Show(); + FilterPredicate filerPredicate = tabpage.Tag as FilterPredicate; foreach (TreeNode node in backingView.Nodes.GetLeafNodes()) { if (string.IsNullOrEmpty(filterTextBox.Text) || node.FullPath.ToLower().Contains(filterTextBox.Text.ToLower()) || (filerPredicate?.Invoke(filterTextBox.Text, node.Tag) ?? false)) { - pageView.Nodes.BuildNodeTreeBySeperator(node.FullPath, backingView.PathSeparator); + TreeNode n = pageView.Nodes.BuildNodeTreeBySeperator(node.FullPath, backingView.PathSeparator); + n.Tag = node.Tag; + n.ImageIndex = node.ImageIndex; + n.SelectedImageIndex = node.SelectedImageIndex; } } pageView.EndUpdate(); @@ -78,8 +83,9 @@ namespace PckStudio.Forms.Additional_Popups.Animation var pageView = new TreeView() { Dock = DockStyle.Fill, - BackColor = PageBackColor, - }; + BackColor = BackColor, + ForeColor = ForeColor, + }; pageView.AfterSelect += (sender, e) => { _selectedItem = e.Node.Tag; @@ -88,7 +94,8 @@ namespace PckStudio.Forms.Additional_Popups.Animation var backingView = new TreeView() { Dock = DockStyle.Fill, - BackColor = PageBackColor, + BackColor = BackColor, + ForeColor = ForeColor, }; pageView.Tag = backingView; page.Controls.Add(pageView); diff --git a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs index d492f60e..32a51fea 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.Designer.cs @@ -34,8 +34,7 @@ namespace PckStudio.Forms.Editor this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(COLEditor)); this.metroPanel1 = new MetroFramework.Controls.MetroPanel(); - this.metroTextBox1 = new MetroFramework.Controls.MetroTextBox(); - this.metroLabel2 = new MetroFramework.Controls.MetroLabel(); + this.filterPrompt = new PckStudio.Forms.Additional_Popups.Animation.FilterPrompt(); this.setColorBtn = new MetroFramework.Controls.MetroButton(); this.blueUpDown = new System.Windows.Forms.NumericUpDown(); this.greenUpDown = new System.Windows.Forms.NumericUpDown(); @@ -67,21 +66,14 @@ namespace PckStudio.Forms.Editor this.TU54ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.TU69ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._1_9_1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.waterTab = new System.Windows.Forms.TabPage(); - this.waterTreeView = new System.Windows.Forms.TreeView(); + this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.compactViewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ColorContextMenu = new MetroFramework.Controls.MetroContextMenu(this.components); this.copyColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.pasteColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.restoreOriginalColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.addColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.removeColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.underwaterTreeView = new System.Windows.Forms.TreeView(); - this.fogTreeView = new System.Windows.Forms.TreeView(); - this.colorsTab = new System.Windows.Forms.TabPage(); - this.colorTreeView = new System.Windows.Forms.TreeView(); - this.tabControl = new MetroFramework.Controls.MetroTabControl(); - this.underwaterTab = new System.Windows.Forms.TabPage(); - this.fogTab = new System.Windows.Forms.TabPage(); this.metroPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.blueUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.greenUpDown)).BeginInit(); @@ -89,18 +81,12 @@ namespace PckStudio.Forms.Editor ((System.ComponentModel.ISupportInitialize)(this.alphaUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.menuStrip.SuspendLayout(); - this.waterTab.SuspendLayout(); this.ColorContextMenu.SuspendLayout(); - this.colorsTab.SuspendLayout(); - this.tabControl.SuspendLayout(); - this.underwaterTab.SuspendLayout(); - this.fogTab.SuspendLayout(); this.SuspendLayout(); // // metroPanel1 // - this.metroPanel1.Controls.Add(this.metroTextBox1); - this.metroPanel1.Controls.Add(this.metroLabel2); + this.metroPanel1.Controls.Add(this.filterPrompt); this.metroPanel1.Controls.Add(this.setColorBtn); this.metroPanel1.Controls.Add(this.blueUpDown); this.metroPanel1.Controls.Add(this.greenUpDown); @@ -124,41 +110,13 @@ namespace PckStudio.Forms.Editor this.metroPanel1.VerticalScrollbarHighlightOnWheel = false; this.metroPanel1.VerticalScrollbarSize = 10; // - // metroTextBox1 + // filterPrompt // - // - // - // - this.metroTextBox1.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); - this.metroTextBox1.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); - this.metroTextBox1.CustomButton.Name = ""; - this.metroTextBox1.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); - this.metroTextBox1.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; - this.metroTextBox1.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); - this.metroTextBox1.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; - this.metroTextBox1.CustomButton.UseSelectable = true; - this.metroTextBox1.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); - this.metroTextBox1.Lines = new string[0]; - resources.ApplyResources(this.metroTextBox1, "metroTextBox1"); - this.metroTextBox1.MaxLength = 32767; - this.metroTextBox1.Name = "metroTextBox1"; - this.metroTextBox1.PasswordChar = '\0'; - this.metroTextBox1.ScrollBars = System.Windows.Forms.ScrollBars.None; - this.metroTextBox1.SelectedText = ""; - this.metroTextBox1.SelectionLength = 0; - this.metroTextBox1.SelectionStart = 0; - this.metroTextBox1.ShortcutsEnabled = true; - this.metroTextBox1.Theme = MetroFramework.MetroThemeStyle.Dark; - this.metroTextBox1.UseSelectable = true; - this.metroTextBox1.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109))))); - this.metroTextBox1.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel); - this.metroTextBox1.TextChanged += new System.EventHandler(this.metroTextBox1_TextChanged); - // - // metroLabel2 - // - resources.ApplyResources(this.metroLabel2, "metroLabel2"); - this.metroLabel2.Name = "metroLabel2"; - this.metroLabel2.Theme = MetroFramework.MetroThemeStyle.Dark; + this.filterPrompt.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18))))); + this.filterPrompt.ForeColor = System.Drawing.SystemColors.Control; + resources.ApplyResources(this.filterPrompt, "filterPrompt"); + this.filterPrompt.Name = "filterPrompt"; + this.filterPrompt.OnSelectedItemChanged += new System.EventHandler(this.filterPrompt_OnSelectedItemChanged); // // setColorBtn // @@ -247,16 +205,16 @@ namespace PckStudio.Forms.Editor // // // - this.colorTextbox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image1"))); + this.colorTextbox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); this.colorTextbox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode"))); - this.colorTextbox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location1"))); + this.colorTextbox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); this.colorTextbox.CustomButton.Name = ""; - this.colorTextbox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size1"))); + this.colorTextbox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); this.colorTextbox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; - this.colorTextbox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex1"))); + this.colorTextbox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); this.colorTextbox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; this.colorTextbox.CustomButton.UseSelectable = true; - this.colorTextbox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible1"))); + this.colorTextbox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); this.colorTextbox.Lines = new string[0]; resources.ApplyResources(this.colorTextbox, "colorTextbox"); this.colorTextbox.MaxLength = 6; @@ -293,7 +251,8 @@ namespace PckStudio.Forms.Editor this.menuStrip.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fileToolStripMenuItem, - this.toolsToolStripMenuItem}); + this.toolsToolStripMenuItem, + this.viewToolStripMenuItem}); this.menuStrip.Name = "menuStrip"; // // fileToolStripMenuItem @@ -409,22 +368,21 @@ namespace PckStudio.Forms.Editor this._1_9_1ToolStripMenuItem.Name = "_1_9_1ToolStripMenuItem"; resources.ApplyResources(this._1_9_1ToolStripMenuItem, "_1_9_1ToolStripMenuItem"); // - // waterTab + // viewToolStripMenuItem // - this.waterTab.BackColor = System.Drawing.SystemColors.WindowFrame; - this.waterTab.Controls.Add(this.waterTreeView); - resources.ApplyResources(this.waterTab, "waterTab"); - this.waterTab.Name = "waterTab"; + this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.compactViewToolStripMenuItem}); + this.viewToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; + resources.ApplyResources(this.viewToolStripMenuItem, "viewToolStripMenuItem"); // - // waterTreeView + // compactViewToolStripMenuItem // - this.waterTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.waterTreeView.ContextMenuStrip = this.ColorContextMenu; - resources.ApplyResources(this.waterTreeView, "waterTreeView"); - this.waterTreeView.ForeColor = System.Drawing.Color.White; - this.waterTreeView.Name = "waterTreeView"; - this.waterTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView2_AfterSelect); - this.waterTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView2_KeyDown); + this.compactViewToolStripMenuItem.BackColor = System.Drawing.SystemColors.Control; + this.compactViewToolStripMenuItem.CheckOnClick = true; + this.compactViewToolStripMenuItem.Name = "compactViewToolStripMenuItem"; + resources.ApplyResources(this.compactViewToolStripMenuItem, "compactViewToolStripMenuItem"); + this.compactViewToolStripMenuItem.CheckStateChanged += new System.EventHandler(this.compactViewToolStripMenuItem_CheckStateChanged); // // ColorContextMenu // @@ -472,76 +430,11 @@ namespace PckStudio.Forms.Editor resources.ApplyResources(this.removeColorToolStripMenuItem, "removeColorToolStripMenuItem"); this.removeColorToolStripMenuItem.Click += new System.EventHandler(this.removeColorToolStripMenuItem_Click); // - // underwaterTreeView - // - this.underwaterTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.underwaterTreeView.ContextMenuStrip = this.ColorContextMenu; - this.underwaterTreeView.ForeColor = System.Drawing.Color.White; - resources.ApplyResources(this.underwaterTreeView, "underwaterTreeView"); - this.underwaterTreeView.Name = "underwaterTreeView"; - this.underwaterTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView3_AfterSelect); - this.underwaterTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView3_KeyDown); - // - // fogTreeView - // - this.fogTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.fogTreeView.ContextMenuStrip = this.ColorContextMenu; - this.fogTreeView.ForeColor = System.Drawing.Color.White; - resources.ApplyResources(this.fogTreeView, "fogTreeView"); - this.fogTreeView.Name = "fogTreeView"; - this.fogTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView4_AfterSelect); - this.fogTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView4_KeyDown); - // - // colorsTab - // - this.colorsTab.BackColor = System.Drawing.SystemColors.WindowFrame; - this.colorsTab.Controls.Add(this.colorTreeView); - resources.ApplyResources(this.colorsTab, "colorsTab"); - this.colorsTab.Name = "colorsTab"; - // - // colorTreeView - // - this.colorTreeView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.colorTreeView.ContextMenuStrip = this.ColorContextMenu; - resources.ApplyResources(this.colorTreeView, "colorTreeView"); - this.colorTreeView.ForeColor = System.Drawing.Color.White; - this.colorTreeView.Name = "colorTreeView"; - this.colorTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); - this.colorTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown); - // - // tabControl - // - resources.ApplyResources(this.tabControl, "tabControl"); - this.tabControl.Controls.Add(this.colorsTab); - this.tabControl.Controls.Add(this.waterTab); - this.tabControl.Controls.Add(this.underwaterTab); - this.tabControl.Controls.Add(this.fogTab); - this.tabControl.Name = "tabControl"; - this.tabControl.SelectedIndex = 0; - this.tabControl.Style = MetroFramework.MetroColorStyle.White; - this.tabControl.Theme = MetroFramework.MetroThemeStyle.Dark; - this.tabControl.UseSelectable = true; - // - // underwaterTab - // - this.underwaterTab.BackColor = System.Drawing.SystemColors.WindowFrame; - this.underwaterTab.Controls.Add(this.underwaterTreeView); - resources.ApplyResources(this.underwaterTab, "underwaterTab"); - this.underwaterTab.Name = "underwaterTab"; - // - // fogTab - // - this.fogTab.BackColor = System.Drawing.SystemColors.WindowFrame; - this.fogTab.Controls.Add(this.fogTreeView); - resources.ApplyResources(this.fogTab, "fogTab"); - this.fogTab.Name = "fogTab"; - // // COLEditor // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.menuStrip); - this.Controls.Add(this.tabControl); this.Controls.Add(this.metroPanel1); this.ForeColor = System.Drawing.SystemColors.ControlText; this.Name = "COLEditor"; @@ -554,12 +447,7 @@ namespace PckStudio.Forms.Editor ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.menuStrip.ResumeLayout(false); this.menuStrip.PerformLayout(); - this.waterTab.ResumeLayout(false); this.ColorContextMenu.ResumeLayout(false); - this.colorsTab.ResumeLayout(false); - this.tabControl.ResumeLayout(false); - this.underwaterTab.ResumeLayout(false); - this.fogTab.ResumeLayout(false); this.ResumeLayout(false); } @@ -567,10 +455,6 @@ namespace PckStudio.Forms.Editor #endregion private MetroFramework.Controls.MetroPanel metroPanel1; - private TreeView colorTreeView; - private TreeView waterTreeView; - private TreeView fogTreeView; - private TreeView underwaterTreeView; private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.MenuStrip menuStrip; private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; @@ -580,12 +464,7 @@ namespace PckStudio.Forms.Editor private MetroFramework.Controls.MetroLabel redLabel; private MetroFramework.Controls.MetroLabel alphaLabel; private System.Windows.Forms.NumericUpDown alphaUpDown; - private TabPage waterTab; - private TabPage colorsTab; - private MetroFramework.Controls.MetroTabControl tabControl; private MetroFramework.Controls.MetroButton setColorBtn; - private TabPage underwaterTab; - private TabPage fogTab; private NumericUpDown blueUpDown; private NumericUpDown greenUpDown; private NumericUpDown redUpDown; @@ -593,8 +472,6 @@ namespace PckStudio.Forms.Editor private MetroFramework.Controls.MetroLabel metroLabel1; private MetroFramework.Controls.MetroContextMenu ColorContextMenu; private ToolStripMenuItem restoreOriginalColorToolStripMenuItem; - private MetroFramework.Controls.MetroTextBox metroTextBox1; - private MetroFramework.Controls.MetroLabel metroLabel2; private ToolStripMenuItem copyColorToolStripMenuItem; private ToolStripMenuItem pasteColorToolStripMenuItem; private ToolStripMenuItem toolsToolStripMenuItem; @@ -615,5 +492,8 @@ namespace PckStudio.Forms.Editor private ToolStripMenuItem stripPS4BiomesToolStripMenuItem; private ToolStripMenuItem addColorToolStripMenuItem; private ToolStripMenuItem removeColorToolStripMenuItem; + private Additional_Popups.Animation.FilterPrompt filterPrompt; + private ToolStripMenuItem viewToolStripMenuItem; + private ToolStripMenuItem compactViewToolStripMenuItem; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/COLEditor.cs b/PCK-Studio/Forms/Editor/COLEditor.cs index b7a1a184..2a1e2edc 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.cs +++ b/PCK-Studio/Forms/Editor/COLEditor.cs @@ -8,15 +8,16 @@ using OMI.Formats.Color; using OMI.Workers.Color; using PckStudio.Core.Extensions; +using PckStudio.Core.Colors; using PckStudio.Properties; using PckStudio.Controls; using PckStudio.Interfaces; namespace PckStudio.Forms.Editor { - public partial class COLEditor : EditorForm + public partial class COLEditor : EditorForm { - ColorContainer _defaultColourfile; + AbstractColorContainer _defaultColourfile; string _clipboard_color = "#FFFFFF"; TreeView colorTreeView; @@ -24,7 +25,7 @@ namespace PckStudio.Forms.Editor TreeView underwaterTreeView; TreeView fogTreeView; - private static readonly ICollection PS4Biomes = new List + private static readonly ICollection PS4BiomeColors = new List { "bamboo_jungle", "bamboo_jungle_hills", @@ -33,7 +34,7 @@ namespace PckStudio.Forms.Editor "mega_taiga_mutated" }; - public COLEditor(ColorContainer colorContainer, ISaveContext saveContext) + public COLEditor(AbstractColorContainer colorContainer, ISaveContext saveContext) : base(colorContainer, saveContext) { InitializeComponent(); @@ -64,29 +65,34 @@ namespace PckStudio.Forms.Editor underwaterTreeView.KeyDown += treeView1_KeyDown; fogTreeView.KeyDown += treeView1_KeyDown; + colorTreeView.ContextMenuStrip = ColorContextMenu; + waterTreeView.ContextMenuStrip = ColorContextMenu; + underwaterTreeView.ContextMenuStrip = ColorContextMenu; + fogTreeView.ContextMenuStrip = ColorContextMenu; + BuildTreeViews(EditorValue); } - private void BuildTreeViews(ColorContainer c) + private void BuildTreeViews(AbstractColorContainer c) { colorTreeView.Nodes.Clear(); waterTreeView.Nodes.Clear(); underwaterTreeView.Nodes.Clear(); fogTreeView.Nodes.Clear(); int nodeDepth = Convert.ToInt32(compactViewToolStripMenuItem.Checked); - c.Colors.ForEach(col => - { - TreeNode n = colorTreeView.Nodes.BuildNodeTreeBySeperator(col.Name, '_', nodeDepth); - //n.Text = n.Text.Replace('_', '.'); - n.Tag = col; - }); - c.WaterColors.ForEach(col => + foreach (KeyValuePair col in c.Colors) { - waterTreeView.Nodes.BuildNodeTreeBySeperator(col.Name, '_', nodeDepth).Tag = col; - underwaterTreeView.Nodes.BuildNodeTreeBySeperator(col.Name, '_', nodeDepth).Tag = col; - fogTreeView.Nodes.BuildNodeTreeBySeperator(col.Name, '_', nodeDepth).Tag = col; - }); + TreeNode n = colorTreeView.Nodes.BuildNodeTreeBySeperator(col.Key, '_', nodeDepth); + n.Tag = col; + } + + foreach (KeyValuePair col in c.WaterColors) + { + waterTreeView.Nodes.BuildNodeTreeBySeperator(col.Key, '_', 0).Tag = col; + underwaterTreeView.Nodes.BuildNodeTreeBySeperator(col.Key, '_', 0).Tag = col; + fogTreeView.Nodes.BuildNodeTreeBySeperator(col.Key, '_', 0).Tag = col; + } filterPrompt.Update(); } @@ -120,7 +126,7 @@ namespace PckStudio.Forms.Editor var reader = new COLFileReader(); using (var stream = new MemoryStream(colorData)) { - _defaultColourfile = reader.FromStream(stream); + _defaultColourfile = AbstractColorContainer.FromColorContainer(reader.FromStream(stream)); } BuildTreeViews(_defaultColourfile); @@ -181,18 +187,18 @@ namespace PckStudio.Forms.Editor { Color color = Color.FromArgb(filterPrompt.SelectedTabIndex == 1 ? (int)alphaUpDown.Value : 255, (int)redUpDown.Value, (int)greenUpDown.Value, (int)blueUpDown.Value); - if (filterPrompt.SelectedTabIndex == 0 && filterPrompt.SelectedItem is ColorContainer.Color colorEntry) + if (filterPrompt.SelectedTabIndex == 0 && filterPrompt.SelectedItem is KeyValuePair colorEntry) { - colorEntry.ColorPallette = color; + EditorValue.Colors[colorEntry.Key] = color; } - else if (filterPrompt.SelectedItem is ColorContainer.WaterColor waterColorEntry) + else if (filterPrompt.SelectedItem is KeyValuePair waterColorEntry) { if (filterPrompt.SelectedTabIndex == 1) - waterColorEntry.SurfaceColor = color; + EditorValue.WaterColors[waterColorEntry.Key] = (color, waterColorEntry.Value.Underwater, waterColorEntry.Value.Fog); else if (filterPrompt.SelectedTabIndex == 2) - waterColorEntry.UnderwaterColor = color; + EditorValue.WaterColors[waterColorEntry.Key] = (waterColorEntry.Value.Surface, color, waterColorEntry.Value.Fog); else - waterColorEntry.FogColor = color; + EditorValue.WaterColors[waterColorEntry.Key] = (waterColorEntry.Value.Surface, waterColorEntry.Value.Underwater, color); } pictureBox1.BackColor = color; @@ -207,74 +213,64 @@ namespace PckStudio.Forms.Editor colorPick.SolidColorOnly = filterPrompt.SelectedTabIndex == 0; if (colorPick.ShowDialog(this) != DialogResult.OK) return; - if (filterPrompt.SelectedTabIndex == 1 && filterPrompt.SelectedItem is ColorContainer.WaterColor waterColor) - { - // preserves the alpha so the user can handle it since the color picker doesn't support alpha - waterColor.SurfaceColor = Color.FromArgb(waterColor.SurfaceColor.A, colorPick.Color); - SetColor(waterColor.SurfaceColor); - } - else if (filterPrompt.SelectedTabIndex == 2 && filterPrompt.SelectedItem is ColorContainer.WaterColor underwaterColor) - { - underwaterColor.UnderwaterColor = Color.FromArgb(0, colorPick.Color); - SetColor(underwaterColor.UnderwaterColor); - } - else if (filterPrompt.SelectedTabIndex == 3 && filterPrompt.SelectedItem is ColorContainer.WaterColor fogColor) - { - fogColor.FogColor = Color.FromArgb(0, colorPick.Color); - SetColor(fogColor.FogColor); - } - else if (filterPrompt.SelectedTabIndex == 0 && filterPrompt.SelectedItem is ColorContainer.Color color) + if (filterPrompt.SelectedTabIndex == 0 && filterPrompt.SelectedItem is ColorContainer.Color color) { color.ColorPallette = colorPick.Color; SetColor(color.ColorPallette); + return; + } + if (filterPrompt.SelectedItem is KeyValuePair waterColorEntry) + { + Color wColor = + filterPrompt.SelectedTabIndex == 1 ? waterColorEntry.Value.Surface : + filterPrompt.SelectedTabIndex == 2 ? waterColorEntry.Value.Underwater : waterColorEntry.Value.Fog; + if (filterPrompt.SelectedTabIndex == 1) + EditorValue.WaterColors[waterColorEntry.Key] = (wColor, waterColorEntry.Value.Underwater, waterColorEntry.Value.Fog); + else if (filterPrompt.SelectedTabIndex == 2) + EditorValue.WaterColors[waterColorEntry.Key] = (waterColorEntry.Value.Surface, wColor, waterColorEntry.Value.Fog); + else + EditorValue.WaterColors[waterColorEntry.Key] = (waterColorEntry.Value.Surface, waterColorEntry.Value.Underwater, wColor); } } private void alpha_ValueChanged(object sender, EventArgs e) { - var colorEntry = (ColorContainer.WaterColor)waterTreeView.SelectedNode.Tag; - pictureBox1.BackColor = colorEntry.SurfaceColor = Color.FromArgb((int)alphaUpDown.Value, colorEntry.SurfaceColor); + var colorEntry = (KeyValuePair)waterTreeView.SelectedNode.Tag; + EditorValue.WaterColors[colorEntry.Key] = colorEntry.Value; + pictureBox1.BackColor = Color.FromArgb((int)alphaUpDown.Value, colorEntry.Value.Surface); } private void restoreOriginalColorToolStripMenuItem_Click(object sender, EventArgs e) { - //if (tabControl.SelectedTab is var tab) - //{ - // Color color = Color.Empty; + if (filterPrompt.SelectedItem is KeyValuePair color) + { + if (!_defaultColourfile.Colors.TryGetValue(color.Key, out Color col_entry)) + { + HideColorEdit(); + return; + } + EditorValue.Colors[color.Key] = col_entry; + SetColor(col_entry); + } + if (filterPrompt.SelectedItem is KeyValuePair waterColor) + { + if (_defaultColourfile.WaterColors.TryGetValue(waterColor.Key, out (Color Surface, Color Underwater, Color Fog) waterColorEntry)) + { + HideColorEdit(); + return; + } - // if (tab == colorsTab) - // { - // ColorContainer.Color col_entry = _defaultColourfile.Colors.Find(color => color.Name == node.Text); - - // if (col_entry == null) - // return; - - // color = col_entry.ColorPallette; - - // colorTextbox.Text = ColorTranslator.ToHtml(color).TrimStart('#'); - // } - // else - // { - // ColorContainer.WaterColor waterEntry = _defaultColourfile.WaterColors.Find(color => color.Name == node.Text); - - // if (waterEntry == null) - // return; - - // color = - // tab == waterTab ? waterEntry.SurfaceColor : - // tab == underwaterTab ? waterEntry.UnderwaterColor : waterEntry.FogColor; - - // if (tab == waterTab) - // { - // alphaUpDown.Value = color.A; - // } - - // redUpDown.Value = color.R; - // greenUpDown.Value = color.G; - // blueUpDown.Value = color.B; - // } - // pictureBox1.BackColor = Color.FromArgb(tab == colorsTab ? 0xFF : color.A, color); - //} + Color wColor = + filterPrompt.SelectedTabIndex == 1 ? waterColorEntry.Surface : + filterPrompt.SelectedTabIndex == 2 ? waterColorEntry.Underwater: waterColorEntry.Fog; + if (filterPrompt.SelectedTabIndex == 1) + EditorValue.WaterColors[waterColor.Key] = (wColor, waterColorEntry.Underwater, waterColorEntry.Fog); + else if (filterPrompt.SelectedTabIndex == 2) + EditorValue.WaterColors[waterColor.Key] = (waterColorEntry.Surface, wColor, waterColorEntry.Fog); + else + EditorValue.WaterColors[waterColor.Key] = (waterColorEntry.Surface, waterColorEntry.Underwater, wColor); + SetColor(wColor); + } } private void copyColorToolStripMenuItem_Click(object sender, EventArgs e) @@ -314,7 +310,11 @@ namespace PckStudio.Forms.Editor private void stripPS4BiomesToolStripMenuItem_Click(object sender, EventArgs e) { - EditorValue.WaterColors.RemoveAll(col => PS4Biomes.Contains(col.Name)); + foreach (string ps4BiomeColor in PS4BiomeColors) + { + if (EditorValue.WaterColors.ContainsKey(ps4BiomeColor)) + EditorValue.WaterColors.Remove(ps4BiomeColor); + } BuildTreeViews(EditorValue); } @@ -328,16 +328,12 @@ namespace PckStudio.Forms.Editor prompt.contextLabel.Text = "Insert the name of the color you would like to add"; if (prompt.ShowDialog(this) == DialogResult.OK) { - ColorContainer.Color entry = new ColorContainer.Color(); - entry.Name = prompt.NewText; - entry.ColorPallette = Color.White; - - if (EditorValue.Colors.Find(c => c.Name == entry.Name) != null) + if (EditorValue.Colors.ContainsKey(prompt.Name)) { - MessageBox.Show(this, $"\"{entry.Name}\" already exists in this color table", "Color not added"); + MessageBox.Show(this, $"\"{prompt.Name}\" already exists in this color table", "Color not added"); } - EditorValue.Colors.Add(entry); + EditorValue.Colors.Add(prompt.Name, Color.White); BuildTreeViews(EditorValue); } } @@ -348,7 +344,7 @@ namespace PckStudio.Forms.Editor { if (filterPrompt.SelectedItem is ColorContainer.Color color) { - EditorValue.Colors.Remove(color); + EditorValue.Colors.Remove(color.Name); } } @@ -360,21 +356,45 @@ namespace PckStudio.Forms.Editor pictureBox1.BackColor = Color.FromArgb(color.A == 0 ? 0xff : color.A, color); colorTextbox.Text = color.ToArgb().ToString("X06"); + ShowColorEdit(); + alphaUpDown.Visible = color.A != 0; } private void filterPrompt_OnSelectedItemChanged(object sender, EventArgs e) { - if (filterPrompt.SelectedItem is ColorContainer.Color col) + if (filterPrompt.SelectedItem is KeyValuePair col) { - SetColor(col?.ColorPallette ?? Color.AliceBlue); + SetColor(col.Value); return; } - if (filterPrompt.SelectedItem is ColorContainer.WaterColor waterColor) + if (filterPrompt.SelectedItem is KeyValuePair waterColor) { - SetColor(waterColor?.SurfaceColor ?? Color.AliceBlue); + SetColor(waterColor.Value.Surface); return; } - SetColor(Color.Black); + HideColorEdit(); + } + + private void HideColorEdit() + { + redUpDown.Visible = false; + greenUpDown.Visible = false; + blueUpDown.Visible = false; + alphaUpDown.Visible = false; + + pictureBox1.Visible = false; + colorTextbox.Visible = false; + } + + private void ShowColorEdit() + { + redUpDown.Visible = true; + greenUpDown.Visible = true; + blueUpDown.Visible = true; + alphaUpDown.Visible = true; + + pictureBox1.Visible = true; + colorTextbox.Visible = true; } private void compactViewToolStripMenuItem_CheckStateChanged(object sender, EventArgs e) diff --git a/PCK-Studio/Forms/Editor/COLEditor.resx b/PCK-Studio/Forms/Editor/COLEditor.resx index 84e19dd5..8801321e 100644 --- a/PCK-Studio/Forms/Editor/COLEditor.resx +++ b/PCK-Studio/Forms/Editor/COLEditor.resx @@ -117,71 +117,28 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - - 113, 1 + + 12, 34 - - 21, 21 + + 323, 557 - - 0 - - - False - - - 101, 27 - - - 135, 23 - - - 24 - - - metroTextBox1 - - - MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - metroPanel1 - - - 2 - - - True - - - 62, 27 - - - 46, 19 - - + 23 - - Filter: + + filterPrompt - - metroLabel2 + + PckStudio.Forms.Additional_Popups.Animation.FilterPrompt, PCK-Studio, Version=7.0.0.2, Culture=neutral, PublicKeyToken=null - - MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - + metroPanel1 - - 3 + + 2 400, 290 @@ -205,7 +162,7 @@ metroPanel1 - 4 + 3 400, 397 @@ -226,7 +183,7 @@ metroPanel1 - 5 + 4 400, 371 @@ -247,7 +204,7 @@ metroPanel1 - 6 + 5 400, 345 @@ -268,7 +225,7 @@ metroPanel1 - 7 + 6 400, 319 @@ -292,7 +249,7 @@ metroPanel1 - 8 + 7 True @@ -322,7 +279,7 @@ metroPanel1 - 9 + 8 True @@ -349,7 +306,7 @@ metroPanel1 - 10 + 9 True @@ -376,7 +333,7 @@ metroPanel1 - 11 + 10 True @@ -403,24 +360,25 @@ metroPanel1 - 12 + 11 - + + NoControl - + 103, 1 - + 21, 21 - + 0 - + False @@ -442,7 +400,7 @@ metroPanel1 - 13 + 12 True @@ -469,7 +427,7 @@ metroPanel1 - 14 + 13 378, 92 @@ -490,16 +448,16 @@ metroPanel1 - 15 + 14 Fill - 20, 60 + 0, 0 - 612, 523 + 652, 603 0 @@ -514,7 +472,7 @@ $this - 3 + 2 17, 17 @@ -525,11 +483,11 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADdSURBVDhPzZJB - CoJQEIa9jy0iPFAnCDpAtG3ZooUE4b6oVtIuClpJIAgqZEVlKpqEHUAm5pGPmhTbRA18G//5P5iHgvA3 - I7ZniiQ7aVM9QZzcOKYbwVDbw8I6A2YAICBvg2VJdtjSs2Cse1Dt6tCYbliGO0UCFlLBxAj590yA0D4X - 1Ec7CK8JF9j+lUmWzoVlpYJaz4JKZ5ULZqWCT6F9Jhhowcv9eeBOoQBvPXoBrA0zF8yyR6V9LvCjGLYH - NxfMvipIMaQ3Ux6ClPYFsaUq/bmd0rspuIO/Pe3/bu5p+sr3gTvFEQAAAABJRU5ErkJggg== + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADfSURBVDhPYxg8 + QLt++3yTGbf/Fm599P/Nh49wfPXxq/+rTt37f+Dak/8gOSBgAGEMANIMxGBFyAasPf/0v8GE8//z1t8C + y4HU4DIALIluwLpLL+HiMANAGKoNAWASCavv/n/57gPcgOvP3oENOXj7NViOoAFGU6791+k4ghWD5Aga + QCyGakMAkODcU89R/I8Ng9TgNADk14dPn/8/c+kqVgySgwUqVBsCwAx49urN/zsPHmPFIDmaGvAXJInN + 38gYasBfqDYE0K7dOn/Wvut/sfkdGYPUgJI9VNuAAwYGAGn6yvdevWgPAAAAAElFTkSuQmCC @@ -551,79 +509,79 @@ Remove PS4 Biome Colors - 416, 22 + 414, 22 TU12 (360) - 416, 22 + 414, 22 TU13/1.00 (360/PS3) - 416, 22 + 414, 22 TU14/1.04 (360/PS3) - 416, 22 + 414, 22 TU19/1.12/CU7 (360/PS3-4-Vita/XONE) - 416, 22 + 414, 22 TU31/1.22/CU19 (360/PS3-4-Vita/XONE) - 416, 22 + 414, 22 TU32/1.24/CU20/P3 (360/PS3-4-Vita/XONE/WIIU) - 416, 22 + 414, 22 TU43/1.35/CU32/P12 (360/PS3-4-Vita/XONE/WIIU) - 416, 22 + 414, 22 TU46/1.38/CU36/P15 (360/PS3-4-Vita/XONE/WIIU) - 416, 22 + 414, 22 TU51/1.44/CU41/P20 (360/PS3-4-Vita/XONE/WIIU) - 416, 22 + 414, 22 TU53/1.49/CU43/P23/1.0.3 (360/PS3-4-Vita/XONE/WIIU/SWITCH) - 416, 22 + 414, 22 TU54/1.52/CU44/P24/1.0.4 (360/PS3-4-Vita/XONE/WIIU/SWITCH) - 416, 22 + 414, 22 TU69/1.76/P38 (360/PS3-4-Vita/WIIU) - 416, 22 + 414, 22 1.91 (PS4) @@ -635,16 +593,28 @@ Target Update - 47, 20 + 46, 20 Tools + + 180, 22 + + + Compact View + + + 44, 20 + + + View + - 20, 60 + 0, 0 - 612, 24 + 652, 24 3 @@ -706,219 +676,6 @@ MetroFramework.Controls.MetroContextMenu, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - Fill - - - 0, 0 - - - No - - - 320, 424 - - - 0 - - - waterTreeView - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - waterTab - - - 0 - - - 4, 38 - - - 320, 424 - - - 1 - - - Water - - - waterTab - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 1 - - - 0, 0 - - - 320, 424 - - - 0 - - - underwaterTreeView - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - underwaterTab - - - 0 - - - 0, 0 - - - 320, 424 - - - 0 - - - fogTreeView - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - fogTab - - - 0 - - - Fill - - - 0, 0 - - - 320, 424 - - - 0 - - - colorTreeView - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - colorsTab - - - 0 - - - 4, 38 - - - 320, 424 - - - 0 - - - Everything - - - colorsTab - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 0 - - - Top, Bottom, Left - - - 4, 38 - - - 320, 424 - - - 2 - - - Underwater - - - underwaterTab - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 2 - - - 4, 38 - - - 320, 424 - - - 3 - - - Underwater Fog - - - fogTab - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 3 - - - 23, 114 - - - 328, 466 - - - 22 - - - tabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - $this - - - 2 - True @@ -3551,6 +3308,18 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + viewToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + compactViewToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + copyColorToolStripMenuItem @@ -3585,6 +3354,6 @@ COLEditor - ImmersiveForm, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + PckStudio.Controls.EditorForm`1[[OMI.Formats.Color.ColorContainer, OMI Filetypes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], PCK-Studio, Version=7.0.0.2, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/PckStudio.Core/Colors/AbstractColorContainer.cs b/PckStudio.Core/Colors/AbstractColorContainer.cs new file mode 100644 index 00000000..0bbec161 --- /dev/null +++ b/PckStudio.Core/Colors/AbstractColorContainer.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using OMI.Formats.Color; + +namespace PckStudio.Core.Colors +{ + public class AbstractColorContainer + { + public AbstractColorContainer(IDictionary colors, IDictionary waterColors) + { + Colors = colors; + WaterColors = waterColors; + } + + public bool HasColor(string colorName) => Colors.ContainsKey(colorName) || WaterColors.ContainsKey(colorName); + + public static AbstractColorContainer FromColorContainer(ColorContainer colorContainer) + { + IDictionary colors = colorContainer.Colors + .GroupBy(c => c.Name) + .Select(grp => grp.FirstOrDefault()) + .ToDictionary(c => c.Name, c => c.ColorPallette); + IDictionary waterColors = colorContainer.WaterColors + .GroupBy(c => c.Name) + .Select(grp => grp.FirstOrDefault()) + .ToDictionary(c => c.Name, c => (c.SurfaceColor, c.UnderwaterColor, c.FogColor)); + return new AbstractColorContainer(colors, waterColors); + } + + public IDictionary Colors { get; } + public IDictionary WaterColors { get; } + } +} diff --git a/PckStudio.Core/DLC/DLCManager.cs b/PckStudio.Core/DLC/DLCManager.cs index 17df9f70..0da5e96d 100644 --- a/PckStudio.Core/DLC/DLCManager.cs +++ b/PckStudio.Core/DLC/DLCManager.cs @@ -18,6 +18,7 @@ using OMI.Workers.Material; using OMI.Workers.Model; using OMI.Workers.Pck; using PckStudio.Core.App; +using PckStudio.Core.Colors; using PckStudio.Core.Deserializer; using PckStudio.Core.Extensions; using PckStudio.Core.FileFormats; @@ -329,15 +330,6 @@ namespace PckStudio.Core.DLC ColorContainer colorContainer = dataPck.GetAssetsByType(PckAssetType.ColourTableFile).FirstOrDefault()?.GetData(new COLFileReader()) ?? new ColorContainer(); - IDictionary colors = colorContainer.Colors - .GroupBy(c => c.Name) - .Select(grp => grp.FirstOrDefault()) - .ToDictionary(c => c.Name, c => c.ColorPallette); - IDictionary waterColors = colorContainer.WaterColors - .GroupBy(c => c.Name) - .Select(grp => grp.FirstOrDefault()) - .ToDictionary(c => c.Name, c => (c.SurfaceColor, c.UnderwaterColor, c.FogColor)); - IDictionary environmentTextures = dataPck.GetDirectoryContent("res/environment/", PckAssetType.TextureFile) .ToDictionary(a => Path.GetFileNameWithoutExtension(a.Filename), defaultDeserializer.Deserialize); environmentTextures.TryGetValue("clouds", out Image clouds); @@ -371,8 +363,7 @@ namespace PckStudio.Core.DLC ArmorSetDescription.Diamond.GetArmorSet(tryGetTexture), ArmorSetDescription.Turtle.GetArmorSet(tryGetTexture), environmentData, - colors, - waterColors, + AbstractColorContainer.FromColorContainer(colorContainer), customModels, materials, blockEntityBreakAnimation, diff --git a/PckStudio.Core/DLC/DLCTexturePackage.cs b/PckStudio.Core/DLC/DLCTexturePackage.cs index 779de771..18cda190 100644 --- a/PckStudio.Core/DLC/DLCTexturePackage.cs +++ b/PckStudio.Core/DLC/DLCTexturePackage.cs @@ -6,6 +6,8 @@ using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; +using OMI.Formats.Color; +using PckStudio.Core.Colors; using PckStudio.Core.Extensions; using PckStudio.Core.Interfaces; using PckStudio.Core.Model; @@ -50,8 +52,7 @@ namespace PckStudio.Core.DLC //! Data for x{16}Data.pck //! => colours.col - private IDictionary _colors; - private IDictionary _waterColors; + private AbstractColorContainer _colorContainter; private AbstractModelContainer _customModels; //! can be null.. => models.bin private IDictionary _materials; //! can be null.. @@ -99,8 +100,7 @@ namespace PckStudio.Core.DLC ArmorSet diamondArmorSet, ArmorSet turtleArmorSet, EnvironmentData environmentData, - IDictionary colors, - IDictionary waterColors, + AbstractColorContainer colorContainter, AbstractModelContainer customModels, IDictionary materials, Animation blockEntityBreakAnimation, @@ -129,8 +129,7 @@ namespace PckStudio.Core.DLC _diamondArmorSet = diamondArmorSet; _turtleArmorSet = turtleArmorSet; _environmentData = environmentData; - _colors = colors ?? new Dictionary(); - _waterColors = waterColors ?? new Dictionary(); + _colorContainter = colorContainter; _customModels = customModels; _materials = materials; _blockEntityBreakAnimation = blockEntityBreakAnimation; @@ -218,7 +217,7 @@ namespace PckStudio.Core.DLC new ArmorSet(ArmorSetDescription.DIAMOND, Resources.diamond, default), new ArmorSet(ArmorSetDescription.TURTLE, Resources.turtle, default), new EnvironmentData(Resources.clouds, Resources.rain, Resources.snow), - colors, waterColors, + new AbstractColorContainer(colors, waterColors), new AbstractModelContainer(), new Dictionary(), blockEntityBreakAnimation, diff --git a/PckStudio.Core/PckStudio.Core.csproj b/PckStudio.Core/PckStudio.Core.csproj index 928b5e1d..afb2515a 100644 --- a/PckStudio.Core/PckStudio.Core.csproj +++ b/PckStudio.Core/PckStudio.Core.csproj @@ -66,6 +66,7 @@ +