⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 appstatenewhighscore.cpp

📁 RGA: Biowaste Game Example This C++ application demonstrates how to create a 2D mobile game for S60
💻 CPP
字号:

#include "AppStateNewHighScore.h"
#include "ExampleApplication.h"


CAppStateNewHighScore::CAppStateNewHighScore(CExampleApplication& aApp)
	: CAppState(aApp),
	  iNextState(EAppUpdateStateContinue)
	{

	}


CAppStateNewHighScore::~CAppStateNewHighScore()
	{
	if (iTextInput)
		{
		iTextInput->Stop();
		}

	// write new high score to table
	App().HighScores()->Add(iHighScoreItem, ETrue);

	if (iSymbolMatrixDrawer)
		{
		delete iSymbolMatrixDrawer;
		iSymbolMatrixDrawer = NULL;
		}
	
	// release all text input objects
	if (iSymbolMatrix)
		{
		iSymbolMatrix->Release();
		iSymbolMatrix = NULL;
		}
	
    if( iPredictive )
        {
        iPredictive->Release();
        iPredictive = NULL;
        }

    if( iInputControl )
        {
        iInputControl->Release();
        iInputControl = NULL;
        }
	
    if( iTextInput )
        {
        iTextInput->Release();
        iTextInput = NULL;
        }
	}


TInt CAppStateNewHighScore::Init()
	{
	iHighScoreItem.iScore = App().LastGameScore();
	iHighScoreItem.iName = _L("");
	
	ReturnCode ret;
	
	ret = CRuntime::CreateInstance( iTextInput );
	if ( ret == OK )
        {
        iTextInput->Attach( App().Keyboard() );
        iTextInput->SetObserver( this );
        }
    else
        {
        return App().RGAErrorToSymbianError(ret);
        }
	
	iTextInput->GetTextInputControl( iInputControl );
    if( !iInputControl )
    	{
        return KErrNotFound;
    	}

    iInputControl->GetPredictive( iPredictive );
    if( iPredictive )
    	{
        iPredictive->SetObserver( this );
    	}
    else
    	{
    	return KErrNotFound;
    	}
    
    iInputControl->GetSymbolMatrix( iSymbolMatrix );
    if( !iSymbolMatrix )
    	{
    	return KErrNotFound;
    	}

    iSymbolMatrix->SetHistory( FEATURE_ON );

    iTextInput->Start();
    iTextInputMode = iInputControl->InputMode();
    iTextInputCase = iInputControl->InputCase();
    
    const char16* tmp;
    iInputControl->SetMaximumTextLength(App().HighScores()->MaxNameLength(), tmp);
	
	return KErrNone;
	}


EAppUpdateState CAppStateNewHighScore::Update(const TReal64& /*aFrametime*/)
	{
	return iNextState;
	}


void CAppStateNewHighScore::Draw(IGraphicsContext& aContext)
	{
	aContext.Clear(0);

	TSize bbsize = App().BackBufferSize();
	TRect screen = TRect(0, 0, bbsize.iWidth, bbsize.iHeight);
	CGraphicsContext* context = App().SystemGc( App().BackBuffer() );
	
	context->UseFont(App().BigFont());
	context->SetPenColor(KRgbRed);
	
	context->DrawText(	KTextHighScoreCongrat,
						screen,
						40,
						CGraphicsContext::ECenter);
	context->DrawText(	KTextHighScoreNewScore,
						screen,
						80,
						CGraphicsContext::ECenter);
	context->DiscardFont();
	
	context->UseFont(App().NormalFont());
	context->SetPenColor(KRgbWhite);
	context->DrawText(	KTextHighScoreEnterName,
						screen,
						(bbsize.iHeight >> 1),
						CGraphicsContext::ECenter);
	context->DiscardFont();

	context->UseFont(App().SmallFont());
	context->SetPenColor(KRgbGreen);
	context->DrawText(	iHighScoreItem.iName,
						screen,
						(bbsize.iHeight >> 1) + 20,
						CGraphicsContext::ECenter);
	
	
	// draw current text input mode indicator
	TPoint pos(bbsize.iWidth - 30, 16);
	TBuf<32> msg;
	
	if (iTextInputMode == TEXT_INPUT_MODE_NUMERIC)
		{
		msg = _L("123");
		}
	else
		{
		switch (iTextInputCase)
			{
			case TEXT_INPUT_CASE_LOWER:
				msg = _L("abc");
				break;
				
			case TEXT_INPUT_CASE_UPPER:
				msg = _L("ABC");
				break;
		
			case TEXT_INPUT_CASE_LOWER_NEXT_UPPER:
				msg = _L("Abc");
				break;
			}
		}
	context->DrawText(msg, pos);
	
	if (iTextInputMode == TEXT_INPUT_MODE_PREDICTIVE)
		{
		// underline
		pos.iY += 2;
		context->DrawLine(pos, TPoint(pos.iX + 20, pos.iY));
		}
	
	/*
	switch (iTextInputMode)
		{
		case TEXT_INPUT_MODE_MULTITAPPING:
			context->DrawText(	_L("Multitapping"), pos);
			break;
			
		case TEXT_INPUT_MODE_PREDICTIVE:
			context->DrawText(	_L("Predictive"), pos);
			break;

		case TEXT_INPUT_MODE_NUMERIC:
			context->DrawText(	_L("Numeric"), pos);
			break;

		case TEXT_INPUT_MODE_PINYIN:
			context->DrawText(	_L("Pinyin"), pos);
			break;

		case TEXT_INPUT_MODE_STROKE:
			context->DrawText(	_L("Stroke"), pos);
			break;

		case TEXT_INPUT_MODE_ZHUYIN:
			context->DrawText(	_L("Zhuyin"), pos);
        	break;
		}

	pos.iX = 100;*/
	
	context->DiscardFont();
	App().ApplySystemGc();
	
	
	if (iSymbolMatrixDrawer)
		{
		TPoint position;
		position.iX = (bbsize.iWidth >> 1) -
			((iSymbolMatrixDrawer->GridSize().iWidth * iSymbolMatrix->ColumnCount()) >> 1);
		position.iY = bbsize.iHeight -
			((iSymbolMatrixDrawer->GridSize().iHeight * (iSymbolMatrix->RowCount() + 1)));
		
		iSymbolMatrixDrawer->Draw(	aContext,
									App().SmallFont(),
									position );
		}
	
	}


void CAppStateNewHighScore::KeyDown(TUint32 /*aKeyCode*/)
	{

	}





/**
 * functions from ITextInputObserver
 */
   
void CAppStateNewHighScore::TextChanged(	uint32 /*aCursorPosition*/,
											ReturnCode /*aError*/ ) NO_THROW
	{
	iHighScoreItem.iName = (TUint16*)(iTextInput->TextBuffer());
	}

void CAppStateNewHighScore::CursorPositionChanged( uint32 /*aCursorPosition*/ ) NO_THROW
	{
	
	}

void CAppStateNewHighScore::TextInputFinished() NO_THROW
	{
	// done, exit state
	iNextState = EAppUpdateStateInitMenuHighScores;
	}

void CAppStateNewHighScore::SymbolMatrixOpened() NO_THROW
	{
	iSymbolMatrixDrawer = CSymbolMatrixDrawer::NewL(iSymbolMatrix, &App());
	}

void CAppStateNewHighScore::SymbolMatrixEntrySelected( uint32 /*aEntryIndex*/,
														uint32 /*aRow*/,
														uint32 /*aColumn*/,
														const char16* /*aEntry*/ ) NO_THROW
	{
	}

void CAppStateNewHighScore::SymbolMatrixClosed() NO_THROW
	{
	if (iSymbolMatrixDrawer)
		{
		delete iSymbolMatrixDrawer;
		iSymbolMatrixDrawer = NULL;
		}
	}

void CAppStateNewHighScore::TextInputModeChanged( TextInputMode aMode ) NO_THROW
	{
	iTextInputMode = aMode;
	}

void CAppStateNewHighScore::TextInputCaseChanged( TextInputCase aCase ) NO_THROW
	{
	iTextInputCase = aCase;
	}


/**
 * functions from IPredictiveObserver
 */


void CAppStateNewHighScore::UnknownWordTypedIn() NO_THROW
	{
	
	}

void CAppStateNewHighScore::SpellKeyStatus( KeyStatus /*aStatus*/ ) NO_THROW
	{
	
	}

void CAppStateNewHighScore::PreviousKeyStatus( KeyStatus /*aStatus*/ ) NO_THROW
	{
	
	}

void CAppStateNewHighScore::SpellCalled() NO_THROW
	{
	
	}

void CAppStateNewHighScore::SpellClosed() NO_THROW
	{
	
	}

void CAppStateNewHighScore::WordUnderlined( WordUnderlineStatus /*aStatus*/,
											uint32 /*aStartPosition*/,
											uint32 /*aEndPosition*/ ) NO_THROW
	{
	
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -