public static void Save(Animation anim, VBN Skeleton, String Fname) { using (System.IO.StreamWriter file = new System.IO.StreamWriter(@Fname)) { file.WriteLine("version 1"); file.WriteLine("nodes"); foreach(Bone b in Skeleton.bones) { file.WriteLine(Skeleton.bones.IndexOf(b) + " \"" + b.Text + "\" " + b.parentIndex); } file.WriteLine("end"); file.WriteLine("skeleton"); anim.SetFrame(0); for(int i = 0; i <= anim.FrameCount; i++) { anim.NextFrame(Skeleton); file.WriteLine("time " + i); foreach (Animation.KeyNode sb in anim.Bones) { Bone b = Skeleton.getBone(sb.Text); if (b == null) continue; Vector3 eul = ANIM.quattoeul(b.rot); file.WriteLine(Skeleton.bones.IndexOf(b) + " " + b.pos.X + " " + b.pos.Y + " " + b.pos.Z + " " + eul.X + " " + eul.Y + " " + eul.Z); } } file.WriteLine("end"); file.Close(); } }
public void ReplaceAnimation(object sender, EventArgs args) { using (OpenFileDialog of = new OpenFileDialog()) { of.ShowDialog(); foreach (string filename in of.FileNames) { if (filename.EndsWith(".omo")) { Animation a = OMOOld.read(new FileData(filename)); a.Text = filename; ReplaceMe(a); } if (filename.EndsWith(".smd")) { Animation a = new Animation(filename.Replace(".smd", "")); SMD.read(filename, a, Runtime.TargetVBN); ReplaceMe(a); } if (filename.EndsWith(".chr0")) { Animation a = (CHR0.read(new FileData(filename), Runtime.TargetVBN)); ReplaceMe(a); } if (filename.EndsWith(".anim")) { Animation a = (ANIM.read(filename, Runtime.TargetVBN)); ReplaceMe(a); } } } }
private void exportAllAsANIMToolStripMenuItem_Click(object sender, EventArgs e) { using (var ofd = new FolderSelectDialog()) { ofd.Title = "Character Folder"; if (ofd.ShowDialog() == DialogResult.OK) { string path = ofd.SelectedPath; foreach (TreeNode b in treeView1.Nodes) { foreach (TreeNode v in b.Nodes) { foreach (TreeNode f in v.Nodes) { foreach (TreeNode a in f.Nodes) { if (a is Animation) { ANIM.CreateANIM(path + "\\" + a.Text + ".anim", ((Animation)a), Runtime.TargetVBN); } } } } } } } }
public void Import(object sender, EventArgs args) { using (OpenFileDialog fd = new OpenFileDialog()) { fd.Filter = "Supported Formats|*.omo;*.anim;*.chr0;*.smd;*.mta;|" + "Object Motion|*.omo|" + "Maya Animation|*.anim|" + "NW4R Animation|*.chr0|" + "Source Animation (SMD)|*.smd|" + "Smash 4 Material Animation (MTA)|*.mta|" + "All files(*.*)|*.*"; if (fd.ShowDialog() == DialogResult.OK) { foreach (string filename in fd.FileNames) { if (filename.EndsWith(".mta")) { MTA mta = new MTA(); try { mta.Read(filename); Runtime.MaterialAnimations.Add(filename, mta); Nodes.Add(filename); } catch (Exception) { mta = null; } } else if (filename.EndsWith(".smd")) { var anim = new Animation(filename); if (Runtime.TargetVBN == null) { Runtime.TargetVBN = new VBN(); } SMD.read(filename, anim, Runtime.TargetVBN); Nodes.Add(anim); } if (filename.EndsWith(".omo")) { Animation a = OMOOld.read(new FileData(filename)); a.Text = filename; Nodes.Add(a); } if (filename.EndsWith(".chr0")) { Nodes.Add(CHR0.read(new FileData(filename), Runtime.TargetVBN)); } if (filename.EndsWith(".anim")) { Nodes.Add(ANIM.read(filename, Runtime.TargetVBN)); } } } } }
public void SaveAs(object sender, EventArgs args) { if (Runtime.TargetVBN == null) { MessageBox.Show("You must have a bone-set (VBN) selected to save animations."); return; } using (var sfd = new SaveFileDialog()) { sfd.Filter = "Supported Files (.omo, .anim, .smd)|*.omo;*.anim;*.smd|" + "Maya Anim (.anim)|*.anim|" + "Object Motion (.omo)|*.omo|" + "Source Animation (.smd)|*.smd|" + "All Files (*.*)|*.*"; sfd.DefaultExt = "smd"; //Set a default extension to prevent crashing if not specified by user if (sfd.ShowDialog() == DialogResult.OK) { sfd.FileName = sfd.FileName; if (sfd.FileName.EndsWith(".anim")) { if (Tag is AnimTrack) { ((AnimTrack)Tag).createANIM(sfd.FileName, Runtime.TargetVBN); } else { ANIM.CreateANIM(sfd.FileName, this, Runtime.TargetVBN); } } if (sfd.FileName.EndsWith(".omo")) { if (Tag is FileData) { FileOutput o = new FileOutput(); o.writeBytes(((FileData)Tag).getSection(0, ((FileData)Tag).size())); o.save(sfd.FileName); } else { File.WriteAllBytes(sfd.FileName, OMOOld.CreateOMOFromAnimation(this, Runtime.TargetVBN)); } } if (sfd.FileName.EndsWith(".smd")) { SMD.Save(this, Runtime.TargetVBN, sfd.FileName); } } } }
public void SaveAs(object sender, EventArgs args) { if (Runtime.TargetVBN == null) { MessageBox.Show("You must have a bone set (VBN) open before saving animations"); return; } using (var sfd = new SaveFileDialog()) { sfd.Filter = "Supported Files (.omo, .anim, .smd)|*.omo;*.anim;*.smd|" + "Maya Anim (.anim)|*.anim|" + "Object Motion (.omo)|*.omo|" + "Source Animation (.smd)|*.smd|" + "All Files (*.*)|*.*"; if (sfd.ShowDialog() == DialogResult.OK) { sfd.FileName = sfd.FileName; if (sfd.FileName.EndsWith(".anim")) { if (Tag is AnimTrack) { ((AnimTrack)Tag).createANIM(sfd.FileName, Runtime.TargetVBN); } else { ANIM.CreateANIM(sfd.FileName, this, Runtime.TargetVBN); } } if (sfd.FileName.EndsWith(".omo")) { if (Tag is FileData) { FileOutput o = new FileOutput(); o.writeBytes(((FileData)Tag).getSection(0, ((FileData)Tag).size())); o.save(sfd.FileName); } else { OMOOld.CreateOMOFromAnimation(this, Runtime.TargetVBN); } } if (sfd.FileName.EndsWith(".smd")) { SMD.Save(this, Runtime.TargetVBN, sfd.FileName); } } } }
public void Apply(VBN bone) { for (int i = 0; i < nodes.Count; i++) { List <AnimType> used = new List <AnimType>(); Bone b = bone.bones[i]; Vector3 erot = ANIM.quattoeul(b.rot); foreach (DATAnimTrack track in nodes[i]) { KeyNode node = track.keys[0]; if (Debug) { Console.WriteLine("Bone " + i + " " + track.type + " " + node.value); } switch (track.type) { case AnimType.XPOS: b.pos.X = node.value; break; case AnimType.YPOS: b.pos.Y = node.value; break; case AnimType.ZPOS: b.pos.Z = node.value; break; case AnimType.XROT: erot.X = node.value; break; case AnimType.YROT: erot.Y = node.value; break; case AnimType.ZROT: erot.Z = node.value; break; } } b.rot = VBN.FromEulerAngles(erot.Z, erot.Y, erot.X); } bone.update(); }
public void SaveAsExpeditedAnim() { Console.WriteLine("Expedation taking effect"); if (Runtime.TargetVBN == null) // Showing the message box would pause execution which is not ideal. { return; } if (Tag is AnimTrack) { ((AnimTrack)Tag).createANIM(MainForm.executableDir + "\\animextractions\\" + Text + ".anim", Runtime.TargetVBN); } else { ANIM.CreateANIM(MainForm.executableDir + "\\animextractions\\" + Text + ".anim", this, Runtime.TargetVBN); } }
public void SetKeyFromBone(float frame, Bone bone) { Vector3 rot = ANIM.quattoeul(bone.rot); if (rot.X != bone.rotation[0] || rot.Y != bone.rotation[1] || rot.Z != bone.rotation[2]) { XROT.GetKeyFrame(frame).Value = bone.rot.X; YROT.GetKeyFrame(frame).Value = bone.rot.Y; ZROT.GetKeyFrame(frame).Value = bone.rot.Z; WROT.GetKeyFrame(frame).Value = bone.rot.W; } if (bone.pos.X != bone.position[0] || bone.pos.Y != bone.position[1] || bone.pos.Z != bone.position[2]) { XPOS.GetKeyFrame(frame).Value = bone.pos.X; YPOS.GetKeyFrame(frame).Value = bone.pos.Y; ZPOS.GetKeyFrame(frame).Value = bone.pos.Z; } if (bone.sca.X != bone.scale[0] || bone.sca.Y != bone.scale[1] || bone.sca.Z != bone.scale[2]) { XSCA.GetKeyFrame(frame).Value = bone.sca.X; YSCA.GetKeyFrame(frame).Value = bone.sca.Y; ZSCA.GetKeyFrame(frame).Value = bone.sca.Z; } }
//<summary> //Open an animation based on filename //</summary> public void openAnimation(string filename) { //Runtime.Animations.Clear(); if (filename.EndsWith(".mta")) { MTA mta = new MTA(); try { mta.Read(filename); Runtime.MaterialAnimations.Add(filename, mta); mtaNode.Nodes.Add(filename); MainForm.Instance.viewports[0].loadMTA(mta); Runtime.TargetMTAString = filename; } catch (EndOfStreamException) { mta = null; } } else if (filename.EndsWith(".smd")) { var anim = new SkelAnimation(); if (Runtime.TargetVBN == null) { Runtime.TargetVBN = new VBN(); } SMD.read(filename, anim, Runtime.TargetVBN); leftPanel.treeRefresh(); Runtime.Animations.Add(filename, anim); animNode.Nodes.Add(filename); } else if (filename.EndsWith(".pac")) { PAC p = new PAC(); p.Read(filename); foreach (var pair in p.Files) { if (pair.Key.EndsWith(".omo")) { var anim = OMO.read(new FileData(pair.Value)); string AnimName = Regex.Match(pair.Key, @"([A-Z][0-9][0-9])(.*)").Groups[0].ToString(); //AnimName = pair.Key; //AnimName = AnimName.Remove(AnimName.Length - 4); //AnimName = AnimName.Insert(3, "_"); if (!string.IsNullOrEmpty(AnimName)) { if (Runtime.Animations.ContainsKey(AnimName)) { Runtime.Animations[AnimName].children.Add(anim); } else { animNode.Nodes.Add(AnimName); Runtime.Animations.Add(AnimName, anim); } } else { if (Runtime.Animations.ContainsKey(pair.Key)) { Runtime.Animations[pair.Key].children.Add(anim); } else { animNode.Nodes.Add(pair.Key); Runtime.Animations.Add(pair.Key, anim); } } } else if (pair.Key.EndsWith(".mta")) { MTA mta = new MTA(); try { if (!Runtime.MaterialAnimations.ContainsKey(pair.Key)) { mta.read(new FileData(pair.Value)); Runtime.MaterialAnimations.Add(pair.Key, mta); mtaNode.Nodes.Add(pair.Key); } // matching string AnimName = Regex.Match(pair.Key, @"([A-Z][0-9][0-9])(.*)").Groups[0].ToString().Replace(".mta", ".omo"); if (Runtime.Animations.ContainsKey(AnimName)) { Runtime.Animations[AnimName].children.Add(mta); } } catch (EndOfStreamException) { mta = null; } } } } if (filename.EndsWith(".dat")) { if (!filename.EndsWith("AJ.dat")) { MessageBox.Show("Not a DAT animation"); } else { if (Runtime.ModelContainers[0].dat_melee == null) { MessageBox.Show("Load a DAT model first"); } else { DAT_Animation.LoadAJ(filename, Runtime.ModelContainers[0].dat_melee.bones); } } } //if (Runtime.TargetVBN.bones.Count > 0) //{ if (filename.EndsWith(".omo")) { Runtime.Animations.Add(filename, OMO.read(new FileData(filename))); animNode.Nodes.Add(filename); } if (filename.EndsWith(".chr0")) { Runtime.Animations.Add(filename, CHR0.read(new FileData(filename), Runtime.TargetVBN)); animNode.Nodes.Add(filename); } if (filename.EndsWith(".anim")) { Runtime.Animations.Add(filename, ANIM.read(filename, Runtime.TargetVBN)); animNode.Nodes.Add(filename); } }
private void exportToolStripMenuItem_Click(object sender, EventArgs e) { /*if (Runtime.TargetVBN == null) * { * return; * }*/ using (var sfd = new SaveFileDialog()) { sfd.Filter = "Supported Files (.omo, .anim, .pac, .mta)|*.omo;*.anim;*.pac;*.mta|" + "Object Motion (.omo)|*.omo|" + "Material Animation (.mta)|*.mta|" + "Maya Anim (.anim)|*.anim|" + "OMO Pack (.pac)|*.pac|" + "All Files (*.*)|*.*"; if (sfd.ShowDialog() == DialogResult.OK) { sfd.FileName = sfd.FileName; if (sfd.FileName.EndsWith(".anim")) { if (Runtime.TargetAnim.Tag is AnimTrack) { ((AnimTrack)Runtime.TargetAnim.Tag).createANIM(sfd.FileName, Runtime.TargetVBN); } else { ANIM.createANIM(sfd.FileName, Runtime.TargetAnim, Runtime.TargetVBN); } } if (sfd.FileName.EndsWith(".omo")) { if (Runtime.TargetAnim.Tag is FileData) { FileOutput o = new FileOutput(); o.writeBytes(((FileData)Runtime.TargetAnim.Tag).getSection(0, ((FileData)Runtime.TargetAnim.Tag).size())); o.save(sfd.FileName); } else { OMO.createOMO(Runtime.TargetAnim, Runtime.TargetVBN, sfd.FileName); } } if (sfd.FileName.EndsWith(".pac")) { var pac = new PAC(); foreach (var anim in Runtime.Animations) { var bytes = OMO.createOMO(anim.Value, Runtime.TargetVBN); if (Runtime.TargetAnim.Tag is FileData) { bytes = ((FileData)Runtime.TargetAnim.Tag).getSection(0, ((FileData)Runtime.TargetAnim.Tag).size()); } pac.Files.Add(anim.Key, bytes); } pac.Save(sfd.FileName); } if (sfd.FileName.EndsWith(".mta")) { FileOutput f = new FileOutput(); f.writeBytes(Runtime.TargetMTA.Rebuild()); f.save(sfd.FileName); } } } }