Files
Sun1602/Tools/WiseClient/Information/3DEngine/3DEngineWrapper.h
T
2022-10-26 12:25:11 +08:00

85 lines
2.6 KiB
C++

#pragma once
#pragma warning(push)
#pragma warning(disable : 4311)
#pragma warning(disable : 4312)
BOOST_STATIC_WARNING(0);
#define _SERVER
# include <ProgramCommon/WzDataType.h>
# include <ProgramCommon/WzHashTable.h>
# include <3DEngine/3DTerrain/3DTerrain.h>
#undef _SERVER
#pragma warning(pop)
#include "3DEngineWrapperT.h"
//////////////////////////////////////////////////////////////////////////
//
struct EngineInstances
{
public: EngineInstances() : m_hDll3DTerrain(NULL), m_pCLoadHelper(NULL), m_fnContactTerrain(NULL)
{}
~EngineInstances() {}
public: inline HINSTANCE& HANDLEofENGINE() { return m_hDll3DTerrain; }
inline CLoadHelper*& HANDLEofLOADHELPER() { return m_pCLoadHelper; }
inline FUNC_ContactTerrain& HANDLEofTERRAIN() { return m_fnContactTerrain; }
private: //
HINSTANCE m_hDll3DTerrain;
CLoadHelper* m_pCLoadHelper;
FUNC_ContactTerrain m_fnContactTerrain;
};
//////////////////////////////////////////////////////////////////////////
//
class WiseMapInfo;
class EngineInterface
{
//////////////////////////////////////////////////////////////////////////
// <TYPE DEFINITIONs>
private: struct sTERRAIN_INFO
{
DWORD REF_COUNT;
C3D_WORLD_BASE TERRAIN_HANDLE;
};
struct sTERRAIN_SHARED_INFO
{
sTERRAIN_SHARED_INFO(sTERRAIN_INFO& rINFO) : TERRAIN_INFO_REF(rINFO) {}
sTERRAIN_INFO& TERRAIN_INFO_REF;
};
private: typedef STLX_MAP<MAPCODE, sTERRAIN_INFO> TERRAIN_HASH;
typedef TERRAIN_HASH::iterator TERRAIN_HASH_IT;
typedef STLX_MAP<TERRAIN_ID_T, sTERRAIN_SHARED_INFO> TERRAIN_SHARED_MAP;
typedef TERRAIN_SHARED_MAP::iterator TERRAIN_SHARED_MAP_IT;
//////////////////////////////////////////////////////////////////////////
// <ENGINE CONTROL INTERFACEs>
// <INSTANCEs>
public: void CreateTerrain();
TERRAIN_ID_T NewTokenHandleTerrain(MAPCODE fieldCode);
void ReleaseTokenHandleTerrain(TERRAIN_ID_T tID);
// <HANDLEs>
public: C3D_WORLD_BASE GetInferfaceOfTerrain(TERRAIN_ID_T tID);
//////////////////////////////////////////////////////////////////////////
//
public: EngineInterface(EngineInstances& rINSTANCE);
~EngineInterface();
public: static EngineInterface& Instance();
public: static EngineInstances& RegisterInstance(HINSTANCE hDll3DTerrain, CLoadHelper* pCLoadHelper, FUNC_ContactTerrain fnContactTerrain);
static void ReleaseInstance();
private: EngineInstances& m_rINSTANCE;
TERRAIN_SHARED_MAP m_SHARED_TERRAIN;
TERRAIN_HASH m_TERRAIN;
TERRAIN_ID_T m_TokenIDforTerrain;
CWzArchive* m_pArchive;
};