www.pudn.com > 2DGameAnimS60C_v1_0.zip > RetroAppView.cpp


//////////////////////////////////////////////////////////////////////// 
// 
// RetroAppView.cpp 
// 
// Copyright (c) 2003 Nokia Mobile Phones Ltd.  All rights reserved. 
// 
//////////////////////////////////////////////////////////////////////// 
 
#include "RetroAppView.h" 
 
#include  
 
#include "ImageFactory.h" 
#include "RetroEngine.h" 
 
// Local Constants 
_LIT (KImagesFilename,"\\System\\Apps\\RetroBlaster\\RetroBlaster.mbm"); 
 
/********************/ 
/*** Construction ***/ 
/********************/ 
 
CRetroAppView* CRetroAppView::NewL(const TRect& aRect) 
    { 
    CRetroAppView* self = CRetroAppView::NewLC(aRect); 
    CleanupStack::Pop(); 
    return self; 
    } 
 
CRetroAppView* CRetroAppView::NewLC(const TRect& aRect) 
    { 
    CRetroAppView* self = new (ELeave) CRetroAppView; 
    CleanupStack::PushL(self); 
    self->ConstructL(aRect); 
    return self; 
    } 
 
void CRetroAppView::ConstructL(const TRect& aRect) 
    { 
    // Create a window for this application view 
    CreateWindowL(); 
 
    // Set the windows size 
    SetRect(aRect); 
 
	iImageFactory = CImageFactory::NewL(*iEikonEnv, KImagesFilename);   
 
	iEngine = CRetroEngine::NewL(iEikonEnv->WsSession(), *(CCoeEnv::Static()->ScreenDevice()), Window(), iKeyHandler, *iImageFactory, Rect().Size()); 
	 
	// Activate the window, which makes it ready to be drawn 
    ActivateL(); 
 
	iEngine->StartFirstGameL(); 
    } 
 
CRetroAppView::CRetroAppView() : 
	iKeyHandler() 
    { 
    } 
 
/*******************/ 
/*** Destruction ***/ 
/*******************/ 
 
CRetroAppView::~CRetroAppView() 
    { 
	delete iImageFactory; 
	delete iEngine; 
    } 
 
/***************************************************/ 
/*** Drawing function must just clear the screen ***/ 
/***************************************************/ 
 
void CRetroAppView::Draw(const TRect& /*aRect*/) const 
    { 
    // Clear the screen 
    CWindowGc& gc = SystemGc(); 
    gc.Clear(Rect()); 
    } 
 
 
/**************************/ 
/*** Handle Key Presses ***/ 
/**************************/ 
TKeyResponse CRetroAppView::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) 
	{ 
	TKeyResponse returnKey = EKeyWasNotConsumed; 
 
	// If the app switch key is pressed we need to stop drawing 
	if(aType == EEventKey && aKeyEvent.iScanCode == EStdKeyApplication0) 
		{ 
		StopGame(); 
		// we still want the key event to be passed on so don't consume the key 
		} 
	else if(aType == EEventKeyDown) 
		{ 
		switch(aKeyEvent.iScanCode) 
			{ 
			case EStdKeyLeftArrow: 
				iKeyHandler.LeftPressed(); 
				returnKey = EKeyWasConsumed; 
				break; 
			case EStdKeyRightArrow: 
				iKeyHandler.RightPressed(); 
				returnKey = EKeyWasConsumed; 
				break; 
			case EStdKeyDevice3: 
				iKeyHandler.PressedFire(); 
				returnKey = EKeyWasConsumed; 
				break; 
		default: 
			break; 
			} 
		} 
	else if(aType == EEventKeyUp) 
		{ 
		switch(aKeyEvent.iScanCode) 
			{ 
			case EStdKeyLeftArrow: 
				iKeyHandler.NoDirection(); 
				returnKey = EKeyWasConsumed; 
				break; 
			case EStdKeyRightArrow: 
				iKeyHandler.NoDirection(); 
				returnKey = EKeyWasConsumed; 
				break; 
			case EStdKeyDevice3: 
				iKeyHandler.FireReleased(); 
				returnKey = EKeyWasConsumed; 
				break; 
		default: 
			break; 
			} 
		} 
 
	return returnKey; 
 
	} 
 
/*************************************************/ 
/*** Starting and stopping the game            ***/ 
/*** Should be used for a user requested stop  ***/ 
/*** Also used to stop drawing if app switched ***/ 
/*************************************************/  
 
void CRetroAppView::StartGameL() 
	{ 
	iEngine->StartGameL(); 
	} 
 
void CRetroAppView::StopGame() 
	{ 
	iEngine->StopGame(); 
	} 
 
/****************************************************/ 
/*** Determines whether the game has been stopped ***/ 
/****************************************************/  
TBool CRetroAppView::IsPlaying() 
	{ 
	return iEngine->Playing(); 
	}