sqwarmed/sdk_src/game/missionchooser/asw_mission_chooser.cpp

171 lines
4.7 KiB
C++

#include "asw_random_missions.h"
#include "asw_mission_chooser_source_local.h"
#include "asw_system.h"
#include "asw_mission_chooser.h"
#include "asw_key_values_database.h"
#include "asw_mission_text_database.h"
#include "asw_location_grid.h"
#include "cdll_int.h"
#include "asw_spawn_selection.h"
#include "tier2/tier2_logging.h"
#include "asw_map_builder.h"
#include "ienginevgui.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
CASW_Random_Missions g_RandomMissions;
CASW_Mission_Chooser_Source_Local g_LocalMissionSource;
CASW_MissionTextDB g_MissionTextDatabase;
CASW_Location_Grid *g_pLocationGrid = NULL;
CASW_Map_Builder *g_pMapBuilder = NULL;
CASW_Spawn_Selection g_SpawnSelection;
char g_gamedir[1024];
char g_layoutsdir[1024];
IVEngineClient *engine = NULL;
IEngineVGui *enginevgui = NULL;
IFileLoggingListener *filelogginglistener = NULL;
static LoggingFileHandle_t s_TilegenLogHandle;
DECLARE_LOGGING_CHANNEL( LOG_TilegenLayoutSystem );
CASW_Location_Grid* LocationGrid()
{
if ( !g_pLocationGrid )
{
g_pLocationGrid = new CASW_Location_Grid();
}
return g_pLocationGrid;
}
IASW_Random_Missions* RandomMissions()
{
return &g_RandomMissions;
}
bool CASW_Mission_Chooser::GetCurrentTimeAndDate(int *year, int *month, int *dayOfWeek, int *day, int *hour, int *minute, int *second)
{
return ASW_System_GetCurrentTimeAndDate(year, month, dayOfWeek, day, hour, minute, second);
}
IASW_Random_Missions* CASW_Mission_Chooser::RandomMissions()
{
return ::RandomMissions();
}
IASW_Mission_Chooser_Source* CASW_Mission_Chooser::LocalMissionSource()
{
return &g_LocalMissionSource;
}
IASW_Mission_Text_Database* CASW_Mission_Chooser::MissionTextDatabase()
{
return &g_MissionTextDatabase;
}
IASW_Location_Grid* CASW_Mission_Chooser::LocationGrid()
{
return ::LocationGrid();
}
IASW_Map_Builder *CASW_Mission_Chooser::MapBuilder()
{
#ifdef PLATFORM_WINDOWS_PC
if ( !g_pMapBuilder )
{
g_pMapBuilder = new CASW_Map_Builder();
}
return g_pMapBuilder;
#else
Error("The MapBuilder is not supported on this platform!\n");
return NULL;
#endif
}
IASWSpawnSelection *CASW_Mission_Chooser::SpawnSelection()
{
return &g_SpawnSelection;
}
CASW_Spawn_Selection* SpawnSelection()
{
return &g_SpawnSelection;
}
//-----------------------------------------------------------------------------
// Connect, disconnect
//-----------------------------------------------------------------------------
bool CASW_Mission_Chooser::Connect( CreateInterfaceFn factory )
{
if ( !BaseClass::Connect( factory ) )
return false;
if( !g_pFullFileSystem )
{
Error( "Missionchooser requires the filesystem to run!\n" );
return false;
}
engine = ( IVEngineClient * )factory( VENGINE_CLIENT_INTERFACE_VERSION, NULL );
if ( !engine )
{
Msg("Failed to load engine\n");
}
enginevgui = ( IEngineVGui * )factory( VENGINE_VGUI_VERSION, NULL );
if ( !enginevgui )
{
Msg("Failed to load enginevgui\n");
}
if ( (filelogginglistener = (IFileLoggingListener *)factory(FILELOGGINGLISTENER_INTERFACE_VERSION, NULL)) == NULL )
return INIT_FAILED;
s_TilegenLogHandle = filelogginglistener->BeginLoggingToFile( "tilegen_log.txt", "w" );
filelogginglistener->AssignLogChannel( LOG_TilegenLayoutSystem, s_TilegenLogHandle );
return true;
}
void CASW_Mission_Chooser::Disconnect()
{
filelogginglistener->EndLoggingToFile( s_TilegenLogHandle );
BaseClass::Disconnect();
}
InitReturnVal_t CASW_Mission_Chooser::Init()
{
InitReturnVal_t nRetVal = BaseClass::Init();
if ( nRetVal != INIT_OK )
return nRetVal;
Q_MakeAbsolutePath( g_gamedir, sizeof( g_gamedir ), engine->GetGameDirectory() );
Q_AppendSlash( g_gamedir, sizeof( g_gamedir ) );
char tilegendir[MAX_PATH];
Q_snprintf( tilegendir, sizeof(tilegendir), "%stilegen", g_gamedir );
//g_pFullFileSystem->AddSearchPath( tilegendir, "TILEGEN", PATH_ADD_TO_HEAD );
Q_snprintf( g_layoutsdir, sizeof(g_layoutsdir), "%stilegen\\layouts", g_gamedir );
g_MissionTextDatabase.LoadKeyValuesFile( "tilegen/objective_text.txt" );
// Initialize the spawn selection.
g_SpawnSelection.Init();
return INIT_OK;
}
//-----------------------------------------------------------------------------
// Query interface
//-----------------------------------------------------------------------------
void *CASW_Mission_Chooser::QueryInterface( const char *pInterfaceName )
{
CreateInterfaceFn factory = Sys_GetFactoryThis(); // This silly construction is necessary
return factory( pInterfaceName, NULL ); // to prevent the LTCG compiler from crashing.
}
EXPOSE_SINGLE_INTERFACE( CASW_Mission_Chooser, IASW_Mission_Chooser, ASW_MISSION_CHOOSER_VERSION );