donuts.h
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:12k
源码类别:

游戏

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------------
  2. // File: Donuts.h
  3. //
  4. // Desc: Donuts 4 game.  Uses Direct3D, DirectMusic, DirectSound, DirectInput 
  5. //
  6. // Copyright (C) Microsoft Corporation. All Rights Reserved.
  7. //-----------------------------------------------------------------------------
  8. #pragma once
  9. //-----------------------------------------------------------------------------
  10. // Defines, and constants
  11. //-----------------------------------------------------------------------------
  12. // Error codes
  13. #define DONUTSERR_NODIRECT3D       0x00000001
  14. #define DONUTSERR_NOD3DDEVICE      0x00000002
  15. #define DONUTSERR_ARTLOADFAILED    0x00000003
  16. #define DONUTSERR_NOINPUT          0x00000004
  17. // States the app can be in
  18. enum APP_STATE_TYPE
  19.     APPSTATE_LOADSPLASH, 
  20.     APPSTATE_DISPLAYSPLASH, 
  21.     APPSTATE_ACTIVE, 
  22.     APPSTATE_WAITFORMUSICEND, 
  23.     APPSTATE_TRIGGERLEVELSCREEN, 
  24.     APPSTATE_BEGINLEVELSCREEN, 
  25.     APPSTATE_DISPLAYLEVELSCREEN, 
  26.     APPSTATE_BEGINACTIVESCREEN 
  27. };
  28. // Bullet types
  29. enum BULLET_TYPE
  30.     BULLET_BLASTER=0 
  31. };
  32. // Object dimensions and fixed properties
  33. #define MAX_AUDIOPATHS     12
  34. // Defines for the in-game menu
  35. #define MENU_MAIN           1
  36. #define MENU_SOUND          2
  37. #define MENU_VIDEO          3
  38. #define MENU_INPUT          4
  39. #define MENU_VIEWDEVICES    5
  40. #define MENU_CONFIGDEVICES  6
  41. #define MENU_WINDOWED       7
  42. #define MENU_640x480        8
  43. #define MENU_800x600        9
  44. #define MENU_1024x768      10
  45. #define MENU_BACK          11
  46. #define MENU_SOUNDON       12
  47. #define MENU_SOUNDOFF      13
  48. #define MENU_QUIT          14
  49. //-----------------------------------------------------------------------------
  50. // Name: C3DAudioPath
  51. // Desc: 
  52. //-----------------------------------------------------------------------------
  53. class C3DAudioPath
  54. {
  55. public:
  56.     C3DAudioPath() { m_pPath = NULL; m_pObject = NULL; m_fDistance = FLT_MAX; m_bReplaceSound = FALSE; };
  57.     ~C3DAudioPath() { SAFE_RELEASE(m_pPath); };
  58.     FLOAT                   m_fDistance;      // Distance, for comparisons
  59.     BOOL                    m_bReplaceSound;  // Set when a sound is swapped or removed from this path.
  60.     IDirectMusicAudioPath*  m_pPath;          // Audiopath 
  61.     CDisplayObject*         m_pObject;        // Object that this sonifies
  62. };
  63. //-----------------------------------------------------------------------------
  64. // Custom Direct3D vertex types
  65. //-----------------------------------------------------------------------------
  66. struct SCREENVERTEX
  67. {
  68.     D3DXVECTOR4 p;
  69.     DWORD       color;
  70.     FLOAT       tu, tv;
  71. };
  72. struct SPRITEVERTEX
  73. {
  74.     D3DXVECTOR3 p;
  75.     DWORD       color;
  76.     FLOAT       tu, tv;
  77. };
  78. struct MODELVERTEX
  79. {
  80.     D3DXVECTOR3 p;
  81.     D3DXVECTOR3 n;
  82.     FLOAT       tu, tv;
  83. };
  84. #define D3DFVF_SCREENVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1)
  85. #define D3DFVF_SPRITEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)
  86. #define D3DFVF_MODELVERTEX  (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)
  87. //-----------------------------------------------------------------------------
  88. // Inline helper functions
  89. //-----------------------------------------------------------------------------
  90. // Convenient macros for playing sounds
  91. inline VOID PlaySoundEffect( CMusicSegment* pSoundEffect, CSoundParameter* pSoundParameter )
  92. {
  93.     LONG lFrequency;
  94.     
  95.     lFrequency = pSoundParameter->lSampleRateOffset + (LONG)rnd((FLOAT)(-pSoundParameter->lSampleRateDelta),(FLOAT)(pSoundParameter->lSampleRateDelta));
  96.     if (pSoundEffect)
  97.     {   
  98.         pSoundEffect->Play( DMUS_SEGF_SECONDARY, NULL ); // TODO: update , pSoundParameter->lVolume, lFrequency );
  99.     }
  100. }
  101. class CTerrainEngine;
  102. //-----------------------------------------------------------------------------
  103. // Function prototypes
  104. //-----------------------------------------------------------------------------
  105. LRESULT CALLBACK StaticMsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
  106. struct FRECT
  107. {
  108.     float top;
  109.     float bottom;
  110.     float left;
  111.     float right;
  112. };
  113. //-----------------------------------------------------------------------------
  114. // Name: class CD3DCamera
  115. // Desc:
  116. //-----------------------------------------------------------------------------
  117. class CD3DCamera
  118. {
  119. protected:    
  120.     D3DXVECTOR3 m_vEyePt;       // Attributes for view matrix
  121.     D3DXVECTOR3 m_vLookatPt;
  122.     D3DXVECTOR3 m_vUpVec;
  123.     D3DXVECTOR3 m_vView;
  124.     D3DXVECTOR3 m_vCross;
  125.     D3DXMATRIXA16  m_matView;
  126.     D3DXMATRIXA16  m_matBillboard; // Special matrix for billboarding effects
  127.     FLOAT       m_fFOV;         // Attributes for projection matrix
  128.     FLOAT       m_fAspect;
  129.     FLOAT       m_fNearPlane;
  130.     FLOAT       m_fFarPlane;
  131.     D3DXMATRIXA16  m_matProj;
  132. public:
  133.     // Access functions
  134.     D3DXVECTOR3 GetEyePt()           { return m_vEyePt; }
  135.     D3DXVECTOR3 GetLookatPt()        { return m_vLookatPt; }
  136.     D3DXVECTOR3 GetUpVec()           { return m_vUpVec; }
  137.     D3DXVECTOR3 GetViewDir()         { return m_vView; }
  138.     D3DXVECTOR3 GetCross()           { return m_vCross; }
  139.     FLOAT       GetFOV()             { return m_fFOV; }
  140.     FLOAT       GetAspect()          { return m_fAspect; }
  141.     FLOAT       GetNearPlane()       { return m_fNearPlane; }
  142.     FLOAT       GetFarPlane()        { return m_fFarPlane; }
  143.     D3DXMATRIX  GetViewMatrix()      { return m_matView; }
  144.     D3DXMATRIX  GetBillboardMatrix() { return m_matBillboard; }
  145.     D3DXMATRIX  GetProjMatrix()      { return m_matProj; }
  146.     VOID SetViewParams( D3DXVECTOR3 &vEyePt, D3DXVECTOR3& vLookatPt,
  147.                         D3DXVECTOR3& vUpVec );
  148.     VOID SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane,
  149.                         FLOAT fFarPlane );
  150.     CD3DCamera();
  151. };
  152. //-----------------------------------------------------------------------------
  153. // Name: class CMyApplication 
  154. // Desc: Application class.
  155. //-----------------------------------------------------------------------------
  156. class CMyApplication 
  157. {
  158. public:
  159.     CMyApplication();
  160.     HRESULT Create( HINSTANCE hInstance );
  161.     INT     Run();
  162.     LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  163.     VOID    SetAppState( DWORD dwAppState ) { m_dwAppState = dwAppState; }
  164.     DWORD   GetScreenWidth() { return m_dwScreenWidth; }
  165.     DWORD   GetScreenHeight() { return m_dwScreenHeight; }
  166.     float   GetAppTime() { return m_fTime; }
  167.     CPlayerShip* GetPlayerShip() { return m_pShip; }
  168.     BOOL    IsFullScreen() { return m_bFullScreen; }
  169.     HRESULT RenderFrame();
  170.     HRESULT UpdateFarthestAudioPath();
  171.     static HRESULT FindMediaFileCch( TCHAR* strPath, const long cchPath, const TCHAR* strFile );
  172.     // Error handling
  173.     VOID             CleanupAndDisplayError( DWORD dwError, TCHAR* strArg1, TCHAR* strArg2 );
  174. protected:
  175.     HRESULT          OneTimeSceneInit( HWND hWnd );
  176.     HRESULT          UpdateScene();
  177.     VOID             FrameMove();
  178.     HRESULT          RenderScene();
  179.     VOID             FinalCleanup();
  180.     HRESULT          ReloadWorld();
  181.     // Sound functions
  182.     HRESULT          CreateSoundObjects( HWND hWnd );
  183.     VOID             DestroySoundObjects();
  184.     // Display functions
  185.     HRESULT          InitDeviceObjects( HWND hWnd );
  186.     HRESULT          RestoreDeviceObjects();
  187.     HRESULT          InvalidateDeviceObjects();
  188.     HRESULT          DeleteDeviceObjects();
  189.     HRESULT          SwitchDisplayModes( BOOL bFullScreen, DWORD dwWidth, DWORD dwHeight );
  190.     // Menu functions
  191.     VOID             ConstructMenus();
  192.     VOID             DestroyMenus();
  193.     VOID             UpdateMenus();
  194.     // Rendering functions
  195.     VOID             RenderSplash();
  196.     VOID             DarkenScene( FLOAT fAmount );
  197.     VOID             RenderFieryText( CD3DFont* pFont, TCHAR* strText );
  198.     HRESULT          RenderRadarTexture();
  199. protected:
  200.     // Misc game functions
  201.     VOID             UpdateCullInfo( CULLINFO* pCullInfo, D3DXMATRIXA16* pMatView, D3DXMATRIXA16* pMatProj );
  202.     VOID             DisplayLevelIntroScreen( DWORD dwLevel );
  203.     VOID             AdvanceLevel();
  204.     VOID             CheckForHits();
  205.     bool             IntersectRects( FRECT* pRect1, FRECT* pRect2 );
  206.     VOID             CreateEnemy( DWORD dwEnemyStyle, D3DXVECTOR3* pvPosition, float fRotateY );
  207.     HRESULT          LoadTerrainModel();
  208.     HRESULT          LoadShipModel();
  209.     HRESULT          SwitchModel();
  210. public:
  211.     DWORD                m_dwWindowStyle;
  212.     RECT                 m_rcWindowBounds;
  213.     RECT                 m_rcWindowClient;
  214.     BOOL                m_bDebugMode;
  215.     BOOL                m_bWireMode;
  216.     BOOL                m_bPaused;    
  217.     TCHAR*               m_strAppName;
  218.     HWND                 m_hWndMain;                // Main window
  219.     DWORD                m_dwScreenWidth;           // Dimensions for fullscreen modes
  220.     DWORD                m_dwScreenHeight;
  221.     D3DDISPLAYMODE       m_DesktopMode;
  222.     D3DFORMAT            m_d3dfmtFullscreen;        // Pixel format for fullscreen modes
  223.     D3DFORMAT            m_d3dfmtTexture;           // Pixel format for textures
  224.     BOOL                 m_bFullScreen;             // Whether app is fullscreen (or windowed)
  225.     BOOL                 m_bIsActive;               // Whether app is active
  226.     BOOL                 m_bDisplayReady;           // Whether display class is initialized
  227.     BOOL                 m_bMouseVisible;           // Whether mouse is visible
  228.     HBITMAP              m_hSplashBitmap;           // Bitmap for splash screen
  229.     FLOAT                m_fPhysicsSimCaryyOver;
  230.     DWORD                m_dwAppState;              // Current state the app is in
  231.     DWORD                m_dwLevel;                 // Current game level
  232.     DWORD                m_dwScore;                 // Current game score
  233.     LONG                 m_lSpeed;
  234.     int                  m_nCurTheme;
  235.     float                m_fRadarTextureX;
  236.     float                m_fRadarTextureY;
  237.     // Player view mode
  238.     CD3DCamera              m_Camera;                  // Camera used for 3D scene
  239.     CULLINFO                m_cullinfo;                // Cull info updated from camera position
  240.     // Display list and player ship
  241.     CPlayerShip*            m_pShip;                   // Player's display object
  242. C3DModel* m_pShipModel;
  243.     // DirectDraw/Direct3D objects
  244.     D3DPRESENT_PARAMETERS   m_d3dpp;
  245.     LPDIRECT3DVERTEXBUFFER9 m_pViewportVB;
  246.     LPDIRECT3DVERTEXBUFFER9 m_pRadarVB;
  247.     LPDIRECT3DVERTEXBUFFER9 m_pSpriteVB;
  248.     // Sky
  249.     CD3DMesh*               m_pSkyDome;                
  250.     // DirectMusic objects
  251.     CMusicManager*          m_pMusicManager;           // Class to manage DMusic objects
  252.     CMusicScript*           m_pMusicScript;
  253.     LPDIRECTSOUND3DLISTENER m_p3DListener;
  254.     C3DAudioPath            m_AudioPath[MAX_AUDIOPATHS];
  255.     C3DAudioPath*           m_pFarthestAudioPath;
  256.     IDirectMusicAudioPath*  m_pEnginePath;  // AudioPath to manage engine sounds.
  257.     CMusicSegment*          m_pBullet1Sound;
  258.     CMusicSegment*          m_pExplosionDonutSound;
  259.     // Game objects
  260.     LPDIRECT3DTEXTURE9      m_pUITexture;
  261.     LPDIRECT3DTEXTURE9      m_pSplashTexture;
  262.     LPDIRECT3DTEXTURE9      m_pSkyTexture;
  263.     LPDIRECT3DTEXTURE9      m_pRadarTexture;
  264.     LPDIRECT3DTEXTURE9      m_pTempRadarTexture;
  265.     CD3DFont*               m_pGameFont;               // Font for displaying score, etc.
  266.     CD3DFont*               m_pMenuFont;               // Font for displaying in-game menus
  267.     CInputManager*          m_pInputManager;
  268.     C3DDrawManager*         m_p3DDrawManager;
  269.     // Menu objects
  270.     CMenuItem*              m_pMainMenu;               // Menu class for in-game menus
  271.     CMenuItem*              m_pQuitMenu;
  272.     CMenuItem*              m_pCurrentMenu;
  273.     DWORD                   m_dwNumVerts;
  274.     FLOAT                   m_fTime;             // Current time in seconds
  275.     FLOAT                   m_fElapsedTime;      // Time elapsed since last frame
  276.     FLOAT                   m_fFPS;              // Instanteous frame rate
  277.     TCHAR                   m_strDeviceStats[90];// String to hold D3D device stats
  278. public:
  279.     TCHAR m_strProfilePath[MAX_PATH];
  280.     TCHAR m_strCurrentWorkingDir[MAX_PATH];
  281.     TCHAR m_strEffectsFiles[10][MAX_PATH];
  282.     int m_nEffectsFiles;
  283.     HRESULT FindMedia( HWND hWnd, TCHAR* strFilePath, TCHAR* strFileName );
  284.     CFileWatch* m_pFileWatch;
  285. };