0001: // ----------------------------------------------------------------------------
0002: //
0003: // draw.h - Rendering
0004: //
0005: // Copyright (c) 2002 IMAGIRE Takashi (imagire@gmail.com)
0006: // All Rights Reserved.
0007: //
0008: // ----------------------------------------------------------------------------
0009: #ifndef _DRAW_H
0010: #define _DRAW_H
0011:
0012: #include <d3d8.h>
0013: #include <d3dx8.h>
0014:
0015: HRESULT InitRender(LPDIRECT3DDEVICE8 lpD3DDEV);
0016: void Render(LPDIRECT3DDEVICE8 lpD3DDEV);
0017: void CleanRender(LPDIRECT3DDEVICE8 lpD3DDEV);
0018:
0019: // ----------------------------------------------------------------------------
0020: // Management of the camera
0021: // ----------------------------------------------------------------------------
0022: class CMyView{
0023: D3DXMATRIX m_mView; // View matrix
0024: D3DXVECTOR4 m_eye; // camera position
0025: D3DXVECTOR4 m_lookAt; // camera look at
0026: D3DXVECTOR4 m_up; // up direction
0027:
0028: void Calc(){D3DXMatrixLookAtLH(&m_mView,(D3DXVECTOR3*)&m_eye,(D3DXVECTOR3*)&m_lookAt,(D3DXVECTOR3*)&m_up);}
0029: public:
0030: CMyView(){Init();}
0031: void Init(){m_eye.x = 0.0f; m_eye.y = 1.0f; m_eye.z = 2.5f; m_eye.w = 1.0f;
0032: m_lookAt.x = 0.0f; m_lookAt.y = 0.5f; m_lookAt.z = 0.0f; m_lookAt.w = 1.0f;
0033: m_up.x = 0.0f; m_up.y = 1.0f; m_up.z = 0.0f; m_up.w = 1.0f;
0034: this->Calc();}
0035: void SetEye (const D3DXVECTOR4 eye){m_eye = eye;this->Calc();}
0036: void SetLookAt(const D3DXVECTOR4 lookAt){m_lookAt=lookAt;this->Calc();}
0037: void SetUp (const D3DXVECTOR4 up){m_up = up;this->Calc();}
0038: const D3DXVECTOR4 &GetEye() const {return m_eye;}
0039: const D3DXVECTOR4 &GetLookAt() const {return m_lookAt;}
0040: const D3DXVECTOR4 &GetUp() const {return m_up;}
0041: const D3DXMATRIX &Get() const {return m_mView;}
0042: };
0043:
0044: // ----------------------------------------------------------------------------
0045: // bullet
0046: // ----------------------------------------------------------------------------
0047: #define BULLET_SPEED 5.0f
0048:
0049: class CBullet{
0050: private:
0051: BOOL bActive;
0052: D3DXVECTOR4 pos;
0053: D3DXVECTOR4 velosity;
0054: public:
0055: CBullet():bActive(FALSE){;}
0056:
0057: void Reset(){bActive=FALSE;}
0058:
0059: DWORD Create(D3DXVECTOR4 &x, D3DXVECTOR4 &v){
0060: if(bActive) return -1;
0061: bActive = TRUE;
0062: pos = x;
0063: velosity = v;
0064: velosity.w = 0;
0065: return 0;
0066: }
0067: DWORD Update(DWORD dt){
0068: if(bActive){
0069: pos += velosity*0.001f*(float)dt;
0070: pos.w=0.0f;
0071: // Dead check
0072: if(pos.x < -10.0f || 10.0f < pos.x
0073: || pos.y < - 5.0f || 15.0f < pos.y
0074: || pos.z < -10.0f || 10.0f < pos.z
0075: ){
0076: bActive = FALSE;
0077: return 1;
0078: }
0079: return 0;
0080: }
0081: return -1;
0082: }
0083: void Render(LPDIRECT3DDEVICE8 lpD3DDev, D3DXMATRIX &mVP);
0084: void Draw(LPDIRECT3DDEVICE8 lpD3DDev);
0085:
0086: // ----------------------------------------------------------------------------
0087: // Geter
0088: BOOL IsActive() const {return bActive;}
0089: D3DXVECTOR4 &GetPosition(){return pos;}
0090: D3DXVECTOR4 &GetVelosity(){return velosity;}
0091: };
0092: // ----------------------------------------------------------------------------
0093: #define BULLET_MAX 10 // The max count what we can shoot
0094: class CBulletMgr{
0095: private:
0096: CBullet bullet[BULLET_MAX];
0097: public:
0098: DWORD Add(D3DXVECTOR4 &x, D3DXVECTOR4 &v){
0099: DWORD i;
0100: for(i=0;i<BULLET_MAX;i++){
0101: if(0==bullet[i].Create(x,v)) return 0;
0102: }
0103: return -1;
0104: }
0105: void Update(DWORD dt){
0106: for(DWORD i=0;i<BULLET_MAX;i++){
0107: bullet[i].Update(dt);
0108: }
0109: }
0110: void Render(LPDIRECT3DDEVICE8 lpD3DDev, D3DXMATRIX &mVP){
0111: for(DWORD i=0;i<BULLET_MAX;i++){
0112: bullet[i].Render(lpD3DDev, mVP);
0113: }
0114: }
0115: void Reset(){
0116: for(DWORD i=0;i<BULLET_MAX;i++){
0117: bullet[i].Reset();
0118: }
0119: }
0120: DWORD GetNum()const{return BULLET_MAX;}
0121: BOOL IsActive(DWORD i) const {return bullet[i].IsActive();}
0122: D3DXVECTOR4 &GetPosition(DWORD i){return bullet[i].GetPosition();}
0123: D3DXVECTOR4 &GetVelosity(DWORD i){return bullet[i].GetVelosity();}
0124: VOID Draw(DWORD i, LPDIRECT3DDEVICE8 lpD3DDev){bullet[i].Draw(lpD3DDev);}
0125: };
0126:
0127: #endif /* !_DRAW_H */
0128: