/** @file /ai/MapAnalyzer/mapanalyzertransciever.h @brief Header s deklaraci transcieveru pro Map Analyzer Engine. Header s deklaraci transcieveru pro Map Analyzer Engine. @author PZ @version 0.1 */ #ifndef __PETR_ZITA_MAPANALYZER_TRANSCIEVER__ #define __PETR_ZITA_MAPANALYZER_TRANSCIEVER__ #pragma warning( disable : 4290 ) #include "common/Msg.h" #include "common/Log.h" #include "common/Interface.h" #include "world/plan/plan.h" #include "world/world_messages.h" namespace ai_ns { namespace mapanalyzer_ns { /** Forward deklarace message handleru. */ RVAL MAPANALYZER_MSG_HANDLER(MESSAGE_ID mid,SENDER s,PARAM p); /** Trida CMapAnalyzerTransciever obsahuje oddelene cast pro komunikaci s vnejsim svetem. Je ciste virtualni, tudiz nemuze byt instanciovana. */ class CMapAnalyzerTransciever { public: /** Konstruktor. */ CMapAnalyzerTransciever(); protected: /** Definice transcieveru pro komunikaci. */ TMessageTransceiver mapanalyzer_transceiver; /** Metoda pro defaultni inicializaci a registraci tranceiveru v globalni fronte. */ void initTransciever(); /** Metoda inicializujici analyzator mapy predanim ukazatelu na struktury WORLDu. @param initPackage - sada ukazatelu na struktury WORLDu (TPacket_AI_LetsGo*) */ virtual void initMapAnalyzer(TPacket_AI_LetsGo* initPackage)=0; /** Metoda vrati souradnice nejblizsi volne budovy daneho hrace, jenz je schopna vyprodukovat danou jednotku. @param playerID World ID hrace @param hexid souradnice hexu, od ktereho se vzdalenost pocita @param unit_type ID typu jednotky jenz je pozadovana @return souradnice nejblizsi prazdne budovy, jenz je schopna jednptku vyprodukovat */ virtual int getNearestFreeProductionBuildingForUnitTrain(int playerID,int hexid,int unit_type)=0; /** Metoda vrati nejvhodnejsi misto pro postaveni produkcni budovy. @param playerID World ID hrace @param building_type ID typu produkcni budovy @param planned_buildings_coordinates kontajner s hexy, na nichz hrac planuje stavet budovy @param assigned_builder_position World ID stavitele, jenz byl stavbe prirazen (relevantni pouze pri modu preplanovani stavby pro konkretniho stavitele, jinak rovno (-1)) @return souradnice nejvhodnejsiho mista pro stavbu rpodukcni budovy */ virtual int getBestProductionBuildingPlace(int playerID,int building_type,std::list* planned_buildings_coordinates,int assigned_builder_position)=0; /** Metoda vrati pomyslny stred hracova uzemi. @param playerID World ID hrace @return pomyslny stred hracova uzemi */ virtual int findPlayerEmpireCenter(int playerID)=0; /** Metoda vrati prostou vzdalenost mezi dvema hexy. @param hexid1 souradnice prvniho hexu @param hexid2 souradnice druheho hexu @return prostou vzdalenost mezi dvema hexy */ virtual int hexDistance(int hexid1,int hexid2)=0; /** Metoda vrati ukazatel na strukturu informaci o meste na dane pozici. @param city_position souradnice hexu s mestem @return ukazatel na strukturu (TOWN*) informaci o meste */ virtual World::TOWN* findCityByPosition(int city_position)=0; /** Metoda vrati nahodny neprozkoumany hex pro daneho hrace. @param playerID World ID hrace @return nahodny neprozkoumany hex pro daneho hrace */ virtual int getRandomInvisibleHex(int playerID)=0; /** Metoda vrati akcni radius (kruhove okoli) zadaneho polomeru urciteho hexu jako seznam souradnic. @param hexid World ID hrace @param radius_size polomer kruhoveho okoli @return (TPacket_MapAnalyzer_ActionRadiusResponse*) obsahujici kontajner s hexy uvnitr kruhoveho okoli */ virtual TPacket_MapAnalyzer_ActionRadiusResponse* getActionRadius(int hexid,int radius_size)=0; /** Metoda vrati nejvhodnejsi pozici a orientaci pro stavbu mostu pro daneho hrace. @param playerID World ID hrace @return (TPacket_MapAnalyzer_BridgeBuildingResponse*) obsahujici pozici a orientaci mostu a navic i pozici stavitele pred stavbou mostu, nebo NULL, pokud neni zadny most potreba stavet */ virtual TPacket_MapAnalyzer_BridgeBuildingResponse* bridgeBuildingAnalysis(int playerID)=0; /** Metoda vrati priznak, zdali je mozno vytrenovat jednotku urciteho typu v budove na zadanych souradnicich. @param building_placement souradnice budovy @param unit_type typ trenovane jednotky @return priznak, zdali je mozno vytrenovat jednotku urciteho typu v budove na zadanych souradnicich */ virtual bool isUnitPossibleToTrainInBuildingOnHex(int building_placement,int unit_type)=0; /** Metoda vrati souradnice jednotky o zadanem World ID. @param unit_world_id World ID jednotky @return souradnice jednotky */ virtual int findUnitPosition(int unit_world_id)=0; private: /** Zpratelena funkce transceiveru obsluhujici prichozi zpravy. */ friend RVAL MAPANALYZER_MSG_HANDLER(MESSAGE_ID mid,SENDER s,PARAM p); }; /** Konkretni instance tridy transceiveru pristupna pro funkci transceiveru. */ extern CMapAnalyzerTransciever* MATrans; } // end of namespace "mapanalyzer_ns" } // end of namespace "ai_ns" #endif