void gkBlenderSceneConverter::convertObject(Blender::Object* bobj, gkGameObject* gobj) { if (!m_gscene) return; GK_ASSERT(validObject(bobj)); if (gobj == 0) { gkHashedString name(GKB_IDNAME(bobj)); switch (bobj->type) { case OB_EMPTY: gobj = m_gscene->createObject(name); break; case OB_LAMP: gobj = m_gscene->createLight(name); break; case OB_CAMERA: gobj = m_gscene->createCamera(name); break; case OB_MESH: gobj = m_gscene->createEntity(name); break; case OB_ARMATURE: gobj = m_gscene->createSkeleton(name); break; case OB_CURVE: gobj = m_gscene->createCurve(name); break; } } // all game object property types if (gobj) { gkScalar animfps = m_bscene->r.frs_sec / m_bscene->r.frs_sec_base; convertObjectGeneral(gobj, bobj); convertObjectProperties(gobj, bobj); convertObjectPhysics(gobj, bobj); convertObjectConstraints(gobj, bobj); convertObjectLogic(gobj, bobj); convertObjectAnimations(gobj, bobj, animfps); // object data switch (bobj->type) { case OB_LAMP: convertObjectLamp(gobj, bobj); break; case OB_CAMERA: convertObjectCamera(gobj, bobj); break; case OB_MESH: convertObjectMesh(gobj, bobj); break; case OB_ARMATURE: convertObjectArmature(gobj, bobj); break; case OB_CURVE: convertObjectCurve(gobj, bobj); break; } convertObjectParticles(gobj, bobj); //need mesh info } }
void akBLoader::loadFile(const utString &filename, bool sortByMat, bool openglVertexColor) { fbtBlend fp; if (fp.parse(filename.c_str(), fbtFile::PM_COMPRESSED) != fbtFile::FS_OK) { return; } // current scne Blender::Scene* bscene = fp.m_fg->curscene; //animations akAnimationLoader animLoader(m_demo); animLoader.convertActions(fp.m_action, fp.getVersion() <= 249, bscene->r.frs_sec); //convert camera convertCameraObject(bscene->camera); //objects of the active scene for (Blender::Base* base = (Blender::Base*)bscene->base.first; base; base = base->next) { if (!base->object) continue; Blender::Object* bobj = base->object; // test for usable object type if(bobj->type == OB_MESH) { convertObjectMesh(bobj); akEntity* entity = m_demo->getEntity(AKB_IDNAME(bobj)); animLoader.convertObject(entity, bobj, fp.getVersion() <= 249, bscene->r.frs_sec); } } }