2013-04-22 05:25:59 +00:00
// PlugInManager.cpp: implementation of the CPlugInManager class.
//
//////////////////////////////////////////////////////////////////////
# include "stdafx.h"
# include "io.h"
# include "Radiant.h"
# include "PlugInManager.h"
# include "PlugIn.h"
# include "DialogInfo.h"
# ifdef _DEBUG
# undef THIS_FILE
static char THIS_FILE [ ] = __FILE__ ;
# define new DEBUG_NEW
# endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPlugInManager : : CPlugInManager ( )
{
m_pTexturePlug = NULL ;
m_pSurfaceListPlug = NULL ;
}
CPlugInManager : : ~ CPlugInManager ( )
{
Cleanup ( ) ;
}
void CPlugInManager : : Init ( const char * pPath )
{
Cleanup ( ) ;
CString strPath ( pPath ) ;
strPath + = " *.dll " ;
bool bGo = true ;
struct _finddata_t fileinfo ;
int handle = _findfirst ( strPath , & fileinfo ) ;
if ( handle ! = - 1 )
{
do
{
strPath . Format ( " %s \\ %s " , pPath , fileinfo . name ) ;
CPlugIn * pPlug = new CPlugIn ( ) ;
if ( pPlug - > load ( strPath ) )
{
if ( FillFuncTable ( pPlug ) ) // PGM
{
m_PlugIns . Add ( pPlug ) ;
g_pParentWnd - > AddPlugInMenuItem ( pPlug ) ;
// if this thing handles textures
if ( pPlug - > getTextureInfo ( ) ! = NULL )
{
this - > m_pTexturePlug = pPlug ;
// if this is a wad style texture extension, have it load everything now
if ( pPlug - > getTextureInfo ( ) - > m_bWadStyle )
{
CString strPath = ValueForKey ( g_qeglobals . d_project_entity , " texturepath " ) ;
pPlug - > loadTexture ( strPath ) ;
}
}
if ( pPlug - > getSurfaceFlags ( ) ! = NULL )
{
this - > m_pSurfaceListPlug = pPlug ;
}
}
else
{
delete pPlug ; // PGM
}
}
else
{
delete pPlug ;
}
} while ( _findnext ( handle , & fileinfo ) ! = - 1 ) ;
_findclose ( handle ) ;
}
}
void CPlugInManager : : Cleanup ( )
{
int i ;
for ( i = 0 ; i < m_PlugIns . GetSize ( ) ; i + + )
{
CPlugIn * plug = reinterpret_cast < CPlugIn * > ( m_PlugIns . GetAt ( i ) ) ;
plug - > free ( ) ;
delete plug ;
}
m_PlugIns . RemoveAll ( ) ;
for ( i = 0 ; i < m_BrushHandles . GetSize ( ) ; i + + )
{
brush_t * pb = reinterpret_cast < brush_t * > ( m_BrushHandles . GetAt ( i ) ) ;
Brush_Free ( pb ) ;
}
m_BrushHandles . RemoveAll ( ) ;
}
void CPlugInManager : : Dispatch ( int n , const char * p )
{
for ( int i = 0 ; i < m_PlugIns . GetSize ( ) ; i + + )
{
CPlugIn * plug = reinterpret_cast < CPlugIn * > ( m_PlugIns . GetAt ( i ) ) ;
if ( plug - > ownsCommandID ( n ) )
{
vec3_t vMin , vMax ;
if ( selected_brushes . next = = & selected_brushes )
{
vMin [ 0 ] = vMin [ 1 ] = vMin [ 2 ] = 0 ;
VectorCopy ( vMin , vMax ) ;
}
else
{
Select_GetBounds ( vMin , vMax ) ;
}
plug - > dispatchCommand ( p , vMin , vMax , QE_SingleBrush ( true ) ) ; // PGM -- added quiet
break ;
}
}
}
void WINAPI QERApp_CreateBrush ( vec3_t vMin , vec3_t vMax )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
brush_t * pBrush = Brush_Create ( vMin , vMax , & g_qeglobals . d_texturewin . texdef ) ;
Entity_LinkBrush ( world_entity , pBrush ) ;
Brush_Build ( pBrush ) ;
Brush_AddToList ( pBrush , & active_brushes ) ;
Select_Brush ( pBrush ) ;
Sys_UpdateWindows ( W_ALL ) ;
}
LPVOID CPlugInManager : : CreateBrushHandle ( )
{
brush_t * pb = reinterpret_cast < brush_t * > ( qmalloc ( sizeof ( brush_t ) ) ) ;
m_BrushHandles . Add ( pb ) ;
return ( LPVOID ) pb ;
}
void CPlugInManager : : DeleteBrushHandle ( void * vp )
{
CPtrArray * pHandles [ 3 ] ;
pHandles [ 0 ] = & m_SelectedBrushHandles ;
pHandles [ 1 ] = & m_ActiveBrushHandles ;
pHandles [ 2 ] = & m_BrushHandles ;
for ( int j = 0 ; j < 3 ; j + + )
{
for ( int i = 0 ; i < pHandles [ j ] - > GetSize ( ) ; i + + )
{
brush_t * pb = reinterpret_cast < brush_t * > ( pHandles [ j ] - > GetAt ( i ) ) ;
if ( pb = = reinterpret_cast < brush_t * > ( vp ) )
{
if ( j = = 2 )
{
// only remove it from the list if it is work area
// this allows the selected and active list indexes to remain constant
// throughout a session (i.e. between an allocate and release)
pHandles [ j ] - > RemoveAt ( i ) ;
}
Brush_Free ( pb ) ;
Sys_MarkMapModified ( ) ; // PGM
return ;
}
}
}
}
void CPlugInManager : : CommitBrushHandleToMap ( void * vp )
{
g_bScreenUpdates = false ; //stop the madness
for ( int i = 0 ; i < m_BrushHandles . GetSize ( ) ; i + + )
{
brush_t * pb = reinterpret_cast < brush_t * > ( m_BrushHandles . GetAt ( i ) ) ;
if ( pb = = reinterpret_cast < brush_t * > ( vp ) )
{
m_BrushHandles . RemoveAt ( i ) ;
Entity_LinkBrush ( world_entity , pb ) ;
Brush_Build ( pb ) ;
Brush_AddToList ( pb , & active_brushes ) ;
Select_Brush ( pb ) ;
}
}
g_bScreenUpdates = true ; //resume the madness
Sys_UpdateWindows ( W_ALL ) ;
}
void CPlugInManager : : AddFaceToBrushHandle ( void * vp , vec3_t v1 , vec3_t v2 , vec3_t v3 )
{
brush_t * bp = FindBrushHandle ( vp ) ;
if ( bp ! = NULL )
{
face_t * f = Face_Alloc ( ) ;
f - > texdef = g_qeglobals . d_texturewin . texdef ;
f - > texdef . flags & = ~ SURF_KEEP ;
f - > texdef . contents & = ~ CONTENTS_KEEP ;
f - > next = bp - > brush_faces ;
bp - > brush_faces = f ;
VectorCopy ( v1 , f - > planepts [ 0 ] ) ;
VectorCopy ( v2 , f - > planepts [ 1 ] ) ;
VectorCopy ( v3 , f - > planepts [ 2 ] ) ;
}
}
brush_t * CPlugInManager : : FindBrushHandle ( void * vp )
{
CPtrArray * pHandles [ 3 ] ;
pHandles [ 0 ] = & m_SelectedBrushHandles ;
pHandles [ 1 ] = & m_ActiveBrushHandles ;
pHandles [ 2 ] = & m_BrushHandles ;
for ( int j = 0 ; j < 3 ; j + + )
{
for ( int i = 0 ; i < pHandles [ j ] - > GetSize ( ) ; i + + )
{
brush_t * pb = reinterpret_cast < brush_t * > ( pHandles [ j ] - > GetAt ( i ) ) ;
if ( pb = = reinterpret_cast < brush_t * > ( vp ) )
{
return pb ;
}
}
}
return NULL ;
}
LPVOID WINAPI QERApp_CreateBrushHandle ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
return g_pParentWnd - > GetPlugInMgr ( ) . CreateBrushHandle ( ) ;
}
void WINAPI QERApp_DeleteBrushHandle ( LPVOID vp )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
g_pParentWnd - > GetPlugInMgr ( ) . DeleteBrushHandle ( vp ) ;
}
void WINAPI QERApp_CommitBrushHandleToMap ( LPVOID vp )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
g_pParentWnd - > GetPlugInMgr ( ) . CommitBrushHandleToMap ( vp ) ;
}
void WINAPI QERApp_AddFace ( LPVOID vp , vec3_t v1 , vec3_t v2 , vec3_t v3 )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
g_pParentWnd - > GetPlugInMgr ( ) . AddFaceToBrushHandle ( vp , v1 , v2 , v3 ) ;
}
void WINAPI QERApp_DeleteSelection ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
Select_Delete ( ) ;
}
void WINAPI QERApp_SysMsg ( LPCSTR pMsg )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
CString str = pMsg ;
Sys_Printf ( str . GetBuffer ( 0 ) ) ;
}
void WINAPI QERApp_InfoMsg ( LPCSTR pMsg )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
ShowInfoDialog ( pMsg ) ;
}
void WINAPI QERApp_HideInfoMsg ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
HideInfoDialog ( ) ;
}
//=====
//PGM
void WINAPI QERApp_PositionView ( vec3_t v1 , vec3_t v2 )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
g_pParentWnd - > ActiveXY ( ) - > SetOrigin ( v1 ) ;
// FIXME - implement this!
Sys_UpdateWindows ( W_ALL ) ;
}
//PGM
//=====
//FIXME: this AcquirePath stuff is pretty much a mess and needs cleaned up
bool g_bPlugWait = false ;
bool g_bPlugOK = false ;
int g_nPlugCount = 0 ;
void _PlugDone ( bool b , int n )
{
g_bPlugWait = false ;
g_bPlugOK = b ;
g_nPlugCount = n ; //++timo added number of entered points
}
void WINAPI QERApp_GetPoints ( int nMax , _QERPointData * pData , LPCSTR pMsg )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
ShowInfoDialog ( pMsg ) ;
g_bPlugWait = true ;
g_bPlugOK = false ;
g_nPlugCount = 0 ; //++timo replaced by number of points
// g_nPlugCount=nMax-1;
AcquirePath ( nMax , & _PlugDone ) ;
while ( g_bPlugWait )
{
MSG msg ;
if ( : : PeekMessage ( & msg , NULL , 0 , 0 , PM_REMOVE ) )
{
TranslateMessage ( & msg ) ;
DispatchMessage ( & msg ) ;
}
}
HideInfoDialog ( ) ;
pData - > m_nCount = 0 ;
pData - > m_pVectors = NULL ;
if ( g_bPlugOK & & g_nPlugCount > 0 )
{
pData - > m_nCount = g_nPlugCount ;
pData - > m_pVectors = reinterpret_cast < vec3_t * > ( qmalloc ( g_nPlugCount * sizeof ( vec3_t ) ) ) ;
vec3_t * pOut = pData - > m_pVectors ;
for ( int i = 0 ; i < g_nPlugCount ; i + + )
{
//++timo
/*
memcpy ( pOut , & g_PathPoints [ i ] , sizeof ( vec3_t ) ) ;
pOut + = sizeof ( vec3_t ) ;
*/
// CClipPoint g_PathPoints[256];
memcpy ( pOut , & g_PathPoints [ i ] , sizeof ( vec3_t ) ) ;
pOut + + ;
}
}
}
void WINAPI QERApp_AddFaceData ( LPVOID pv , _QERFaceData * pData )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
brush_t * pBrush = g_pParentWnd - > GetPlugInMgr ( ) . FindBrushHandle ( pv ) ;
if ( pBrush ! = NULL )
{
face_t * f = Face_Alloc ( ) ;
f - > texdef = g_qeglobals . d_texturewin . texdef ;
f - > texdef . flags = pData - > m_nFlags ;
f - > texdef . contents = pData - > m_nContents ;
f - > texdef . value = pData - > m_nValue ;
f - > texdef . rotate = pData - > m_fRotate ;
f - > texdef . shift [ 0 ] = pData - > m_fShift [ 0 ] ;
f - > texdef . shift [ 1 ] = pData - > m_fShift [ 1 ] ;
f - > texdef . scale [ 0 ] = pData - > m_fScale [ 0 ] ;
f - > texdef . scale [ 1 ] = pData - > m_fScale [ 1 ] ;
strcpy ( f - > texdef . name , pData - > m_TextureName ) ;
f - > next = pBrush - > brush_faces ;
pBrush - > brush_faces = f ;
VectorCopy ( pData - > m_v1 , f - > planepts [ 0 ] ) ;
VectorCopy ( pData - > m_v2 , f - > planepts [ 1 ] ) ;
VectorCopy ( pData - > m_v3 , f - > planepts [ 2 ] ) ;
Sys_MarkMapModified ( ) ; // PGM
}
}
int WINAPI QERApp_GetFaceCount ( LPVOID pv )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
int n = 0 ;
brush_t * pBrush = g_pParentWnd - > GetPlugInMgr ( ) . FindBrushHandle ( pv ) ;
if ( pBrush ! = NULL )
{
for ( face_t * f = pBrush - > brush_faces ; f ; f = f - > next )
{
n + + ;
}
}
return n ;
}
_QERFaceData * WINAPI QERApp_GetFaceData ( LPVOID pv , int nFaceIndex )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
static _QERFaceData face ;
int n = 0 ;
brush_t * pBrush = g_pParentWnd - > GetPlugInMgr ( ) . FindBrushHandle ( pv ) ;
if ( pBrush ! = NULL )
{
for ( face_t * f = pBrush - > brush_faces ; f ; f = f - > next )
{
if ( n = = nFaceIndex )
{
face . m_nContents = f - > texdef . contents ;
face . m_nFlags = f - > texdef . flags ;
face . m_fRotate = f - > texdef . rotate ;
face . m_fScale [ 0 ] = f - > texdef . scale [ 0 ] ;
face . m_fScale [ 1 ] = f - > texdef . scale [ 1 ] ;
face . m_fShift [ 0 ] = f - > texdef . shift [ 0 ] ;
face . m_fShift [ 1 ] = f - > texdef . shift [ 1 ] ;
face . m_nValue = f - > texdef . value ;
strcpy ( face . m_TextureName , f - > texdef . name ) ;
VectorCopy ( f - > planepts [ 0 ] , face . m_v1 ) ;
VectorCopy ( f - > planepts [ 1 ] , face . m_v2 ) ;
VectorCopy ( f - > planepts [ 2 ] , face . m_v3 ) ;
return & face ;
}
n + + ;
}
}
return NULL ;
}
void WINAPI QERApp_SetFaceData ( LPVOID pv , int nFaceIndex , _QERFaceData * pData )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
int n = 0 ;
brush_t * pBrush = g_pParentWnd - > GetPlugInMgr ( ) . FindBrushHandle ( pv ) ;
if ( pBrush ! = NULL )
{
for ( face_t * f = pBrush - > brush_faces ; f ; f = f - > next )
{
if ( n = = nFaceIndex )
{
f - > texdef . flags = pData - > m_nFlags ;
f - > texdef . contents = pData - > m_nContents ;
f - > texdef . value = pData - > m_nValue ;
f - > texdef . rotate = pData - > m_fRotate ;
f - > texdef . shift [ 0 ] = pData - > m_fShift [ 0 ] ;
f - > texdef . shift [ 1 ] = pData - > m_fShift [ 1 ] ;
f - > texdef . scale [ 0 ] = pData - > m_fScale [ 0 ] ;
f - > texdef . scale [ 1 ] = pData - > m_fScale [ 1 ] ;
strcpy ( f - > texdef . name , pData - > m_TextureName ) ;
VectorCopy ( pData - > m_v1 , f - > planepts [ 0 ] ) ;
VectorCopy ( pData - > m_v2 , f - > planepts [ 1 ] ) ;
VectorCopy ( pData - > m_v3 , f - > planepts [ 2 ] ) ;
Sys_MarkMapModified ( ) ; // PGM
return ; // PGM
}
n + + ;
}
}
}
void WINAPI QERApp_DeleteFace ( LPVOID pv , int nFaceIndex )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
int n = 0 ;
brush_t * pBrush = g_pParentWnd - > GetPlugInMgr ( ) . FindBrushHandle ( pv ) ;
if ( pBrush ! = NULL )
{
face_t * pPrev = pBrush - > brush_faces ;
for ( face_t * f = pBrush - > brush_faces ; f ; f = f - > next )
{
if ( n = = nFaceIndex )
{
pPrev - > next = f - > next ;
Face_Free ( f ) ;
Sys_MarkMapModified ( ) ; // PGM
return ;
}
n + + ;
pPrev = f ;
}
}
}
//==========
//PGM
void WINAPI QERApp_BuildBrush ( LPVOID pv )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
brush_t * pBrush = g_pParentWnd - > GetPlugInMgr ( ) . FindBrushHandle ( pv ) ;
if ( pBrush ! = NULL )
{
Brush_Build ( pBrush ) ;
Sys_UpdateWindows ( W_ALL ) ;
}
}
void WINAPI QERApp_SelectBrush ( LPVOID pv )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
brush_t * pBrush = g_pParentWnd - > GetPlugInMgr ( ) . FindBrushHandle ( pv ) ;
if ( pBrush ! = NULL )
{
Select_Brush ( pBrush , false ) ;
Sys_UpdateWindows ( W_ALL ) ;
}
}
void WINAPI QERApp_DeselectBrush ( LPVOID pv )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
// FIXME - implement this!
}
void WINAPI QERApp_ResetPlugins ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
g_pParentWnd - > OnPluginsRefresh ( ) ;
}
void WINAPI QERApp_DeselectAllBrushes ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
Select_Deselect ( ) ;
Sys_UpdateWindows ( W_ALL ) ;
}
//PGM
//==========
void WINAPI QERApp_TextureBrush ( LPVOID pv , LPCSTR pName )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
brush_t * pBrush = g_pParentWnd - > GetPlugInMgr ( ) . FindBrushHandle ( pv ) ;
if ( pBrush ! = NULL )
{
for ( face_t * f = pBrush - > brush_faces ; f ; f = f - > next )
{
strcpy ( f - > texdef . name , pName ) ;
}
Sys_MarkMapModified ( ) ; // PGM
}
}
int WINAPI QERApp_SelectedBrushCount ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
int n = 0 ;
for ( brush_t * pb = selected_brushes . next ; pb ! = & selected_brushes ; pb = pb - > next )
{
n + + ;
}
return n ;
}
int WINAPI QERApp_ActiveBrushCount ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
int n = 0 ;
for ( brush_t * pb = active_brushes . next ; pb ! = & active_brushes ; pb = pb - > next )
{
n + + ;
}
return n ;
}
int WINAPI QERApp_AllocateSelectedBrushHandles ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
int n = 0 ;
for ( brush_t * pb = selected_brushes . next ; pb ! = & selected_brushes ; pb = pb - > next )
{
n + + ;
g_pParentWnd - > GetPlugInMgr ( ) . GetSelectedHandles ( ) . Add ( pb ) ;
}
return n ;
}
int WINAPI QERApp_AllocateActiveBrushHandles ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
int n = 0 ;
for ( brush_t * pb = active_brushes . next ; pb ! = & active_brushes ; pb = pb - > next )
{
n + + ;
g_pParentWnd - > GetPlugInMgr ( ) . GetActiveHandles ( ) . Add ( pb ) ;
}
return n ;
}
void WINAPI QERApp_ReleaseSelectedBrushHandles ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
g_pParentWnd - > GetPlugInMgr ( ) . GetSelectedHandles ( ) . RemoveAll ( ) ;
Sys_UpdateWindows ( W_ALL ) ;
}
void WINAPI QERApp_ReleaseActiveBrushHandles ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
g_pParentWnd - > GetPlugInMgr ( ) . GetActiveHandles ( ) . RemoveAll ( ) ;
Sys_UpdateWindows ( W_ALL ) ;
}
LPVOID WINAPI QERApp_GetActiveBrushHandle ( int nIndex )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
if ( nIndex < g_pParentWnd - > GetPlugInMgr ( ) . GetActiveHandles ( ) . GetSize ( ) )
{
return reinterpret_cast < LPVOID > ( g_pParentWnd - > GetPlugInMgr ( ) . GetActiveHandles ( ) . GetAt ( nIndex ) ) ;
}
return NULL ;
}
LPVOID WINAPI QERApp_GetSelectedBrushHandle ( int nIndex )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
if ( nIndex < g_pParentWnd - > GetPlugInMgr ( ) . GetSelectedHandles ( ) . GetSize ( ) )
{
return reinterpret_cast < LPVOID > ( g_pParentWnd - > GetPlugInMgr ( ) . GetSelectedHandles ( ) . GetAt ( nIndex ) ) ;
}
return NULL ;
}
int WINAPI QERApp_TextureCount ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
Texture_StartPos ( ) ;
int x , y ;
int n = 0 ;
while ( 1 )
{
qtexture_t * q = Texture_NextPos ( & x , & y ) ;
if ( ! q )
break ;
n + + ;
}
return n ;
}
LPCSTR WINAPI QERApp_GetTexture ( int nIndex )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
static char name [ QER_MAX_NAMELEN ] ;
Texture_StartPos ( ) ;
int x , y ;
int n = 0 ;
while ( 1 )
{
qtexture_t * q = Texture_NextPos ( & x , & y ) ;
if ( ! q )
break ;
if ( n = = nIndex )
{
strcpy ( name , q - > name ) ;
return name ;
}
n + + ;
}
return NULL ;
}
LPCSTR WINAPI QERApp_GetCurrentTexture ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
return g_qeglobals . d_texturewin . texdef . name ;
}
void WINAPI QERApp_SetCurrentTexture ( LPCSTR strName )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
texdef_t tex ;
strcpy ( tex . name , strName ) ;
Texture_SetTexture ( & tex ) ;
}
int WINAPI QERApp_GetEClassCount ( )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
int n = 0 ;
for ( eclass_t * e = eclass ; e ; e = e - > next )
{
n + + ;
}
return n ;
}
LPCSTR WINAPI QERApp_GetEClass ( int nIndex )
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState ( ) ) ;
int n = 0 ;
for ( eclass_t * e = eclass ; e ; e = e - > next )
{
if ( n = = nIndex )
{
return e - > name ;
}
}
return NULL ;
}
void WINAPI QERApp_LoadTextureRGBA ( LPVOID vp )
{
Texture_LoadFromPlugIn ( vp ) ;
}
_QERTextureInfo * CPlugInManager : : GetTextureInfo ( )
{
if ( m_pTexturePlug ! = NULL )
{
return m_pTexturePlug - > getTextureInfo ( ) ;
}
else
{
return NULL ;
}
}
LPVOID CPlugInManager : : GetSurfaceFlags ( )
{
if ( m_pSurfaceListPlug ! = NULL )
{
return m_pSurfaceListPlug - > getSurfaceFlags ( ) ;
}
else
{
return NULL ;
}
}
extern qtexture_t * g_pluginTexture ;
void CPlugInManager : : LoadTexture ( const char * pFilename )
{
g_pluginTexture = NULL ;
if ( m_pTexturePlug ! = NULL )
{
m_pTexturePlug - > loadTexture ( pFilename ) ;
}
}
int CPlugInManager : : FillFuncTable ( CPlugIn * pPlug )
{
_QERFuncTable_1 * pTable = reinterpret_cast < _QERFuncTable_1 * > ( pPlug - > getFuncTable ( ) ) ;
if ( pTable ! = NULL )
{
if ( pTable - > m_fVersion ! = QER_PLUG_VERSION )
{
Sys_Printf ( " Radiant plugin manager was built with version %.2f, Plugin %s is version %.2f \n " , QER_PLUG_VERSION , pPlug - > getVersionStr ( ) , pTable - > m_fVersion ) ;
}
if ( pTable - > m_fVersion > = QER_PLUG_VERSION_1 )
{
pTable - > m_pfnCreateBrush = & QERApp_CreateBrush ;
pTable - > m_pfnCreateBrushHandle = & QERApp_CreateBrushHandle ;
pTable - > m_pfnDeleteBrushHandle = & QERApp_DeleteBrushHandle ;
pTable - > m_pfnCommitBrushHandle = & QERApp_CommitBrushHandleToMap ;
pTable - > m_pfnAddFace = & QERApp_AddFace ;
pTable - > m_pfnAddFaceData = & QERApp_AddFaceData ;
pTable - > m_pfnGetFaceData = & QERApp_GetFaceData ;
pTable - > m_pfnGetFaceCount = & QERApp_GetFaceCount ;
pTable - > m_pfnSetFaceData = & QERApp_SetFaceData ;
pTable - > m_pfnDeleteFace = & QERApp_DeleteFace ;
pTable - > m_pfnTextureBrush = & QERApp_TextureBrush ;
pTable - > m_pfnBuildBrush = & QERApp_BuildBrush ; // PGM
pTable - > m_pfnSelectBrush = & QERApp_SelectBrush ; // PGM
pTable - > m_pfnDeselectBrush = & QERApp_DeselectBrush ; // PGM
pTable - > m_pfnDeselectAllBrushes = & QERApp_DeselectAllBrushes ; // PGM
pTable - > m_pfnDeleteSelection = & QERApp_DeleteSelection ;
pTable - > m_pfnGetPoints = & QERApp_GetPoints ;
pTable - > m_pfnSysMsg = & QERApp_SysMsg ;
pTable - > m_pfnInfoMsg = & QERApp_InfoMsg ;
pTable - > m_pfnHideInfoMsg = & QERApp_HideInfoMsg ;
pTable - > m_pfnPositionView = & QERApp_PositionView ; // PGM
pTable - > m_pfnSelectedBrushCount = & QERApp_SelectedBrushCount ;
pTable - > m_pfnAllocateSelectedBrushHandles = & QERApp_AllocateSelectedBrushHandles ;
pTable - > m_pfnReleaseSelectedBrushHandles = & QERApp_ReleaseSelectedBrushHandles ;
pTable - > m_pfnGetSelectedBrushHandle = & QERApp_GetSelectedBrushHandle ;
pTable - > m_pfnActiveBrushCount = & QERApp_ActiveBrushCount ;
pTable - > m_pfnAllocateActiveBrushHandles = & QERApp_AllocateActiveBrushHandles ;
pTable - > m_pfnReleaseActiveBrushHandles = & QERApp_ReleaseActiveBrushHandles ;
pTable - > m_pfnGetActiveBrushHandle = & QERApp_GetActiveBrushHandle ;
pTable - > m_pfnTextureCount = & QERApp_TextureCount ;
pTable - > m_pfnGetTexture = & QERApp_GetTexture ;
pTable - > m_pfnGetCurrentTexture = & QERApp_GetCurrentTexture ;
pTable - > m_pfnSetCurrentTexture = & QERApp_SetCurrentTexture ;
pTable - > m_pfnGetEClassCount = & QERApp_GetEClassCount ;
pTable - > m_pfnGetEClass = & QERApp_GetEClass ;
pTable - > m_pfnResetPlugins = & QERApp_ResetPlugins ;
}
// end of v1.00
if ( pTable - > m_fVersion > = QER_PLUG_VERSION )
{
// v1.50 starts
pTable - > m_pfnLoadTextureRGBA = & QERApp_LoadTextureRGBA ;
// end of v1.50
}
return true ;
}
else
{
Sys_Printf ( " Unable to load %s because the function tables are not the same size \n " , pPlug - > getVersionStr ( ) ) ;
}
return false ;
}