/** @file /ai/PathFind/pathfindtransciever.cpp @brief Zdrojovy kod s deklaraci transcieveru pro Pathfind Engine. Zdrojovy kod s deklaraci transcieveru pro Pathfind Engine. @author PZ @version 0.1 */ #include "ai/PathFind/pathfindtransciever.h" namespace ai_ns { namespace pathfind_ns { CPathFindTransciever* PFTrans; CPathFindTransciever::CPathFindTransciever() { PFTrans=this; // inicializace transcieveru initTransciever(); } void CPathFindTransciever::initTransciever() { pathfind_transceiver.fnc = PATHFIND_MSG_HANDLER; pathfind_transceiver.iActived = true; pathfind_transceiver.iPriority = 5; pathfind_transceiver.PrimaryID = MOD_PATHFIND; KRegisterGlobalTransceiver(&pathfind_transceiver, MOD_PATHFIND); } RVAL PATHFIND_MSG_HANDLER(MESSAGE_ID mid,SENDER s,PARAM p) { // GLOBALLOG("PathFind: Message Id: %d; Sender %d; Param %p\n", mid, s, &p); switch (mid) { case MSG_FLOODFILL_REQUEST: // pozadavek na zaplavu { try { GLOBALLOGID(PRIORITY_AI_FLOODFILL, "FLOODFILL_REQUEST for unit_id %i",((PACKET_FLOODFILL_REQUEST*) p)->unit_id); PFTrans->FLOODING_ASTAR_VERSION(((PACKET_FLOODFILL_REQUEST*) p)->unit_id,((PACKET_FLOODFILL_REQUEST*) p)->start_hex,((PACKET_FLOODFILL_REQUEST*) p)->mark_map,((PACKET_FLOODFILL_REQUEST*) p)->flood_mask,((PACKET_FLOODFILL_REQUEST*) p)->flooding_transparency); } catch(E_8K_AI_Pathfind_BadFloodFillStartingPoint e) { GLOBALLOGID(PRIORITY_FATAL, "Pathfinder: Invalidni startovni bod floodfillu."); THROW(E_8K_AI,"Fatalni chyba v 8K AI modulu. Viz zapis v logovacim souboru."); } } case MSG_PATHFIND_REQUEST: // pozadavek na cestu { TPATH* rvpath=new TPATH(); *rvpath=PFTrans->PATHFIND_ASTAR_VERSION(((PACKET_PATHFIND_REQUEST*) p)->unit_id,((PACKET_PATHFIND_REQUEST*) p)->from,((PACKET_PATHFIND_REQUEST*) p)->to,((PACKET_PATHFIND_REQUEST*) p)->pathfind_transparency); if ((*rvpath).empty()) { delete rvpath; return ((TPATH*) 0); } return rvpath; } case MSG_PATHFIND_INIT: // inicializace s mapou { PFTrans->initMapInfo(); return 0; } } return 0; } } }