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 ) );            
        }
    }
}
예제 #2
0
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() );
}
예제 #3
0
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
        );
    }
}