mirror of
https://github.com/vcmi/vcmi.git
synced 2025-06-19 00:17:56 +02:00
Better implementation of the framerate manager, FPS timer added, minor improvements
This commit is contained in:
@ -183,6 +183,14 @@ void CCursorHandler::shiftPos( int &x, int &y )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CCursorHandler::centerCursor()
|
||||||
|
{
|
||||||
|
SDL_Surface *cursor = this->cursors[mode]->ourImages[number].bitmap;
|
||||||
|
this->xpos = (screen->w / 2.) - (cursor->w / 2.);
|
||||||
|
this->ypos = (screen->h / 2.) - (cursor->h / 2.);
|
||||||
|
SDL_WarpMouse(this->xpos, this->ypos);
|
||||||
|
}
|
||||||
|
|
||||||
CCursorHandler::~CCursorHandler()
|
CCursorHandler::~CCursorHandler()
|
||||||
{
|
{
|
||||||
if(help)
|
if(help)
|
||||||
|
@ -37,6 +37,7 @@ public:
|
|||||||
void draw2();
|
void draw2();
|
||||||
void hide() { Show=0; };
|
void hide() { Show=0; };
|
||||||
void show() { Show=1; };
|
void show() { Show=1; };
|
||||||
|
void centerCursor();
|
||||||
~CCursorHandler();
|
~CCursorHandler();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -266,7 +266,7 @@ int main(int argc, char** argv)
|
|||||||
playIntro();
|
playIntro();
|
||||||
|
|
||||||
SDL_FillRect(screen,NULL,0);
|
SDL_FillRect(screen,NULL,0);
|
||||||
SDL_Flip(screen);
|
CSDL_Ext::update(screen);
|
||||||
loading.join();
|
loading.join();
|
||||||
tlog0<<"Initialization of VCMI (together): "<<total.getDif()<<std::endl;
|
tlog0<<"Initialization of VCMI (together): "<<total.getDif()<<std::endl;
|
||||||
|
|
||||||
|
@ -105,8 +105,6 @@ CPlayerInterface::CPlayerInterface(int Player)
|
|||||||
makingTurn = false;
|
makingTurn = false;
|
||||||
showingDialog = new CondSh<bool>(false);
|
showingDialog = new CondSh<bool>(false);
|
||||||
sysOpts = GDefaultOptions;
|
sysOpts = GDefaultOptions;
|
||||||
//initializing framerate keeper
|
|
||||||
//framerate keeper initialized
|
|
||||||
cingconsole = new CInGameConsole;
|
cingconsole = new CInGameConsole;
|
||||||
terminate_cond.set(false);
|
terminate_cond.set(false);
|
||||||
firstCall = 1; //if loading will be overwritten in serialize
|
firstCall = 1; //if loading will be overwritten in serialize
|
||||||
@ -283,7 +281,7 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details)
|
|||||||
initMovement(details, ho, hp);
|
initMovement(details, ho, hp);
|
||||||
|
|
||||||
//first initializing done
|
//first initializing done
|
||||||
SDL_framerateDelay(GH.mainFPSmng); // after first move
|
GH.mainFPSmng->framerateDelay(); // after first move
|
||||||
|
|
||||||
//main moving
|
//main moving
|
||||||
for(int i=1; i<32; i+=2*sysOpts.heroMoveSpeed)
|
for(int i=1; i<32; i+=2*sysOpts.heroMoveSpeed)
|
||||||
@ -292,7 +290,7 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details)
|
|||||||
adventureInt->updateScreen = true;
|
adventureInt->updateScreen = true;
|
||||||
adventureInt->show(screen);
|
adventureInt->show(screen);
|
||||||
CSDL_Ext::update(screen);
|
CSDL_Ext::update(screen);
|
||||||
SDL_framerateDelay(GH.mainFPSmng); //for animation purposes
|
GH.mainFPSmng->framerateDelay(); //for animation purposes
|
||||||
} //for(int i=1; i<32; i+=4)
|
} //for(int i=1; i<32; i+=4)
|
||||||
//main moving done
|
//main moving done
|
||||||
|
|
||||||
@ -1330,18 +1328,11 @@ void CPlayerInterface::update()
|
|||||||
if(adventureInt && !adventureInt->selection && GH.topInt() == adventureInt)
|
if(adventureInt && !adventureInt->selection && GH.topInt() == adventureInt)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
GH.updateTime();
|
|
||||||
GH.handleEvents();
|
|
||||||
|
|
||||||
if(adventureInt && !adventureInt->isActive() && adventureInt->scrollingDir) //player forces map scrolling though interface is disabled
|
if(adventureInt && !adventureInt->isActive() && adventureInt->scrollingDir) //player forces map scrolling though interface is disabled
|
||||||
GH.totalRedraw();
|
GH.totalRedraw();
|
||||||
else
|
else
|
||||||
GH.simpleRedraw();
|
GH.simpleRedraw();
|
||||||
|
|
||||||
CCS->curh->draw1();
|
|
||||||
CSDL_Ext::update(screen);
|
|
||||||
CCS->curh->draw2();
|
|
||||||
|
|
||||||
pim->unlock();
|
pim->unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,12 +351,7 @@ void CGPreGame::update()
|
|||||||
if(SEL)
|
if(SEL)
|
||||||
SEL->update();
|
SEL->update();
|
||||||
|
|
||||||
CCS->curh->draw1();
|
|
||||||
SDL_Flip(screen);
|
|
||||||
CCS->curh->draw2();
|
|
||||||
GH.topInt()->show(screen);
|
GH.topInt()->show(screen);
|
||||||
GH.updateTime();
|
|
||||||
GH.handleEvents();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CSelectionScreen::CSelectionScreen(CMenuScreen::EState Type, CMenuScreen::EMultiMode MultiPlayer /*= CMenuScreen::SINGLE_PLAYER*/, const std::map<ui32, std::string> *Names /*= NULL*/)
|
CSelectionScreen::CSelectionScreen(CMenuScreen::EState Type, CMenuScreen::EMultiMode MultiPlayer /*= CMenuScreen::SINGLE_PLAYER*/, const std::map<ui32, std::string> *Names /*= NULL*/)
|
||||||
|
@ -103,6 +103,11 @@ IShowActivable * CGuiHandler::topInt()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CGuiHandler::totalRedraw()
|
void CGuiHandler::totalRedraw()
|
||||||
|
{
|
||||||
|
this->invalidateTotalRedraw = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CGuiHandler::internalTotalRedraw()
|
||||||
{
|
{
|
||||||
for(int i=0;i<objsToBlit.size();i++)
|
for(int i=0;i<objsToBlit.size();i++)
|
||||||
objsToBlit[i]->showAll(screen2);
|
objsToBlit[i]->showAll(screen2);
|
||||||
@ -111,6 +116,9 @@ void CGuiHandler::totalRedraw()
|
|||||||
|
|
||||||
if(objsToBlit.size())
|
if(objsToBlit.size())
|
||||||
objsToBlit.back()->showAll(screen);
|
objsToBlit.back()->showAll(screen);
|
||||||
|
|
||||||
|
this->invalidateTotalRedraw = false;
|
||||||
|
this->invalidateSimpleRedraw = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGuiHandler::updateTime()
|
void CGuiHandler::updateTime()
|
||||||
@ -303,11 +311,18 @@ void CGuiHandler::handleMouseMotion(SDL_Event *sEvent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CGuiHandler::simpleRedraw()
|
void CGuiHandler::simpleRedraw()
|
||||||
|
{
|
||||||
|
this->invalidateSimpleRedraw = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CGuiHandler::internalSimpleRedraw()
|
||||||
{
|
{
|
||||||
//update only top interface and draw background
|
//update only top interface and draw background
|
||||||
if(objsToBlit.size() > 1)
|
if(objsToBlit.size() > 1)
|
||||||
blitAt(screen2,0,0,screen); //blit background
|
blitAt(screen2,0,0,screen); //blit background
|
||||||
objsToBlit.back()->show(screen); //blit active interface/window
|
objsToBlit.back()->show(screen); //blit active interface/window
|
||||||
|
|
||||||
|
this->invalidateSimpleRedraw = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGuiHandler::handleMoveInterested( const SDL_MouseMotionEvent & motion )
|
void CGuiHandler::handleMoveInterested( const SDL_MouseMotionEvent & motion )
|
||||||
@ -343,14 +358,33 @@ void CGuiHandler::run()
|
|||||||
setThreadName(-1, "CGuiHandler::run");
|
setThreadName(-1, "CGuiHandler::run");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
SDL_initFramerate(mainFPSmng);
|
CCS->curh->centerCursor();
|
||||||
|
mainFPSmng->init(); // resets internal clock, needed for FPS manager
|
||||||
while(!terminate)
|
while(!terminate)
|
||||||
{
|
{
|
||||||
if(curInt)
|
if(curInt)
|
||||||
curInt->update();
|
curInt->update(); // calls a update and drawing process of the loaded game interface object at the moment
|
||||||
|
|
||||||
SDL_framerateDelay(mainFPSmng);
|
// Handles mouse and key input
|
||||||
//SDL_Delay(20); //give time for other apps
|
GH.updateTime();
|
||||||
|
GH.handleEvents();
|
||||||
|
|
||||||
|
// Redraws the GUI only once during rendering
|
||||||
|
if (this->invalidateTotalRedraw == true)
|
||||||
|
internalTotalRedraw();
|
||||||
|
if (this->invalidateSimpleRedraw == true)
|
||||||
|
internalSimpleRedraw();
|
||||||
|
|
||||||
|
if (SHOW_FPS)
|
||||||
|
drawFPSCounter();
|
||||||
|
|
||||||
|
mainFPSmng->framerateDelay(); // holds a constant FPS
|
||||||
|
|
||||||
|
// draw the mouse cursor and update the screen
|
||||||
|
// todo: bad way of updating the cursor, update screen should be the last statement of the rendering process
|
||||||
|
CCS->curh->draw1();
|
||||||
|
CSDL_Ext::update(screen);
|
||||||
|
CCS->curh->draw2();
|
||||||
}
|
}
|
||||||
} HANDLE_EXCEPTION
|
} HANDLE_EXCEPTION
|
||||||
}
|
}
|
||||||
@ -363,8 +397,8 @@ CGuiHandler::CGuiHandler()
|
|||||||
terminate = false;
|
terminate = false;
|
||||||
statusbar = NULL;
|
statusbar = NULL;
|
||||||
|
|
||||||
mainFPSmng = new FPSmanager;
|
// Creates the FPS manager and sets the framerate to 48 which is doubled the value of the original Heroes 3 FPS rate
|
||||||
SDL_setFramerate(mainFPSmng, 48);
|
mainFPSmng = new FPSManager(48);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGuiHandler::~CGuiHandler()
|
CGuiHandler::~CGuiHandler()
|
||||||
@ -377,6 +411,17 @@ void CGuiHandler::breakEventHandling()
|
|||||||
current = NULL;
|
current = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CGuiHandler::drawFPSCounter()
|
||||||
|
{
|
||||||
|
const static SDL_Color yellow = {255, 255, 0, 0};
|
||||||
|
static SDL_Rect overlay = { 0, 0, 64, 32};
|
||||||
|
Uint32 black = SDL_MapRGB(screen->format, 10, 10, 10);
|
||||||
|
SDL_FillRect(screen, &overlay, black);
|
||||||
|
std::string fps = toString(mainFPSmng->fps);
|
||||||
|
CSDL_Ext::printAt(fps, 10, 10, FONT_BIG, yellow, screen);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CIntObject::activateLClick()
|
void CIntObject::activateLClick()
|
||||||
{
|
{
|
||||||
GH.lclickable.push_front(this);
|
GH.lclickable.push_front(this);
|
||||||
|
@ -511,8 +511,16 @@ public:
|
|||||||
/// Handles GUI logic and drawing
|
/// Handles GUI logic and drawing
|
||||||
class CGuiHandler
|
class CGuiHandler
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
bool invalidateTotalRedraw;
|
||||||
|
bool invalidateSimpleRedraw;
|
||||||
|
|
||||||
|
void internalTotalRedraw();
|
||||||
|
void internalSimpleRedraw();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FPSmanager * mainFPSmng; //to keep const framerate
|
const static bool SHOW_FPS = false; // shows a fps counter when set to true
|
||||||
|
FPSManager *mainFPSmng; //to keep const framerate
|
||||||
timeHandler th;
|
timeHandler th;
|
||||||
std::list<IShowActivable *> listInt; //list of interfaces - front=foreground; back = background (includes adventure map, window interfaces, all kind of active dialogs, and so on)
|
std::list<IShowActivable *> listInt; //list of interfaces - front=foreground; back = background (includes adventure map, window interfaces, all kind of active dialogs, and so on)
|
||||||
IStatusBar * statusbar;
|
IStatusBar * statusbar;
|
||||||
@ -539,14 +547,17 @@ public:
|
|||||||
|
|
||||||
CGuiHandler();
|
CGuiHandler();
|
||||||
~CGuiHandler();
|
~CGuiHandler();
|
||||||
void run();
|
void run(); // holds the main loop for the whole program after initialization and manages the update/rendering system
|
||||||
void totalRedraw(); //forces total redraw (using showAll)
|
|
||||||
void simpleRedraw(); //update only top interface and draw background from buffer
|
void totalRedraw(); //forces total redraw (using showAll), sets a flag, method gets called at the end of the rendering
|
||||||
|
void simpleRedraw(); //update only top interface and draw background from buffer, sets a flag, method gets called at the end of the rendering
|
||||||
|
|
||||||
void popInt(IShowActivable *top); //removes given interface from the top and activates next
|
void popInt(IShowActivable *top); //removes given interface from the top and activates next
|
||||||
void popIntTotally(IShowActivable *top); //deactivates, deletes, removes given interface from the top and activates next
|
void popIntTotally(IShowActivable *top); //deactivates, deletes, removes given interface from the top and activates next
|
||||||
void pushInt(IShowActivable *newInt); //deactivate old top interface, activates this one and pushes to the top
|
void pushInt(IShowActivable *newInt); //deactivate old top interface, activates this one and pushes to the top
|
||||||
void popInts(int howMany); //pops one or more interfaces - deactivates top, deletes and removes given number of interfaces, activates new front
|
void popInts(int howMany); //pops one or more interfaces - deactivates top, deletes and removes given number of interfaces, activates new front
|
||||||
IShowActivable *topInt(); //returns top interface
|
IShowActivable *topInt(); //returns top interface
|
||||||
|
|
||||||
void updateTime(); //handles timeInterested
|
void updateTime(); //handles timeInterested
|
||||||
void handleEvents(); //takes events from queue and calls interested objects
|
void handleEvents(); //takes events from queue and calls interested objects
|
||||||
void handleEvent(SDL_Event *sEvent);
|
void handleEvent(SDL_Event *sEvent);
|
||||||
@ -554,6 +565,7 @@ public:
|
|||||||
void handleMoveInterested( const SDL_MouseMotionEvent & motion );
|
void handleMoveInterested( const SDL_MouseMotionEvent & motion );
|
||||||
void fakeMouseMove();
|
void fakeMouseMove();
|
||||||
void breakEventHandling(); //current event won't be propagated anymore
|
void breakEventHandling(); //current event won't be propagated anymore
|
||||||
|
void CGuiHandler::drawFPSCounter(); // draws the FPS to the upper left corner of the screen
|
||||||
ui8 defActionsDef; //default auto actions
|
ui8 defActionsDef; //default auto actions
|
||||||
ui8 captureChildren; //all newly created objects will get their parents from stack and will be added to parents children list
|
ui8 captureChildren; //all newly created objects will get their parents from stack and will be added to parents children list
|
||||||
std::list<CIntObject *> createdObj; //stack of objs being created
|
std::list<CIntObject *> createdObj; //stack of objs being created
|
||||||
|
@ -1,84 +1,41 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
|
* SDL_framerate.h, part of VCMI engine
|
||||||
SDL_framerate: framerate manager
|
*
|
||||||
|
* Authors: listed in file AUTHORS in main folder
|
||||||
LGPL (c) A. Schiffler
|
*
|
||||||
|
* License: GNU General Public License v2.0 or later
|
||||||
|
* Full text of license available in license.txt file, in main folder
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../stdafx.h"
|
#include "../stdafx.h"
|
||||||
#include "SDL_framerate.h"
|
#include "SDL_framerate.h"
|
||||||
|
#include <SDL.h>
|
||||||
|
|
||||||
/*
|
|
||||||
Initialize the framerate manager
|
|
||||||
*/
|
|
||||||
|
|
||||||
void SDL_initFramerate(FPSmanager * manager)
|
FPSManager::FPSManager(int rate)
|
||||||
{
|
{
|
||||||
/*
|
this->rate = rate;
|
||||||
* Store some sane values
|
this->rateticks = (1000.0 / (double) rate);
|
||||||
*/
|
this->fps = 0;
|
||||||
manager->framecount = 0;
|
|
||||||
manager->rate = FPS_DEFAULT;
|
|
||||||
manager->rateticks = (1000.0 / (float) FPS_DEFAULT);
|
|
||||||
manager->lastticks = SDL_GetTicks();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
void FPSManager::init()
|
||||||
Set the framerate in Hz
|
|
||||||
*/
|
|
||||||
|
|
||||||
int SDL_setFramerate(FPSmanager * manager, int rate)
|
|
||||||
{
|
{
|
||||||
if ((rate >= FPS_LOWER_LIMIT) && (rate <= FPS_UPPER_LIMIT)) {
|
this->lastticks = SDL_GetTicks();
|
||||||
manager->framecount = 0;
|
|
||||||
manager->rate = rate;
|
|
||||||
manager->rateticks = (1000.0 / (float) rate);
|
|
||||||
return (0);
|
|
||||||
} else {
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
void FPSManager::framerateDelay()
|
||||||
Return the current target framerate in Hz
|
|
||||||
*/
|
|
||||||
|
|
||||||
int SDL_getFramerate(FPSmanager * manager)
|
|
||||||
{
|
{
|
||||||
if (manager == NULL) {
|
Uint32 currentTicks = SDL_GetTicks();
|
||||||
return (-1);
|
double diff = currentTicks - this->lastticks;
|
||||||
} else {
|
|
||||||
return (manager->rate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
if (diff < this->rateticks) // FPS is higher than it should be, then wait some time
|
||||||
Delay execution to maintain a constant framerate. Calculate fps.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void SDL_framerateDelay(FPSmanager * manager)
|
|
||||||
{
|
{
|
||||||
Uint32 current_ticks;
|
SDL_Delay(ceil(this->rateticks) - diff);
|
||||||
Uint32 target_ticks;
|
|
||||||
Uint32 the_delay;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Next frame
|
|
||||||
*/
|
|
||||||
manager->framecount++;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get/calc ticks
|
|
||||||
*/
|
|
||||||
current_ticks = SDL_GetTicks();
|
|
||||||
target_ticks = manager->lastticks + (Uint32) ((float) manager->framecount * manager->rateticks);
|
|
||||||
|
|
||||||
if (current_ticks <= target_ticks) {
|
|
||||||
the_delay = target_ticks - current_ticks;
|
|
||||||
SDL_Delay(the_delay);
|
|
||||||
} else {
|
|
||||||
manager->framecount = 0;
|
|
||||||
manager->lastticks = SDL_GetTicks();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->fps = ceil(1000. / (SDL_GetTicks() - this->lastticks));
|
||||||
|
this->lastticks = SDL_GetTicks();
|
||||||
}
|
}
|
||||||
|
@ -1,65 +1,33 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
|
* timeHandler.h, part of VCMI engine
|
||||||
SDL_framerate: framerate manager
|
*
|
||||||
|
* Authors: listed in file AUTHORS in main folder
|
||||||
LGPL (c) A. Schiffler
|
*
|
||||||
|
* License: GNU General Public License v2.0 or later
|
||||||
|
* Full text of license available in license.txt file, in main folder
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SDL_framerate_h
|
#ifndef _SDL_framerate_h
|
||||||
#define _SDL_framerate_h
|
#define _SDL_framerate_h
|
||||||
|
|
||||||
/* Set up for C function definitions, even when using C++ */
|
|
||||||
#ifdef __cplusplus
|
/// A fps manager which holds game updates at a constant rate
|
||||||
extern "C" {
|
class FPSManager
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
double rateticks;
|
||||||
|
unsigned int lastticks;
|
||||||
|
int rate;
|
||||||
|
|
||||||
|
public:
|
||||||
|
int fps; // the actual fps value
|
||||||
|
|
||||||
|
FPSManager(int rate); // initializes the manager with a given fps rate
|
||||||
|
void FPSManager::init(); // needs to be called directly before the main game loop to reset the internal timer
|
||||||
|
void framerateDelay(); // needs to be called every game update cycle
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* --- */
|
|
||||||
|
|
||||||
#include "SDL.h"
|
|
||||||
|
|
||||||
/* --------- Definitions */
|
|
||||||
|
|
||||||
/* Some rates in Hz */
|
|
||||||
|
|
||||||
#define FPS_UPPER_LIMIT 200
|
|
||||||
#define FPS_LOWER_LIMIT 1
|
|
||||||
#define FPS_DEFAULT 30
|
|
||||||
|
|
||||||
/* --------- Structure variables */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
Uint32 framecount;
|
|
||||||
float rateticks;
|
|
||||||
Uint32 lastticks;
|
|
||||||
Uint32 rate;
|
|
||||||
} FPSmanager;
|
|
||||||
|
|
||||||
/* --------- Function prototypes */
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
#ifdef BUILD_DLL
|
|
||||||
#define DLLINTERFACE __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define DLLINTERFACE __declspec(dllimport)
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#define DLLINTERFACE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Functions return 0 or value for sucess and -1 for error */
|
|
||||||
|
|
||||||
void SDL_initFramerate(FPSmanager * manager);
|
|
||||||
int SDL_setFramerate(FPSmanager * manager, int rate);
|
|
||||||
int SDL_getFramerate(FPSmanager * manager);
|
|
||||||
void SDL_framerateDelay(FPSmanager * manager);
|
|
||||||
|
|
||||||
/* --- */
|
|
||||||
|
|
||||||
/* Ends C function definitions when using C++ */
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _SDL_framerate_h */
|
|
||||||
|
12
global.h
12
global.h
@ -135,7 +135,6 @@ const int BFIELD_SIZE = BFIELD_WIDTH * BFIELD_HEIGHT;
|
|||||||
|
|
||||||
const int SPELLBOOK_GOLD_COST = 500;
|
const int SPELLBOOK_GOLD_COST = 500;
|
||||||
|
|
||||||
|
|
||||||
//for battle stacks' positions
|
//for battle stacks' positions
|
||||||
struct THex
|
struct THex
|
||||||
{
|
{
|
||||||
@ -348,6 +347,17 @@ enum EAlignment
|
|||||||
{
|
{
|
||||||
GOOD, EVIL, NEUTRAL
|
GOOD, EVIL, NEUTRAL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Converts an int/double or any data type you wish to a string
|
||||||
|
template<typename T>
|
||||||
|
std::string toString(const T& value)
|
||||||
|
{
|
||||||
|
std::ostringstream oss;
|
||||||
|
oss << value;
|
||||||
|
return oss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//uncomment to make it work
|
//uncomment to make it work
|
||||||
//#define MARK_BLOCKED_POSITIONS
|
//#define MARK_BLOCKED_POSITIONS
|
||||||
//#define MARK_VISITABLE_POSITIONS
|
//#define MARK_VISITABLE_POSITIONS
|
||||||
|
Reference in New Issue
Block a user