#include "stdafx.h" #include "CGameInterface.h" #include "lib/BattleState.h" #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN //excludes rarely used stuff from windows headers - delete this line if something is missing #include //for .dll libs #else #include #endif /* * CGameInterface.cpp, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ template rett * createAny(std::string dllname, std::string methodName) { char temp[50]; rett * ret=NULL; rett*(*getAI)(); void(*getName)(char*); #ifdef _WIN32 HINSTANCE dll = LoadLibraryA(dllname.c_str()); if (dll) { getName = (void(*)(char*))GetProcAddress(dll,"GetAiName"); getAI = (rett*(*)())GetProcAddress(dll,methodName.c_str()); } #else void *dll = dlopen(dllname.c_str(), RTLD_LOCAL | RTLD_LAZY); if (dll) { getName = (void(*)(char*))dlsym(dll,"GetAiName"); getAI = (rett*(*)())dlsym(dll,methodName.c_str()); } #endif if (!dll) { tlog1 << "Cannot open dynamic library ("< rett * createAnyAI(std::string dllname, std::string methodName) { std::string filename = getAIFileName(dllname); rett* ret = createAny(LIB_DIR "/AI/" + filename, methodName); ret->dllName = filename; return ret; } CGlobalAI * CDynLibHandler::getNewAI(std::string dllname) { return createAnyAI(dllname, "GetNewAI"); } CBattleGameInterface * CDynLibHandler::getNewBattleAI(std::string dllname ) { return createAnyAI(dllname, "GetNewBattleAI"); } CScriptingModule * CDynLibHandler::getNewScriptingModule(std::string dllname) { return createAny(dllname, "GetNewModule"); } BattleAction CGlobalAI::activeStack( const CStack * stack ) { BattleAction ba; ba.actionType = BattleAction::DEFEND; ba.stackNumber = stack->ID; return ba; }