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

📄 interface.cpp

📁 一个自己写的游戏引擎,用DirectX 写成
💻 CPP
字号:
//--------------------------------------------------
//  Desc: 引擎主接口
//  Author: artsylee/2007.3.12
//--------------------------------------------------

#include "../stdafx.h"
#include "Interface.h"
#include "Graphics.h"
#include "TextureManager.h"
#include "FrameManager.h"
#include "../gui/GUIManager.h"
#include "Application.h"
#include "Input.h"
#include "Font.h"
#include "Common.h"
#include "IniFile.h"

extern bool g_bMultiSample;

//---------------------------------------------------
// 系统主要接口
//---------------------------------------------------
ASINLINE  IDirect3DDevice9* __stdcall GetD3DDevice(void)	{	return g_pD3DDevice;	}
ASINLINE CTextureManager* __stdcall GetTextureManager(void)	{	return g_pTextureManager;}
ASINLINE CMessageManager* __stdcall GetMessageManager(void)	{	return g_pMessageManager;}
ASINLINE CFrameManager* __stdcall GetFrameManager(void)		{	return g_pFrameManager;	}
ASINLINE GUIManager* __stdcall GetGUIManager(void)			{	return g_pGUIManager;	}
ASINLINE CGraphics* __stdcall GetGraphics(void)				{	return g_pGraphics;		}
ASINLINE CGameApp* __stdcall GetMainApp(void)				{	return g_pGameApp;		}
ASINLINE CLog* __stdcall GetLog(void)						{	return g_pLog;			}

//---------------------------------------------------
// 状态检测
//---------------------------------------------------
ASE_DLL bool __stdcall IsSupportFSAA(void)					{	return g_bMultiSample;	}

//---------------------------------------------------
// 渲染接口
//---------------------------------------------------
ASINLINE void __stdcall Render(DWORD hTex, int x, int y, const RECT *rc, DWORD color)
{
#ifdef ASDEBUG
	if(g_pGraphics == NULL)	return;
#endif
	g_pGraphics->Render(hTex, x, y, rc, color);
}

ASINLINE void __stdcall Render(DWORD hTex, const RECT *rcdst, const RECT *rc, DWORD color)
{
#ifdef ASDEBUG
	if(g_pGraphics == NULL)	return;
#endif
	g_pGraphics->RenderSprite(hTex, rcdst, rc, color);
}

ASINLINE void __stdcall Render(DWORD hTex, int x, int y, float xScale, float yScale, 
							   const RECT *rc, DWORD color)
{
#ifdef ASDEBUG
	if(g_pGraphics == NULL)	return;
#endif
	// 暂时无Sprite版本(可能无法显示)
	g_pGraphics->Render(hTex, x, y, xScale, yScale, rc, color);
}

ASINLINE void __stdcall RenderCenter(DWORD hTex, int centerx, int centery, 
									 float xScale, float yScale, const RECT *rc /* = NULL */, 
									 DWORD color /* = 0xffffffff */)
{
}

//---------------------------------------------------
// 输出一行文字
//---------------------------------------------------
void __stdcall DrawSingleLine(int x, int y, DWORD color, bool bCenter, const char *pString, ...)
{
	char szText[256];

	va_list va;
	va_start(va, pString);
	vsprintf(szText, pString, va);
	va_end(va);

	g_Font.DrawSingleLine(x, y, color, bCenter, szText);
}

//---------------------------------------------------
// 获取标准字符串的大小
//---------------------------------------------------
RECT __stdcall GetFontRect(const char *pString)
{
	return g_Font.GetStringRect(pString);
}

//---------------------------------------------------
// 键盘鼠标输入缓冲数据
//---------------------------------------------------
ASINLINE stInputInfo __stdcall GetInputInfo(void)	
{	
	return g_stInputInfo;	
}

//---------------------------------------------------
// 键盘立即数据
//---------------------------------------------------
ASINLINE bool __stdcall IsKeyDown(int key)
{
	return g_Input.GetKeyPtr()->IsKeyDown(key);
}

//---------------------------------------------------
// 鼠标立即数据
//---------------------------------------------------
ASINLINE bool __stdcall IsMouseDown(unsigned char mouse)
{
	return g_Input.GetMousePtr()->IsKeyDown(mouse);
}

//---------------------------------------------------
// 鼠标指针偏移的立即数据
//---------------------------------------------------
ASINLINE bool __stdcall GetPointerOffset(long *x, long *y, long *z)
{
	g_Input.GetMousePtr()->GetPointerOffset(x, y, z);
	return true;
}

//---------------------------------------------------
// 纹理相关
//---------------------------------------------------
ASINLINE DWORD __stdcall LoadTexture(const char *szFilename)
{
#ifdef ASDEBUG
	if(g_pTextureManager == NULL)	return INVALID_HANDLE;
#endif
	return g_pTextureManager->LoadTexture(szFilename);
}

ASINLINE DWORD __stdcall LoadAMFTexture(const char *szFilename, DWORD index /* = 0 */)
{
#ifdef ASDEBUG
	if(g_pTextureManager == NULL)	return INVALID_HANDLE;
#endif
	return g_pTextureManager->LoadAMFTexture(szFilename, index);
}

ASINLINE void __stdcall ReleaseTexture(DWORD hHandle)
{
//#ifdef ASDEBUG
	if(g_pTextureManager == NULL)	return;
//#endif
	g_pTextureManager->ReleaseTexture(hHandle);
}

ASINLINE void __stdcall DestroyTexture(DWORD hHandle)
{
//#ifdef ASDEBUG
	if(g_pTextureManager == NULL)	return;
//#endif
	g_pTextureManager->DestroyTexture(hHandle);
}

//---------------------------------------------------
// IniFile自定义结构与D3DXVECTOR的转换
//---------------------------------------------------
ASINLINE D3DXVECTOR2 __stdcall Vec2DToD3D(const Vec2D &vec)
{
	return D3DXVECTOR2(vec.x, vec.y);
}

ASINLINE D3DXVECTOR3 __stdcall Vec3DToD3D(const Vec3D &vec)
{
	return D3DXVECTOR3(vec.x, vec.y, vec.z);
}

ASINLINE Vec2D __stdcall D3DToVec2D(const D3DXVECTOR2 &vec)
{
	return Vec2D(vec.x, vec.y);
}

ASINLINE Vec3D __stdcall D3DToVec3D(const D3DXVECTOR3 &vec)
{
	return Vec3D(vec.x, vec.y, vec.z);
}

//---------------------------------------------------
// 其它函数
//---------------------------------------------------
void __stdcall ShowMessage(const char *msg,...)
{
	va_list va;
	char szMsg[MSGLEN];

	va_start(va, msg);
	vsprintf(szMsg, msg, va);
	va_end(va);

	MessageBox(NULL, szMsg, "Message", MB_OK);
}

ASINLINE int __stdcall FloatToIntAver(float fParam)
{
	int temp = (int)fParam;
	float fRes = fParam - (float)temp;
	if(fRes >= 0.5f)
	{
		++temp;
	}
	return temp;
}

ASINLINE int __stdcall RandomInt(int min, int max)
{
	return min + rand()*(max-min)/RAND_MAX;
}

ASINLINE float __stdcall RandomFloat(float min, float max)
{
	return min + rand()*(1.0f/RAND_MAX)*(max-min);
}



⌨️ 快捷键说明

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