mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
parent
d1fa849071
commit
04985fce2f
@ -1,4 +1,13 @@
|
||||
#include "CEmptyAI.h"
|
||||
#include <iostream>
|
||||
void CEmptyAI::init(CCallback * CB)
|
||||
{
|
||||
cb = CB;
|
||||
human=false;
|
||||
playerID=-1;
|
||||
serialID=-1;
|
||||
std::cout << "EmptyAI initialized." << std::endl;
|
||||
}
|
||||
void CEmptyAI::yourTurn()
|
||||
{
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
#include "../../AI_Base.h"
|
||||
|
||||
class CEmptyAI : public CAIBase
|
||||
class CEmptyAI : public CGlobalAI
|
||||
{
|
||||
CCallback * cb;
|
||||
public:
|
||||
void init(CCallback * CB);
|
||||
void yourTurn();
|
||||
void heroKilled(const CHeroInstance *);
|
||||
void heroCreated(const CHeroInstance *);
|
||||
|
@ -36,6 +36,8 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
@ -48,7 +50,12 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="EmptyAI.dll"
|
||||
OutputFile="../EmptyAI.dll"
|
||||
Version="0.1"
|
||||
GenerateDebugInformation="true"
|
||||
GenerateMapFile="true"
|
||||
MapFileName="mapfile.map"
|
||||
MapExports="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
@ -98,6 +105,12 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="3"
|
||||
InlineFunctionExpansion="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
FavorSizeOrSpeed="1"
|
||||
EnableFiberSafeOptimizations="true"
|
||||
WholeProgramOptimization="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
@ -110,7 +123,7 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="EmptyAI.dll"
|
||||
OutputFile="../EmptyAI.dll"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
|
@ -2,7 +2,7 @@
|
||||
#include "CEmptyAI.h"
|
||||
#include <cstring>
|
||||
#include <set>
|
||||
std::set<CAIBase*> ais;
|
||||
std::set<CGlobalAI*> ais;
|
||||
|
||||
DLL_EXPORT int GetGlobalAiVersion()
|
||||
{
|
||||
@ -13,13 +13,19 @@ DLL_EXPORT void GetAiName(char* name)
|
||||
{
|
||||
strcpy(name,NAME);
|
||||
}
|
||||
DLL_EXPORT CAIBase * GetNewAI()
|
||||
DLL_EXPORT char * GetAiNameS()
|
||||
{
|
||||
char * ret = new char[50];
|
||||
strcpy(ret,NAME);
|
||||
return ret;
|
||||
}
|
||||
DLL_EXPORT CGlobalAI * GetNewAI()
|
||||
{
|
||||
return new CEmptyAI();
|
||||
// return
|
||||
}
|
||||
DLL_EXPORT void ReleaseAI(CAIBase * i)
|
||||
DLL_EXPORT void ReleaseAI(CGlobalAI * i)
|
||||
{
|
||||
//delete (TTAICore*)i;
|
||||
//ais.erase(i);
|
||||
delete (CEmptyAI*)i;
|
||||
ais.erase(i);
|
||||
}
|
@ -3,9 +3,6 @@
|
||||
#include <iostream>
|
||||
#include "int3.h"
|
||||
#include "CGameInterface.h"
|
||||
class CAIBase : public CGameInterface
|
||||
{
|
||||
};
|
||||
|
||||
#define AI_INTERFACE_VER 1
|
||||
#ifdef _WIN32
|
||||
|
@ -1069,8 +1069,11 @@ CResDataBar::CResDataBar()
|
||||
{
|
||||
bg = CGI->bitmaph->loadBitmap("ZRESBAR.bmp");
|
||||
SDL_SetColorKey(bg,SDL_SRCCOLORKEY,SDL_MapRGB(bg->format,0,255,255));
|
||||
blueToPlayersAdv(bg,LOCPLINT->playerID);
|
||||
//blueToPlayersNice(bg,LOCPLINT->playerID);
|
||||
//std::vector<SDL_Color> kolory;
|
||||
//SDL_Color p1={40,65,139,255}, p2={36,59,125,255}, p3={35,56,121,255};
|
||||
//kolory+=p1,p2,p3;
|
||||
//blueToPlayersAdv(bg,LOCPLINT->playerID,2,&kolory);
|
||||
blueToPlayersAdv(bg,LOCPLINT->playerID,2);
|
||||
pos = genRect(bg->h,bg->w,3,575);
|
||||
|
||||
txtpos += (std::pair<int,int>(35,577)),(std::pair<int,int>(120,577)),(std::pair<int,int>(205,577)),
|
||||
@ -1221,6 +1224,7 @@ void CAdvMapInt::fnextHero()
|
||||
}
|
||||
void CAdvMapInt::fendTurn()
|
||||
{
|
||||
LOCPLINT->makingTurn = false;
|
||||
}
|
||||
|
||||
void CAdvMapInt::show()
|
||||
@ -1262,6 +1266,23 @@ void CAdvMapInt::show()
|
||||
|
||||
SDL_Flip(ekran);
|
||||
}
|
||||
void CAdvMapInt::hide()
|
||||
{
|
||||
kingOverview.deactivate();
|
||||
underground.deactivate();
|
||||
questlog.deactivate();
|
||||
sleepWake.deactivate();
|
||||
moveHero.deactivate();
|
||||
spellbook.deactivate();
|
||||
advOptions.deactivate();
|
||||
sysOptions.deactivate();
|
||||
nextHero.deactivate();
|
||||
endTurn.deactivate();
|
||||
minimap.deactivate();
|
||||
heroList.deactivate();
|
||||
townList.deactivate();
|
||||
terrain.deactivate();
|
||||
}
|
||||
void CAdvMapInt::update()
|
||||
{
|
||||
terrain.show();
|
||||
|
@ -253,6 +253,7 @@ public:
|
||||
void fendTurn();
|
||||
|
||||
void show(); //shows and activates adv. map interface
|
||||
void hide(); //deactivates advmap interface
|
||||
void update(); //redraws terrain
|
||||
|
||||
void centerOn(int3 on);
|
||||
|
@ -32,6 +32,7 @@ int CCallback::valMovePoints(CHeroInstance * chi)
|
||||
void CCallback::newTurn()
|
||||
{
|
||||
//std::map<int, PlayerState>::iterator i = gs->players.begin() ;
|
||||
gs->day++;
|
||||
for ( std::map<int, PlayerState>::iterator i=gs->players.begin() ; i!=gs->players.end();i++)
|
||||
{
|
||||
for (int j=0;j<(*i).second.heroes.size();j++)
|
||||
|
@ -12,6 +12,12 @@
|
||||
#include "hch/CLodHandler.h"
|
||||
#include "CPathfinder.h"
|
||||
#include <sstream>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h> //for .dll libs
|
||||
#else
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
using namespace CSDL_Ext;
|
||||
class OCM_HLP_CGIN
|
||||
{
|
||||
@ -111,6 +117,37 @@ void MotionInterested::deactivate()
|
||||
LOCPLINT->
|
||||
motioninterested.erase(std::find(LOCPLINT->motioninterested.begin(),LOCPLINT->motioninterested.end(),this));
|
||||
}
|
||||
|
||||
CGlobalAI * CAIHandler::getNewAI(CCallback * cb, std::string dllname)
|
||||
{
|
||||
dllname = "AI/"+dllname;
|
||||
CGlobalAI * ret=NULL;
|
||||
CGlobalAI*(*getAI)();
|
||||
void(*getName)(char*);
|
||||
#ifdef _WIN32
|
||||
HINSTANCE dll = LoadLibraryA(dllname.c_str());
|
||||
if (!dll)
|
||||
{
|
||||
std::cout << "Cannot open AI library ("<<dllname<<"). Throwing..."<<std::endl;
|
||||
throw new std::exception("Cannot open AI library");
|
||||
}
|
||||
//int len = dllname.size()+1;
|
||||
getName = (void(*)(char*))GetProcAddress(dll,"GetAiName");
|
||||
getAI = (CGlobalAI*(*)())GetProcAddress(dll,"GetNewAI");
|
||||
#else
|
||||
; //TODO: handle AI library on Linux
|
||||
#endif
|
||||
char * temp = new char[50];
|
||||
getName(temp);
|
||||
std::cout << "Loaded .dll with AI named " << temp << std::endl;
|
||||
delete temp;
|
||||
ret = getAI();
|
||||
ret->init(cb);
|
||||
return ret;
|
||||
}
|
||||
//CGlobalAI::CGlobalAI()
|
||||
//{
|
||||
//}
|
||||
CPlayerInterface::CPlayerInterface(int Player, int serial)
|
||||
{
|
||||
playerID=Player;
|
||||
@ -145,6 +182,7 @@ void CPlayerInterface::init(CCallback * CB)
|
||||
}
|
||||
void CPlayerInterface::yourTurn()
|
||||
{
|
||||
makingTurn = true;
|
||||
CGI->localPlayer = serialID;
|
||||
unsigned char & animVal = LOCPLINT->adventureInt->anim; //for animations handling
|
||||
adventureInt->show();
|
||||
@ -156,7 +194,7 @@ void CPlayerInterface::yourTurn()
|
||||
SDL_setFramerate(mainFPSmng, 24);
|
||||
SDL_Event sEvent;
|
||||
//framerate keeper initialized
|
||||
for(;;) // main loop
|
||||
for(;makingTurn;) // main loop
|
||||
{
|
||||
CGI->screenh->updateScreen();
|
||||
|
||||
@ -215,6 +253,7 @@ void CPlayerInterface::yourTurn()
|
||||
SDL_Delay(5); //give time for other apps
|
||||
SDL_framerateDelay(mainFPSmng);
|
||||
}
|
||||
adventureInt->hide();
|
||||
}
|
||||
|
||||
inline void subRect(const int & x, const int & y, const int & z, SDL_Rect & r, const int & hid)
|
||||
@ -807,7 +846,7 @@ SDL_Surface * CPlayerInterface::infoWin(void * specific) //specific=0 => draws i
|
||||
char * buf = new char[10];
|
||||
SDL_Surface * ret = copySurface(hInfo);
|
||||
SDL_SetColorKey(ret,SDL_SRCCOLORKEY,SDL_MapRGB(ret->format,0,255,255));
|
||||
blueToPlayersAdv(ret,playerID); // zygzyg - nie koloruje, tylko odrobine smieci
|
||||
blueToPlayersAdv(ret,playerID,1);
|
||||
const CHeroInstance * curh = (const CHeroInstance *)adventureInt->selection.selected;
|
||||
printAt(curh->name,75,15,GEOR13,zwykly,ret);
|
||||
for (int i=0;i<PRIMARY_SKILLS;i++)
|
||||
|
@ -91,15 +91,23 @@ public:
|
||||
bool human;
|
||||
int playerID, serialID;
|
||||
|
||||
virtual void init(CCallback * CB)=0{};
|
||||
virtual void yourTurn()=0{};
|
||||
virtual void heroKilled(const CHeroInstance * hero)=0{};
|
||||
virtual void heroCreated(const CHeroInstance * hero)=0{};
|
||||
|
||||
virtual void heroMoved(const HeroMoveDetails & details)=0;
|
||||
};
|
||||
class CGlobalAI;
|
||||
class CAIHandler
|
||||
{
|
||||
public:
|
||||
static CGlobalAI * getNewAI(CCallback * cb, std::string dllname);
|
||||
};
|
||||
class CGlobalAI : public CGameInterface // AI class (to derivate)
|
||||
{
|
||||
public:
|
||||
//CGlobalAI();
|
||||
virtual void yourTurn(){};
|
||||
virtual void heroKilled(const CHeroInstance * hero){};
|
||||
virtual void heroCreated(const CHeroInstance * hero){};
|
||||
@ -107,6 +115,7 @@ public:
|
||||
class CPlayerInterface : public CGameInterface
|
||||
{
|
||||
public:
|
||||
bool makingTurn;
|
||||
SDL_Event * current;
|
||||
CAdvMapInt * adventureInt;
|
||||
FPSmanager * mainFPSmng;
|
||||
|
10
CMT.cpp
10
CMT.cpp
@ -60,7 +60,7 @@ TTF_Font * TNRB16, *TNR, *GEOR13, *GEORXX, *GEORM;
|
||||
|
||||
void initGameState(CGameInfo * cgi)
|
||||
{
|
||||
cgi->state->day=1;
|
||||
cgi->state->day=0;
|
||||
/*********creating players entries in gs****************************************/
|
||||
for (int i=0; i<cgi->scenarioOps.playerInfos.size();i++)
|
||||
{
|
||||
@ -649,11 +649,9 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
for (int i=0; i<cgi->scenarioOps.playerInfos.size();i++) //initializing interfaces
|
||||
{
|
||||
|
||||
//TODO: uncomment when AI will be done
|
||||
|
||||
//if(cgi->scenarioOps.playerInfos[i].name=="AI")
|
||||
// cgi->playerint.push_back(new CGlobalAI());
|
||||
//else
|
||||
if(cgi->scenarioOps.playerInfos[i].name=="Computer")
|
||||
cgi->playerint.push_back(CAIHandler::getNewAI(new CCallback(cgi->state,cgi->scenarioOps.playerInfos[i].color),"EmptyAI.dll"));
|
||||
else
|
||||
{
|
||||
cgi->state->currentPlayer=cgi->scenarioOps.playerInfos[i].color;
|
||||
cgi->playerint.push_back(new CPlayerInterface(cgi->scenarioOps.playerInfos[i].color,i));
|
||||
|
@ -8,7 +8,6 @@
|
||||
#include "CMessage.h"
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include "hch\CDefHandler.h"
|
||||
|
||||
SDL_Surface * CSDL_Ext::newSurface(int w, int h, SDL_Surface * mod) //creates new surface, with flags/format same as in surface given
|
||||
{
|
||||
return SDL_CreateRGBSurface(mod->flags,w,h,mod->format->BitsPerPixel,mod->format->Rmask,mod->format->Gmask,mod->format->Bmask,mod->format->Amask);
|
||||
@ -538,17 +537,34 @@ void CSDL_Ext::blueToPlayers(SDL_Surface * sur, int player)
|
||||
}
|
||||
}
|
||||
|
||||
void CSDL_Ext::blueToPlayersAdv(SDL_Surface * sur, int player)
|
||||
void CSDL_Ext::blueToPlayersAdv(SDL_Surface * sur, int player, int mode, void* additionalInfo)
|
||||
{
|
||||
if(player==1) //it is actually blue...
|
||||
return;
|
||||
if(sur->format->BitsPerPixel == 8)
|
||||
{
|
||||
for(int i=0; i<sur->format->palette->ncolors; ++i)
|
||||
for(int i=0; i<sur->format->palette->ncolors; ++i) //message, button, avmap, resbar
|
||||
{
|
||||
SDL_Color * cc = sur->format->palette->colors+i;
|
||||
if(cc->b>cc->g && cc->b>cc->r)
|
||||
if(
|
||||
((mode==0) && (cc->b>cc->g) && (cc->b>cc->r)) ||
|
||||
((mode==1) && (cc->r<45) && (cc->b>80) && (cc->g<70) && ((cc->b-cc->r)>40)) ||
|
||||
((mode==2) && (cc->r<110) && (cc->b>63) && (cc->g<122) && ((cc->b-cc->r)>44) && ((cc->b-cc->g)>32))
|
||||
)
|
||||
{
|
||||
if ((mode==2) && additionalInfo)
|
||||
{
|
||||
for (int vi=0; vi<((std::vector<SDL_Color>*)additionalInfo)->size(); vi++)
|
||||
{
|
||||
if
|
||||
(
|
||||
((*((std::vector<SDL_Color>*)additionalInfo))[vi].r==cc->r) &&
|
||||
((*((std::vector<SDL_Color>*)additionalInfo))[vi].g==cc->g) &&
|
||||
((*((std::vector<SDL_Color>*)additionalInfo))[vi].b==cc->b)
|
||||
)
|
||||
goto main8bitloopend;
|
||||
}
|
||||
}
|
||||
std::vector<long long int> sort1;
|
||||
sort1.push_back(cc->r);
|
||||
sort1.push_back(cc->g);
|
||||
@ -569,6 +585,8 @@ void CSDL_Ext::blueToPlayersAdv(SDL_Surface * sur, int player)
|
||||
(*sort2[hh].second) = (sort1[hh]*0.8 + sort2[hh].first)/2;
|
||||
}
|
||||
}
|
||||
main8bitloopend:
|
||||
;
|
||||
}
|
||||
}
|
||||
else if(sur->format->BitsPerPixel == 24)
|
||||
@ -605,7 +623,10 @@ void CSDL_Ext::blueToPlayersAdv(SDL_Surface * sur, int player)
|
||||
}
|
||||
else
|
||||
{
|
||||
if(cp[0]>cp[1] && cp[0]>cp[2])
|
||||
if(
|
||||
((mode==0) && (cp[0]>cp[1]) && (cp[0]>cp[2])) ||
|
||||
((mode==1) && (cp[2]<45) && (cp[0]>80) && (cp[1]<70) && ((cp[0]-cp[1])>40))
|
||||
)
|
||||
{
|
||||
std::vector<long long int> sort1;
|
||||
sort1.push_back(cp[2]);
|
||||
|
@ -31,7 +31,9 @@ namespace CSDL_Ext
|
||||
void printAt(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=ekran, unsigned char quality = 2); // quality: 0 - lowest, 1 - medium, 2 - highest
|
||||
void update(SDL_Surface * what = ekran); //updates whole surface (default - main screen)
|
||||
void blueToPlayers(SDL_Surface * sur, int player); //simple color substitution
|
||||
void blueToPlayersAdv(SDL_Surface * sur, int player); //substitute blue color by another one, makes it nicer keeping nuances
|
||||
void blueToPlayersAdv(SDL_Surface * sur, int player, int mode=0, void* additionalInfo=NULL); //substitute blue color by another one, makes it nicer keeping nuances
|
||||
//mode 1 is calibrated for hero infobox
|
||||
//mode 2 is calibrated for resbar and gets in additionalInfo a pointer to the set of (SDL_Color) which shouldn't be replaced
|
||||
void blueToPlayersNice(SDL_Surface * sur, int player); //uses interface gems to substitute colours
|
||||
void setPlayerColor(SDL_Surface * sur, unsigned char player); //sets correct color of flags; -1 for neutral
|
||||
std::string processStr(std::string str, std::vector<std::string> & tor); //replaces %s in string
|
||||
|
Loading…
Reference in New Issue
Block a user