📄 cmodeltitle.cpp
字号:
/*
============================================================================
* Name : CModelTitle.cpp
* Part of : 2DMario
* Description : Implementation of CModelTitle
* Copyright (c) 2007 Nokia Corporation
============================================================================
*/
// INCLUDE FILES
#include "CModelTitle.h"
#include "CBitmap.h"
#include "CSprite.h"
#include "level0.h"
#include "MCharacter.h"
#include "CTileMap.h"
#include "CChrPlayer.h"
#include "CFont.h"
CModelTitle* CModelTitle::NewL( MSystem* aSystem )
{
CModelTitle* self = new( ELeave )CModelTitle( aSystem );
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop( self );
return self;
}
CModelTitle::~CModelTitle()
{
}
CModelTitle::CModelTitle( MSystem* aSystem )
: iSystem( aSystem )
{
}
void CModelTitle::ConstructL()
{
iAudio = EFalse;
}
void CModelTitle::ActivateL()
{
TFileName file;
file.Copy( iSystem->Path() );
file.Append( _L("title.mbm") );
iBmTitle = CBitmap::NewL( file, 0 , ETrue);
file.Copy( iSystem->Path() );
file.Append( _L("font.mbm" ) );
iBmFont = CBitmap::NewL( file, 0 );
iFont = CBmFont::NewL( iBmFont, iSystem );
iBmFont->SetMaskColor( 0 );
iCursorPos = 0;
}
void CModelTitle::Deactivate()
{
iBmTitle->Destroy();
delete iBmTitle;
iBmTitle = NULL;
iBmFont->Destroy();
delete iBmFont;
iBmFont = NULL;
delete iFont;
}
void CModelTitle::Move()
{
}
void CModelTitle::Draw( CBitmap& aTarget )
{
HandleKeys();
aTarget.Clear( TRgb( 0,0,0 ) );
TInt yCenterPos = aTarget.Size().iHeight/2;
TInt xCenterPos = aTarget.Size().iWidth/2;
// position title to center, if screen width > title bitmap width
TInt xOffset = (aTarget.Size().iWidth - iBmTitle->Size().iWidth) / 2;
if(xOffset < 0)
xOffset = 0;
iBmTitle->Draw( aTarget, TPoint( xOffset, 0 ) );
TRect cursorRect = TRect( xCenterPos-60, yCenterPos-32+(iCursorPos*20), xCenterPos+60, yCenterPos-12 +(iCursorPos*20) );
DrawRect( aTarget, cursorRect );
TBuf8<16> txt;
txt.Copy( _L( "START GAME" ) );
iFont->DrawText ( aTarget, txt, TPoint ( xCenterPos-50, yCenterPos-30 ) );
txt.Copy( _L( "HELP" ) );
iFont->DrawText ( aTarget, txt, TPoint ( xCenterPos-20, yCenterPos-10 ) );
if( iAudio )
{
txt.Copy( _L( "MUTE" ) );
iFont->DrawText ( aTarget, txt, TPoint ( xCenterPos-25, yCenterPos+10 ) );
}
else
{
txt.Copy( _L("UNMUTE") );
iFont->DrawText ( aTarget, txt, TPoint ( xCenterPos-35, yCenterPos+10 ) );
}
txt.Copy( _L( "QUIT" ) );
iFont->DrawText ( aTarget, txt, TPoint ( xCenterPos-20, yCenterPos+30 ) );
}
void CModelTitle::DrawRect( CBitmap& aTarget, TRect aRect )
{
TRgb aRgb = TRgb( 255,0,0 );
TInt divider;
TUint32 longword = 0;
switch( aTarget.Mode() )
{
case EColor4K:
{
longword = aRgb.Color4K();
longword |= longword << 16;
divider = 2;
break;
}
case EColor64K:
{
longword = aRgb.Color64K();
longword |= longword << 16;
divider = 2;
break;
}
default:
{
longword = aRgb.Color16M();
divider = 1;
break;
}
}
TUint32* p = ( TUint32* )aTarget.Data();
for( TInt x=aRect.iTl.iX; x < aRect.iBr.iX; x++ )
{
for( TInt y=aRect.iTl.iY; y < aRect.iBr.iY; y++ )
{
p[ (x + y * aTarget.Size().iWidth) / divider ] = longword;
}
}
}
void CModelTitle::HandleKeys()
{
if( iLastKey != EStdKeyUpArrow )
{
if( iSystem->KeyState( EStdKeyUpArrow ) )
{
CursorUp( EStdKeyUpArrow );
}
}
if( iLastKey != EStdKeyDownArrow )
{
if( iSystem->KeyState( EStdKeyDownArrow ) )
{
CursorDown( EStdKeyDownArrow );
}
}
if( iLastKey != iSystem->SelectKey() )
{
if( iSystem->KeyState( iSystem->SelectKey() ) )
{
Fire( iSystem->SelectKey() );
}
}
// Nokia 9300 / Nokia 9500 has two sets of navigation keys
if( iLastKey != EStdKeyDevice8 )
{
if( iSystem->KeyState( EStdKeyDevice8 ) )
{
CursorUp( EStdKeyDevice8 );
}
}
if( iLastKey != EStdKeyDevice9 )
{
if( iSystem->KeyState( EStdKeyDevice9 ) )
{
CursorDown( EStdKeyDevice9 );
}
}
if( iLastKey != iSystem->OkKey() )
{
if( iSystem->KeyState( iSystem->OkKey() ) )
{
Fire( iSystem->OkKey() );
}
}
// Reset key states if key when released
if( ( iLastKey == EStdKeyUpArrow ) &&( !iSystem->KeyState( EStdKeyUpArrow ) ) )
{
iLastKey = 0;
}
if( ( iLastKey == EStdKeyDevice8 ) &&( !iSystem->KeyState( EStdKeyDevice8 ) ) )
{
iLastKey = 0;
}
if( ( iLastKey == EStdKeyDownArrow ) && (!iSystem->KeyState( EStdKeyDownArrow ) ) )
{
iLastKey = 0;
}
if( ( iLastKey == EStdKeyDevice9 ) && (!iSystem->KeyState( EStdKeyDevice9 ) ) )
{
iLastKey = 0;
}
if( ( iLastKey == iSystem->OkKey() ) && (!iSystem->KeyState( iSystem->OkKey() ) ) )
{
iLastKey = 0;
}
if( ( iLastKey == iSystem->SelectKey() ) && (!iSystem->KeyState( iSystem->SelectKey() ) ) )
{
iLastKey = 0;
}
}
void CModelTitle::CursorUp( TInt aLastKey )
{
if( iCursorPos > 0 )
{
iCursorPos--;
}
iLastKey = aLastKey;
}
void CModelTitle::CursorDown( TInt aLastKey )
{
if ( iCursorPos < 3 )
{
iCursorPos++;
}
iLastKey = aLastKey;
}
void CModelTitle::Fire( TInt aLastKey )
{
switch ( iCursorPos )
{
case 0:
{
iSystem->ChangeModelL( EModelGame );
break;
}
case 1:
{
iSystem->ChangeModelL( EModelHelp );
break;
}
case 2:
{
iSystem->ToggleAudio();
// Toggle Audio off -> on -> off
if( iAudio )
{
iAudio = EFalse;
}
else
{
iAudio = ETrue;
}
break;
}
case 3:
{
iSystem->PrepareExit();
break;
}
}
iLastKey = aLastKey;
}
// End of file
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -