Blame | Last modification | View Log | RSS feed
//#include "stdafx.h"#include "RenderTexture.h"#include "../Hook/MyDirect3DDevice9.h"CRenderTexture::CRenderTexture ( MyDirect3DDevice9 *device ) : CRenderObject (){m_texture = NULL;}CRenderTexture::~CRenderTexture (){if ( m_texture )m_texture->Release ();}void CRenderTexture::OpenTextureFile ( CyString filename ){D3DXCreateTextureFromFile ( m_pDevice, filename.c_str(), &m_texture );}void CRenderTexture::ParseSetting ( COverlay *overlay, CyString cmd, CyString rest, CyString section ){if ( (section == "MOUSEOVER") || (section == "ONCLICK") ){if ( cmd == "FRAME" ){SMOFrame *c = new SMOFrame;c->iFrame = rest.ToInt();AddMouseEvent ( section, c );}else if ( cmd == "ANIMATION" ){SMOAnimation *c = new SMOAnimation;c->iAnimation = rest.ToInt();AddMouseEvent ( section, c );}elseCRenderObject::ParseSetting ( overlay, cmd, rest, section );}else if ( section.Empty() ){if ( cmd == "FILE" )OpenTextureFile ( rest );elseCRenderObject::ParseSetting ( overlay, cmd, rest, section );}elseCRenderObject::ParseSetting ( overlay, cmd, rest, section );}void CRenderTexture::render ( MyDirect3DDevice9 *device, int x, int y, LPD3DXSPRITE sprite ){if ( !m_texture )return;D3DXMATRIX mat;// render top left cornerD3DXMatrixTransformation2D ( &mat, NULL, 0.0, &D3DXVECTOR2(1, 1), NULL, 0, &D3DXVECTOR2 ( (float)(x + m_iX), (float)(y + m_iY)) );sprite->SetTransform(&mat);short *c = m_iColour;LPDIRECT3DTEXTURE9 texture = m_texture;if ( m_bMouseOver ){for ( SMouseOver *mo = m_lMouseOver.First(); mo; mo = m_lMouseOver.Next() ){if ( mo->iType == MO_COLOUR )c = ((SMOColour *)mo)->iColour;else if ( mo->iType == MO_TEXTURE )texture = ((SMOTexture *)mo)->pTexture;}}D3DCOLOR color = D3DCOLOR_RGBA ( c[0], c[1], c[2], m_iAlpha );sprite->Draw ( texture, NULL, NULL, NULL, color );}bool CRenderTexture::CheckMouse ( int x, int y, int offsetx, int offsety ){if ( !m_texture )return false;int iX = offsetx + m_iX;int iY = offsety + m_iY;D3DSURFACE_DESC desc;m_texture->GetLevelDesc ( 0, &desc );if ( x < iX )return false;if ( y < iY )return false;if ( x > (iX + (long)desc.Width) )return false;if ( y > (iY + (long)desc.Height) )return false;return true;}