/** @file /ai/Strategizer/strategytransciever.h @brief Header s deklaraci transcieveru pro Strategizer. Header s deklaraci transcieveru pro Strategizer. @author PZ @version 0.1 */ #ifndef __PETR_ZITA_STRATEGY_TRANSCIEVER__ #define __PETR_ZITA_STRATEGY_TRANSCIEVER__ #include "ai/ai_makra.h" #include "common/Msg.h" #include "common/Log.h" #include "common/Interface.h" #include "world/world_messages.h" #include "world/players/player.h" #define CHECK_AI_THREAD_STATE {this->lockAIPlanningState();if(this->ai_planning_thread_state!=0){this->unlockAIPlanningState();return;}this->unlockAIPlanningState();} namespace ai_ns { namespace strategizer_ns { using namespace World; /** Forward deklarace message handleru. */ int runAIPlanning(void* param); RVAL STRATEGY_MSG_HANDLER(MESSAGE_ID mid,SENDER s,PARAM p); /** Trida CStrategyTransciever obsahuje oddelene cast pro komunikaci s vnejsim svetem. Je ciste virtualni, tudiz nemuze byt instanciovana. */ class CStrategyTransciever { public: CStrategyTransciever(); ~CStrategyTransciever(); virtual void AITurnForPlayer(int playerID,int last_history_event_id,PLAYER_TYPE ai_level)=0; protected: // promenne a funkce dulezite pro praci s vlaknem, ve kterem probiha AI planovani SDL_sem* AIPlanningSemaphore; SDL_mutex* AIPlanningMutex; SDL_Thread* AIPlanningThread; int passed_player_id; int passed_max_action_id; PLAYER_TYPE passed_ai_level; int ai_planning_thread_state; // =0 - OK, jinak ukonci vlakno void lockAIPlanningState(); void unlockAIPlanningState(); // definice transcieveru pro komunikaci TMessageTransceiver strategy_transceiver; void initTransciever(); private: virtual void initStrategy(TPacket_AI_LetsGo* initPackage)=0; friend RVAL STRATEGY_MSG_HANDLER(MESSAGE_ID mid,SENDER s,PARAM p); friend int runAIPlanning(void* param); }; extern CStrategyTransciever* StrEngine; } // end of namespace "strategizer_ns" } // end of namespace "ai_ns" #endif