Example #1
0
void	Compress	(NodeCompressed& Dest, vertex& Src, hdrNODES& H)
{
	// Compress plane (normal)
	Dest.plane	= pvCompress	(Src.Plane.n);
	
	// Compress position
	CNodePositionCompressor(Dest.p,Src.Pos,H);
//	CompressPos	(Dest.p1,Src.P1,H);
	
	// Sector
	// R_ASSERT(Src.sector<=255);
	// Dest.sector = BYTE(Src.sector);

	// Light & Cover
	CNodeCompressed().compress_node(Dest,Src);
//	Dest.cover[0]	= CompressCover(Src.cover[0]);
//	Dest.cover[1]	= CompressCover(Src.cover[1]);
//	Dest.cover[2]	= CompressCover(Src.cover[2]);
//	Dest.cover[3]	= CompressCover(Src.cover[3]);
	Dest.cover0		= compress(Src.cover[0],15);
	Dest.cover1		= compress(Src.cover[1],15);
	Dest.cover2		= compress(Src.cover[2],15);
	Dest.cover3		= compress(Src.cover[3],15);
//	Msg				("[%.3f -> %d][%.3f -> %d][%.3f -> %d][%.3f -> %d]",
//		Src.cover[0],Dest.cover0,
//		Src.cover[1],Dest.cover1,
//		Src.cover[2],Dest.cover2,
//		Src.cover[3],Dest.cover3
//		);

	// Compress links
//	R_ASSERT	(Src.neighbours.size()<64);
//	Dest.links	= BYTE(Src.neighbours.size());
}
Example #2
0
void SAINode::SaveLTX(CInifile& ini, LPCSTR sect_name, ESceneAIMapTool* tools)
{
	R_ASSERT2		(0, "dont use it !!!");
	u32 			id;
    u16 			pl;
	NodePosition 	np;

    id 				= n1?(u32)n1->idx:InvalidNode;
    ini.w_u32		(sect_name,"n1", id);

    id 				= n2?(u32)n2->idx:InvalidNode;
    ini.w_u32		(sect_name,"n2", id);

    id 				= n3?(u32)n3->idx:InvalidNode;
    ini.w_u32		(sect_name,"n3", id);

    id 				= n4?(u32)n4->idx:InvalidNode;
    ini.w_u32		(sect_name,"n4", id);

    pl 				= pvCompress (Plane.n);
    ini.w_u16		(sect_name, "plane", pl);

	tools->PackPosition(np,Pos,tools->m_AIBBox,tools->m_Params);
    string256		buff;

	s16				x;
	u16				y;
	s16				z;

    sprintf			(buff,"%i,%u,%i",np.x,np.y,np.z);
    ini.w_string	(sect_name, "np", buff);
    ini.w_u8		(sect_name, "flag", flags.get());
}
Example #3
0
void SAINode::SaveStream(IWriter& F, ESceneAIMapTool* tools)
{
	u32 			id;
    u16 			pl;
	NodePosition 	np;

    id = n1?(u32)n1->idx:InvalidNode; F.w(&id,3);
    id = n2?(u32)n2->idx:InvalidNode; F.w(&id,3);
    id = n3?(u32)n3->idx:InvalidNode; F.w(&id,3);
    id = n4?(u32)n4->idx:InvalidNode; F.w(&id,3);
    pl = pvCompress (Plane.n);	 F.w_u16(pl);
	tools->PackPosition(np,Pos,tools->m_AIBBox,tools->m_Params); F.w(&np,sizeof(np));
    F.w_u8			(flags.get());
}
bool ESceneAIMapTools::Export(LPCSTR path)
{
//.?	if (!RealUpdateSnapList()) return false;
	if (!Valid()) return false;

    // calculate bbox
    Fbox bb;		CalculateNodesBBox(bb);

    AnsiString fn	= AnsiString(path)+"build.aimap";
    
    // export
    IWriter* F		= FS.w_open(fn.c_str());

    if (F){
        F->open_chunk	(E_AIMAP_CHUNK_VERSION);
        F->w_u16		(E_AIMAP_VERSION);
        F->close_chunk	();

        F->open_chunk	(E_AIMAP_CHUNK_BOX);
        F->w			(&bb,sizeof(bb));
        F->close_chunk	();

        F->open_chunk	(E_AIMAP_CHUNK_PARAMS);
        F->w			(&m_Params,sizeof(m_Params));
        F->close_chunk	();

        EnumerateNodes	();
        F->open_chunk	(E_AIMAP_CHUNK_NODES);
        F->w_u32		(m_Nodes.size());
        for (AINodeIt it=m_Nodes.begin(); it!=m_Nodes.end(); it++){
            u32 			id;
            u16 			pl;
            NodePosition 	np;
    
            id = (*it)->n1?(u32)(*it)->n1->idx:InvalidNode;  	F->w(&id,3);
            id = (*it)->n2?(u32)(*it)->n2->idx:InvalidNode;  	F->w(&id,3);
            id = (*it)->n3?(u32)(*it)->n3->idx:InvalidNode;  	F->w(&id,3);
            id = (*it)->n4?(u32)(*it)->n4->idx:InvalidNode;  	F->w(&id,3);
            pl = pvCompress ((*it)->Plane.n);	 				F->w_u16(pl);
            PackPosition	(np,(*it)->Pos,bb,m_Params); 	F->w(&np,sizeof(np));
        }
        F->close_chunk	();

        FS.w_close		(F);
		return true;
    }
	return false;
}