private void Load(STRM strm) { this.strm = strm; Reset(); decoders = new BaseSampleDecoder[strm.channels]; for (int channel = 0; channel < strm.channels; ++channel) { var decoder = BaseSampleDecoder.CreateDecoder(strm.encoding); decoder.sampleIncrease = 1; decoders[channel] = decoder; } }
public CDAB(byte[] Data) { EndianBinaryReaderEx er = new EndianBinaryReaderEx(new MemoryStream(Data), Endianness.LittleEndian); try { Header = new CDABHeader(er); Shape = new SHAP(er); Streams = new STRM[Shape.NrStreams]; for (int i = 0; i < Shape.NrStreams; i++) { Streams[i] = new STRM(er); } } finally { er.Close(); } }
public static CDAB createFromCmdl(string Filename, string saveFilename) { CMDL cmdl = null; try { cmdl = new CMDL(Filename); } catch (Exception e) { MessageBox.Show(e.Message); return(null); } CDAB ret = new CDAB(); for (int i = 0; i < cmdl.shapes.Count; i++) { cmdl.shapes[i].indstrm[0].triangles = cmdl.shapes[i].indstrm[0].triangles.OrderBy(tri => tri.getMinZ()).ToList(); STRM mat = new STRM(); List <CMDL.CMDLShape.IndexStream.Triangle> zstrip = new List <CMDL.CMDLShape.IndexStream.Triangle>(); CMDL.CMDLShape.IndexStream.Triangle zseltri = cmdl.shapes[i].indstrm[0].triangles[0]; int zindex = 0; while (true) { while (cmdl.shapes[i].indstrm[0].triangles[zindex].getMinZ() - zseltri.getMinZ() <= 1000) { zstrip.Add(cmdl.shapes[i].indstrm[0].triangles[zindex]); zindex++; if (zindex == cmdl.shapes[i].indstrm[0].triangles.Count) { break; } } zstrip = zstrip.OrderBy(face => face.getMinX()).ToList(); List <CMDL.CMDLShape.IndexStream.Triangle> xstrip = new List <CMDL.CMDLShape.IndexStream.Triangle>(); CMDL.CMDLShape.IndexStream.Triangle xseltri = zstrip[0]; int xindex = 0; while (true) { while (zstrip[xindex].getMinX() - xseltri.getMinX() <= 1000) { xstrip.Add(zstrip[xindex]); xindex++; if (xindex == zstrip.Count) { break; } } mat.addSTRMEntry(calculateSTRMEntry(xstrip)); cmdl.shapes[i].addNewIndexStream(xstrip); if (xindex == zstrip.Count) { break; } xseltri = zstrip[xindex]; xstrip.Clear(); } if (zindex == cmdl.shapes[i].indstrm[0].triangles.Count) { break; } zseltri = cmdl.shapes[i].indstrm[0].triangles[zindex]; zstrip.Clear(); } int vtxcnt = cmdl.shapes[i].Vertices.Count; if (vtxcnt > UInt16.MaxValue) { throw new Exception("Some material has more than 65535 vertices."); } mat.VertexCount = (UInt16)vtxcnt; ret.addSTRM(mat); } ret.fixFileSize(); cmdl.fixStreamCount(); cmdl.Save(Filename + "ext"); SaveBcmdl(Filename, saveFilename); return(ret); }
public void addSTRM(STRM s) { Shape.NrStreams++; Streams.Add(s); }
public StreamPlayer(STRM strm) { Load(strm); }