private DBAccess.ChunkInformation GetChunkById(byte[] cid) { DBAccess.ChunkInformation ci = DBAccess.GetChunkInformationById(cid); if (ci.sha1 == null) { ci = DBAccess.GetGlobalChunkInformationById(cid); } return(ci); }
private void listBox3_SelectedIndexChanged(object sender, EventArgs e) { rtb3.Text = ""; int n = listBox3.SelectedIndex; if (n == -1) { return; } DBAccess.ChunkInformation ci = cl[n]; DBAccess.BundleInformation bi = DBAccess.GetBundleInformationByIndex(ci.bundleIndex); DBAccess.TOCInformation ti = DBAccess.GetTocInformationByIndex(bi.tocIndex); rtb3.AppendText("Bundle Path : " + bi.bundlepath + "\n"); rtb3.AppendText("TOC Path : " + ti.path + "\n"); rtb3.AppendText("In CAS : " + ti.incas + "\n"); rtb3.AppendText("SHA1 : " + Helpers.ByteArrayToHexString(ci.sha1) + "\n"); }
private void listBox2_SelectedIndexChanged(object sender, EventArgs e) { int n = listBox2.SelectedIndex; if (n == -1) { return; } hb2.ByteProvider = new DynamicByteProvider(new byte[0]); Mesh.MeshLOD l = mesh.header.LODs[n]; DBAccess.ChunkInformation ci = DBAccess.GetChunkInformationById(l.ChunkID); if (ci.sha1 == null) { return; } byte[] data = SHA1Access.GetDataBySha1(ci.sha1); hb2.ByteProvider = new DynamicByteProvider(data); }
private void RefreshPreview() { try { int n = listBox2.SelectedIndex; if (n == -1) { return; } status.Text = "Getting header infos from db..."; Application.DoEvents(); DBAccess.RESInformation ti = ttprevlist[n]; DBAccess.BundleInformation buni = DBAccess.GetBundleInformationById(ti.bundlepath)[0]; DBAccess.TOCInformation toci = DBAccess.GetTocInformationByIndex(buni.tocIndex); BinaryBundle b = new BinaryBundle(); byte[] resdata = new byte[0]; if (toci.incas) { status.Text = "Getting header data from sha1..."; Application.DoEvents(); resdata = SHA1Access.GetDataBySha1(Helpers.HexStringToByteArray(ti.sha1)); } else { status.Text = "Getting header data from binary bundle..."; Application.DoEvents(); TOCFile toc = new TOCFile(toci.path); byte[] bundledata = toc.ExportBundleDataByPath(buni.bundlepath); b = new BinaryBundle(new MemoryStream(bundledata)); foreach (BinaryBundle.ResEntry res in b.ResList) { if (res._name == ti.resname) { resdata = res._data; break; } } } hb2.ByteProvider = new DynamicByteProvider(resdata); Mesh mesh = new Mesh(new MemoryStream(resdata)); foreach (Mesh.MeshLOD lod in mesh.header.LODs) { byte[] id = lod.ChunkID; byte[] data = new byte[0]; if (toci.incas) { DBAccess.ChunkInformation ci = DBAccess.GetChunkInformationById(id); if (ci.sha1 == null) { continue; } data = SHA1Access.GetDataBySha1(ci.sha1); } else { byte t = id[0]; id[0] = id[3]; id[3] = t; t = id[1]; id[1] = id[2]; id[2] = t; t = id[6]; id[6] = id[7]; id[7] = t; t = id[4]; id[4] = id[5]; id[5] = t; foreach (BinaryBundle.ChunkEntry c in b.ChunkList) { if (Helpers.ByteArrayCompare(id, c.id)) { data = c._data; } } if (data.Length == 0) { DBAccess.ChunkInformation ci = DBAccess.GetChunkInformationById(id); if (ci.sha1 == null) { continue; } data = SHA1Access.GetDataBySha1(ci.sha1); } } mesh.LoadChunkData(lod, new MemoryStream(data)); } MeshRenderObject mro = new MeshRenderObject(mesh); renderer.list.Clear(); renderer.list.Add(mro); renderer.worldoffset = -mro.center; renderer.CamDistance = mro.min.Length() + mro.max.Length(); status.Text = "Ready"; } catch (Exception ex) { status.Text = "General error, after state '" + status.Text + "' : " + ex.Message; } }
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { int n = listBox1.SelectedIndex; if (n == -1) { return; } try { statustext.Text = "Getting header infos from db..."; Application.DoEvents(); hb1.ByteProvider = new DynamicByteProvider(new byte[0]); if (File.Exists("tmp\\tmp.dds")) { File.Delete("tmp\\tmp.dds"); } DBAccess.BundleInformation buni = bil[n]; DBAccess.TextureInformation ti = new DBAccess.TextureInformation(); foreach (DBAccess.TextureInformation t in til) { if (t.bundleIndex == buni.index) { ti = t; } } DBAccess.TOCInformation toci = DBAccess.GetTocInformationByIndex(buni.tocIndex); byte[] resdata = new byte[0]; if (toci.incas) { statustext.Text = "Getting header data from sha1..."; Application.DoEvents(); resdata = SHA1Access.GetDataBySha1(ti.sha1); } else { statustext.Text = "Getting header data from binary bundle..."; Application.DoEvents(); TOCFile toc = new TOCFile(toci.path); byte[] bundledata = toc.ExportBundleDataByPath(buni.bundlepath); BinaryBundle b = new BinaryBundle(new MemoryStream(bundledata)); foreach (BinaryBundle.ResEntry res in b.ResList) { if (res._name == ti.name) { resdata = res._data; break; } } } hb1.ByteProvider = new DynamicByteProvider(resdata); statustext.Text = "Getting texture infos from db..."; Application.DoEvents(); TextureMetaResource tmr = new TextureMetaResource(resdata); DBAccess.ChunkInformation ci = DBAccess.GetChunkInformationById(tmr.chunkid); if (ci.bundleIndex == -1) { throw new Exception("no chunk info found in db"); } DBAccess.BundleInformation buni2 = DBAccess.GetBundleInformationByIndex(ci.bundleIndex); DBAccess.TOCInformation toci2 = DBAccess.GetTocInformationByIndex(buni2.tocIndex); byte[] texdata = new byte[0]; if (toci2.incas) { statustext.Text = "Getting texture data from sha1..."; Application.DoEvents(); texdata = SHA1Access.GetDataBySha1(ci.sha1); } else { statustext.Text = "Getting texture data from binary bundle..."; Application.DoEvents(); TOCFile toc = new TOCFile(toci2.path); byte[] bundledata = toc.ExportBundleDataByPath(buni2.bundlepath); BinaryBundle b = new BinaryBundle(new MemoryStream(bundledata)); foreach (BinaryBundle.ChunkEntry chunk in b.ChunkList) { if (Helpers.MatchByteArray(chunk.id, ci.id)) { texdata = chunk._data; break; } } } hb2.ByteProvider = new DynamicByteProvider(texdata); statustext.Text = "Making Preview..."; Application.DoEvents(); MemoryStream m = new MemoryStream(); tmr.WriteTextureHeader(m); m.Write(texdata, 0, texdata.Length); if (!Directory.Exists("tmp")) { Directory.CreateDirectory("tmp"); } File.WriteAllBytes("tmp\\tmp.dds", m.ToArray()); try { pb1.Image = DevIL.DevIL.LoadBitmap("tmp\\tmp.dds"); pb1.BringToFront(); } catch (Exception) { statustext.Text = "Error loading dds, after state '" + statustext.Text + "'"; } statustext.Text = "Ready"; } catch (Exception) { statustext.Text = "General error, after state '" + statustext.Text + "'"; } }