public bool ParseTarget(BinaryReader br, string id)
    {
        switch (id)
        {
        case "Name":    currentTarget.name = MegaParse.ReadString(br); break;

        case "Percent": currentTarget.percent = br.ReadSingle(); break;

        case "MoPoints":
            int count = br.ReadInt32();

            if (count > 0)
            {
                currentTarget.loadpoints = new MOPoint[count];

                for (int i = 0; i < count; i++)
                {
                    MOPoint p = new MOPoint();
                    p.id = br.ReadInt32();                              // we need to find the ids for this point (could be more than one)
                    p.p  = ConvertPoint(MegaParse.ReadP3(br));

                    p.w = br.ReadSingle();
                    currentTarget.loadpoints[i] = p;
                }
            }
            break;
        }

        return(true);
    }
    static public bool Parse(BinaryReader br, string id)
    {
        switch (id)
        {
        case "Num":
            int num = br.ReadInt32();
            con.Keys  = new MegaBezVector3Key[num];
            con.Times = new float[num];
            break;

        case "Keys":
            for (int i = 0; i < con.Keys.Length; i++)
            {
                con.Keys[i]        = new MegaBezVector3Key();
                con.Keys[i].val    = MegaParse.ReadP3(br);
                con.Keys[i].intan  = MegaParse.ReadP3(br);
                con.Keys[i].outtan = MegaParse.ReadP3(br);
                con.Times[i]       = br.ReadSingle();
            }
            con.InitKeys();
            break;
        }

        return(true);
    }
Beispiel #3
0
    void LoadPC2()
    {
        MegaPointCache am = (MegaPointCache)target;

        mods = am.gameObject.GetComponent <MegaModifiers>();

        string filename = EditorUtility.OpenFilePanel("Point Cache File", lastpath, "pc2");

        if (filename == null || filename.Length < 1)
        {
            return;
        }

        lastpath = filename;

        // Clear what we have
        Verts.Clear();

        FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, System.IO.FileShare.Read);

        BinaryReader br = new BinaryReader(fs);

        string sig = MegaParse.ReadStr(br);

        if (sig != "POINTCACHE2")
        {
            br.Close();
            return;
        }

        int fileVersion = br.ReadInt32();

        if (fileVersion != 1)
        {
            br.Close();
            return;
        }

        int numPoints = br.ReadInt32();

        br.ReadSingle();
        br.ReadSingle();
        int numSamples = br.ReadInt32();

        am.Verts = new MegaPCVert[numPoints];

        for (int i = 0; i < am.Verts.Length; i++)
        {
            am.Verts[i]        = new MegaPCVert();
            am.Verts[i].points = new Vector3[numSamples];
        }

        for (int i = 0; i < numSamples; i++)
        {
            for (int v = 0; v < numPoints; v++)
            {
                am.Verts[v].points[i] = MegaParse.ReadP3(br);
            }
        }
        BuildData(mods, am, filename);
        br.Close();
    }
    public void LoadPC2(string filename)
    {
        MegaPointCache am = (MegaPointCache)target;

        oldverts = am.Verts;
        mods     = am.gameObject.GetComponent <MegaModifiers>();

        if (mods == null)
        {
            Debug.LogWarning("You need to add a Mega Modify Object component first!");
            return;
        }

        lastpath = filename;

        // Clear what we have
        Verts.Clear();

        FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, System.IO.FileShare.Read);

        long         len = fs.Length;
        BinaryReader br  = new BinaryReader(fs);

        string sig = MegaParse.ReadStr(br);

        if (sig != "POINTCACHE2")
        {
            EditorUtility.DisplayDialog("PC2 Importer", "The selected file does not appear to be a valid PC2 File", "Ok");
            br.Close();
            return;
        }

        int fileVersion = br.ReadInt32();

        if (fileVersion != 1)
        {
            br.Close();
            return;
        }

        int numPoints = br.ReadInt32();

        br.ReadSingle();
        br.ReadSingle();
        int  numSamples = br.ReadInt32();
        long csamples   = (len - 24) / (numPoints * 12);

        numSamples = (int)csamples;

        am.Verts = new MegaPCVert[numPoints];

        for (int i = 0; i < am.Verts.Length; i++)
        {
            am.Verts[i]        = new MegaPCVert();
            am.Verts[i].points = new Vector3[numSamples];
        }

        for (int i = 0; i < numSamples; i++)
        {
            for (int v = 0; v < numPoints; v++)
            {
                am.Verts[v].points[i] = MegaParse.ReadP3(br);
            }
        }
        BuildData(mods, am, filename);
        br.Close();
    }
Beispiel #5
0
    public bool ParseAnimMesh(BinaryReader br, string id)
    {
        switch (id)
        {
        case "Size":
            Vector3 sz = MegaParse.ReadP3(br);
            Vector3 min1, max1;

            Vector3 ex1 = Extents(mods.verts, out min1, out max1);

            int largest = 0;
            if (sz.x > sz.y)
            {
                if (sz.x > sz.z)
                {
                    largest = 0;
                }
                else
                {
                    largest = 2;
                }
            }
            else
            {
                if (sz.y > sz.z)
                {
                    largest = 1;
                }
                else
                {
                    largest = 2;
                }
            }

            scl = ex1[largest] / sz[largest];
            break;

        case "V":
            Vector3 p = MegaParse.ReadP3(br) * scl;
            // Find all matching verts
            currentVert           = new MegaAnimatedVert();
            currentVert.startVert = p;
            currentVert.indices   = FindVerts(p);
            if (currentVert.indices == null)
            {
                Debug.Log("Error! No match found");
            }

            Verts.Add(currentVert);
            break;

        case "Anim":
            //currentVert.con = MegaBezVector3KeyControl.LoadBezVector3KeyControl(br);
            currentVert.con = MegaParseBezVector3Control.LoadBezVector3KeyControl(br);

            currentVert.con.Scale(scl);
            break;

        default: return(false);
        }

        return(true);
    }