void SelectCareer::updateGUI(void) { // check bounds if( _topCareer < 0 ) _topCareer = 0; if( Gameplay::iGameplay->getNumCareers() <= SCGUI_NUM_ITEMS ) _topCareer = 0; if( Gameplay::iGameplay->getNumCareers() > SCGUI_NUM_ITEMS && _topCareer + SCGUI_NUM_ITEMS > int( Gameplay::iGameplay->getNumCareers() ) ) { _topCareer = Gameplay::iGameplay->getNumCareers() - SCGUI_NUM_ITEMS; } // update slider float lowerLimit = 0.0f; float upperLimit = float( Gameplay::iGameplay->getNumCareers() - SCGUI_NUM_ITEMS ); if( upperLimit < 0 ) upperLimit = 0; _slider->setLowerLimit( lowerLimit ); _slider->setUpperLimit( upperLimit ); // enable gui items for( unsigned int i=0; i<SCGUI_NUM_ITEMS; i++ ) { bool itemEnabled = ( i < Gameplay::iGameplay->getNumCareers() ); _items[i].enable( itemEnabled ); if( itemEnabled ) { _items[i].career = Gameplay::iGameplay->getCareer( i + _topCareer ); _items[i].itemCareer->setText( asciizToUnicode( _items[i].career->getName() ).c_str() ); unsigned int faceId = _items[i].career->getVirtues()->appearance.face; // character face icon engine::ITexture* faceTexture = Gameplay::iEngine->getTexture( database::Face::getRecord( faceId )->iconName ); // LICENSED_CHAR? if( _items[i].career->getLicensedFlag() ) faceTexture = Gameplay::iEngine->getTexture( "face00" ); assert( faceTexture ); _items[i].itemPicture->getPanel()->setTexture( faceTexture ); _items[i].itemPicture->getPanel()->setTextureRect( gui::Rect( 0, 0, faceTexture->getWidth(), faceTexture->getHeight() ) ); } else { _items[i].career = NULL; _items[i].itemCareer->setText( L"" ); engine::ITexture* faceTexture = Gameplay::iEngine->getTexture( "black" ); assert( faceTexture ); _items[i].itemPicture->getPanel()->setTexture( faceTexture ); _items[i].itemPicture->getPanel()->setTextureRect( gui::Rect( 0,0,7,7 ) ); } } }
DeleteCareer::DeleteCareer(Career* career) { assert( career ); _career = career; _endOfActivity = false; _window = Gameplay::iGui->createWindow( "DialogBox" ); assert( _window ); // setup dialog message gui::IGuiStaticText* messageText = _window->getPanel()->find( "MessageText" )->getStaticText(); assert( messageText ); messageText->setText( wstrformat( Gameplay::iLanguage->getUnicodeString(72), asciizToUnicode( _career->getName() ).c_str() ).c_str() ); }
XAsset::XAsset(const char* resourcePath) { // report progress if( Engine::instance->progressCallback ) { Engine::instance->progressCallback( wstrformat( Gui::iLanguage->getUnicodeString(4), asciizToUnicode(resourcePath).c_str() ).c_str(), 0.0f, Engine::instance->progressCallbackUserData ); } IResource* resource = getCore()->getResource( resourcePath, "rb" ); assert( resource ); // retrieve file size FILE* file = resource->getFile(); fseek( file, 0, SEEK_END ); int fileSize = ftell( file ); fseek( file, 0, SEEK_SET ); // create buffer & load file data in buffer char* buffer = new char[fileSize]; fread( buffer, 1, fileSize, file ); resource->release(); // report progress if( Engine::instance->progressCallback ) { Engine::instance->progressCallback( wstrformat( Gui::iLanguage->getUnicodeString(4), asciizToUnicode(resourcePath).c_str() ).c_str(), 0.25f, Engine::instance->progressCallbackUserData ); } // create hierarchy allocation interface XAllocateHierarchy xAlloc; // load hierarchy from file D3DXFRAME* rootFrame; ID3DXAnimationController* animController; _dxCR( D3DXLoadMeshHierarchyFromXInMemory( buffer, fileSize, D3DXMESH_MANAGED, iDirect3DDevice, &xAlloc, NULL, &rootFrame, &animController ) ); delete[] buffer; // report progress if( Engine::instance->progressCallback ) { Engine::instance->progressCallback( wstrformat( Gui::iLanguage->getUnicodeString(4), asciizToUnicode(resourcePath).c_str() ).c_str(), 0.5f, Engine::instance->progressCallbackUserData ); } // create D3 animation objects Clump* clump = new Clump( "SCENE_ROOT" ); clump->setFrame( static_cast<Frame*>( rootFrame ) ); if( animController ) { ID3DXAnimationSet* animationSet; const char* animationName; animController->GetAnimationSet( 0, &animationSet ); unsigned int numAnimations = animationSet->GetNumAnimations(); float period = float( animationSet->GetPeriod() ); float numFramesPerSecond = 100.0f/3.0f; float frameTime = 1.0f / numFramesPerSecond; unsigned int numFrames = unsigned int( period * numFramesPerSecond ); if( !numFrames ) numFrames++; AnimationSet* as = new AnimationSet( numAnimations ); for( unsigned int i=0; i<numAnimations; i++ ) { SRT srt; animationSet->GetAnimationNameByIndex( i, &animationName ); Animation* animation = new Animation( animationName, numFrames ); for( unsigned int j=0; j<numFrames; j++ ) { srt.time = j * frameTime; _dxCR( animationSet->GetSRT( srt.time, i, &srt.scale, &srt.rotation, &srt.translation ) ); animation->setKey( j, &srt ); } assert( animation->validateKeys() ); as->setAnimation( i, animation ); } clump->setAnimation( as ); animationSet->Release(); animController->Release(); } // report progress if( Engine::instance->progressCallback ) { Engine::instance->progressCallback( wstrformat( Gui::iLanguage->getUnicodeString(4), asciizToUnicode(resourcePath).c_str() ).c_str(), 0.75f, Engine::instance->progressCallbackUserData ); } // create D3 classes for hierarchy createD3HierarchyClasses( clump, rootFrame ); // resolve nameless phenomena resolveNamelessFrames( clump ); _clumps.push_back( clump ); static_cast<Frame*>( rootFrame )->dirty(); // report progress if( Engine::instance->progressCallback ) { Engine::instance->progressCallback( wstrformat( Gui::iLanguage->getUnicodeString(4), asciizToUnicode(resourcePath).c_str() ).c_str(), 1.0f, Engine::instance->progressCallbackUserData ); } }