private void importBack(string filename) { if (dontModify) { return; } NutTexture tex = textureFromFile[filename]; try { DDS dds = new DDS(new FileData(filename)); NutTexture ntex = dds.ToNutTexture(); tex.Height = ntex.Height; tex.Width = ntex.Width; tex.pixelInternalFormat = ntex.pixelInternalFormat; tex.surfaces = ntex.surfaces; tex.pixelFormat = ntex.pixelFormat; //GL.DeleteTexture(NUT.glTexByHashId[tex.HASHID]); currentNut.glTexByHashId.Remove(tex.HashId); currentNut.glTexByHashId.Add(tex.HashId, NUT.CreateTexture2D(tex)); FillForm(); textureListBox.SelectedItem = tex; glControl1.Invalidate(); } catch { Console.WriteLine("Could not be open for editing"); } }
// I'm completely totally serious public static NUD Create(VBN vbn) { Dictionary <string, string> files = new Dictionary <string, string>(); ZipArchive zip = ZipFile.OpenRead("lib\\Skapon.zip"); Random random = new Random(); int randomNumber = random.Next(0, 0xFFFFFF); NUT nut = new NUT(); foreach (ZipArchiveEntry e in zip.Entries) { byte[] b; using (BinaryReader br = new BinaryReader(e.Open())) { b = br.ReadBytes((int)e.Length); } var stream = new StreamReader(new MemoryStream(b)); string s = stream.ReadToEnd(); files.Add(e.Name, s); if (e.Name.EndsWith(".dds")) { NutTexture tex = new DDS(new FileData(b)).ToNutTexture(); nut.Nodes.Add(tex); tex.HashId = 0x40000000 + randomNumber; nut.glTexByHashId.Add(tex.HashId, NUT.CreateTexture2D(tex)); } } NUD nud = new NUD(); NUD.Mesh head = new NUD.Mesh(); nud.Nodes.Add(head); head.Text = "Skapon"; head.Nodes.Add(setToBone(scale(readPoly(files["head.obj"]), 1, 1, 1), vbn.bones[vbn.boneIndex("HeadN")], vbn)); head.Nodes.Add(setToBone(scale(readPoly(files["body.obj"]), 1, 1, 1), vbn.bones[vbn.boneIndex("BustN")], vbn)); head.Nodes.Add(setToBone(scale(readPoly(files["hand.obj"]), 1, 1, 1), vbn.bones[vbn.boneIndex("RHandN")], vbn)); head.Nodes.Add(setToBone(scale(readPoly(files["hand.obj"]), -1, -1, 1), vbn.bones[vbn.boneIndex("LHandN")], vbn)); head.Nodes.Add(setToBone(scale(readPoly(files["foot.obj"]), 1, 1, 1), vbn.bones[vbn.boneIndex("RFootJ")], vbn)); head.Nodes.Add(setToBone(scale(readPoly(files["foot.obj"]), -1, -1, -1), vbn.bones[vbn.boneIndex("LFootJ")], vbn)); foreach (NUD.Polygon p in head.Nodes) { p.materials[0].textures[0].hash = 0x40000000 + randomNumber; } nud.UpdateRenderMeshes(); return(nud); }
private void replaceToolStripMenuItem_Click(object sender, EventArgs e) { if (currentNut == null || textureListBox.SelectedItem == null) { return; } using (var ofd = new OpenFileDialog()) { NutTexture texture = (NutTexture)(textureListBox.SelectedItem); ofd.Filter = "Supported Formats|*.dds;*.png|" + "DirectDraw Surface (.dds)|*.dds|" + "Portable Network Graphics (.png)|*.png|" + "All files(*.*)|*.*"; if (ofd.ShowDialog() == DialogResult.OK) { NutTexture newTexture = null; string extension = Path.GetExtension(ofd.FileName).ToLowerInvariant(); if (extension == ".dds") { DDS dds = new DDS(new FileData(ofd.FileName)); newTexture = dds.ToNutTexture(); } else if (extension == ".png") { newTexture = fromPNG(ofd.FileName, 1); } else { return; } texture.Height = newTexture.Height; texture.Width = newTexture.Width; texture.pixelInternalFormat = newTexture.pixelInternalFormat; texture.surfaces = newTexture.surfaces; texture.pixelFormat = newTexture.pixelFormat; Edited = true; //GL.DeleteTexture(NUT.glTexByHashId[texture.HASHID]); currentNut.glTexByHashId.Remove(texture.HashId); currentNut.glTexByHashId.Add(texture.HashId, NUT.CreateTexture2D(texture)); FillForm(); } } }
private void mipLevelTrackBar_Scroll(object sender, EventArgs e) { NutTexture tex = ((NutTexture)textureListBox.SelectedItem); if (tex.surfaces.Count == 6) { // Create a new texture for the selected surface at the first mip level. currentMipLevel = 0; SetCurrentCubeMapFaceLabel(mipLevelTrackBar.Value); textureToRender = NUT.CreateTexture2D(tex, mipLevelTrackBar.Value); } else { // Regular texture. currentMipLevel = mipLevelTrackBar.Value; } glControl1.Invalidate(); }
private NUT ReplaceTexture(NutTexture tex, int width, int height, NUT nut) { if (tex.Width == width && tex.Height == height) { tex.HashId = 0x280052B7; if (nut != null && nut.Nodes.Count > 0) { tex.HashId = ((NutTexture)nut.Nodes[0]).HashId; } if (nut == null) { nut = new NUT(); } nut.Nodes.Clear(); nut.glTexByHashId.Clear(); nut.Nodes.Add(tex); nut.glTexByHashId.Add(tex.HashId, NUT.CreateTexture2D(tex)); } else { MessageBox.Show("Dimensions must be " + width + "x" + height); } return(nut); }
private void LetsDance(object sender, EventArgs e) { Control c = MainForm.Instance.GetActiveModelViewport(); if (!(c is ModelViewport)) { return; } ModelViewport view = (ModelViewport)c; view.currentMode = ModelViewport.Mode.Normal; NUT n = null; if (((MenuItem)sender).GetContextMenu().SourceControl == stock_90_renderer) { n = stock_90; } if (((MenuItem)sender).GetContextMenu().SourceControl == chr_00_renderer) { n = chr_00; } if (((MenuItem)sender).GetContextMenu().SourceControl == chr_11_renderer) { n = chr_11; } if (((MenuItem)sender).GetContextMenu().SourceControl == chr_13_renderer) { n = chr_13; } if (n == null) { return; } byte[] data = RenderTools.DXT5ScreenShot(view.glViewport, view.shootX, view.shootY, view.shootWidth, view.shootHeight); int id = n.Nodes.Count > 0 ? ((NutTexture)n.Nodes[0]).HashId : 0x280052B7; n.Nodes.Clear(); n.glTexByHashId.Clear(); NutTexture tex = new NutTexture(); tex.Width = view.shootWidth; tex.Height = view.shootHeight; tex.surfaces.Add(new TextureSurface()); tex.surfaces[0].mipmaps.Add(FlipDXT5(data, tex.Width, tex.Height)); tex.pixelInternalFormat = PixelInternalFormat.CompressedRgbaS3tcDxt5Ext; tex.HashId = id; n.Nodes.Add(tex); n.glTexByHashId.Add(tex.HashId, NUT.CreateTexture2D(tex)); ((MenuItem)sender).GetContextMenu().SourceControl.Invalidate(); if (((MenuItem)sender).GetContextMenu().SourceControl == stock_90_renderer) { if (stock_90_loc != null) { stock_90.Save(stock_90_loc); } } if (((MenuItem)sender).GetContextMenu().SourceControl == chr_00_renderer) { if (chr_00_loc != null) { chr_00.Save(chr_00_loc); } } if (((MenuItem)sender).GetContextMenu().SourceControl == chr_11_renderer) { if (chr_11_loc != null) { chr_11.Save(chr_13_loc); } } if (((MenuItem)sender).GetContextMenu().SourceControl == chr_13_renderer) { if (chr_13_loc != null) { chr_13.Save(chr_13_loc); } } }
private void importNutFromFolder(object sender, EventArgs e) { using (FolderSelectDialog f = new FolderSelectDialog()) { if (f.ShowDialog() == DialogResult.OK) { Edited = true; if (!Directory.Exists(f.SelectedPath)) { Directory.CreateDirectory(f.SelectedPath); } NUT nut; nut = currentNut; foreach (var texPath in Directory.GetFiles(f.SelectedPath)) { string extension = Path.GetExtension(texPath).ToLowerInvariant(); if (!(extension == ".dds" || extension == ".png")) { continue; } int texId; bool isTex = int.TryParse(Path.GetFileNameWithoutExtension(texPath), NumberStyles.HexNumber, new CultureInfo("en-US"), out texId); NutTexture texture = null; if (isTex) { foreach (NutTexture tex in nut.Nodes) { if (tex.HashId == texId) { texture = tex; } } } if (texture == null) { //new texture NutTexture tex = null; if (extension == ".dds") { DDS dds = new DDS(new FileData(texPath)); tex = dds.ToNutTexture(); } else if (extension == ".png") { tex = fromPNG(texPath, 1); } if (isTex) { tex.HashId = texId; } else { tex.HashId = nut.Nodes.Count; } nut.Nodes.Add(tex); currentNut.glTexByHashId.Add(tex.HashId, NUT.CreateTexture2D(tex)); FillForm(); } else { //existing texture NutTexture tex = texture; NutTexture ntex = null; if (extension == ".dds") { DDS dds = new DDS(new FileData(texPath)); ntex = dds.ToNutTexture(); } else if (extension == ".png") { ntex = fromPNG(texPath, 1); } tex.Height = ntex.Height; tex.Width = ntex.Width; tex.pixelInternalFormat = ntex.pixelInternalFormat; tex.surfaces = ntex.surfaces; tex.pixelFormat = ntex.pixelFormat; //GL.DeleteTexture(NUT.glTexByHashId[tex.HASHID]); currentNut.glTexByHashId.Remove(tex.HashId); currentNut.glTexByHashId.Add(tex.HashId, NUT.CreateTexture2D(tex)); FillForm(); } } if (!Runtime.TextureContainers.Contains(nut)) { Runtime.TextureContainers.Add(nut); } } } FillForm(); }
private void importToolStripMenuItem_Click(object sender, EventArgs e) { if (currentNut == null) { return; } using (var ofd = new OpenFileDialog()) { ofd.Filter = "Supported Formats|*.dds;*.png|" + "DirectDraw Surface (.dds)|*.dds|" + "Portable Network Graphics (.png)|*.png|" + "All files(*.*)|*.*"; if (ofd.ShowDialog() == DialogResult.OK) { int texId; bool isTex = int.TryParse(Path.GetFileNameWithoutExtension(ofd.FileName), NumberStyles.HexNumber, new CultureInfo("en-US"), out texId); if (isTex) { foreach (NutTexture te in currentNut.Nodes) { if (texId == te.HashId) { isTex = false; } } } NutTexture tex = null; string extension = Path.GetExtension(ofd.FileName).ToLowerInvariant(); if (extension == ".dds") { DDS dds = new DDS(new FileData(ofd.FileName)); tex = dds.ToNutTexture(); } else if (extension == ".png") { tex = fromPNG(ofd.FileName, 1); } else { return; } Edited = true; if (isTex) { tex.HashId = texId; } else { tex.HashId = 0x40FFFF00 | (currentNut.Nodes.Count); } if (currentNut.glTexByHashId.ContainsKey(tex.HashId)) { currentNut.glTexByHashId.Remove(tex.HashId); } currentNut.Nodes.Add(tex); currentNut.glTexByHashId.Add(tex.HashId, NUT.CreateTexture2D(tex)); FillForm(); } } }