1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00
vcmi/CConsoleHandler.cpp
Michał W. Urbańczyk e02f752211 Now hero movement should be working.
- fixed/added #22, #24, #25, #8, #11, partially #19
- minor improvements
2007-10-05 18:16:22 +00:00

85 lines
2.0 KiB
C++

#include "stdafx.h"
#include "CConsoleHandler.h"
#include "CAdvmapInterface.h"
#include "SDL.h"
#include "SDL_thread.h"
#include "CGameInfo.h"
#include "global.h"
#include "CGameState.h"
#include "CCallback.h"
#include "CPathfinder.h"
#include "mapHandler.h"
#include <sstream>
int internalFunc(void * callback)
{
CCallback * cb = (CCallback*)callback;
char * usersMessage = new char[500];
std::string readed;
while(true)
{
std::cin.getline(usersMessage, 500);
std::istringstream readed;
std::string pom(usersMessage);
readed.str(pom);
std::string cn; //command name
readed >> cn;
int3 src, dst;
int heronum;
int3 dest;
switch (*cn.c_str())
{
case 'P':
std::cout<<"Policzyc sciezke."<<std::endl;
readed>>src>>dst;
LOCPLINT->adventureInt->terrain.currentPath = CGI->pathf->getPath(src,dst,CGI->heroh->heroInstances[0]);
break;
case 'm': //number of heroes
std::cout<<"Number of heroes: "<<CGI->heroh->heroInstances.size()<<std::endl;
break;
case 'H': //position of hero
readed>>heronum;
std::cout<<"Position of hero "<<heronum<<": "<<CGI->heroh->heroInstances[heronum]->getPosition(false)<<std::endl;
break;
case 'M': //move heroa
{
readed>>heronum>>dest;
const CHeroInstance * hero = cb->getHeroInfo(0,heronum,0);
CPath * path = CGI->pathf->getPath(hero->getPosition(false),dest,hero);
cb->moveHero(heronum, path, 0, 0);
delete path;
break;
}
case 'D': //pos description
readed>>src;
CGI->mh->getObjDescriptions(src);
break;
case 'T': //test rect
readed>>src;
for(int g=0; g<8; ++g)
{
for(int v=0; v<8; ++v)
{
int3 csrc = src;
csrc.y+=g;
csrc.x+=v;
if(CGI->mh->getObjDescriptions(csrc).size())
std::cout<<'x';
else
std::cout<<'o';
}
std::cout<<std::endl;
}
}
//SDL_Delay(100);
}
return -1;
}
void CConsoleHandler::runConsole()
{
SDL_Thread * myth = SDL_CreateThread(&internalFunc, cb);
}