Beispiel #1
0
void CSMotion::Save(IWriter& F)
{
	CCustomMotion::Save(F);
	F.w_u16		(EOBJ_SMOTION_VERSION);
	F.w_s8		(m_Flags.get());
    F.w_u16		(m_BoneOrPart);
    F.w_float	(fSpeed);           
    F.w_float	(fAccrue);
    F.w_float	(fFalloff);
    F.w_float	(fPower);
	F.w_u16		((u16)bone_mots.size());
	for(BoneMotionIt bm_it=bone_mots.begin(); bm_it!=bone_mots.end(); bm_it++){
    	xr_strlwr	(bm_it->name);
    	F.w_stringZ	(bm_it->name);
		F.w_u8		(bm_it->m_Flags.get());
		for (int ch=0; ch<ctMaxChannel; ch++)
			bm_it->envs[ch]->Save(F);
	}
#if 0
    u32 sz			= marks.size();
    F.w_u32			(sz);
    for(u32 i=0; i<sz; ++i)
      marks[i].Save(&F);
#else
    F.w_u32			(0);
#endif
}
Beispiel #2
0
void ESceneLightTools::Save(IWriter& F)
{
	inherited::Save	(F);

	F.w_chunk		(CHUNK_VERSION,(u16*)&LIGHT_TOOLS_VERSION,sizeof(LIGHT_TOOLS_VERSION));

	F.open_chunk	(CHUNK_FLAGS);
    F.w_u32			(m_Flags.get());
	F.close_chunk	();

	F.open_chunk	(CHUNK_SUN_SHADOW);
    F.w_u8			(0);
    F.w_fvector2	(m_SunShadowDir);
    F.close_chunk	();

	F.open_chunk	(CHUNK_LCONTROLS_LAST);
	F.w_u32			(lcontrol_last_idx);
    F.close_chunk	();

	F.open_chunk	(CHUNK_LCONTROLS);
	RTokenVecIt		_I 	= lcontrols.begin();
    RTokenVecIt		_E 	= lcontrols.end();
    for (;_I!=_E; _I++){
        F.w_stringZ	(_I->name);
        F.w_u32		(_I->id);
    }
    F.close_chunk	();
}
Beispiel #3
0
void EDetail::Export(IWriter& F, LPCSTR tex_name, const Fvector2& offs, const Fvector2& scale, bool rot)
{
	R_ASSERT			(m_pRefs);
    CSurface* surf		= *m_pRefs->FirstSurface();
	R_ASSERT			(surf);
    // write data
	F.w_stringZ			(surf->_ShaderName());
	F.w_stringZ			(tex_name);//surf->_Texture());

    F.w_u32				(m_Flags.get());
    F.w_float			(m_fMinScale);
    F.w_float			(m_fMaxScale);

    F.w_u32				(number_vertices);
    F.w_u32				(number_indices);

    // remap UV
    EVertexIn* rm_vertices = xr_alloc<EVertexIn>(number_vertices);
    for (u32 k=0; k<number_vertices; k++) rm_vertices[k].remapUV(vertices[k],offs,scale,rot);
    
    F.w					(rm_vertices, 	number_vertices*sizeof(fvfVertexIn));
    F.w					(indices, 		number_indices*sizeof(WORD));

    xr_free				(rm_vertices);
}
Beispiel #4
0
void EDetail::Save(IWriter& F)
{
	// version
	F.open_chunk		(DETOBJ_CHUNK_VERSION);
    F.w_u32				(DETOBJ_VERSION);
    F.close_chunk		();

    // reference
	F.open_chunk		(DETOBJ_CHUNK_REFERENCE);
    F.w_stringZ			(m_sRefs.c_str());
    F.close_chunk		();

	// scale
	F.open_chunk		(DETOBJ_CHUNK_SCALE_LIMITS);
    F.w_float			(m_fMinScale);
    F.w_float			(m_fMaxScale);
    F.close_chunk		();

	// density factor
	F.open_chunk		(DETOBJ_CHUNK_DENSITY_FACTOR);
    F.w_float			(m_fDensityFactor);
    F.close_chunk		();

    // flags
	F.open_chunk		(DETOBJ_CHUNK_FLAGS);
    F.w_u32				(m_Flags.get());
    F.close_chunk		();
}
void CALifeStorageManager::save	(LPCSTR save_name_no_check, bool update_name)
{
	LPCSTR game_saves_path		= FS.get_path("$game_saves$")->m_Path;

	string_path					save_name;
	strncpy_s					(save_name, sizeof(save_name), save_name_no_check, sizeof(save_name)-5-xr_strlen(SAVE_EXTENSION)-xr_strlen(game_saves_path));

	xr_strcpy					(g_last_saved_game, save_name);

	string_path					save;
	xr_strcpy					(save,m_save_name);
	if (save_name)
	{
		strconcat				(sizeof(m_save_name), m_save_name, save_name, SAVE_EXTENSION);
	}
	else {
		if (!xr_strlen(m_save_name)) {
			Log					("There is no file name specified!");
			return;
		}
	}

	u32							source_count;
	u32							dest_count;
	void						*dest_data;
	{
		CMemoryWriter			stream;
		header().save			(stream);
		time_manager().save		(stream);
		spawns().save			(stream);
		objects().save			(stream);
		registry().save			(stream);

		source_count			= stream.tell();
		void					*source_data = stream.pointer();
		dest_count				= rtc_csize(source_count);
		dest_data				= xr_malloc(dest_count);
		dest_count				= rtc_compress(dest_data,dest_count,source_data,source_count);
	}

	string_path					temp;
	FS.update_path				(temp,"$game_saves$",m_save_name);
	IWriter						*writer = FS.w_open(temp);
	writer->w_u32				(u32(-1));
	writer->w_u32				(ALIFE_VERSION);
	
	writer->w_u32				(source_count);
	writer->w					(dest_data,dest_count);
	xr_free						(dest_data);
	FS.w_close					(writer);
#ifdef DEBUG
	Msg							("* Game %s is successfully saved to file '%s' (%d bytes compressed to %d)",m_save_name,temp,source_count,dest_count + 4);
#else // DEBUG
	Msg							("* Game %s is successfully saved to file '%s'",m_save_name,temp);
#endif // DEBUG

	if (!update_name)
		xr_strcpy					(m_save_name,save);
}
Beispiel #6
0
void CCustomMotion::Save(IWriter& F)
{
#ifdef _LW_EXPORT
	ReplaceSpaceAndLowerCase(name);
#endif
	F.w_stringZ	(name);
	F.w_u32		(iFrameStart);
	F.w_u32		(iFrameEnd);
	F.w_float	(fFPS);
}
void write( IWriter	&w, const  CDB::MODEL &m, const  xrLC_GlobalData  &lc_global_data )
{
	w.w_u32( (u32)m.get_verts_count() );
	w.w( m.get_verts(), m.get_verts_count() * sizeof(Fvector) );
	
	u32 tris_count = (u32) m.get_tris_count() ;
	w.w_u32( tris_count );
	for( u32 i = 0; i < tris_count; ++i)
		::write( w, m.get_tris()[i], lc_global_data );

//	w.w( m.get_tris(), m.get_tris_count() * sizeof(CDB::TRI) );
}
void write( IWriter	&w, const  CDB::MODEL &m )
{
	w.w_u32( (u32)m.get_verts_count() );
	w.w( m.get_verts(), m.get_verts_count() * sizeof(Fvector) );
	
	u32 tris_count = (u32) m.get_tris_count() ;
	w.w_u32( tris_count );
	for( u32 i = 0; i < tris_count; ++i)
		::write( w, m.get_tris()[i] );

//	w.w( m.get_tris(), m.get_tris_count() * sizeof(CDB::TRI) );
}
//------------------------------------------------------------------------------
// IO - routines
//------------------------------------------------------------------------------
void SGameMtl::Save(IWriter& fs)
{
	Flags.set				(flSlowDown,	!fis_zero(1.f-fFlotationFactor,EPS_L));
	Flags.set				(flShootable,	fis_zero(fShootFactor,EPS_L));
	Flags.set				(flTransparent,	fis_zero(fVisTransparencyFactor,EPS_L));
    Flags.set 				(flInjurious,	!fis_zero(fInjuriousSpeed,EPS_L));

	fs.open_chunk			(GAMEMTL_CHUNK_MAIN);
	fs.w_u32				(ID);
	fs.w_stringZ			(m_Name);
    fs.close_chunk			();

	fs.open_chunk			(GAMEMTL_CHUNK_DESC);
    fs.w_stringZ			(m_Desc);
    fs.close_chunk			();
    
	fs.open_chunk			(GAMEMTL_CHUNK_FLAGS);
    fs.w_u32				(Flags.get());
    fs.close_chunk			();

	fs.open_chunk			(GAMEMTL_CHUNK_PHYSICS);
    fs.w_float				(fPHFriction);
    fs.w_float				(fPHDamping);
    fs.w_float				(fPHSpring);
    fs.w_float				(fPHBounceStartVelocity);
    fs.w_float				(fPHBouncing);
    fs.close_chunk			();

	fs.open_chunk			(GAMEMTL_CHUNK_FACTORS);
    fs.w_float				(fShootFactor);
    fs.w_float				(fBounceDamageFactor);
    fs.w_float				(fVisTransparencyFactor);
    fs.w_float				(fSndOcclusionFactor);
    fs.close_chunk			();

	fs.open_chunk			(GAMEMTL_CHUNK_FACTORS_MP);
    fs.w_float				(fShootFactorMP);
    fs.close_chunk			();

	fs.open_chunk			(GAMEMTL_CHUNK_FLOTATION);
    fs.w_float				(fFlotationFactor);
    fs.close_chunk			();

	fs.open_chunk			(GAMEMTL_CHUNK_INJURIOUS);
    fs.w_float				(fInjuriousSpeed);
    fs.close_chunk			();

	fs.open_chunk			(GAMEMTL_CHUNK_DENSITY);
    fs.w_float				(fDensityFactor);
    fs.close_chunk			();

 }
Beispiel #10
0
void SGameMtlPair::Save(IWriter& fs)
{
    fs.open_chunk		(GAMEMTLPAIR_CHUNK_PAIR);
    fs.w_u32			(mtl0);
    fs.w_u32			(mtl1);
    fs.w_u32			(ID);
    fs.w_u32			(ID_parent);
    fs.w_u32			(OwnProps.get());
	fs.close_chunk		();

// copy from parent
	if (ID_parent!=GAMEMTL_NONE_ID){
        SGameMtlPair* P; 
        if ((0!=(P=GetLastParentValue(this,flBreakingSounds)))&&(P!=this))	
            BreakingSounds	= P->BreakingSounds;
        if ((0!=(P=GetLastParentValue(this,flStepSounds)))&&(P!=this)) 		
            StepSounds		= P->StepSounds;
        if ((0!=(P=GetLastParentValue(this,flCollideSounds)))&&(P!=this)) 	
            CollideSounds	= P->CollideSounds;
        if ((0!=(P=GetLastParentValue(this,flCollideParticles)))&&(P!=this)) 
            CollideParticles= P->CollideParticles;
        if ((0!=(P=GetLastParentValue(this,flCollideMarks)))&&(P!=this)) 	
            CollideMarks	= P->CollideMarks;
    }
/*
    else{
    	OwnProps.zero();
        if (!BreakingSounds.IsEmpty())	OwnProps.set(flBreakingSounds,TRUE);
        if (!StepSounds.IsEmpty())		OwnProps.set(flStepSounds,TRUE);
        if (!CollideSounds.IsEmpty())	OwnProps.set(flCollideSounds,TRUE);
        if (!CollideParticles.IsEmpty())OwnProps.set(flCollideParticles,TRUE);
        if (!CollideMarks.IsEmpty())	OwnProps.set(flCollideMarks,TRUE);
    }
*/    
// save    
    fs.open_chunk		(GAMEMTLPAIR_CHUNK_BREAKING);
    fs.w_stringZ		(BreakingSounds);
	fs.close_chunk		();

    fs.open_chunk		(GAMEMTLPAIR_CHUNK_STEP);
    fs.w_stringZ		(StepSounds);
	fs.close_chunk		();

    fs.open_chunk		(GAMEMTLPAIR_CHUNK_COLLIDE);
    fs.w_stringZ		(CollideSounds);
    fs.w_stringZ		(CollideParticles);
    fs.w_stringZ		(CollideMarks);
	fs.close_chunk		();
}
Beispiel #11
0
void write(IWriter	&w, const b_texture &b)
{
	w.w_string( b.name );
	w.w_u32( b.dwWidth );
	w.w_u32( b.dwHeight );
	w.w_s32( b.bHasAlpha );
	
	bool b_surface = !!b.pSurface;
	w.w_u8( u8( b_surface ) );
	if(b_surface)
	{
		u32 size = sizeof( u32 ) *  b.dwWidth * b.dwHeight;
		w.w( b.pSurface, size );
	}
}
Beispiel #12
0
void OGF_LOD::Save		(IWriter &fs)
{
	OGF_Base::Save		(fs);

	// Header
	ogf_header			H;
	string1024			sid;
	strconcat			(sid,
		pBuild->shader_render[pBuild->materials[lod_Material].shader].name,
		"/",
		pBuild->textures[pBuild->materials[lod_Material].surfidx].name
		);
	fs.open_chunk		(OGF_HEADER);
	H.format_version	= xrOGF_FormatVersion;
	H.type				= MT_LOD;
	H.shader_id			= RegisterShader(sid);
	H.bb.min			= bbox.min;
	H.bb.max			= bbox.max;
	H.bs.c				= C;
	H.bs.r				= R;
	fs.w				(&H,sizeof(H));
	fs.close_chunk		();

	// Chields
	fs.open_chunk		(OGF_CHILDREN_L);
	fs.w_u32			((u32)chields.size());
	fs.w				(&*chields.begin(),(u32)chields.size()*sizeof(u32));
	fs.close_chunk		();

	// Lod-def
	fs.open_chunk		(OGF_LODDEF2);
	fs.w				(lod_faces,sizeof(lod_faces));
	fs.close_chunk		();
}
Beispiel #13
0
void CPatrolPathStorage::save				(IWriter &stream)
{
	stream.open_chunk			(0);
	stream.w_u32				(m_registry.size());
	stream.close_chunk			();

	stream.open_chunk			(1);

	PATROL_REGISTRY::iterator	I = m_registry.begin();
	PATROL_REGISTRY::iterator	E = m_registry.end();
	for (int i=0; I != E; ++I, ++i) {
		stream.open_chunk		(i);

		stream.open_chunk		(0);
        save_data				((*I).first,stream);
		stream.close_chunk		();

		stream.open_chunk		(1);
        save_data				((*I).second,stream);
		stream.close_chunk		();

		stream.close_chunk		();
	}

	stream.close_chunk			();
}
Beispiel #14
0
void CGroupObject::Save(IWriter& F)
{
	CCustomObject::Save(F);

	F.open_chunk	(GROUPOBJ_CHUNK_VERSION);
	F.w_u16			(GROUPOBJ_CURRENT_VERSION);
	F.close_chunk	();

    F.w_chunk		(GROUPOBJ_CHUNK_FLAGS,&m_Flags,sizeof(m_Flags));

    // objects
    if (IsOpened()){
        F.open_chunk(GROUPOBJ_CHUNK_OPEN_OBJECT_LIST);
        F.w_u32		(m_Objects.size());
		for (ObjectIt it=m_Objects.begin(); it!=m_Objects.end(); it++)
            F.w_stringZ	((*it)->Name);
		F.close_chunk	();
    }else{
	    Scene->SaveObjects(m_Objects,GROUPOBJ_CHUNK_OBJECT_LIST,F);
    }

    F.open_chunk	(GROUPOBJ_CHUNK_REFERENCE);
    F.w_stringZ		(m_ReferenceName);
	F.close_chunk	();
}
void xrLC_GlobalData	::	write( IWriter &w, const base_Face *f ) const 
{
	
	if(!f)
	{
		w.w_u8( smit_null );
		return;
	}

	const Face *face = dynamic_cast<const Face*>( f );
	if(face)
	{
		VERIFY( write_faces );
		w.w_u8( smit_plain );
		write_faces->write( w, face );
		return;
	}

	const _face *model_face = dynamic_cast<const _face*>( f );
	VERIFY(model_face);

	w.w_u8( smit_model );

	std::pair<u32,u32> id = get_id( _mu_models, model_face );
	
	w.w_u32( id.first );

	_mu_models[ id.first ]->write( w, id.second, model_face  );

}
Beispiel #16
0
void PDomain::Save(IWriter& F)
{
	F.w_u32		(type);
	F.w_fvector3(v[0]);
	F.w_fvector3(v[1]);
	F.w_fvector3(v[2]);
}
Beispiel #17
0
void CLAItem::Save(IWriter& F)
{
    F.open_chunk	(CHUNK_ITEM_COMMON);
    F.w_stringZ		(cName);
    F.w_float		(fFPS);
    F.w_u32		(iFrameCount);
	F.close_chunk	();

    F.open_chunk	(CHUNK_ITEM_KEYS);
    F.w_u32		(Keys.size());
    for (KeyPairIt it=Keys.begin(); it!=Keys.end(); it++){
		F.w_u32	(it->first);
		F.w_u32	(it->second);
    }
	F.close_chunk	();
}
Beispiel #18
0
	void						save_cross_table	(IWriter &stream)
	{
		stream.w_u32			(m_cross_table.size() + sizeof(u32));
		m_cross_table.seek		(0);
		stream.w				(m_cross_table.pointer(),m_cross_table.size());
		m_cross_table.clear		();
	}
Beispiel #19
0
void CParticleManager::SaveActions(int alist_id, IWriter& W)
{
	// Execute the specified action list.
	ParticleActions* pa		= GetActionListPtr(alist_id);
    W.w_u32					(pa->size());
    for (PAVecIt it=pa->begin(); it!=pa->end(); it++)
        (*it)->Save			(W);
}
Beispiel #20
0
void EScene::SaveObjectStream( CCustomObject* O, IWriter& F )
{
    F.open_chunk	(CHUNK_OBJECT_CLASS);
    F.w_u32			(O->ClassID);
    F.close_chunk	();
    F.open_chunk	(CHUNK_OBJECT_BODY);
    O->SaveStream	(F);
    F.close_chunk	();
}
Beispiel #21
0
void _face::write( IWriter &w ) const
{
	base_Face::write( w );
	w.w_fvector2( tc[0] );
	w.w_fvector2( tc[1] );
	w.w_fvector2( tc[2] );
	w.w_fvector3( N );
	w.w_u32( sm_group );
}
Beispiel #22
0
void CEditableObject::SaveBoneData(IWriter& F)
{
    for (BoneIt b_it=m_Bones.begin(); b_it!=m_Bones.end(); b_it++){
        F.open_chunk		(b_it-m_Bones.begin());
        (*b_it)->SaveData	(F);
        F.close_chunk		();
    }
    // save bone part
    F.open_chunk	(EOBJ_CHUNK_BONEPARTS2);
    F.w_u32			(m_BoneParts.size());
    for (BPIt bp_it=m_BoneParts.begin(); bp_it!=m_BoneParts.end(); bp_it++){
        F.w_stringZ	(bp_it->alias.c_str());
        F.w_u32		(bp_it->bones.size());
        for (RStringVecIt s_it=bp_it->bones.begin(); s_it!=bp_it->bones.end(); s_it++)
            F.w_stringZ(*s_it);
    }
    F.close_chunk	();
}
void ESceneSpawnTool::SaveStream(IWriter& F)
{
	inherited::SaveStream	(F);

	F.w_chunk		(CHUNK_VERSION,(u16*)&SPAWN_TOOLS_VERSION,sizeof(SPAWN_TOOLS_VERSION));

	F.open_chunk	(CHUNK_FLAGS);
    F.w_u32			(m_Flags.get());
	F.close_chunk	();
}
Beispiel #24
0
void EDetailManager::SaveStream(IWriter& F)
{
	inherited::SaveStream	(F);

	// version
	F.open_chunk		(DETMGR_CHUNK_VERSION);
    F.w_u32				(DETMGR_VERSION);
    F.close_chunk		();

	F.open_chunk		(DETMGR_CHUNK_FLAGS);
    F.w_u32				(m_Flags.get());
	F.close_chunk		();

	// header
	F.w_chunk			(DETMGR_CHUNK_HEADER,&dtH,sizeof(DetailHeader));

    // objects
    SaveColorIndices	(F);

    // slots
	F.open_chunk		(DETMGR_CHUNK_SLOTS);
    F.w_u32				(dtH.size_x*dtH.size_z);
	F.w					(dtSlots,dtH.size_x*dtH.size_z*sizeof(DetailSlot));
    F.close_chunk		();
    // internal
    // bbox
	F.w_chunk			(DETMGR_CHUNK_BBOX,&m_BBox,sizeof(Fbox));
	// base texture
    if (m_Base.Valid()){
		F.open_chunk	(DETMGR_CHUNK_BASE_TEXTURE);
    	F.w_stringZ		(m_Base.GetName());
	    F.close_chunk	();
    }
    F.open_chunk		(DETMGR_CHUNK_DENSITY);
    F.w_float			(ps_r__Detail_density);
    F.close_chunk		();
	// snap objects
	F.open_chunk		(DETMGR_CHUNK_SNAP_OBJECTS);
    F.w_u32				(m_SnapObjects.size());
    for (ObjectIt o_it=m_SnapObjects.begin(); o_it!=m_SnapObjects.end(); o_it++)
    	F.w_stringZ		((*o_it)->Name);
    F.close_chunk		();
}
Beispiel #25
0
void ESceneAIMapTool::SaveStream(IWriter& F)
{
	inherited::SaveStream	(F);

	F.open_chunk	(AIMAP_CHUNK_VERSION);
	F.w_u16			(AIMAP_VERSION);
	F.close_chunk	();

	F.open_chunk	(AIMAP_CHUNK_FLAGS);
    F.w				(&m_Flags,sizeof(m_Flags));
	F.close_chunk	();

	F.open_chunk	(AIMAP_CHUNK_BOX);
    F.w				(&m_AIBBox,sizeof(m_AIBBox));
	F.close_chunk	();

	F.open_chunk	(AIMAP_CHUNK_PARAMS);
    F.w				(&m_Params,sizeof(m_Params));
	F.close_chunk	();

    EnumerateNodes	();
	F.open_chunk	(AIMAP_CHUNK_NODES);
    F.w_u32			(m_Nodes.size());
	for (AINodeIt it=m_Nodes.begin(); it!=m_Nodes.end(); it++)
    	(*it)->SaveStream	(F,this);
	F.close_chunk	();

	F.open_chunk	(AIMAP_CHUNK_INTERNAL_DATA);
    F.w_float		(m_VisRadius);
    F.w_u32			(m_BrushSize);
	F.close_chunk	();

	F.open_chunk	(AIMAP_CHUNK_INTERNAL_DATA2);
    F.w_float		(m_SmoothHeight);
	F.close_chunk	();

	F.open_chunk	(AIMAP_CHUNK_SNAP_OBJECTS);
    F.w_u32			(m_SnapObjects.size());
    for (ObjectIt o_it=m_SnapObjects.begin(); o_it!=m_SnapObjects.end(); o_it++)
    	F.w_stringZ	((*o_it)->Name);
    F.close_chunk	();
}
Beispiel #26
0
void STextureParams::Save(IWriter& F)
{
    F.open_chunk	(THM_CHUNK_TEXTUREPARAM);
    F.w				(&fmt,sizeof(ETFormat));
    F.w_u32			(flags.get());
    F.w_u32			(border_color);
    F.w_u32			(fade_color);
    F.w_u32			(fade_amount);
    F.w_u32			(mip_filter);
    F.w_u32			(width);
    F.w_u32			(height);
    F.close_chunk	();

    F.open_chunk	(THM_CHUNK_TEXTURE_TYPE);
    F.w_u32			(type);
    F.close_chunk	();


    F.open_chunk	(THM_CHUNK_DETAIL_EXT);
    F.w_stringZ		(detail_name);
    F.w_float		(detail_scale);
    F.close_chunk	();

    F.open_chunk	(THM_CHUNK_MATERIAL);
    F.w_u32			(material);
	F.w_float		(material_weight);
    F.close_chunk	();

    F.open_chunk	(THM_CHUNK_BUMP);
	F.w_float		(bump_virtual_height);
    F.w_u32			(bump_mode);
    F.w_stringZ		(bump_name);
    F.close_chunk	();

    F.open_chunk	(THM_CHUNK_EXT_NORMALMAP);
    F.w_stringZ		(ext_normal_map_name);
    F.close_chunk	();

	F.open_chunk	(THM_CHUNK_FADE_DELAY);
	F.w_u8			(fade_delay);
	F.close_chunk	();
}
Beispiel #27
0
void CBuild::SaveTREE	(IWriter &fs)
{
	CMemoryWriter		MFS;

	Status				("Geometry buffers...");
	xr_vector<u32>		remap;
	remap.reserve		(g_tree.size());
	for (u32 rid=0; rid<g_tree.size(); rid++)	{
		OGF*	o		= dynamic_cast<OGF*>	(g_tree[rid]);
		if		(o)		remap.push_back(rid);
	}
	std::stable_sort	(remap.begin(),remap.end(),remap_order);
	clMsg				("remap-size: %d / %d",remap.size(),g_tree.size());
	for (u32 sid=0; sid<remap.size(); sid++)	{
		u32				id	= remap[sid];
		//clMsg			("%3d: subdiv: %d",sid,id);
		g_tree[id]->PreSave	(id);
	}

	Status				("Visuals...");
	fs.open_chunk		(fsL_VISUALS);
	for (xr_vector<OGF_Base*>::iterator it = g_tree.begin(); it!=g_tree.end(); it++)	{
		u32			idx = u32(it-g_tree.begin());
		MFS.open_chunk	(idx);
		(*it)->Save		(MFS);
		MFS.close_chunk	();
		Progress		(float(idx)/float(g_tree.size()));
	}
	fs.w				(MFS.pointer(),MFS.size());
	fs.close_chunk		();
	clMsg				("Average: %d verts/%d faces, 50(%2.1f), 100(%2.1f), 500(%2.1f), 1000(%2.1f), 5000(%2.1f)",
		g_batch_verts/g_batch_count,
		g_batch_faces/g_batch_count,
		100.f * float(g_batch_50)/float(g_batch_count),
		100.f * float(g_batch_100)/float(g_batch_count),
		100.f * float(g_batch_500)/float(g_batch_count),
		100.f * float(g_batch_1000)/float(g_batch_count),
		100.f * float(g_batch_5000)/float(g_batch_count)
		);
	mem_Compact			();

	SaveGEOMs			("level.geom",	g_VB,g_IB,g_SWI);	// Normal
	SaveGEOMs			("level.geomx",	x_VB,x_IB,x_SWI);	// Fast-Path

	Status				("Shader table...");
	fs.open_chunk		(fsL_SHADERS);
	fs.w_u32			(g_Shaders.size());
	for (xr_vector<LPCSTR>::iterator T=g_Shaders.begin(); T!=g_Shaders.end(); T++)
		fs.w_stringZ	(*T);
	fs.close_chunk		();
	//mem_Compact			();
}
Beispiel #28
0
void st_LevelOptions::Save( IWriter& F )
{
    F.open_chunk( CHUNK_LO_VERSION );
	F.w_u32		( CURRENT_LEVELOP_VERSION );
    F.close_chunk();

    F.open_chunk( CHUNK_LO_NAMES );
	F.w_stringZ	( m_FNLevelPath.size()?m_FNLevelPath.c_str():"" );
    F.close_chunk();

    F.open_chunk( CHUNK_LO_PREFIX );
	F.w_stringZ	( m_LevelPrefix.size()?m_LevelPrefix.c_str():"");
    F.close_chunk();

    F.open_chunk( CHUNK_LO_BOP );
	F.w_stringZ	( m_BOPText.size()?m_BOPText.c_str():"" );
    F.close_chunk();

    F.open_chunk( CHUNK_LO_MAP_VER );
	F.w_stringZ	( m_map_version.size()?m_map_version.c_str():"1.0" );
    F.close_chunk();

    F.open_chunk( CHUNK_LO_BP_VERSION );
	F.w_u32		( CURRENT_LEVELOP_BP_VERSION );
    F.close_chunk();

    F.open_chunk( CHUNK_BUILD_PARAMS );
	F.w			( &m_BuildParams, sizeof(m_BuildParams) );
    F.close_chunk();

    F.open_chunk( CHUNK_LIGHT_QUALITY );
	F.w_u8		( m_LightHemiQuality );
	F.w_u8		( m_LightSunQuality );
    F.close_chunk();

    F.open_chunk( CHUNK_MAP_USAGE );
	F.w_u16		( m_mapUsage.m_GameType.get() );
    F.close_chunk();
}
void ESceneObjectTools::Save(IWriter& F)
{
	inherited::Save(F);

	F.w_chunk		(CHUNK_VERSION,(u16*)&OBJECT_TOOLS_VERSION,sizeof(OBJECT_TOOLS_VERSION));

	F.open_chunk	(CHUNK_FLAGS);
    F.w_u32			(m_Flags.get());
	F.close_chunk	();

    F.open_chunk	(CHUNK_APPEND_RANDOM);
    F.w_fvector3	(m_AppendRandomMinScale);
    F.w_fvector3	(m_AppendRandomMaxScale);
    F.w_fvector3	(m_AppendRandomMinRotation);
    F.w_fvector3	(m_AppendRandomMaxRotation);
    F.w_u32			(m_AppendRandomObjects.size());
    if (m_AppendRandomObjects.size()){
    	for (RStringVecIt it=m_AppendRandomObjects.begin(); it!=m_AppendRandomObjects.end(); it++)
            F.w_stringZ(*it);
    }
    F.close_chunk	();
}
Beispiel #30
0
void CEditShape::Save(IWriter& F)
{
	inherited::Save	(F);

	F.open_chunk	(SHAPE_CHUNK_VERSION);
	F.w_u16			(SHAPE_CURRENT_VERSION);
	F.close_chunk	();

	F.open_chunk	(SHAPE_CHUNK_SHAPES);
    F.w_u32			(shapes.size());
    F.w				(shapes.begin(),shapes.size()*sizeof(shape_def));
	F.close_chunk	();
}