home *** CD-ROM | disk | FTP | other *** search
/ Game Audio Programming / GameAudioProgramming.iso / Extras / Sensaura / SDK1.0 / data1.cab / Example_Files / DS3DDemo / Source / object3d.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-06-13  |  4.9 KB  |  182 lines

  1. /*
  2.     Company:            Sensaura
  3.     Copyright:          (C) 1999
  4.  
  5.     File Name:            object3d.h
  6.     File Description:    Header file for definition of base classes for D3DRM objects with sounds 
  7.                         attached
  8.     Author:                Adam Philp
  9.     File Version:        1.03.000
  10.     Last Update:        19-APR-00
  11.  
  12.     Target Compiler:    Microsoft Visual C++ Version 5.0
  13. */
  14.  
  15. #ifndef __object3d_h                    // Sentry, only use file if not already included
  16. #define __object3d_h
  17.  
  18. ///////////////////////    Included files ////////////////////////////////////////////////////////////
  19.  
  20. #include <d3drmwin.h>
  21. #include <dsound.h>
  22.  
  23. ///////////////////////    Forward declarations //////////////////////////////////////////////////////
  24.  
  25. class DirectXWorld;
  26.  
  27. ///////////////////////    Enumerators ///////////////////////////////////////////////////////////////
  28.  
  29. enum D3DRMCOLLISION                        // Enumerate an object's shape for collision checking 
  30. {                            
  31.     D3DRMCOLLISION_BOX, 
  32.     D3DRMCOLLISION_SPHERE
  33. };
  34.  
  35. enum D3DRMOBJECTFLAG                    // D3DRM object properties
  36. {                    
  37.     D3DRMOBJECT_MORTAL            = 0x00000001,
  38.     D3DRMOBJECT_SOUNDLOOPING    = 0x00000002,
  39.     D3DRMOBJECT_KILLWITHSOUND    = 0x00000004,
  40.     D3DRMOBJECT_DONTMOVESOUND    = 0x00000008
  41. };
  42.  
  43. /*
  44.     Class:            D3DRMObject
  45.     Description:    Abstract base class from which all 3D objects are derived.  A D3DRMObject
  46.                     represents an object in the DirectX world which you can see and/or hear.  
  47.                     It can have a 3D or stereo sound attached which is automatically moved when 
  48.                     the object is moved.
  49. */
  50.  
  51. class D3DRMObject : public D3DRMBOX 
  52. {
  53. public:                                    // Public constructor & destructor
  54.     D3DRMObject(DirectXWorld*,    
  55.                 DWORD, 
  56.                 LPDIRECT3DRMMESHBUILDER, 
  57.                 DWORD, 
  58.                 DWORD dwLifeTime = 0, 
  59.                 D3DRMCOLLISION collision = D3DRMCOLLISION_BOX);
  60.     virtual ~D3DRMObject();
  61.  
  62. public:                                    // Public member functions
  63.     bool AttachSound(LPCSTR);
  64.     void DetachSound();
  65.     virtual bool Update(D3DVALUE);    
  66.     void Kill();
  67.  
  68.     bool Collided(LPDIRECT3DRMFRAME, D3DVALUE);
  69.     DWORD GetAge() const { return m_dwAge; }
  70.     DWORD GetID() const { return m_dwId; }
  71.     LPCSTR GetSound() const { return m_pSound; }
  72.     bool IsMortal() const { return m_dwFlags & D3DRMOBJECT_MORTAL ? true : false; }
  73.     bool IsDead() const { return m_bKilled; }
  74.     bool IsAlive() const { return !IsDead(); }
  75.     bool IsSoundPlaying() const { return m_pBuffer ? true : false; }
  76.  
  77. public:                                    // Public data members
  78.     LPDIRECT3DRMFRAME2 m_pFrame;        
  79.  
  80. protected:                                // Protected member functions
  81.     virtual bool CheckCollision(const D3DVECTOR&) = 0;    
  82.     virtual D3DVALUE GetCollisionSize() const { return 0; }
  83.  
  84. protected:                                // Protected data members
  85.     DirectXWorld*    m_pWorld;
  86.     D3DRMCOLLISION    m_Collision;        // Type of object for collision detection
  87.     DWORD            m_dwLifeTime;        // Object is killed if dwAge >= dwLifeTime and object
  88.     DWORD            m_dwAge;            // is mortal.  Values in ms
  89.     DWORD            m_dwId;                // Identifier
  90.     DWORD            m_dwFlags;            // D3DRMOBJECT_XXX flags
  91.     bool            m_bKilled;            // true if object has been killed
  92.  
  93. private:                                // Private member functions
  94.     bool UpdateSound(DWORD);
  95.     bool UpdateSound3D(DWORD);
  96.     bool UpdateSound2D();
  97.  
  98. private:                                // Private data members
  99.     LPCSTR                    m_pSound;    
  100.     LPDIRECTSOUNDBUFFER        m_pBuffer;
  101.     LPDIRECTSOUND3DBUFFER    m_p3dBuffer;
  102. };
  103.  
  104. typedef D3DRMObject* LPD3DRMOBJECT;
  105.  
  106. /*
  107.     Class:            D3DRMBoxObject
  108.     Description:    Derived from D3DRMObject. Object is in shape of a box for collision
  109.                     detection purposes.
  110. */
  111.  
  112. class D3DRMBoxObject : public D3DRMObject 
  113. {
  114. public:                                    // Constructor and destructor
  115.     D3DRMBoxObject (DirectXWorld*,
  116.                     DWORD,        
  117.                     LPDIRECT3DRMMESHBUILDER,
  118.                     DWORD, DWORD);
  119.     ~D3DRMBoxObject () {};
  120.  
  121. protected:                                // Overloaded collision detection functions
  122.     virtual bool        CheckCollision (const D3DVECTOR&);
  123.     virtual D3DVALUE    GetCollisionSize () const;
  124. };
  125.  
  126. /*
  127.     Class:            D3DRMSphereObject
  128.     Description:    Derived from D3DRMObject. Object is in shape of a sphere for collision
  129.                     detection purposes.
  130. */
  131.  
  132. class D3DRMSphereObject : public D3DRMObject 
  133. {
  134. public:                                    // Constructor and destructor
  135.     D3DRMSphereObject(DirectXWorld*,
  136.                       DWORD,        
  137.                       LPDIRECT3DRMMESHBUILDER,
  138.                       DWORD, DWORD);
  139.     ~D3DRMSphereObject() {};
  140.  
  141. protected:                                // Overloaded collision detection functions
  142.     virtual bool CheckCollision(const D3DVECTOR&);
  143.     virtual D3DVALUE GetCollisionSize () const;
  144. };
  145.  
  146. /*
  147.     Class:            D3DRMObjectList
  148.     Description:    Double-linked list of 3D objects.
  149. */
  150.  
  151. struct D3DRMNODE
  152. {
  153.     D3DRMNODE*        pNext;
  154.     LPD3DRMOBJECT    pObject;
  155. };
  156.  
  157. typedef struct D3DRMNODE* LPD3DRMNODE;
  158.  
  159. class D3DRMObjectList
  160. {
  161.  
  162. public:
  163.     D3DRMObjectList();
  164.     virtual ~D3DRMObjectList();
  165.  
  166.     LPD3DRMNODE Insert(LPD3DRMOBJECT);
  167.     LPD3DRMNODE Remove(LPD3DRMNODE);
  168.  
  169.     LPD3DRMNODE InsertHead(LPD3DRMOBJECT);
  170.     LPD3DRMNODE RemoveHead();
  171.  
  172.     LPD3DRMNODE First(DWORD);
  173.     LPD3DRMNODE Last(DWORD);
  174.  
  175. public:
  176.     LPD3DRMNODE m_pHead;
  177.     LPD3DRMNODE m_pTail;
  178.     int m_nObjects;
  179. };
  180.  
  181. #endif                                    // End of sentry
  182.