本文整理汇总了C++中CInifile::line_exist方法的典型用法代码示例。如果您正苦于以下问题:C++ CInifile::line_exist方法的具体用法?C++ CInifile::line_exist怎么用?C++ CInifile::line_exist使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CInifile
的用法示例。
在下文中一共展示了CInifile::line_exist方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Visual
void CPhysicObject::create_collision_model ( )
{
xr_delete( collidable.model );
VERIFY( Visual() );
IKinematics *K = Visual()->dcast_PKinematics ();
VERIFY( K );
CInifile* ini = K->LL_UserData();
if( ini && ini->section_exist( "collide" ) && ini->line_exist("collide", "mesh" ) && ini->r_bool("collide", "mesh" ) )
{
collidable.model = xr_new<CCF_DynamicMesh>( this );
return;
}
collidable.model = xr_new<CCF_Skeleton>(this);
/*
switch(m_type) {
case epotBox:
case epotFixedChain:
case epotFreeChain :
case epotSkeleton : collidable.model = xr_new<CCF_Skeleton>(this); break;
default: NODEFAULT;
}
*/
}
示例2: attach_Actor
bool CCar::attach_Actor(CGameObject* actor)
{
if(Owner()||CPHDestroyable::Destroyed()) return false;
CHolderCustom::attach_Actor(actor);
IKinematics* K = smart_cast<IKinematics*>(Visual());
CInifile* ini = K->LL_UserData();
int id;
if(ini->line_exist("car_definition","driver_place"))
id=K->LL_BoneID(ini->r_string("car_definition","driver_place"));
else
{
Owner()->setVisible(0);
id=K->LL_GetBoneRoot();
}
CBoneInstance& instance=K->LL_GetBoneInstance (u16(id));
m_sits_transforms.push_back(instance.mTransform);
OnCameraChange(ectFirst);
PPhysicsShell()->Enable();
PPhysicsShell()->add_ObjectContactCallback(ActorObstacleCallback);
// VisualUpdate();
processing_activate();
ReleaseHandBreak();
// CurrentGameUI()->UIMainIngameWnd->CarPanel().Show(true);
// CurrentGameUI()->UIMainIngameWnd->CarPanel().SetCarHealth(fEntityHealth/100.f);
//CurrentGameUI()->UIMainIngameWnd.ShowBattery(true);
//CBoneData& bone_data=K->LL_GetData(id);
//Fmatrix driver_pos_tranform;
//driver_pos_tranform.setHPB(bone_data.bind_hpb.x,bone_data.bind_hpb.y,bone_data.bind_hpb.z);
//driver_pos_tranform.c.set(bone_data.bind_translate);
//m_sits_transforms.push_back(driver_pos_tranform);
//H_SetParent(actor);
return true;
}
示例3: LoadMapInfo
void CMapListHelper::LoadMapInfo(LPCSTR map_cfg_fn, const xr_string& map_name, LPCSTR map_ver)
{
CInifile ini (map_cfg_fn);
shared_str _map_name = map_name.substr(0,map_name.find('\\')).c_str();
shared_str _map_ver = map_ver;
if(ini.section_exist("map_usage"))
{
if(ini.line_exist("map_usage","ver") && !map_ver)
_map_ver = ini.r_string("map_usage", "ver");
CInifile::Sect S = ini.r_section("map_usage");
CInifile::SectCIt si = S.Data.begin();
CInifile::SectCIt si_e = S.Data.end();
for( ;si!=si_e; ++si)
{
const shared_str& game_type = (*si).first;
if(game_type=="ver") continue;
SGameTypeMaps* M = GetMapListInt(game_type);
if(!M)
{
Msg ("--unknown game type-%s",game_type.c_str());
m_storage.resize (m_storage.size()+1);
SGameTypeMaps& Itm = m_storage.back();
Itm.m_game_type_name = game_type;
Itm.m_game_type_id = ParseStringToGameType(game_type.c_str());
M = &m_storage.back();
}
SGameTypeMaps::SMapItm Itm;
Itm.map_name = _map_name;
Itm.map_ver = _map_ver;
if(M->m_map_names.end()!=std::find(M->m_map_names.begin(),M->m_map_names.end(),Itm))
{
Msg("! duplicate map found [%s] [%s]", _map_name.c_str(), _map_ver.c_str());
}else
{
#ifndef MASTER_GOLD
Msg("added map [%s] [%s]", _map_name.c_str(), _map_ver.c_str());
#endif // #ifndef MASTER_GOLD
M->m_map_names.push_back (Itm);
}
}
}
}
示例4:
void CUICustomMap::Init (shared_str name, CInifile& gameLtx, LPCSTR sh_name)
{
m_name = name;
LPCSTR tex;
Fvector4 tmp;
if( gameLtx.line_exist(m_name,"texture") ){
tex = gameLtx.r_string(m_name,"texture");
tmp = gameLtx.r_fvector4(m_name,"bound_rect");
}else{
tex = "ui\\ui_nomap2";
tmp.set(-10000.0f,-10000.0f,10000.0f,10000.0f);
}
m_BoundRect.set (tmp.x, tmp.y, tmp.z, tmp.w);
CUIStatic::InitEx (tex, sh_name, 0, 0, m_BoundRect.width(), m_BoundRect.height() );
SetStretchTexture (true);
ClipperOn ();
}
示例5: movement
BOOL CAI_Stalker::net_Spawn (CSE_Abstract* DC)
{
#ifdef DEBUG_MEMORY_MANAGER
u32 start = 0;
if (g_bMEMO)
start = Memory.mem_usage();
#endif // DEBUG_MEMORY_MANAGER
CSE_Abstract *e = (CSE_Abstract*)(DC);
CSE_ALifeHumanStalker *tpHuman = smart_cast<CSE_ALifeHumanStalker*>(e);
R_ASSERT (tpHuman);
m_group_behaviour = !!tpHuman->m_flags.test(CSE_ALifeObject::flGroupBehaviour);
if (!CObjectHandler::net_Spawn(DC) || !inherited::net_Spawn(DC))
return (FALSE);
set_money (tpHuman->m_dwMoney, false);
#ifdef DEBUG_MEMORY_MANAGER
u32 _start = 0;
if (g_bMEMO)
_start = Memory.mem_usage();
#endif // DEBUG_MEMORY_MANAGER
animation().reload ();
#ifdef DEBUG_MEMORY_MANAGER
if (g_bMEMO)
Msg ("CStalkerAnimationManager::reload() : %d",Memory.mem_usage() - _start);
#endif // DEBUG_MEMORY_MANAGER
movement().m_head.current.yaw = movement().m_head.target.yaw = movement().m_body.current.yaw = movement().m_body.target.yaw = angle_normalize_signed(-tpHuman->o_torso.yaw);
movement().m_body.current.pitch = movement().m_body.target.pitch = 0;
if (ai().game_graph().valid_vertex_id(tpHuman->m_tGraphID))
ai_location().game_vertex (tpHuman->m_tGraphID);
if (ai().game_graph().valid_vertex_id(tpHuman->m_tNextGraphID) && movement().restrictions().accessible(ai().game_graph().vertex(tpHuman->m_tNextGraphID)->level_point()))
movement().set_game_dest_vertex (tpHuman->m_tNextGraphID);
R_ASSERT2 (
ai().get_game_graph() &&
ai().get_level_graph() &&
ai().get_cross_table() &&
(ai().level_graph().level_id() != u32(-1)),
"There is no AI-Map, level graph, cross table, or graph is not compiled into the game graph!"
);
setEnabled (TRUE);
if (!Level().CurrentViewEntity())
Level().SetEntity(this);
if (!g_Alive())
sound().set_sound_mask(u32(eStalkerSoundMaskDie));
//загрузить иммунитеты из модельки сталкера
IKinematics* pKinematics = smart_cast<IKinematics*>(Visual()); VERIFY(pKinematics);
CInifile* ini = pKinematics->LL_UserData();
if(ini)
{
if(ini->section_exist("immunities"))
{
LPCSTR imm_sect = ini->r_string("immunities", "immunities_sect");
conditions().LoadImmunities(imm_sect,pSettings);
}
if(ini->line_exist("bone_protection","bones_protection_sect")){
m_boneHitProtection = new SBoneProtections();
m_boneHitProtection->reload (ini->r_string("bone_protection","bones_protection_sect"), pKinematics );
}
}
//вычислить иммунета в зависимости от ранга
static float novice_rank_immunity = pSettings->r_float("ranks_properties", "immunities_novice_k");
static float expirienced_rank_immunity = pSettings->r_float("ranks_properties", "immunities_experienced_k");
static float novice_rank_visibility = pSettings->r_float("ranks_properties", "visibility_novice_k");
static float expirienced_rank_visibility = pSettings->r_float("ranks_properties", "visibility_experienced_k");
static float novice_rank_dispersion = pSettings->r_float("ranks_properties", "dispersion_novice_k");
static float expirienced_rank_dispersion = pSettings->r_float("ranks_properties", "dispersion_experienced_k");
CHARACTER_RANK_VALUE rank = Rank();
clamp(rank, 0, 100);
float rank_k = float(rank)/100.f;
m_fRankImmunity = novice_rank_immunity + (expirienced_rank_immunity - novice_rank_immunity) * rank_k;
m_fRankVisibility = novice_rank_visibility + (expirienced_rank_visibility - novice_rank_visibility) * rank_k;
m_fRankDisperison = expirienced_rank_dispersion + (expirienced_rank_dispersion - novice_rank_dispersion) * (1-rank_k);
if (!fis_zero(SpecificCharacter().panic_threshold()))
m_panic_threshold = SpecificCharacter().panic_threshold();
sight().setup (CSightAction(SightManager::eSightTypeCurrentDirection));
#ifdef _DEBUG
if (ai().get_alife() && !Level().MapManager().HasMapLocation("debug_stalker",ID())) {
CMapLocation *map_location =
//.........这里部分代码省略.........
示例6: strstr
void CGameFont::Initialize (LPCSTR cShader, LPCSTR cTextureName)
{
string_path cTexture;
LPCSTR _lang = pSettings->r_string("string_table", "font_prefix");
bool is_di = strstr(cTextureName, "ui_font_hud_01") ||
strstr(cTextureName, "ui_font_hud_02") ||
strstr(cTextureName, "ui_font_console_02");
if(_lang && !is_di)
strconcat (sizeof(cTexture),cTexture, cTextureName, _lang);
else
strcpy_s (cTexture, sizeof(cTexture), cTextureName);
uFlags &=~fsValid;
vTS.set (1.f,1.f); // обязательно !!!
eCurrentAlignment = alLeft;
vInterval.set (1.f,1.f);
strings.reserve (128);
// check ini exist
string_path fn,buf;
strcpy_s (buf,cTexture); if (strext(buf)) *strext(buf)=0;
R_ASSERT2 (FS.exist(fn,"$game_textures$",buf,".ini"),fn);
CInifile* ini = CInifile::Create(fn);
nNumChars = 0x100;
TCMap = ( Fvector* ) xr_realloc( ( void* ) TCMap , nNumChars * sizeof( Fvector ) );
if ( ini->section_exist( "mb_symbol_coords" ) ) {
nNumChars = 0x10000;
TCMap = ( Fvector* ) xr_realloc( ( void* ) TCMap , nNumChars * sizeof( Fvector ) );
uFlags |= fsMultibyte;
fHeight = ini->r_float( "mb_symbol_coords" , "height" );
fXStep = ceil( fHeight / 2.0f );
// Searching for the first valid character
Fvector vFirstValid = {0,0,0};
if ( ini->line_exist( "mb_symbol_coords" , "09608" ) ) {
Fvector v = ini->r_fvector3( "mb_symbol_coords" , "09608" );
vFirstValid.set( v.x , v.y , 1 + v[2] - v[0] );
} else
for ( u32 i=0 ; i < nNumChars ; i++ ) {
sprintf_s( buf ,sizeof(buf), "%05d" , i );
if ( ini->line_exist( "mb_symbol_coords" , buf ) ) {
Fvector v = ini->r_fvector3( "mb_symbol_coords" , buf );
vFirstValid.set( v.x , v.y , 1 + v[2] - v[0] );
break;
}
}
// Filling entire character table
for ( u32 i=0 ; i < nNumChars ; i++ ) {
sprintf_s( buf ,sizeof(buf), "%05d" , i );
if ( ini->line_exist( "mb_symbol_coords" , buf ) ) {
Fvector v = ini->r_fvector3( "mb_symbol_coords" , buf );
TCMap[i].set( v.x , v.y , 1 + v[2] - v[0] );
} else
TCMap[i] = vFirstValid; // "unassigned" unprintable characters
}
// Special case for space
TCMap[ 0x0020 ].set( 0 , 0 , 0 );
// Special case for ideographic space
TCMap[ 0x3000 ].set( 0 , 0 , 0 );
}else
if (ini->section_exist("symbol_coords"))
{
float d = 0.0f;
//. if(ini->section_exist("width_correction"))
//. d = ini->r_float("width_correction", "value");
fHeight = ini->r_float("symbol_coords","height");
for (u32 i=0; i<nNumChars; i++){
sprintf_s (buf,sizeof(buf),"%03d",i);
Fvector v = ini->r_fvector3("symbol_coords",buf);
TCMap[i].set (v.x,v.y,v[2]-v[0]+d);
}
}else{
if (ini->section_exist("char widths")){
fHeight = ini->r_float("char widths","height");
int cpl = 16;
for (u32 i=0; i<nNumChars; i++){
sprintf_s (buf,sizeof(buf),"%d",i);
float w = ini->r_float("char widths",buf);
TCMap[i].set ((i%cpl)*fHeight,(i/cpl)*fHeight,w);
}
}else{
R_ASSERT(ini->section_exist("font_size"));
fHeight = ini->r_float("font_size","height");
float width = ini->r_float("font_size","width");
const int cpl = ini->r_s32 ("font_size","cpl");
for (u32 i=0; i<nNumChars; i++)
//.........这里部分代码省略.........
示例7: ProcessLTX
void xrCompressor::ProcessLTX(CInifile& ltx)
{
config_ltx =<x;
if (ltx.line_exist("options","exclude_exts"))
_SequenceToList(exclude_exts, ltx.r_string("options","exclude_exts"));
files_list = xr_new< xr_vector<char*> >();
folders_list = xr_new< xr_vector<char*> >();
if(ltx.section_exist("include_folders"))
{
CInifile::Sect& if_sect = ltx.r_section("include_folders");
for (CInifile::SectCIt if_it=if_sect.Data.begin(); if_it!=if_sect.Data.end(); ++if_it)
{
BOOL ifRecurse = CInifile::IsBOOL(if_it->second.c_str());
u32 folder_mask = FS_ListFolders | (ifRecurse?0:FS_RootOnly);
string_path path;
LPCSTR _path = 0==xr_strcmp(if_it->first.c_str(),".\\")?"":if_it->first.c_str();
xr_strcpy (path,_path);
u32 path_len = xr_strlen(path);
if ((0!=path_len)&&(path[path_len-1]!='\\')) xr_strcat(path,"\\");
Msg ("");
Msg ("Processing folder: '%s'",path);
BOOL efRecurse;
BOOL val = IsFolderAccepted(ltx,path,efRecurse);
if (val || (!val&&!efRecurse))
{
if (val)
GatherFiles (path);
xr_vector<char*>* i_fl_list = FS.file_list_open ("$target_folder$",path,folder_mask);
if (!i_fl_list)
{
Msg ("ERROR: Unable to open folder list:", path);
continue;
}
xr_vector<char*>::iterator it = i_fl_list->begin();
xr_vector<char*>::iterator itE = i_fl_list->end();
for (;it!=itE;++it)
{
xr_string tmp_path = xr_string(path)+xr_string(*it);
bool val = IsFolderAccepted(ltx,tmp_path.c_str(),efRecurse);
if (val)
{
folders_list->push_back(xr_strdup(tmp_path.c_str()));
Msg ("+F: %s",tmp_path.c_str());
// collect files
if (ifRecurse)
GatherFiles (tmp_path.c_str());
}else
{
Msg ("-F: %s",tmp_path.c_str());
}
}
FS.file_list_close (i_fl_list);
}else
{
Msg ("-F: %s",path);
}
}
}//if(ltx.section_exist("include_folders"))
if(ltx.section_exist("include_files"))
{
CInifile::Sect& if_sect = ltx.r_section("include_files");
for (CInifile::SectCIt if_it=if_sect.Data.begin(); if_it!=if_sect.Data.end(); ++if_it)
{
files_list->push_back (xr_strdup(if_it->first.c_str()));
}
}
PerformWork ();
// free
xr_vector<char*>::iterator it = files_list->begin();
xr_vector<char*>::iterator itE = files_list->end();
for (;it!=itE;++it)
xr_free(*it);
xr_delete(files_list);
it = folders_list->begin();
itE = folders_list->end();
for (;it!=itE;++it)
xr_free(*it);
xr_delete(folders_list);
exclude_exts.clear_and_free();
}
示例8: get_section_diff
LPCSTR configs_verifyer::get_section_diff(CInifile::Sect* sect_ptr, CInifile & active_params, string256 & dst_diff)
{
LPCSTR diff_str = NULL;
bool tmp_active_param = false;
if (!strncmp(sect_ptr->Name.c_str(), "ap_", 3))
{
tmp_active_param = true;
}
for (CInifile::SectCIt cit = sect_ptr->Data.begin(),
ciet = sect_ptr->Data.end(); cit != ciet; ++cit)
{
shared_str const & tmp_value = cit->second;
shared_str real_value;
if (tmp_active_param)
{
if (active_params.line_exist(sect_ptr->Name.c_str(), cit->first))
{
real_value = active_params.r_string(sect_ptr->Name.c_str(), cit->first.c_str());
if (tmp_value != real_value)
{
LPCSTR tmp_key_str = NULL;
STRCONCAT(tmp_key_str,
sect_ptr->Name.c_str(), "::", cit->first.c_str());
STRCONCAT(diff_str,
tmp_key_str,
" = ",
tmp_value.c_str(),
",right = ",
real_value.c_str());
strncpy_s(dst_diff, diff_str, sizeof(dst_diff) - 1);
dst_diff[sizeof(dst_diff) - 1] = 0;
return dst_diff;
}
continue;
}
}
if (!pSettings->line_exist(sect_ptr->Name, cit->first))
{
STRCONCAT(diff_str,
"line ",
sect_ptr->Name.c_str(),
"::",
cit->first.c_str(),
" not found");
strncpy_s(dst_diff, diff_str, sizeof(dst_diff) - 1);
dst_diff[sizeof(dst_diff) - 1] = 0;
return dst_diff;
}
real_value = pSettings->r_string(sect_ptr->Name.c_str(), cit->first.c_str());
if (tmp_value != real_value)
{
LPCSTR tmp_key_str = NULL;
STRCONCAT(tmp_key_str,
sect_ptr->Name.c_str(), "::", cit->first.c_str());
STRCONCAT(diff_str,
tmp_key_str,
" = ",
tmp_value.c_str(),
",right = ",
real_value.c_str());
strncpy_s(dst_diff, diff_str, sizeof(dst_diff) - 1);
dst_diff[sizeof(dst_diff) - 1] = 0;
return dst_diff;
}
}
return NULL;
}
示例9: load
void CEnvDescriptor::load(CEnvironment& environment, CInifile& config)
{
Ivector3 tm = {0, 0, 0};
sscanf(m_identifier.c_str(), "%d:%d:%d", &tm.x, &tm.y, &tm.z);
R_ASSERT3((tm.x >= 0) && (tm.x < 24) && (tm.y >= 0) && (tm.y < 60) && (tm.z >= 0) && (tm.z < 60), "Incorrect weather time", m_identifier.c_str());
exec_time = tm.x*3600.f + tm.y*60.f + tm.z;
exec_time_loaded = exec_time;
string_path st, st_env;
xr_strcpy(st, config.r_string(m_identifier.c_str(), "sky_texture"));
strconcat(sizeof(st_env), st_env, st, "#small");
sky_texture_name = st;
sky_texture_env_name = st_env;
clouds_texture_name = config.r_string(m_identifier.c_str(), "clouds_texture");
LPCSTR cldclr = config.r_string(m_identifier.c_str(), "clouds_color");
float multiplier = 0, save = 0;
sscanf(cldclr, "%f,%f,%f,%f,%f", &clouds_color.x, &clouds_color.y, &clouds_color.z, &clouds_color.w, &multiplier);
save = clouds_color.w;
clouds_color.mul(.5f*multiplier);
clouds_color.w = save;
sky_color = config.r_fvector3(m_identifier.c_str(), "sky_color");
if (config.line_exist(m_identifier.c_str(), "sky_rotation")) sky_rotation = deg2rad(config.r_float(m_identifier.c_str(), "sky_rotation"));
else sky_rotation = 0;
far_plane = config.r_float(m_identifier.c_str(), "far_plane");
fog_color = config.r_fvector3(m_identifier.c_str(), "fog_color");
fog_density = config.r_float(m_identifier.c_str(), "fog_density");
fog_distance = config.r_float(m_identifier.c_str(), "fog_distance");
rain_density = config.r_float(m_identifier.c_str(), "rain_density");
clamp(rain_density, 0.f, 1.f);
rain_color = config.r_fvector3(m_identifier.c_str(), "rain_color");
wind_velocity = config.r_float(m_identifier.c_str(), "wind_velocity");
wind_direction = deg2rad(config.r_float(m_identifier.c_str(), "wind_direction"));
ambient = config.r_fvector3(m_identifier.c_str(), "ambient_color");
hemi_color = config.r_fvector4(m_identifier.c_str(), "hemisphere_color");
sun_color = config.r_fvector3(m_identifier.c_str(), "sun_color");
// if (config.line_exist(m_identifier.c_str(),"sun_altitude"))
sun_dir.setHP(
deg2rad(config.r_float(m_identifier.c_str(), "sun_altitude")),
deg2rad(config.r_float(m_identifier.c_str(), "sun_longitude"))
);
R_ASSERT(_valid(sun_dir));
// else
// sun_dir.setHP (
// deg2rad(config.r_fvector2(m_identifier.c_str(),"sun_dir").y),
// deg2rad(config.r_fvector2(m_identifier.c_str(),"sun_dir").x)
// );
//AVO: commented to allow COC run in debug. I belive Cromm set longtitude to negative value in AF3 and that's why it is failing here
//VERIFY2(sun_dir.y < 0, "Invalid sun direction settings while loading");
lens_flare_id = environment.eff_LensFlare->AppendDef(environment, environment.m_suns_config, config.r_string(m_identifier.c_str(), "sun"));
tb_id = environment.eff_Thunderbolt->AppendDef(environment, environment.m_thunderbolt_collections_config, environment.m_thunderbolts_config, config.r_string(m_identifier.c_str(), "thunderbolt_collection"));
bolt_period = (tb_id.size()) ? config.r_float(m_identifier.c_str(), "thunderbolt_period") : 0.f;
bolt_duration = (tb_id.size()) ? config.r_float(m_identifier.c_str(), "thunderbolt_duration") : 0.f;
env_ambient = config.line_exist(m_identifier.c_str(), "ambient") ? environment.AppendEnvAmb(config.r_string(m_identifier.c_str(), "ambient")) : 0;
if (config.line_exist(m_identifier.c_str(), "sun_shafts_intensity"))
m_fSunShaftsIntensity = config.r_float(m_identifier.c_str(), "sun_shafts_intensity");
if (config.line_exist(m_identifier.c_str(), "water_intensity"))
m_fWaterIntensity = config.r_float(m_identifier.c_str(), "water_intensity");
#ifdef TREE_WIND_EFFECT
if (config.line_exist(m_identifier.c_str(), "tree_amplitude_intensity"))
m_fTreeAmplitudeIntensity = config.r_float(m_identifier.c_str(), "tree_amplitude_intensity");
#endif
C_CHECK(clouds_color);
C_CHECK(sky_color);
C_CHECK(fog_color);
C_CHECK(rain_color);
C_CHECK(ambient);
C_CHECK(hemi_color);
C_CHECK(sun_color);
on_device_create();
}
示例10: ProcessLTX
void ProcessLTX(LPCSTR tgt_name, LPCSTR params, BOOL bFast)
{
xr_string ltx_name;
LPCSTR ltx_nm = strstr(params,".ltx"); VERIFY(ltx_nm!=0);
string_path ltx_fn;
string_path tmp;
strncpy (tmp,params,ltx_nm-params); tmp[ltx_nm-params]=0;
_Trim (tmp);
strcat (tmp,".ltx");
strcpy (ltx_fn,tmp);
// append ltx path (if exist)
string_path fn,dr,di;
_splitpath (ltx_fn,dr,di,0,0);
strconcat (sizeof(fn),fn,dr,di);
if (0!=fn[0])
FS.append_path ("ltx_path",fn,0,false);
if (!FS.exist(ltx_fn)&&!FS.exist(ltx_fn,"$app_root$",tmp))
Debug.fatal (DEBUG_INFO,"ERROR: Can't find ltx file: '%s'",ltx_fn);
CInifile ltx (ltx_fn);
printf ("Processing LTX...\n");
BOOL make_pack = ltx.line_exist("options","make_pack") ? ltx.r_bool("options","make_pack") : true;
LPCSTR copy_path= ltx.line_exist("options","copy_path") ? ltx.r_string("options","copy_path") : 0;
if (ltx.line_exist("options","exclude_exts"))
_SequenceToList(exclude_exts,ltx.r_string("options","exclude_exts"));
xr_vector<char*> list;
xr_vector<char*> fl_list;
if(ltx.section_exist("include_folders"))
{
CInifile::Sect& if_sect = ltx.r_section("include_folders");
for (CInifile::SectCIt if_it=if_sect.Data.begin(); if_it!=if_sect.Data.end(); if_it++)
{
BOOL ifRecurse = CInifile::IsBOOL(if_it->second.c_str());
u32 folder_mask = FS_ListFolders | (ifRecurse?0:FS_RootOnly);
string_path path;
LPCSTR _path = 0==xr_strcmp(if_it->first.c_str(),".\\")?"":if_it->first.c_str();
strcpy (path,_path);
u32 path_len = xr_strlen(path);
if ((0!=path_len)&&(path[path_len-1]!='\\')) strcat(path,"\\");
Log ("");
OUT_LOG ("Processing folder: '%s'",path);
BOOL efRecurse;
BOOL val = IsFolderAccepted(ltx,path,efRecurse);
if (val || (!val&&!efRecurse))
{
if (val) ProcessFolder (list,path);
xr_vector<char*>* i_fl_list = FS.file_list_open ("$target_folder$",path,folder_mask);
if (!i_fl_list)
{
Log ("ERROR: Unable to open folder list:", path);
continue;
}
xr_vector<char*>::iterator it = i_fl_list->begin();
xr_vector<char*>::iterator itE = i_fl_list->end();
for (;it!=itE;++it){
xr_string tmp_path = xr_string(path)+xr_string(*it);
bool val = IsFolderAccepted(ltx,tmp_path.c_str(),efRecurse);
if (val)
{
fl_list.push_back(xr_strdup(tmp_path.c_str()));
Msg ("+F: %s",tmp_path.c_str());
// collect files
if (ifRecurse)
ProcessFolder (list,tmp_path.c_str());
}else
{
Msg ("-F: %s",tmp_path.c_str());
}
}
FS.file_list_close (i_fl_list);
}else
{
Msg ("-F: %s",path);
}
}
}//if(ltx.section_exist("include_folders"))
// compress
{
if(ltx.section_exist("include_files"))
{
CInifile::Sect& if_sect = ltx.r_section("include_files");
for (CInifile::SectCIt if_it=if_sect.Data.begin(); if_it!=if_sect.Data.end(); if_it++)
{
list.push_back (xr_strdup(if_it->first.c_str()));
}
}
}
CompressList (tgt_name,&list,&fl_list,bFast,make_pack,copy_path);
// free
xr_vector<char*>::iterator it = list.begin();
//.........这里部分代码省略.........
示例11: Init
void CCar::Init()
{
CPHCollisionDamageReceiver::Init();
//get reference wheel radius
IKinematics* pKinematics=smart_cast<IKinematics*>(Visual());
CInifile* ini = pKinematics->LL_UserData();
R_ASSERT2(ini,"Car has no description !!! See ActorEditor Object - UserData");
///SWheel& ref_wheel=m_wheels_map.find(pKinematics->LL_BoneID(ini->r_string("car_definition","reference_wheel")))->second;
if(ini->section_exist("air_resistance"))
{
PPhysicsShell()->SetAirResistance(default_k_l*ini->r_float("air_resistance","linear_factor"),default_k_w*ini->r_float("air_resistance","angular_factor"));
}
if(ini->line_exist("car_definition","steer"))
{
m_bone_steer=pKinematics->LL_BoneID(ini->r_string("car_definition","steer"));
VERIFY2(fsimilar(DET(pKinematics->LL_GetTransform(m_bone_steer)),1.f,EPS_L),"BBADD MTX");
pKinematics->LL_GetBoneInstance(m_bone_steer).set_callback(bctPhysics,cb_Steer,this);
}
m_steer_angle=0.f;
//ref_wheel.Init();
m_ref_radius=ini->r_float("car_definition","reference_radius");//ref_wheel.radius;
b_exploded =false;
b_engine_on =false;
b_clutch =false;
b_starting =false;
b_stalling =false;
b_transmission_switching =false;
m_root_transform.set(bone_map.find(pKinematics->LL_GetBoneRoot())->second.element->mXFORM);
m_current_transmission_num=0;
m_pPhysicsShell->set_DynamicScales(1.f,1.f);
CDamagableItem::Init(GetfHealth(),3);
float l_time_to_explosion=READ_IF_EXISTS(ini,r_float,"car_definition","time_to_explosion",120.f);
CDelayedActionFuse::Initialize(l_time_to_explosion,CDamagableItem::DamageLevelToHealth(2));
{
xr_map<u16,SWheel>::iterator i,e;
i=m_wheels_map.begin();
e=m_wheels_map.end();
for(;i!=e;++i)
{
i->second.Init();
i->second.CDamagableHealthItem::Init(100.f,2);
}
}
{
xr_vector<SWheelDrive>::iterator i,e;
i=m_driving_wheels.begin();
e=m_driving_wheels.end();
for(;i!=e;++i)
i->Init();
}
{
xr_vector<SWheelBreak>::iterator i,e;
i=m_breaking_wheels.begin();
e=m_breaking_wheels.end();
for(;i!=e;++i)
i->Init();
}
{
xr_vector<SWheelSteer>::iterator i,e;
i=m_steering_wheels.begin();
e=m_steering_wheels.end();
for(;i!=e;++i)
i->Init();
}
{
xr_vector<SExhaust>::iterator i,e;
i=m_exhausts.begin();
e=m_exhausts.end();
for(;i!=e;++i)
i->Init();
}
{
xr_map<u16,SDoor>::iterator i,e;
i=m_doors.begin();
e=m_doors.end();
for(;i!=e;++i)
{
i->second.Init();
i->second.CDamagableHealthItem::Init(100,1);
}
}
if(ini->section_exist("damage_items"))
{
CInifile::Sect& data = ini->r_section("damage_items");
for (CInifile::SectCIt I=data.Data.begin(); I!=data.Data.end(); I++){
const CInifile::Item& item = *I;
u16 index = pKinematics->LL_BoneID(*item.first);
R_ASSERT3(index != BI_NONE, "Wrong bone name", *item.first);
//.........这里部分代码省略.........
示例12: ParseDefinitions
void CCar::ParseDefinitions()
{
bone_map.clear();
IKinematics* pKinematics=smart_cast<IKinematics*>(Visual());
bone_map.insert(mk_pair(pKinematics->LL_GetBoneRoot(),physicsBone()));
CInifile* ini = pKinematics->LL_UserData();
R_ASSERT2(ini,"Car has no description !!! See ActorEditor Object - UserData");
CExplosive::Load(ini,"explosion");
//CExplosive::SetInitiator(ID());
m_camera_position = ini->r_fvector3("car_definition","camera_pos");
///////////////////////////car definition///////////////////////////////////////////////////
fill_wheel_vector (ini->r_string ("car_definition","driving_wheels"),m_driving_wheels);
fill_wheel_vector (ini->r_string ("car_definition","steering_wheels"),m_steering_wheels);
fill_wheel_vector (ini->r_string ("car_definition","breaking_wheels"),m_breaking_wheels);
fill_exhaust_vector (ini->r_string ("car_definition","exhausts"),m_exhausts);
fill_doors_map (ini->r_string ("car_definition","doors"),m_doors);
///////////////////////////car properties///////////////////////////////
m_max_power = ini->r_float("car_definition","engine_power");
m_max_power *= (0.8f*1000.f);
m_max_rpm = ini->r_float("car_definition","max_engine_rpm");
m_max_rpm *= (1.f/60.f*2.f*M_PI);
m_min_rpm = ini->r_float("car_definition","idling_engine_rpm");
m_min_rpm *= (1.f/60.f*2.f*M_PI);
m_power_rpm = ini->r_float("car_definition","max_power_rpm");
m_power_rpm *= (1.f/60.f*2.f*M_PI);//
m_torque_rpm = ini->r_float("car_definition","max_torque_rpm");
m_torque_rpm *= (1.f/60.f*2.f*M_PI);//
m_power_increment_factor = READ_IF_EXISTS(ini,r_float,"car_definition","power_increment_factor",m_power_increment_factor);
m_rpm_increment_factor = READ_IF_EXISTS(ini,r_float,"car_definition","rpm_increment_factor",m_rpm_increment_factor);
m_power_decrement_factor = READ_IF_EXISTS(ini,r_float,"car_definition","power_decrement_factor",m_power_increment_factor);
m_rpm_decrement_factor = READ_IF_EXISTS(ini,r_float,"car_definition","rpm_decrement_factor",m_rpm_increment_factor);
m_power_neutral_factor = READ_IF_EXISTS(ini,r_float,"car_definition","power_neutral_factor",m_power_neutral_factor);
R_ASSERT2(m_power_neutral_factor>0.1f&&m_power_neutral_factor<1.f,"power_neutral_factor must be 0 - 1 !!");
if(ini->line_exist("car_definition","exhaust_particles"))
{
m_exhaust_particles =ini->r_string("car_definition","exhaust_particles");
}
b_auto_switch_transmission= !!ini->r_bool("car_definition","auto_transmission");
InitParabola ();
m_axle_friction = ini->r_float("car_definition","axle_friction");
m_steering_speed = ini->r_float("car_definition","steering_speed");
if(ini->line_exist("car_definition","break_time"))
{
m_break_time=ini->r_float("car_definition","break_time");
}
/////////////////////////transmission////////////////////////////////////////////////////////////////////////
float main_gear_ratio=ini->r_float("car_definition","main_gear_ratio");
R_ASSERT2(ini->section_exist("transmission_gear_ratio"),"no section transmission_gear_ratio");
m_gear_ratious.push_back(ini->r_fvector3("transmission_gear_ratio","R"));
m_gear_ratious[0][0]=-m_gear_ratious[0][0]*main_gear_ratio;
string32 rat_num;
for(int i=1;true;++i)
{
xr_sprintf(rat_num,"N%d",i);
if(!ini->line_exist("transmission_gear_ratio",rat_num)) break;
Fvector gear_rat=ini->r_fvector3("transmission_gear_ratio",rat_num);
gear_rat[0]*=main_gear_ratio;
gear_rat[1]*=(1.f/60.f*2.f*M_PI);
gear_rat[2]*=(1.f/60.f*2.f*M_PI);
m_gear_ratious.push_back(gear_rat);
}
///////////////////////////////sound///////////////////////////////////////////////////////
m_car_sound->Init();
///////////////////////////////fuel///////////////////////////////////////////////////
m_fuel_tank=ini->r_float("car_definition","fuel_tank");
m_fuel=m_fuel_tank;
m_fuel_consumption=ini->r_float("car_definition","fuel_consumption");
m_fuel_consumption/=100000.f;
if(ini->line_exist("car_definition","exhaust_particles"))
m_exhaust_particles = ini->r_string("car_definition","exhaust_particles");
///////////////////////////////lights///////////////////////////////////////////////////
m_lights.Init(this);
m_lights.ParseDefinitions();
if(ini->section_exist("animations"))
{
m_driver_anim_type=ini->r_u16("animations","driver_animation_type");
}
//.........这里部分代码省略.........