示例#1
0
        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;
            }
        }
示例#2
0
        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();
            }
        }
示例#3
0
        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);
        }
示例#4
0
 public void addSTRM(STRM s)
 {
     Shape.NrStreams++;
     Streams.Add(s);
 }
示例#5
0
 public StreamPlayer(STRM strm)
 {
     Load(strm);
 }