コード例 #1
0
        /** Load the KFB data for the selected animation, will return null if the animation does not exist in the KFB */
        private byte[] getKFBData(int animToUse)
        {
            if (kfb == null)
            {
                return(null);
            }
            if (kfbfile == null)
            {
                if (this.adb.filenameExists(this.kfb))
                {
                    kfbfile = NIFLoader.getNIF(this.kfb);
                }
                else
                {
                    return(null);
                }
                //Debug.Log("getting KFB: " + this.kfb);
            }
            /** Choose the right animation to load from the KFB file. Ideally we should use the KFM to know what index to use */
            for (int i = 0; i < kfbfile.numObjects; i += 4)
            {
                NiIntegerExtraData indexData = (NiIntegerExtraData)kfbfile.getObject(i);
                NiIntegerExtraData sizeData  = (NiIntegerExtraData)kfbfile.getObject(i + 1);
                NiBinaryExtraData  binData   = (NiBinaryExtraData)kfbfile.getObject(i + 2);
                NiBinaryExtraData  binData2  = (NiBinaryExtraData)kfbfile.getObject(i + 3);

                int animIdx = indexData.intExtraData;
                if (animIdx == animToUse)
                {
                    return(binData.getData());
                }
            }
            //Debug.LogError("[" + this.kfb + "] can't find data for anim[" + animToUse + "]");
            return(null);
        }
コード例 #2
0
ファイル: test_kfb_kfm.cs プロジェクト: kevinbrill/telarafly
    // Use this for initialization
    void Start()
    {
        AssetDatabase db = AssetDatabaseInst.DB;

        KFMFile kfm     = new KFMFile(new FileStream(@"C:\Users\Spikeles\Documents\NetBeansProjects\TelaraDBExplorer\TelaraDBEditorCore\human_female_medium.kfm", FileMode.Open, FileAccess.Read, FileShare.Read));
        NIFFile kfbfile = new NIFFile(new FileStream(@"C:\Users\Spikeles\Documents\NetBeansProjects\TelaraDBExplorer\TelaraDBEditorCore\human_female_2h_shared.kfb", FileMode.Open, FileAccess.Read, FileShare.Read));

        // 230, string -> index 2

        List <KFAnimation> anims = kfm.kfanimations;
        int maxAnimID            = 0;

        foreach (KFAnimation anim in anims)
        {
            maxAnimID = Mathf.Max(anim.id, maxAnimID);
            //Debug.Log(anim.id + ":" + anim.sequenceFilename + ":" + anim.sequencename);
        }
        Debug.Log("maxAnimID:" + maxAnimID);

        for (int i = 0; i < kfbfile.numObjects; i += 4)
        {
            NiIntegerExtraData indexData = (NiIntegerExtraData)kfbfile.getObject(i);
            NiIntegerExtraData sizeData  = (NiIntegerExtraData)kfbfile.getObject(i + 1);
            NiBinaryExtraData  binData   = (NiBinaryExtraData)kfbfile.getObject(i + 2);
            NiBinaryExtraData  binData2  = (NiBinaryExtraData)kfbfile.getObject(i + 3);
            KFAnimation        anim      = anims.DefaultIfEmpty(null).FirstOrDefault(a => a.id == indexData.intExtraData);
            if (anim != null)
            {
                Debug.Log("kfb[" + indexData.intExtraData + "] match => [" + anim.id + "]" + anim.sequenceFilename);
            }
            else
            {
                Debug.Log("kfb[" + indexData.intExtraData + "] nomatch");
            }
        }
        Debug.Log("kfb objs:" + kfbfile.numObjects / 4);
        Debug.Log("anims:" + anims.Count);
        //File.WriteAllBytes("human_female.kfb" + i + "_0", binData.getData());
        //File.WriteAllBytes("human_female.kfb" + i + "_1", binData2.getData());
    }
コード例 #3
0
    static private String[] getTextureIds(NIFFile nf, NiMesh mesh)
    {
        String[]            textureType;
        NiTexturingProperty texturingProperty = mesh.getTexturingProperty(nf);

        if (texturingProperty != null)
        {
            //Debug.Log("found texturing property for mesh " + mesh.name);
            textureType = new String[texturingProperty.shaderMapList.Count];
            foreach (int extraID in mesh.extraDataIDs)
            {
                NIFObject ni = nf.getObject(extraID);
                if (ni is NiIntegerExtraData)
                {
                    NiIntegerExtraData nied = (NiIntegerExtraData)ni;
                    if (nied.extraDataString != null)
                    {
                        if (nied.extraDataString.Contains("Texture"))
                        {
                            if (nied.intExtraData >= 0 && nied.intExtraData < textureType.Length)
                            {
                                textureType[nied.intExtraData] = nied.extraDataString;
                            }
                            else
                            {
                                //                                Debug.LogWarning("nied.intExtraData out of range:" + nied.intExtraData + " => " + textureType.Length);
                            }
                        }
                    }
                }
            }
        }
        else
        {
            textureType = new String[255];
        }
        return(textureType);
    }