EditData& TFlyObjectEdit::createActor( char const* name , unsigned modelID ) { EditData data; data.flag |= EF_SAVE_XFORM | EF_CREATE; TCamera& cam = m_game->getCamControl(); Vec3D pos = cam.getCameraPos() + 500 * cam.getViewDir(); XForm trans; trans.setIdentity(); TActor* entity = new TActor( modelID ,trans ); data.type = EOT_TNPC; m_curLevel->addEntity( entity ); data.flag |= EF_LOAD_MODEL; FnObject obj; obj.Object( entity->getFlyActor().GetBaseObject() ); obj.SetPosition( pos ); obj.SetDirection( Vec3D(1,0,0) , Vec3D(0,0,1) ); obj.SetName( (char*) name ); entity->getFlyActor().SetName((char*) name); data.id = obj.Object(); data.entity = entity; g_editDataVec.push_back( data ); return g_editDataVec.back(); }
void load(EditData& data , TLevel* level ) { FnScene& scene = level->getFlyScene(); data.type = type; data.flag = flag; switch( data.type ) { case EOT_TOBJECT: if ( data.flag & EF_LOAD_MODEL ) { TObject* tObj = new TObject( modelID ); level->addEntity( tObj ); data.id = tObj->getFlyObj().Object(); data.entity = tObj; } break; case EOT_TNPC: { XForm trans; trans.setIdentity(); TActor* actor = new TActor( modelID , trans ); level->addEntity( actor ); data.id = actor->getFlyActor().GetBaseObject(); data.entity = actor; } break; case EOT_TERRAIN: case EOT_FLY_OBJ: case EOT_OTHER: data.id = scene.GetObjectByName( (char*) name.c_str() ); break; } FnObject obj; obj.Object( data.id ); obj.SetName( (char*) name.c_str() ); if ( data.flag & EF_SAVE_XFORM ) { obj.SetWorldPosition( pos ); obj.SetWorldDirection( front , up ); } }