📄 roidscontainer.h
字号:
/*
* ============================================================================
* Name : CRoidsContainer from RoidsContainer.h
* Part of : roids
* Created : 05/12/2001 by Twm Davies
* Description:
* Declares container control for application.
* Version :
* Copyright: Twm Davies
* ============================================================================
*/
#ifndef ROIDSCONTAINER_H
#define ROIDSCONTAINER_H
// INCLUDES
#include <coecntrl.h>
#include <coeccntx.h>
#include <eikappui.h>
#include <eikapp.h>
#include <eikdoc.h>
#include <e32std.h>
#include "MathUtils.h"
#include "WorldPoint.h"
#include "WorldObjects.h"
#include "polygon.h"
#include "CGfxTimer.h"
#include "CAsteroidPool.h"
#include <e32math.h>
// FORWARD DECLARATIONS
class CEikLabel; // for example labels
// TYPEDEF
// Hide the ugly templates
/*const TInt KMaxAsteroids = 30;
const TInt KMaxCapsules = 20;*/
typedef CObjectPool<TAsteroid,30> CAsteroidPool;
typedef TPoolIterator<TAsteroid, 30> TAsteroidIterator;
typedef CObjectPool<TCapsule,20> CCapsulePool;
typedef TPoolIterator<TCapsule, 20> TCapsuleIterator;
typedef CObjectPool<TProjectile,20> CProjectilePool;
typedef TPoolIterator<TProjectile, 20> TProjectileIterator;
/* CLASS DECLARATION
* CRoidsContainer container control class.
*
*/
class CRoidsContainer : public CCoeControl , public MGfxTimerCallBack// public MMdaImageUtilObserver
{
enum TGameKey
{
EKeyRotateLeft,
EKeyRotateRight,
EKeyThrust,
EKeyFireGun,
EKeyMaxVirtualKey
};
enum TGameState{EPlaying, EGameOver, EIntro};
TGameState iGameState;
public:
void ConstructL(const TRect& aRect);
~CRoidsContainer();
// Game control
void FocusChanged(TDrawNow aDrawNow);
void SetPaused(TBool aState);
void ResetGame();
// from CCoeControl
void SizeChanged();
TInt CountComponentControls() const;
CCoeControl* ComponentControl(TInt aIndex) const;
virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
private:
// Level and Game functions
void ResetShip();
void HandleNextLevel(TInt aLevel);
void SetRoidsMaterial(TInt aLevel);
void ResetRoids(TInt aNum);
virtual void GfxTimerFiredL(TInt /*aId*/); // World timer fired
// Drawing functions
private:
void Draw(const TRect& aRect) const;
void DrawShape(CGraphicsContext& aGc, const MPolygon& aPolygon, TRgb aColor=KRgbWhite) const;
void DrawExplosionParticle(CGraphicsContext& aGc, const TExplosionFragment& aFragment) const;
void DrawLivesAndScoreIndicator(CGraphicsContext& aGc) const;
void DrawGameOver(CGraphicsContext& aGc) const;
void DrawIntro(CGraphicsContext& aGc) const;
void DrawLevelIndicator(CGraphicsContext& aGc) const;
void DrawBackgroundStars(CWsBitmap& aBitmap) const;
void DrawAsteroids(CBitmapContext& aGc) const;
void DrawProjectiles(CBitmapContext& aGc) const;
void DrawShip(CBitmapContext& aGc) const;
void DrawFragments(CBitmapContext& aGc) const;
void DrawStarBust() const;
void DrawGame(CBitmapContext& aGc) const;
void DrawCapsule(CBitmapContext& aGc) const;
// Collision and world coord functions
void ClipObject(TWorldObject &aObject);
TBool CalculateProjectileCollisions(TAsteroid& aRoid, const TRect& aBoundingRect);
void CalculateCollisions();
void CalculateCapsuleCollisions(const TRect& aBoundingRect);
void HandleShipHitAsteroid(TAsteroid& aAsteroid);
void HandleShipHitCapsule(TCapsule& aCapsule);
// Motion update functions
void UpdateShip();
void UpdateProjectiles();
void UpdateAsteroids();
void UpdateExplosionFragments();
void UpdateShipExplosion();
void UpdateCapsules();
void SplitShip();
void SplitRoid(TAsteroid& aRoid);
// Projectiles
TBool FindFreeProjectile(TProjectile*& aProjectile);
void LaunchProjectile();
// Explosions Fragments
TBool FindFreeFragment(TExplosionFragment*& aFragment);
void CreateExplodeFragmentsFromObject(TWorldObject& aObject);
// KeyBoard Handling
void SetKeyDown(const TGameKey& aKey, const TKeyEvent& aKeyEvent);
void ClearKeyDown(const TGameKey& aKey);
TBool KeyDown(const TGameKey& aKey);
void UpdateFromKeyStates();
TBool IsKeyPressed();
// Misc
void SonicBoom();
CWsBitmap* LoadBitmapToFullScreenL(TRect aRect);
private:
enum {EMaxStars=200};
enum {KMaxAsteroids=100};
enum {KMaxProjectiles=6};
enum {KMaxExplosionFragments=100};
private:
// Drawing
CWsBitmap* iBackupBitmap;
CFbsBitmapDevice* iBitmapDevice;
CFbsBitGc* iBitmapGc;
CWsBitmap* iNebula;
// World objects
TShip iShip;
RPointerArray<TAsteroid> iAsteroids;
CCapsulePool* iCapsulePool;
CAsteroidPool* iAsteroidPool;
CProjectilePool* iProjectilePool;
TExplosionFragment iExplosionFragments[KMaxExplosionFragments];
TFixedPolygon<3> iLivesShape;
TReal iStarBurstRadius;
TBool iDrawStarbust;
TPoint iStars[EMaxStars];
// Timers and tickers
CGfxTimer* iGfxTimer;
TInt iInvinsibleTicker;
TInt iDeadTicker;
TInt iNextLevelTicker;
// Key handling
TInt iScanCodes[EKeyMaxVirtualKey];
TInt iLineWidth;
TReal iFps;
TInt iScore;
TInt iLives;
TInt iLevel;
TBool iShowBoundinBox;
};
#endif
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -