/** ****************************************************************************** @file /common/rm/rminit.cpp @brief Inicializace/dealokace vsech RM, zaregistrovani transceiveru @author Vta @version 1.0 ******************************************************************************/ #include "common/rm/rminit.h" #ifdef WIN32 #include // mkdir #endif #ifndef WIN32 #include #include #include #include #endif using namespace rm; TRM_txt * RMtxt; // neni def. extern TRM_conf * RMconf; // neni def. extern TRM_raster * RMraster; // neni def. extern TRM_sound * RMsound; // neni def. extern TRM_symbol * RMsymbol; // neni def. extern TRM_advxml * RMunit; // neni def. extern TRM_advxml * RMbonus; // neni def. extern TRM_advxml * RMbuilding; // neni def. extern TRM_map * RMmap; // neni def. extern TRM_model * RMmodel; // neni def. extern TRM_xml * RMxml; // neni def. extern struct TMessageTransceiver Trans_rm; // muj transceiver //void*(*HANDLER)(int ,int ,void*) RVAL msgrm (MESSAGE_ID msgId,SENDER who,PARAM data) { switch (msgId) { case MSG_GET_RM_TXT_I: // pozadavek na dalsi Textovy Interface { return (new TRM_txt_i(RMtxt)); } break; case MSG_GET_RM_CONF_I: // pozadaven na dalsi Conf Interface { return (new TRM_conf_i(RMconf)); } break; case MSG_GET_RM_RASTER_I: // pozadaven na dalsi Raster Interface { return (new TRM_raster_i(RMraster)); } break; case MSG_GET_RM_SYMBOL_I: // pozadaven na dalsi Symbol Interface { return (new TRM_symbol_i(RMsymbol)); } break; case MSG_GET_RM_MODEL_I: // pozadaven na dalsi Symbol Interface { return (new TRM_model_i(RMmodel)); } break; case MSG_GET_RM_XML_I: // pozadaven na dalsi Symbol Interface { int struct_type=*((int*)(&data)); switch (struct_type) { case STRUCT_TCL: return (new TRM_xml_i(RMxml)); break; case STRUCT_TERRAIN: return (new TRM_xml_i(RMxml)); break; } } break; case MSG_GET_RM_UNIT_I: // pozadaven na dalsi Symbol Interface { return (new TRM_advxml_i(RMunit)); } break; case MSG_GET_RM_BUILDING_I: // pozadaven na dalsi Symbol Interface { return (new TRM_building_i(RMbuilding)); } break; case MSG_GET_RM_BONUS_I: // pozadaven na dalsi Symbol Interface { return (new TRM_advxml_i(RMbonus)); } break; case MSG_GET_RM_MAP_I: // pozadaven na dalsi Map Interface { return (new TRM_map_i(RMmap)); } break; case MSG_GET_RM_SOUND_I: // pozadaven na dalsi Map Interface { return (new TRM_sound_i(RMsound)); } break; } return NULL; } int RMDestroy() { KUnregisterTransceiver(RQUEUE,MOD_RM); delete(RMsound); delete(RMtxt); delete(RMraster); delete(RMsymbol); delete(RMunit); delete(RMbuilding); delete(RMbonus); delete(RMmodel); delete(RMmap); delete(RMxml); delete(RMconf); // mel by byt az posledni, neb ho vyuzivaji vsichni ostatni #ifndef _K_EDITOR_ Mix_CloseAudio(); #endif SDL_Quit(); return 0; } static char bu_path[K8_MAX_PATH_LEN]; int RMInit() { #ifdef WIN32 /* // ve windowsich toto zatim musi existovat GLOBALLOGID(PRIORITY_CREATING_DIRECTORY, "Attemp to create 8Kingdoms directory"); _mkdir(SAVEGAME_DIR); */ #else snprintf(bu_path, K8_MAX_PATH_LEN,"%s/.8Kingdoms/", getenv("HOME")); DIR *dir=opendir(bu_path); if (dir==NULL) { GLOBALLOGID(PRIORITY_CREATING_DIRECTORY, "Creating 8Kingdoms directory"); mkdir(bu_path,0755); } #endif if ( SDL_Init(0) < 0 ) { GLOBALLOGID(PRIORITY_FATAL,"Can not initialize SDL"); THROW(E_8K_RM,"Nelze inicializovat SDL"); } #ifndef _K_EDITOR_ if(Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 1024)<0) //if (Mix_OpenAudio(44100, AUDIO_S16, 2, 8096) < 0) { GLOBALLOGID(PRIORITY_FATAL,"Can not initialize SDL_Mixer"); THROW(E_8K_RM,"Nelze inicializovat SDL_Mixer"); } #endif RMconf= new TRM_conf; RMtxt = new TRM_txt(new TRM_conf_i(RMconf)); RMraster = new TRM_raster(new TRM_conf_i(RMconf)); RMsound = new TRM_sound(new TRM_conf_i(RMconf),new TRM_txt_i(RMtxt)); RMsymbol = new TRM_symbol(new TRM_conf_i(RMconf)); RMunit = new TRM_advxml(new TRM_conf_i(RMconf),RM_UNIT); RMbuilding = new TRM_advxml(new TRM_conf_i(RMconf),RM_BUILDING); RMbonus = new TRM_advxml(new TRM_conf_i(RMconf),RM_BONUS); RMmap = new TRM_map(new TRM_conf_i(RMconf)); RMmodel = new TRM_model(new TRM_conf_i(RMconf)); RMxml = new TRM_xml(new TRM_conf_i(RMconf)); // registrace MSG Transceiveru int i; Trans_rm.fnc=msgrm; Trans_rm.iActived=1; Trans_rm.PrimaryID=MOD_RM; i=KRegisterTransceiver(RQUEUE,&Trans_rm,MOD_RM); // printf("ID Transceiveru: %i\n",i); return 0; }