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


//////////////////////////////////////////////////////////////////////// 
// 
// RetroNodeTileset.cpp 
// 
// Copyright (c) 2003 Nokia Mobile Phones Ltd.  All rights reserved. 
// 
//////////////////////////////////////////////////////////////////////// 
 
#include  
#include "RenderableFactory.h" 
#include "Tilemap.h" 
#include "RetroLeafTileset.h" 
#include "RetroNodeTileset.h" 
 
//////////////////////////////////////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////// 
 
CRetroNodeTileset* CRetroNodeTileset::NewL(CRetroLeafTileset& aLeafFactory) 
	{ 
	CRetroNodeTileset* self = new(ELeave) CRetroNodeTileset(); 
	CleanupStack::PushL(self); 
	self->ConstructL(aLeafFactory); 
	CleanupStack::Pop(); 
	return self; 
	} 
 
//////////////////////////////////////////////////////////////////////// 
 
CRetroNodeTileset::CRetroNodeTileset() 
	{ 
	} 
 
//////////////////////////////////////////////////////////////////////// 
 
CRetroNodeTileset::~CRetroNodeTileset() 
	{ 
	} 
 
//////////////////////////////////////////////////////////////////////// 
 
void CRetroNodeTileset::ConstructL(CRetroLeafTileset& aLeafFactory) 
    { 
	TInt dataBuffer[16]; 
 
	TInt mapBaseData[] =  
		{ 
		4,0,4,0, 
		0,4,0,4, 
		4,0,4,0, 
		0,4,0,4, 
		}; 
	TInt mapAdjustTopLeft[] =  
		{ 
		3,3,3,2, 
		3,3,3,2, 
		2,1,2,0, 
		0,0,0,0, 
		}; 
	TInt mapAdjustTopRight[] =  
		{ 
		0,1,3,3, 
		0,1,3,3, 
		0,1,3,3, 
		0,0,1,2, 
		}; 
	TInt mapAdjustBottomLeft[] =  
		{ 
		1,2,0,0, 
		3,3,2,0, 
		3,3,2,0, 
		3,3,2,0, 
		}; 
	TInt mapAdjustBottomRight[] =  
		{ 
		0,0,0,0, 
		0,1,2,1, 
		1,3,3,3, 
		1,3,3,3, 
		}; 
 
	AllocRenderablesL(16); 
 
	iTileLogWidth = 2 + aLeafFactory.TileLogWidth(); 
	iTileLogHeight = 2 + aLeafFactory.TileLogHeight(); 
 
	for (TInt tile = 0 ; tile < 16 ; tile++ ) 
		{ 
		// Set tile to "all background": 
		CopyData(mapBaseData,dataBuffer); 
 
		// Merge in foreground corners as  
		if ((tile & KTopLeftIsForeground) != 0) 
			{ 
			MergeData(mapAdjustTopLeft,dataBuffer); 
			} 
 
		if ((tile & KBottomLeftIsForeground) != 0) 
			{ 
			MergeData(mapAdjustBottomLeft,dataBuffer); 
			} 
 
		if ((tile & KTopRightIsForeground) != 0) 
			{ 
			MergeData(mapAdjustTopRight,dataBuffer); 
			} 
 
		if ((tile & KBottomRightIsForeground) != 0) 
			{ 
			MergeData(mapAdjustBottomRight,dataBuffer); 
			} 
 
		AddRenderable(CTilemap::NewL(4,4,&dataBuffer[0],aLeafFactory)); 
		} 
	} 
 
//////////////////////////////////////////////////////////////////////// 
 
void CRetroNodeTileset::CopyData(TInt aSrc[], TInt aDest[]) 
{ 
	for (TInt cell = 0 ; cell < 16 ; cell++ ) 
		{ 
		aDest[cell] = aSrc[cell]; 
		} 
} 
 
//////////////////////////////////////////////////////////////////////// 
 
void CRetroNodeTileset::MergeData(TInt aSrc[], TInt aDest[]) 
{ 
	for (TInt cell = 0 ; cell < 16 ; cell++ ) 
		{ 
		aDest[cell] |= aSrc[cell]; 
		} 
} 
 
//////////////////////////////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////////////