Exemple #1
0
            public bool parseAnimation(AnimationChunk a, LuaObject data)
            {
                parseChunkHeader(a, data);
                a.duration     = data.get <float>("duration");
                a.skeletonName = data.get <string>("skeleton");
                a.numBones     = data.get <int>("numBones");
                LuaObject events = data["events"];

                for (int i = 0; i < events.count(); i++)
                {
                    LuaObject      e        = events[i + 1];
                    AnimationEvent aniEvent = new AnimationEvent();
                    aniEvent.time = e.get <int>("time");
                    aniEvent.name = e.get <string>("name");
                    a.events.Add(aniEvent);
                }

                //create an animiation channel for each bone
                for (int i = 0; i < a.numBones; i++)
                {
                    a.channels.Add(new AnimationChannel());
                }

                LuaObject channels = data["channels"];

                for (int i = 0; i < a.numBones; i++)
                {
                    LuaObject channelData = channels[i + 1];
                    int       idx         = 1;
                    while (idx < channelData.count())
                    {
                        JointPose jp = new JointPose();
                        jp.time     = (float)channelData[idx++];
                        jp.position = new Vector3(channelData[idx++], channelData[idx++], channelData[idx++]);
                        jp.rotation = new Quaternion(channelData[idx++], channelData[idx++], channelData[idx++], channelData[idx++]);
                        a.channels[i].poses.Add(jp);
                    }
                }

                return(true);
            }
Exemple #2
0
        ///<summary>
        ///Initializes all the chunk classes and adds them to a hashtable
        ///for lookup and retrieval based on their chunk ID;
        ///</summary>
        private void initializeChunks()
        {
            Chunk meshChunk                     = new MeshChunk();
            Chunk hierarchyChunk                = new HierarchyChunk();
            Chunk hierarchyHeaderChunk          = new HierarchyHeaderChunk();
            Chunk pivotsChunk                   = new PivotsChunk();
            Chunk pivotFixupsChunk              = new PivotFixupsChunk();
            Chunk hlodChunk                     = new HlodChunk();
            Chunk hlodHeaderChunk               = new HlodHeaderChunk();
            Chunk hlodLodArrayChunk             = new HlodLodArrayChunk();
            Chunk hlodSubObjectArrayHeaderChunk = new HlodSubObjectArrayHeaderChunk();
            Chunk hlodSubObjectChunk            = new HlodSubObjectChunk();
            Chunk hlodProxyArrayChunk           = new HLodProxyArrayChunk();
            Chunk meshHeader3Chunk              = new MeshHeader3Chunk();
            Chunk verticesChunk                 = new VerticesChunk();
            Chunk vertexNormalsChunk            = new VertexNormalsChunk();
            Chunk trianglesChunk                = new TrianglesChunk();
            Chunk vertexShadeIndicesChunk       = new VertexShadeIndicesChunk();
            Chunk materialInfoChunk             = new MaterialInfoChunk();
            Chunk vertexMaterialsChunk          = new VertexMaterialsChunk();
            Chunk vertexMaterialChunk           = new VertexMaterialChunk();
            Chunk vertexMaterialNameChunk       = new VertexMaterialNameChunk();
            Chunk vertexMaterialInfoChunk       = new VertexMaterialInfoChunk();
            Chunk shadersChunk                  = new ShadersChunk();
            Chunk texturesChunk                 = new TexturesChunk();
            Chunk textureChunk                  = new TextureChunk();
            Chunk textureNameChunk              = new TextureNameChunk();
            Chunk textureInfoChunk              = new TextureInfoChunk();
            Chunk materialPassChunk             = new MaterialPassChunk();
            Chunk vertexMaterialIdsChunk        = new VertexMaterialIdsChunk();
            Chunk shaderIdsChunk                = new ShaderIdsChunk();
            Chunk textureStageChunk             = new TextureStageChunk();
            Chunk textureIdsChunk               = new TextureIdsChunk();
            Chunk stageTexCoordsChunk           = new StageTexCoordsChunk();
            Chunk aabTreeChunk                  = new AabTreeChunk();
            Chunk aabTreeHeaderChunk            = new AabTreeHeaderChunk();
            Chunk aabTreePolyIndicesChunk       = new AabTreePolyIndicesChunk();
            Chunk aabTreeNodesChunk             = new AabTreeNodesChunk();
            Chunk aggregateChunk                = new AggregateChunk();
            Chunk aggregateHeaderChunk          = new AggregateHeaderChunk();
            Chunk aggregateInfoChunk            = new AggregateInfoChunk();
            Chunk aggregateClassInfoChunk       = new AggregateClassInfoChunk();
            Chunk textureReplacerChunk          = new TextureReplacerChunk();
            Chunk vertexMapperArgs0Chunk        = new VertexMapperArgs0Chunk();
            Chunk vertexMapperArgs1Chunk        = new VertexMapperArgs1Chunk();
            Chunk animationChunk                = new AnimationChunk();
            Chunk animationHeaderChunk          = new AnimationHeaderChunk();
            Chunk animationChannelChunk         = new AnimationChannelChunk();
            Chunk bitChannelChunk               = new BitChannelChunk();
            Chunk emitterChunk                  = new EmitterChunk();
            Chunk emitterHeaderChunk            = new EmitterHeaderChunk();
            Chunk emitterUserDataChunk          = new EmitterUserDataChunk();
            Chunk emitterInfoChunk              = new EmitterInfoChunk();
            Chunk emitterInfo2Chunk             = new EmitterInfo2Chunk();
            Chunk emitterPropsChunk             = new EmitterPropsChunk();
            Chunk emitterRotationKeyframesChunk = new EmitterRotationKeyFramesChunk();
            Chunk emitterFrameKeyFramesChunk    = new EmitterFrameKeyFramesChunk();
            Chunk emitterBlurTimeKeyFramesChunk = new EmitterBlurTimeKeyFramesChunk();
            Chunk emitterLinePropertiesChunk    = new EmitterLinePropertiesChunk();
            Chunk vertexInfluencesChunk         = new VertexInfluencesChunk();
            Chunk dcgChunk                        = new DcgChunk();
            Chunk hModelChunk                     = new HModelChunk();
            Chunk hModelHeaderChunk               = new HModelHeaderChunk();
            Chunk hModelAuxDataChunk              = new HModelAuxDataChunk();
            Chunk nodeChunk                       = new NodeChunk();
            Chunk compressedAnimationChunk        = new CompressedAnimationChunk();
            Chunk compressedAnimationHeaderChunk  = new CompressedAnimationHeaderChunk();
            Chunk compressedAnimationChannelChunk = new CompressedAnimationChannelChunk();
            Chunk compressedBitChannelChunk       = new CompressedBitChannelChunk();
            Chunk hLodAggregateArrayChunk         = new HLodAggregateArrayChunk();
            Chunk prelitUnlitChunk                = new PrelitUnlitChunk();
            Chunk prelitVertexChunk               = new PrelitVertexChunk();
            Chunk prelitLightMultiPassChunk       = new PrelitLightMultiPassChunk();
            Chunk prelitLightMultiTextureChunk    = new PrelitLightMultiTextureChunk();
            Chunk meshUserTextChunk               = new MeshUserTextChunk();
            Chunk collectionChunk                 = new CollectionChunk();
            Chunk collectionHeaderChunk           = new CollectionHeaderChunk();
            Chunk collectionObjectNameChunk       = new CollectionObjectNameChunk();
            Chunk placeholderChunk                = new PlaceholderChunk();
            Chunk transformNodeChunk              = new TransformNodeChunk();
            Chunk dazzleChunk                     = new DazzleChunk();
            Chunk dazzleNameChunk                 = new DazzleNameChunk();
            Chunk dazzleTypeNameChunk             = new DazzleTypeNameChunk();
            Chunk boxChunk                        = new BoxChunk();
            Chunk deformChunk                     = new DeformChunk();
            Chunk deformSetChunk                  = new DeformSetChunk();
            Chunk deformKeyframeChunk             = new DeformKeyframeChunk();
            Chunk deformDataChunk                 = new DeformDataChunk();

            //Animation
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_ANIMATION, animationChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_ANIMATION_HEADER, animationHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_ANIMATION_CHANNEL, animationChannelChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_BIT_CHANNEL, bitChannelChunk);

            // Aggregate
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AGGREGATE, aggregateChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AGGREGATE_HEADER, aggregateHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AGGREGATE_INFO, aggregateInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AGGREGATE_CLASS_INFO, aggregateClassInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE_REPLACER_INFO, textureReplacerChunk);

            //Collection
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COLLECTION, collectionChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COLLECTION_HEADER, collectionHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COLLECTION_OBJ_NAME, collectionObjectNameChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PLACEHOLDER, placeholderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TRANSFORM_NODE, transformNodeChunk);

            //Compressed Animation
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COMPRESSED_ANIMATION, compressedAnimationChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COMPRESSED_ANIMATION_HEADER, compressedAnimationHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COMPRESSED_ANIMATION_CHANNEL, compressedAnimationChannelChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_COMPRESSED_BIT_CHANNEL, compressedBitChannelChunk);

            //Dazzle
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DAZZLE, dazzleChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DAZZLE_NAME, dazzleNameChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DAZZLE_TYPENAME, dazzleTypeNameChunk);

            //Deform
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DEFORM, deformChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DEFORM_SET, deformSetChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DEFORM_KEYFRAME, deformKeyframeChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DEFORM_DATA, deformDataChunk);

            //Emitter
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER, emitterChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_HEADER, emitterHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_USER_DATA, emitterUserDataChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_INFO, emitterInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_INFOV2, emitterInfo2Chunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_PROPS, emitterPropsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_LINE_PROPERTIES, emitterLinePropertiesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_ROTATION_KEYFRAMES, emitterRotationKeyframesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_FRAME_KEYFRAMES, emitterFrameKeyFramesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_EMITTER_BLUR_TIME_KEYFRAMES, emitterBlurTimeKeyFramesChunk);

            // Mesh
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_MESH, meshChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_MESH_HEADER3, meshHeader3Chunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTICES, verticesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_NORMALS, vertexNormalsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TRIANGLES, trianglesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_SHADE_INDICES, vertexShadeIndicesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_MATERIAL_INFO, materialInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_MESH_USER_TEXT, meshUserTextChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MATERIALS, vertexMaterialsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MATERIAL, vertexMaterialChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MATERIAL_NAME, vertexMaterialNameChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MATERIAL_INFO, vertexMaterialInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_SHADERS, shadersChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURES, texturesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE, textureChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE_NAME, textureNameChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE_INFO, textureInfoChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_MATERIAL_PASS, materialPassChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE_STAGE, textureStageChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_TEXTURE_IDS, textureIdsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_STAGE_TEXCOORDS, stageTexCoordsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MATERIAL_IDS, vertexMaterialIdsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MAPPER_ARGS0, vertexMapperArgs0Chunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_MAPPER_ARGS1, vertexMapperArgs1Chunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_SHADER_IDS, shaderIdsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_VERTEX_INFLUENCES, vertexInfluencesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AABTREE, aabTreeChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AABTREE_HEADER, aabTreeHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AABTREE_POLYINDICES, aabTreePolyIndicesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_AABTREE_NODES, aabTreeNodesChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_DCG, dcgChunk);

            //Primitives
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_BOX, boxChunk);

            //Hierarchy
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HIERARCHY, hierarchyChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HIERARCHY_HEADER, hierarchyHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PIVOTS, pivotsChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PIVOT_FIXUPS, pivotFixupsChunk);

            //HLod
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD, hlodChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_HEADER, hlodHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_LOD_ARRAY, hlodLodArrayChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_SUB_OBJECT_ARRAY_HEADER, hlodSubObjectArrayHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_SUB_OBJECT, hlodSubObjectChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_AGGREGATE_ARRAY, hLodAggregateArrayChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HLOD_PROXY_ARRAY, hlodProxyArrayChunk);

            //HModel
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HMODEL, hModelChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HMODEL_HEADER, hModelHeaderChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_HMODEL_AUX_DATA, hModelAuxDataChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_NODE, nodeChunk);

            //Optional
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PRELIT_UNLIT, prelitUnlitChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PRELIT_VERTEX, prelitVertexChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_PASS, prelitLightMultiPassChunk);
            chunkMap.Add((int)ChunkHeader.W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_TEXTURE, prelitLightMultiTextureChunk);
        }
Exemple #3
0
            public bool loadFile(string filename)
            {
                LuaState vm = new LuaState();

                LuaExt.extendLua(vm);

                try
                {
                    if (vm.doFile(filename) == false)
                    {
                        Warn.print("Unable to open BOB file {0}", filename);
                        return(false);
                    }

                    LuaObject data = vm.findObject("BOB");
                    if (data == null)
                    {
                        Warn.print("Unable to find BOB data in file {0}", filename);
                        return(false);
                    }

                    myVersion = data.get <UInt32>("version");

                    //read the registry
                    LuaObject registry = data.get <LuaObject>("registry");
                    parseRegistry(registry);

                    //read the chunks
                    LuaObject chunks = data.get <LuaObject>("chunks");
                    for (int i = 1; i <= chunks.count(); i++)
                    {
                        LuaObject chunkData = chunks[i];
                        switch (chunkData.get <String>("type"))
                        {
                        case "model":
                            ModelChunk model = new ModelChunk();
                            parseModel(model, chunkData);
                            myChunks.Add(model);
                            break;

                        case "skeleton":
                            SkeletonChunk skeleton = new SkeletonChunk();
                            parseSkeleton(skeleton, chunkData);
                            myChunks.Add(skeleton);
                            break;

                        case "animation":
                            AnimationChunk animation = new AnimationChunk();
                            parseAnimation(animation, chunkData);
                            myChunks.Add(animation);
                            break;

                        case "texture":
                            Warn.print("Skipping .BOB texture");
                            break;

                        case "particle":
                            Warn.print("Skipping .BOB particle system");
                            break;

                        case "audio":
                            Warn.print("Skipping .BOB audio");
                            break;

                        default:
                            Warn.print("Unknown type: {0}", chunkData.get <String>("type"));
                            break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("Error while loading BOB model from definition file ( " + filename + " ).", ex);
                }
                return(true);
            }