Update Audio and Animation Editor related stuff

This commit is contained in:
miku-666
2022-06-20 19:01:44 +02:00
parent 59a1958a9a
commit b0e9c9b0f4
5 changed files with 112 additions and 107 deletions

View File

@@ -14,12 +14,11 @@ namespace PckStudio
{
public partial class AnimationEditor : MetroForm
{
TreeView treeViewMain = new TreeView();
PCKFile.FileData mf = null;
List<Image> frames = new List<Image>();
int frameCount;
Newtonsoft.Json.Linq.JObject tileData = Newtonsoft.Json.Linq.JObject.Parse(System.Text.Encoding.Default.GetString(Properties.Resources.tileData));
Image texture;
int frameCount;
bool isItem = false;
string lastFrameTime = "1";
string newTileName = "";
@@ -35,15 +34,14 @@ namespace PckStudio
}
}
public AnimationEditor(TreeView treeViewIn, string createdFileName = "")
public AnimationEditor(PCKFile.FileData file_entry, string createdFileName = "")
{
InitializeComponent();
treeViewMain = treeViewIn;
if (string.IsNullOrEmpty(createdFileName))
{
newTileName = Path.GetFileNameWithoutExtension(treeViewMain.SelectedNode.Text);
if (treeViewMain.SelectedNode.Parent.Text.ToLower() == "items") isItem = true;
mf = treeViewMain.SelectedNode.Tag as PCKFile.FileData;
mf = file_entry;
newTileName = Path.GetFileNameWithoutExtension(file_entry.name);
if (file_entry.name.Split('/').Contains("items")) isItem = true;
if (newTileName.EndsWith("MipMapLevel2") || newTileName.EndsWith("MipMapLevel3"))
{
string mipMapLvl = newTileName.Last().ToString();
@@ -69,14 +67,12 @@ namespace PckStudio
}
List<string> strEntries = new List<string>();
List<string> strEntryData = new List<string>();
string anim_data = string.Empty;
string anim = string.Empty;
foreach (var entry in mf.properties)
{
if (entry.Item1 == "ANIM") anim_data = entry.Item2;
if (entry.Item1 == "ANIM") anim = entry.Item2;
strEntries.Add(entry.Item2);
strEntryData.Add(entry.Item2);
}
MemoryStream textureMem = new MemoryStream(mf.data);
@@ -93,9 +89,6 @@ namespace PckStudio
}
}
string anim = "";
if (strEntries.Find(entry => entry == "ANIM") == null) anim = "";
else anim = strEntryData[strEntries.FindIndex(entry => entry == "ANIM")];
Console.WriteLine("ANIMATION DATA: " + anim);
if (InterpolationCheckbox.Checked = anim.StartsWith("#"))
{
@@ -110,7 +103,7 @@ namespace PckStudio
if (string.IsNullOrEmpty(animData.Last())) animData = animData.Take(animData.Length - 1).ToArray();
foreach (string frame in animData)
{
string[] frameData = frame.Split(new char[] { '*' });
string[] frameData = frame.Split('*');
string outFrame = "";
int i = 0;
string currentFrame = "";
@@ -119,16 +112,15 @@ namespace PckStudio
{
string label;
string outData;
outData = data;
if (i == 0)
{
outData = data;
if (string.IsNullOrEmpty(data)) throw new Exception("Invalid animation data");
label = "Frame: ";
currentFrame = outData;
}
else
{
outData = data;
// Some textures like the Halloween 2015's Lava texture don't have a
// frame time parameter for certain frames. This will detect that and place the last frame time in its place.
// This is accurate to console edition behavior.
@@ -175,7 +167,6 @@ namespace PckStudio
for (int frameI = 0; frameI < totalFrames; frameI++)
{
Rectangle frameArea = new Rectangle(new Point(0, frameI * width), new Size(width, width));
Bitmap frameImage = new Bitmap(width, width);
using (Graphics gfx = Graphics.FromImage(frameImage))
{
@@ -185,10 +176,8 @@ namespace PckStudio
gfx.DrawImage(texture, new Rectangle(0, 0, frameImage.Width, frameImage.Height), frameArea, GraphicsUnit.Pixel);
}
frames.Add(new Bitmap(frameImage, new Size(width, width)));
}
}
private int mix(double ratio, int val1, int val2) // Ported from Java Edition code
@@ -343,48 +332,48 @@ namespace PckStudio
private void addNodeToAnimationsFolder(TreeNode newNode)
{
TreeNode parent = FindNodeByName(treeViewMain, isItem ? "items" : "blocks");
if (parent != null)
{
Console.WriteLine("ParentNotNULL");
TreeNode check = FindNodeByName(treeViewMain, newNode.Text);
parent.Nodes.Add(newNode);
}
else
{
TreeNode texturesParent = FindNodeByName(treeViewMain, "textures");
if (texturesParent != null)
{
Console.WriteLine("TextureNotNULL");
TreeNode newFolder = new TreeNode(isItem ? "items" : "blocks");
texturesParent.Nodes.Add(newFolder);
newFolder.Nodes.Add(newNode);
}
else
{
TreeNode resParent = FindNodeByName(treeViewMain, "res");
if (resParent != null)
{
Console.WriteLine("ResNotNULL");
TreeNode newFolder = new TreeNode("textures");
resParent.Nodes.Add(newFolder);
TreeNode newFolderB = new TreeNode(isItem ? "items" : "blocks");
newFolder.Nodes.Add(newFolderB);
newFolderB.Nodes.Add(newNode);
}
else
{
Console.WriteLine("ResNULL");
TreeNode newFolder = new TreeNode("res");
treeViewMain.Nodes.Add(newFolder);
TreeNode newFolderB = new TreeNode("textures");
newFolder.Nodes.Add(newFolderB);
TreeNode newFolderC = new TreeNode(isItem ? "items" : "blocks");
newFolderB.Nodes.Add(newFolderC);
newFolderC.Nodes.Add(newNode);
}
}
}
//TreeNode parent = FindNodeByName(treeViewMain, isItem ? "items" : "blocks");
//if (parent != null)
//{
// Console.WriteLine("ParentNotNULL");
// TreeNode check = FindNodeByName(treeViewMain, newNode.Text);
// parent.Nodes.Add(newNode);
//}
//else
//{
// TreeNode texturesParent = FindNodeByName(treeViewMain, "textures");
// if (texturesParent != null)
// {
// Console.WriteLine("TextureNotNULL");
// TreeNode newFolder = new TreeNode(isItem ? "items" : "blocks");
// texturesParent.Nodes.Add(newFolder);
// newFolder.Nodes.Add(newNode);
// }
// else
// {
// TreeNode resParent = FindNodeByName(treeViewMain, "res");
// if (resParent != null)
// {
// Console.WriteLine("ResNotNULL");
// TreeNode newFolder = new TreeNode("textures");
// resParent.Nodes.Add(newFolder);
// TreeNode newFolderB = new TreeNode(isItem ? "items" : "blocks");
// newFolder.Nodes.Add(newFolderB);
// newFolderB.Nodes.Add(newNode);
// }
// else
// {
// Console.WriteLine("ResNULL");
// TreeNode newFolder = new TreeNode("res");
// treeViewMain.Nodes.Add(newFolder);
// TreeNode newFolderB = new TreeNode("textures");
// newFolder.Nodes.Add(newFolderB);
// TreeNode newFolderC = new TreeNode(isItem ? "items" : "blocks");
// newFolderB.Nodes.Add(newFolderC);
// newFolderC.Nodes.Add(newNode);
// }
// }
//}
}
private void saveToolStripMenuItem1_Click(object sender, EventArgs e)
@@ -400,7 +389,7 @@ namespace PckStudio
newTileName += "MipMapLevel" + MipMapNumericUpDown.Value.ToString();
}
if (!create && treeViewMain.SelectedNode.Tag != null) treeViewMain.SelectedNode.Text = newTileName + ".png";
//if (!create && treeViewMain.SelectedNode.Tag != null) treeViewMain.SelectedNode.Text = newTileName + ".png";
string animationData = "";
if (InterpolationCheckbox.Checked) animationData += "#"; // does the animation interpolate?
@@ -424,34 +413,34 @@ namespace PckStudio
}
};
if (create)
{
mf.name = "res/textures/" + (isItem ? "items" : "blocks");
TreeNode newNode = new TreeNode(newTileName + ".png") { Tag = mf };//creates node for minefile
newNode.ImageIndex = 2;
newNode.SelectedImageIndex = 2;
addNodeToAnimationsFolder(newNode);
treeViewMain.SelectedNode = newNode;
create = false;
}
else if (isItem && treeViewMain.SelectedNode.Parent.Text == "blocks")
{
Console.WriteLine("block: " + treeViewMain.SelectedNode.Parent.Text);
TreeNode newNode = treeViewMain.SelectedNode;
newNode.ImageIndex = 2;
newNode.SelectedImageIndex = 2;
treeViewMain.SelectedNode.Remove();
addNodeToAnimationsFolder(newNode);
}
else if (treeViewMain.SelectedNode.Parent.Text == "items")
{
Console.WriteLine("item: " + treeViewMain.SelectedNode.Parent.Text);
TreeNode newNode = treeViewMain.SelectedNode;
newNode.ImageIndex = 2;
newNode.SelectedImageIndex = 2;
treeViewMain.SelectedNode.Remove();
addNodeToAnimationsFolder(newNode);
}
//if (create)
//{
// mf.name = "res/textures/" + (isItem ? "items" : "blocks");
// TreeNode newNode = new TreeNode(newTileName + ".png") { Tag = mf };//creates node for minefile
// newNode.ImageIndex = 2;
// newNode.SelectedImageIndex = 2;
// addNodeToAnimationsFolder(newNode);
// treeViewMain.SelectedNode = newNode;
// create = false;
//}
//else if (isItem && treeViewMain.SelectedNode.Parent.Text == "blocks")
//{
// Console.WriteLine("block: " + treeViewMain.SelectedNode.Parent.Text);
// TreeNode newNode = treeViewMain.SelectedNode;
// newNode.ImageIndex = 2;
// newNode.SelectedImageIndex = 2;
// treeViewMain.SelectedNode.Remove();
// addNodeToAnimationsFolder(newNode);
//}
//else if (treeViewMain.SelectedNode.Parent.Text == "items")
//{
// Console.WriteLine("item: " + treeViewMain.SelectedNode.Parent.Text);
// TreeNode newNode = treeViewMain.SelectedNode;
// newNode.ImageIndex = 2;
// newNode.SelectedImageIndex = 2;
// treeViewMain.SelectedNode.Remove();
// addNodeToAnimationsFolder(newNode);
//}
if(MipMapCheckbox.Checked) newTileName = newTileName.Substring(0, newTileName.Length - 12);
}

View File

@@ -23,10 +23,7 @@ namespace PckStudio.Forms.Utilities.AnimationEditor
}
bool isItem = false;
public bool IsItem
{
get { return isItem; }
}
public bool IsItem => isItem;
List<TreeNode> treeView1Cache = new List<TreeNode>();
List<TreeNode> treeView2Cache = new List<TreeNode>();

View File

@@ -47,6 +47,7 @@ namespace PckStudio.Forms.Utilities
this.textBox1 = new System.Windows.Forms.TextBox();
this.metroLabel2 = new MetroFramework.Controls.MetroLabel();
this.metroLabel1 = new MetroFramework.Controls.MetroLabel();
this.catImages = new System.Windows.Forms.ImageList(this.components);
this.contextMenuStrip1.SuspendLayout();
this.menuStrip.SuspendLayout();
this.contextMenuStrip2.SuspendLayout();
@@ -58,6 +59,7 @@ namespace PckStudio.Forms.Utilities
this.treeView1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.treeView1.ContextMenuStrip = this.contextMenuStrip1;
this.treeView1.ForeColor = System.Drawing.Color.White;
this.treeView1.ImageList = this.catImages;
this.treeView1.LabelEdit = true;
this.treeView1.Name = "treeView1";
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
@@ -173,6 +175,12 @@ namespace PckStudio.Forms.Utilities
this.metroLabel1.Name = "metroLabel1";
this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark;
//
// catImages
//
this.catImages.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
resources.ApplyResources(this.catImages, "catImages");
this.catImages.TransparentColor = System.Drawing.Color.Transparent;
//
// AudioEditor
//
resources.ApplyResources(this, "$this");
@@ -214,5 +222,6 @@ namespace PckStudio.Forms.Utilities
private MetroFramework.Controls.MetroLabel metroLabel2;
private MetroFramework.Controls.MetroLabel metroLabel1;
private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
}
private System.Windows.Forms.ImageList catImages;
}
}

View File

@@ -73,8 +73,7 @@ namespace PckStudio.Forms.Utilities
public AudioEditor(PCKFile.FileData MineFile, bool isLittleEndian)
{
_isLittleEndian = isLittleEndian;
ImageList catImages = new ImageList();
catImages.ColorDepth = ColorDepth.Depth32Bit;
if (isLittleEndian) Text += " (PS4/Vita)";
catImages.Images.Add(Properties.Resources.audio_0_overworld);
catImages.Images.Add(Properties.Resources.audio_1_nether);
catImages.Images.Add(Properties.Resources.audio_2_end);
@@ -83,11 +82,7 @@ namespace PckStudio.Forms.Utilities
catImages.Images.Add(Properties.Resources.audio_5_mg01);
catImages.Images.Add(Properties.Resources.audio_6_mg02);
catImages.Images.Add(Properties.Resources.audio_7_mg03);
InitializeComponent();
treeView1.ImageList = catImages;
mf = MineFile;
using (var stream = new MemoryStream(mf.data))
{
@@ -176,7 +171,7 @@ namespace PckStudio.Forms.Utilities
int check = Enumerable.Range(0, 8).Except(cats).First(); // Exclude Unused for now
if (0 <= check && check <= 8)
{
addCategory add = new addCategory(this);//sets category adding dialog
addCategory add = new addCategory(this); //sets category adding dialog
if (add.ShowDialog() == DialogResult.OK)
add.Dispose();//diposes generated metadata adding dialog data

View File

@@ -154,16 +154,28 @@
<data name="&gt;&gt;contextMenuStrip1.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="treeView1.ImageIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<metadata name="catImages.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>437, 8</value>
</metadata>
<data name="catImages.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<data name="treeView1.Location" type="System.Drawing.Point, System.Drawing">
<value>20, 84</value>
</data>
<data name="treeView1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="treeView1.SelectedImageIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="treeView1.Size" type="System.Drawing.Size, System.Drawing">
<value>128, 230</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="treeView1.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
@@ -413,9 +425,6 @@
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>450, 330</value>
</data>
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>450, 330</value>
</data>
@@ -464,6 +473,12 @@
<data name="&gt;&gt;removeEntryMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;catImages.Name" xml:space="preserve">
<value>catImages</value>
</data>
<data name="&gt;&gt;catImages.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>AudioEditor</value>
</data>