⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsengine.h

📁 连连看这个游戏都玩过吧
💻 H
📖 第 1 页 / 共 2 页
字号:
  // GsEngine.h: interface for the CGsEngine class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_GSENGINE_H__96E2A6AA_E292_4482_A719_A0CB7AE21B16__INCLUDED_)
#define AFX_GSENGINE_H__96E2A6AA_E292_4482_A719_A0CB7AE21B16__INCLUDED_

#include "GsUI.h"	// Added by ClassView
#include "GsSource.h"	// Added by ClassView
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
enum	_RENDER_STYLE
{
	RS_STRETCH	= 0,
	RS_UP_LEFT,
	RS_UP_RIGHT,
	RS_DOWN_LEFT,
	RS_DOWN_RIGHT,
	RS_CENTER,
	RS_STRETCH_CENTER
};
typedef _RENDER_STYLE RSTYLE;


struct GSLIB_API SPaintInfo
{
	DWORD		dwWidth;
	DWORD		dwHeight;
	CGsTexture*	pTexture;
	GPOINT		BasePoint;
	FLOAT		fZValue;
	FLOAT		fScaleW;
	FLOAT		fScaleH;
	FLOAT		fAlpha;
	FLOAT		fAngle;
	D3DCOLOR	cMix;
};
typedef SDxDeviceInfo PAINTINFO;
typedef SDxDeviceInfo *LPPAINTINFO;


class GSLIB_API CGsEngine  
{
	friend CDxSurface;
	friend CGsApp;
	friend CGsAppEx;
	friend CGsSound;
	friend CGsMedia;
	friend CGsUIPanel;
	friend CGsGame;

protected:
	SDxDeviceInfo*				m_pDeviceInfo;

	int							m_ID;
    BOOL						m_isActive;
	BOOL						m_isReady;
	BOOL						m_isDismiss;
	BOOL						m_isCanRenderGDI;
	BOOL						m_isChanged;
	HWND						m_fsWnd;			// 全屏模式下显示GDI窗口
	HBITMAP						m_FsWindowBMP;
    DWORD						m_dwDeviceMemType;


    LPDIRECTDRAW7				m_pDD;				// DirectDraw对象
    LPDIRECT3D7					m_pD3D;				// Direct3D对象

    BOOL						m_isFullscreen;		// Fullscreen vs. windowed
	BOOL						m_isUseZBuffer;
    BOOL						m_isStereo;			// Stereo view mode
    LPDIRECT3DDEVICE7			m_pd3dDevice;			// The D3D device
    LPDIRECTDRAWSURFACE7		m_pddsFrontBuffer;		// The primary surface
    LPDIRECTDRAWSURFACE7		m_pddsBackBuffer;		// The backbuffer surface
    LPDIRECTDRAWSURFACE7		m_pddsBackBufferLeft;	// For stereo modes
    LPDIRECTDRAWSURFACE7		m_pddsZBuffer;			// The zbuffer surface

	CGsSurface*					m_pFrontSurface;
	CGsSurface*					m_pBackSurface;
	CGsSurface*					m_pBackSurfaceLeft;
	CGsSurface*					m_pZBufferSurface;
    DWORD						m_dwRenderWidth;		// Dimensions of the render target
    DWORD						m_dwRenderHeight;
    HWND						m_hWnd;				// The window object
	HMENU						m_popupMenu, m_hMainMenu;
    GRECT						m_rcScreenRect;		// Screen rect for window
	GRECT						m_rcRenderRect;
	GRECT						m_rcSourceRect;
	BOOL						m_isPreClear;

	DDSURFACEDESC2				m_ddsdCurrentMode;				//当前的显示模式
	DWORD						m_dwRefreshRate;

    DWORD						m_dwStepTime;
    DWORD						m_dwBaseTime;
    DWORD						m_dwStopTime;
	DWORD						m_dwPausedCount;
	DWORD						m_dwLastUpdateTime;
	DWORD						m_dwLastUpdateSecondTime;
	DWORD						m_dwLastUpdateMinuteTime;

	CGsMedia*					m_ptr_video;

	CGsSource*					m_ptr_source;

	CGsGame*					m_ptr_game;



	D3DTLVERTEX					m_apPaintVertex[4];
	WORD						m_apPaintIndices[6];
	WORD						m_apRectIndices[5];


	//for sound system
	LPDIRECTSOUND8				m_pDS;
	LPDIRECTSOUND3DLISTENER		m_pDSListener;
	LONG						m_sound_volume;
	LONG						m_media_volume;

	// cache manager
	std::map<KEY, CGsTextureGroup*>		m_animation_cache;
	std::map<KEY, CGsTexture*>			m_texture_cache;
	std::vector<CGsTexture*>			m_texture_particles;
	std::map<KEY, std::set<CGsSound*> >	m_sound_cache;
	std::map<ID, CGsMedia*>				m_media_cache;

	struct _SHARE_TEX {
		CGsTexture*	pTexture;
		CGsTexture* pLastShareTo;
		DWORD		tickLastUse;
	};
	std::list<_SHARE_TEX>			m_share_texture_cache;
	std::list<CGsTexture*>			m_public_texture_cache;

	typedef	std::map<ID, CGsUIPanel*>	UI_MAP;
	UI_MAP					m_ui_map;

public:
	//创建共享纹理,pTexture是需要获得共享的对象,如果上次共享已经是pTexture,或者失败,就返回FALSE,
	BOOL CreateShareTexture(CGsTexture* pTexture, DWORD width, DWORD height, DXSF dxsf);
	//创建公有纹理,pTexture是需要获得公有的对象,如果上次共享已经是pTexture,或者失败,就返回FALSE,
	BOOL CreatePublicTexture(CGsTexture* pTexture, DWORD width, DWORD height, DXSF dxsf);
	VOID ReclaimCache();
	HRESULT SnapScreen(CGsTexture* pTexture);
	virtual CGsTexture* Register_texture();
	virtual CGsTextureGroup* Register_texture_group();
	FLOAT ValueCycle(FLOAT fStart=0.0f, FLOAT fEnd=1.0f, DWORD ref=0, LONG cyc=1000, LONG step=1);
	FLOAT ValueLoop(FLOAT fStart=0.0f, FLOAT fEnd=1.0f, DWORD ref=0, LONG cyc=1000, LONG step=1);
	VOID SetMediaVolume(LONG lVolume);
	LONG GetMediaVolume()	{return m_media_volume;}
	HRESULT RestoreEngine();
//	HFONT CreateFont(const char* strKey, LOGFONT log_font);
	CGsUIPanel* FindUIFromName(const char* strName);
	BOOL LoadConfig(CConfig& config, const char* strSource);
	VOID RePaint();
	VOID SetPlayVideo(CGsMedia* pVideo = NULL);
	CGsMedia* GetPlayVideo()		{return m_ptr_video;}
	VOID FreeTextureGroup(const char* key);
	GSFILE_INFO* FindSource(const char* key);
	CGsUIPanel* FindUIFromID( ID id );
	virtual CGsUIPanel* UI_New_Register(CGsUIPanel* pParent, KEY strUIStyle );
	VOID CleanupSoundCache();
	CGsSound* FindSound(const char* key);
	CGsTexture* FindParticle(ID idParticle);
	CGsTexture* FindTexture(const char* key);
	CGsTextureGroup* FindTextureGroup(const char* key);
	void SetActive(BOOL bActive);
	HRESULT Resize(int width=0, int height=0);
	UINT	GetMouseState()				{return m_mouse_state;}
	BOOL	TestMouseState(UINT flag)	{return m_mouse_state&flag;}
	DWORD						m_dwEngineTime;
	DWORD						m_dwPassTime;
	GPOINT						m_Pos;
	UINT						m_mouse_state;


    // Access functions for DirectX objects
    LPDIRECTDRAW7				GetDirectDraw()			{ return m_pDD; }
    LPDIRECT3D7					GetDirect3D()			{ return m_pD3D; }

    LPDIRECT3DDEVICE7			GetD3dDevice()			{ return m_pd3dDevice; }
    LPDIRECTDRAWSURFACE7		GetFrontBuffer()		{ return m_pddsFrontBuffer; }
    LPDIRECTDRAWSURFACE7		GetBackBuffer()			{ return m_pddsBackBuffer; }
	CGsSurface*					GetBackSurface()		{ return m_pBackSurface; }
	CGsSurface*					GetZBufferSurface()		{ return m_pZBufferSurface; }
    LPDIRECTDRAWSURFACE7		GetRenderSurface()		{ return m_pddsBackBuffer; }
    LPDIRECTDRAWSURFACE7		GetRenderSurfaceLeft()	{ return m_pddsBackBufferLeft; }
	INT							GetSurfaceCount()		{ return 0; }
	DWORD						GetRenderWidth()		{ return m_dwRenderWidth; }
	DWORD						GetRenderHeight()		{ return m_dwRenderHeight; }
	HWND						GetEngineWnd()			{ return m_hWnd; }

	LPDIRECTSOUND8				GetDirectSound()		{ return m_pDS; }
	LPDIRECTSOUND3DLISTENER		GetDirectSoundListener(){ return m_pDSListener; }
	LONG						GetSoundVolume()		{ return m_sound_volume; }
	VOID						SetSoundVolume(LONG lVolume);
	//LONG								{ return m_sound_volume = lVolume; }

	CGsSource*					GetSourcePtr()			{ return m_ptr_source; }
	VOID						SetSource(CGsSource* pSource)		{ m_ptr_source = pSource;}
	CGsGame*					GetGamePtr()			{ return m_ptr_game; }
	VOID						SetGame(CGsGame* pGame)		{ m_ptr_game = pGame;}



    BOOL						IsFullscreen()                  { return m_isFullscreen; }
	BOOL						IsUseZBuffer()					{ return m_isUseZBuffer; }
    BOOL						IsStereo()                      { return m_isStereo; }
	


	BOOL						IsChanged()						{ return m_isChanged && m_isActive; }
	BOOL						IsValid()						{ return !m_isDismiss; }

	BOOL						Resume();
    // Functions to aid rendering
    HRESULT						RestoreSurfaces();
	VOID						UpdateBounds();
    HRESULT						Present();
    HRESULT						FlipToGDISurface( BOOL bDrawFrame = FALSE );
	HRESULT						SetFsWindow(HWND hwnd, BOOL bStaticContent = false );
	VOID						EndFsWindow();

	// user custom operation
	HRESULT		Lock(BYTE* pDes, LONG lPitch);
	HRESULT		Unlock();

	// Function to Render
	HRESULT	Clear( DWORD dwColor )				;//{ return IsValid()? m_pBackSurface->Clear(dwColor) : E_FAIL; }
	HRESULT	RGBClear( COLORREF dwColor )		;//{ return IsValid()? m_pBackSurface->RGBClear(dwColor) : E_FAIL; }
	
	HRESULT SetRenderState(D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState);
	HRESULT SetTextureStageState( DWORD dwStage, D3DTEXTURESTAGESTATETYPE dwState, DWORD dwValue );

	VOID	PreparePaint(DWORD dwSrcBlend = D3DBLEND_SRCALPHA, DWORD dwDestBlend = D3DBLEND_INVSRCALPHA, DWORD dwColorOp = D3DTOP_MODULATE2X, DWORD dwAlphaOP = D3DTOP_MODULATE);
	HRESULT Render_DrawLine(LONG x1, LONG y1,
							LONG x2, LONG y2,
							D3DCOLOR color = D3DRGBA(1.0f,1.0f,1.0f,1.0f));
	HRESULT Render_DrawRect( GRECT*	pRect,
							BOOL	bSolid,
							D3DCOLOR color	= D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f),
							FLOAT	fZValue	= 1.0f
							);
	HRESULT Render_LightRect( GRECT*	pRect,
							  FLOAT fLight = 1.0f
							  );

	HRESULT Render_DrawRectEx( GRECT*	pRect,
							BOOL	bSolid,
							D3DCOLOR	crTopLeft		= D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f),
							D3DCOLOR	crTopRight		= D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f),
							D3DCOLOR	crBottomLeft	= D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f),
							D3DCOLOR	crBottomRight	= D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f),
							FLOAT	fZValue	= 1.0f
							);

	////基准点//比例//透明度//偏转角度//颜色增强
	HRESULT Render_Paint(int xDest, int yDest,
					  CGsTexture* pTexture,
					  FLOAT fZValue	= 1.0f,
					  FLOAT fScaleW = 1.0f,			
					  FLOAT fScaleH = 1.0f,					

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -