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()); }
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()); }
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; }