mirror of
https://github.com/vcmi/vcmi.git
synced 2025-07-17 01:32:21 +02:00
New namespaces: GL2D (low-level OpenGL functions), Gfx (images and animation objects cooperating with the interface GL2D)
This commit is contained in:
38
Global.h
38
Global.h
@ -26,8 +26,9 @@
|
|||||||
|
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||||
|
#include <cstdint>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <stdio.h>
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
#else
|
#else
|
||||||
@ -68,7 +69,6 @@
|
|||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
#include <boost/assign.hpp>
|
#include <boost/assign.hpp>
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/cstdint.hpp>
|
|
||||||
#include <boost/date_time/posix_time/posix_time.hpp>
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
@ -91,20 +91,20 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Integral data types
|
// Integral data types
|
||||||
typedef boost::uint64_t ui64; //unsigned int 64 bits (8 bytes)
|
typedef uint64_t ui64; //unsigned int 64 bits (8 bytes)
|
||||||
typedef boost::uint32_t ui32; //unsigned int 32 bits (4 bytes)
|
typedef uint32_t ui32; //unsigned int 32 bits (4 bytes)
|
||||||
typedef boost::uint16_t ui16; //unsigned int 16 bits (2 bytes)
|
typedef uint16_t ui16; //unsigned int 16 bits (2 bytes)
|
||||||
typedef boost::uint8_t ui8; //unsigned int 8 bits (1 byte)
|
typedef uint8_t ui8; //unsigned int 8 bits (1 byte)
|
||||||
typedef boost::int64_t si64; //signed int 64 bits (8 bytes)
|
typedef int64_t si64; //signed int 64 bits (8 bytes)
|
||||||
typedef boost::int32_t si32; //signed int 32 bits (4 bytes)
|
typedef int32_t si32; //signed int 32 bits (4 bytes)
|
||||||
typedef boost::int16_t si16; //signed int 16 bits (2 bytes)
|
typedef int16_t si16; //signed int 16 bits (2 bytes)
|
||||||
typedef boost::int8_t si8; //signed int 8 bits (1 byte)
|
typedef int8_t si8; //signed int 8 bits (1 byte)
|
||||||
|
|
||||||
// Fixed width bool data type is important for serialization
|
// Fixed width bool data type is important for serialization
|
||||||
static_assert(sizeof(bool) == 1, "Bool needs to be 1 byte in size.");
|
static_assert(sizeof(bool) == 1, "Bool needs to be 1 byte in size.");
|
||||||
|
|
||||||
#if defined _M_X64 && defined _WIN32 //Win64 -> cannot load 32-bit DLLs for video handling
|
#if defined _M_X64 && defined _WIN32 //Win64 -> cannot load 32-bit DLLs for video handling
|
||||||
#define DISABLE_VIDEO
|
#define DISABLE_VIDEO 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
@ -150,6 +150,22 @@ static_assert(sizeof(bool) == 1, "Bool needs to be 1 byte in size.");
|
|||||||
#define DLL_LINKAGE DLL_IMPORT
|
#define DLL_LINKAGE DLL_IMPORT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Unaligned pointers
|
||||||
|
#if defined(__GNUC__) && (defined(__arm__) || defined(__MIPS__) || defined(__sparc__))
|
||||||
|
# define UNALIGNED_PTR(T) struct __attribute__((__packed__)) { \
|
||||||
|
T val; \
|
||||||
|
inline operator T() { return val; }; \
|
||||||
|
inline T operator=(T v) { return val = v; }; \
|
||||||
|
} *
|
||||||
|
#elif defined(_MSC_VER) && defined(_M_IA64)
|
||||||
|
# define UNALIGNED_PTR(T) T __unaligned *
|
||||||
|
#else
|
||||||
|
# define UNALIGNED_PTR(T) T *
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef UNALIGNED_PTR(uint32_t) ua_ui32_ptr;
|
||||||
|
|
||||||
|
|
||||||
//defining available c++11 features
|
//defining available c++11 features
|
||||||
|
|
||||||
//initialization lists - only gcc-4.4 or later
|
//initialization lists - only gcc-4.4 or later
|
||||||
|
@ -80,16 +80,16 @@ Global
|
|||||||
{8F202F43-106D-4F63-AD9D-B1D43E803E8C}.RD|x64.Build.0 = RD|x64
|
{8F202F43-106D-4F63-AD9D-B1D43E803E8C}.RD|x64.Build.0 = RD|x64
|
||||||
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.Debug|Win32.ActiveCfg = Debug|Win32
|
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.Debug|Win32.Build.0 = Debug|Win32
|
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.Debug|x64.ActiveCfg = Debug|Win32
|
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.RD|Win32.ActiveCfg = RD|Win32
|
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.RD|Win32.ActiveCfg = RD|Win32
|
||||||
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.RD|Win32.Build.0 = RD|Win32
|
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.RD|Win32.Build.0 = RD|Win32
|
||||||
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.RD|x64.ActiveCfg = RD|Win32
|
{276C3DB0-7A6B-4417-8E5C-322B08633AAC}.RD|x64.ActiveCfg = RD|x64
|
||||||
{D15B34EC-A32C-4968-9B0B-66998B579364}.Debug|Win32.ActiveCfg = Debug|Win32
|
{D15B34EC-A32C-4968-9B0B-66998B579364}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{D15B34EC-A32C-4968-9B0B-66998B579364}.Debug|Win32.Build.0 = Debug|Win32
|
{D15B34EC-A32C-4968-9B0B-66998B579364}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{D15B34EC-A32C-4968-9B0B-66998B579364}.Debug|x64.ActiveCfg = Debug|Win32
|
{D15B34EC-A32C-4968-9B0B-66998B579364}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{D15B34EC-A32C-4968-9B0B-66998B579364}.RD|Win32.ActiveCfg = RD|Win32
|
{D15B34EC-A32C-4968-9B0B-66998B579364}.RD|Win32.ActiveCfg = RD|Win32
|
||||||
{D15B34EC-A32C-4968-9B0B-66998B579364}.RD|Win32.Build.0 = RD|Win32
|
{D15B34EC-A32C-4968-9B0B-66998B579364}.RD|Win32.Build.0 = RD|Win32
|
||||||
{D15B34EC-A32C-4968-9B0B-66998B579364}.RD|x64.ActiveCfg = RD|Win32
|
{D15B34EC-A32C-4968-9B0B-66998B579364}.RD|x64.ActiveCfg = RD|x64
|
||||||
{C0300513-E845-43B4-9A4F-E8817EAEF57C}.Debug|Win32.ActiveCfg = Debug|Win32
|
{C0300513-E845-43B4-9A4F-E8817EAEF57C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{C0300513-E845-43B4-9A4F-E8817EAEF57C}.Debug|Win32.Build.0 = Debug|Win32
|
{C0300513-E845-43B4-9A4F-E8817EAEF57C}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{C0300513-E845-43B4-9A4F-E8817EAEF57C}.Debug|x64.ActiveCfg = Debug|x64
|
{C0300513-E845-43B4-9A4F-E8817EAEF57C}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
@ -572,9 +572,9 @@ void CMinimap::mouseMoved(const SDL_MouseMotionEvent & sEvent)
|
|||||||
moveAdvMapSelection();
|
moveAdvMapSelection();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMinimap::showAll(SDL_Surface * to)
|
void CMinimap::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
if (minimap)
|
if (minimap)
|
||||||
{
|
{
|
||||||
int3 mapSizes = LOCPLINT->cb->getMapSize();
|
int3 mapSizes = LOCPLINT->cb->getMapSize();
|
||||||
@ -589,10 +589,10 @@ void CMinimap::showAll(SDL_Surface * to)
|
|||||||
ui16(adventureInt->terrain.tilesh * pos.h / mapSizes.y)
|
ui16(adventureInt->terrain.tilesh * pos.h / mapSizes.y)
|
||||||
};
|
};
|
||||||
|
|
||||||
SDL_GetClipRect(to, &oldClip);
|
//* SDL_GetClipRect(to, &oldClip);
|
||||||
SDL_SetClipRect(to, &pos);
|
//* SDL_SetClipRect(to, &pos);
|
||||||
CSDL_Ext::drawDashedBorder(to, radar, int3(255,75,125));
|
//* CSDL_Ext::drawDashedBorder(to, radar, int3(255,75,125));
|
||||||
SDL_SetClipRect(to, &oldClip);
|
//* SDL_SetClipRect(to, &oldClip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -648,11 +648,11 @@ CInfoBar::CVisibleInfo::CVisibleInfo(Point position):
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CInfoBar::CVisibleInfo::show(SDL_Surface *to)
|
void CInfoBar::CVisibleInfo::show()
|
||||||
{
|
{
|
||||||
CIntObject::show(to);
|
CIntObject::show();
|
||||||
BOOST_FOREACH(auto object, forceRefresh)
|
BOOST_FOREACH(auto object, forceRefresh)
|
||||||
object->showAll(to);
|
object->showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CInfoBar::CVisibleInfo::loadHero(const CGHeroInstance * hero)
|
void CInfoBar::CVisibleInfo::loadHero(const CGHeroInstance * hero)
|
||||||
|
@ -214,8 +214,8 @@ protected:
|
|||||||
|
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
void hover (bool on);
|
void hover(bool on);
|
||||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
void mouseMoved(const SDL_MouseMotionEvent & sEvent);
|
||||||
|
|
||||||
void moveAdvMapSelection();
|
void moveAdvMapSelection();
|
||||||
|
|
||||||
@ -231,7 +231,7 @@ public:
|
|||||||
void setLevel(int level);
|
void setLevel(int level);
|
||||||
void setAIRadar(bool on);
|
void setAIRadar(bool on);
|
||||||
|
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
|
|
||||||
void hideTile(const int3 &pos); //puts FoW
|
void hideTile(const int3 &pos); //puts FoW
|
||||||
void showTile(const int3 &pos); //removes FoW
|
void showTile(const int3 &pos); //removes FoW
|
||||||
@ -255,7 +255,7 @@ class CInfoBar : public CIntObject
|
|||||||
public:
|
public:
|
||||||
CVisibleInfo(Point position);
|
CVisibleInfo(Point position);
|
||||||
|
|
||||||
void show(SDL_Surface *to);
|
void show();
|
||||||
|
|
||||||
//functions that must be called only once
|
//functions that must be called only once
|
||||||
void loadHero(const CGHeroInstance * hero);
|
void loadHero(const CGHeroInstance * hero);
|
||||||
|
@ -252,24 +252,24 @@ void CTerrainRect::showPath(const SDL_Rect * extRect, SDL_Surface * to)
|
|||||||
} //for (int i=0;i<currentPath->nodes.size()-1;i++)
|
} //for (int i=0;i<currentPath->nodes.size()-1;i++)
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTerrainRect::show(SDL_Surface * to)
|
void CTerrainRect::show()
|
||||||
{
|
{
|
||||||
if(ADVOPT.smoothMove)
|
if(ADVOPT.smoothMove)
|
||||||
CGI->mh->terrainRect
|
CGI->mh->terrainRect
|
||||||
(adventureInt->position, adventureInt->anim,
|
(adventureInt->position, adventureInt->anim,
|
||||||
&LOCPLINT->cb->getVisibilityMap(), true, adventureInt->heroAnim,
|
&LOCPLINT->cb->getVisibilityMap(), true, adventureInt->heroAnim,
|
||||||
to, &pos, moveX, moveY, false, int3());
|
nullptr, &pos, moveX, moveY, false, int3());
|
||||||
else
|
else
|
||||||
CGI->mh->terrainRect
|
CGI->mh->terrainRect
|
||||||
(adventureInt->position, adventureInt->anim,
|
(adventureInt->position, adventureInt->anim,
|
||||||
&LOCPLINT->cb->getVisibilityMap(), true, adventureInt->heroAnim,
|
&LOCPLINT->cb->getVisibilityMap(), true, adventureInt->heroAnim,
|
||||||
to, &pos, 0, 0, false, int3());
|
nullptr, &pos, 0, 0, false, int3());
|
||||||
|
|
||||||
//SDL_BlitSurface(teren,&genRect(pos.h,pos.w,0,0),screen,&genRect(547,594,7,6));
|
//SDL_BlitSurface(teren,&genRect(pos.h,pos.w,0,0),screen,&genRect(547,594,7,6));
|
||||||
//SDL_FreeSurface(teren);
|
//SDL_FreeSurface(teren);
|
||||||
if (currentPath/* && adventureInt->position.z==currentPath->startPos().z*/) //drawing path
|
if (currentPath/* && adventureInt->position.z==currentPath->startPos().z*/) //drawing path
|
||||||
{
|
{
|
||||||
showPath(&pos, to);
|
//* showPath(&pos, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,14 +350,14 @@ void CResDataBar::draw(SDL_Surface * to)
|
|||||||
graphics->fonts[FONT_SMALL]->renderTextLeft(to, processStr(datetext,temp), Colors::WHITE, Point(txtpos[7].first,txtpos[7].second));
|
graphics->fonts[FONT_SMALL]->renderTextLeft(to, processStr(datetext,temp), Colors::WHITE, Point(txtpos[7].first,txtpos[7].second));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CResDataBar::show(SDL_Surface * to)
|
void CResDataBar::show()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CResDataBar::showAll(SDL_Surface * to)
|
void CResDataBar::showAll()
|
||||||
{
|
{
|
||||||
draw(to);
|
draw(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
CAdvMapInt::CAdvMapInt():
|
CAdvMapInt::CAdvMapInt():
|
||||||
@ -445,13 +445,13 @@ void CAdvMapInt::fswitchLevel()
|
|||||||
{
|
{
|
||||||
position.z--;
|
position.z--;
|
||||||
underground.setIndex(0,true);
|
underground.setIndex(0,true);
|
||||||
underground.showAll(screenBuf);
|
underground.showAll();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
underground.setIndex(1,true);
|
underground.setIndex(1,true);
|
||||||
position.z++;
|
position.z++;
|
||||||
underground.showAll(screenBuf);
|
underground.showAll();
|
||||||
}
|
}
|
||||||
updateScreen = true;
|
updateScreen = true;
|
||||||
minimap.setLevel(position.z);
|
minimap.setLevel(position.z);
|
||||||
@ -652,36 +652,36 @@ void CAdvMapInt::deactivate()
|
|||||||
LOCPLINT->cingconsole->deactivate();
|
LOCPLINT->cingconsole->deactivate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void CAdvMapInt::showAll(SDL_Surface * to)
|
void CAdvMapInt::showAll()
|
||||||
{
|
{
|
||||||
blitAt(bg,0,0,to);
|
//* blitAt(bg,0,0,to);
|
||||||
|
|
||||||
if(state != INGAME)
|
if(state != INGAME)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
kingOverview.showAll(to);
|
kingOverview.showAll();
|
||||||
underground.showAll(to);
|
underground.showAll();
|
||||||
questlog.showAll(to);
|
questlog.showAll();
|
||||||
sleepWake.showAll(to);
|
sleepWake.showAll();
|
||||||
moveHero.showAll(to);
|
moveHero.showAll();
|
||||||
spellbook.showAll(to);
|
spellbook.showAll();
|
||||||
advOptions.showAll(to);
|
advOptions.showAll();
|
||||||
sysOptions.showAll(to);
|
sysOptions.showAll();
|
||||||
nextHero.showAll(to);
|
nextHero.showAll();
|
||||||
endTurn.showAll(to);
|
endTurn.showAll();
|
||||||
|
|
||||||
minimap.showAll(to);
|
minimap.showAll();
|
||||||
heroList.showAll(to);
|
heroList.showAll();
|
||||||
townList.showAll(to);
|
townList.showAll();
|
||||||
updateScreen = true;
|
updateScreen = true;
|
||||||
show(to);
|
show();
|
||||||
|
|
||||||
resdatabar.draw(to);
|
//* resdatabar.draw(to);
|
||||||
|
|
||||||
statusbar.show(to);
|
statusbar.show();
|
||||||
|
|
||||||
infoBar.showAll(to);
|
infoBar.showAll();
|
||||||
LOCPLINT->cingconsole->showAll(to);
|
LOCPLINT->cingconsole->showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CAdvMapInt::isHeroSleeping(const CGHeroInstance *hero)
|
bool CAdvMapInt::isHeroSleeping(const CGHeroInstance *hero)
|
||||||
@ -701,7 +701,7 @@ void CAdvMapInt::setHeroSleeping(const CGHeroInstance *hero, bool sleep)
|
|||||||
updateNextHero(NULL);
|
updateNextHero(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAdvMapInt::show(SDL_Surface * to)
|
void CAdvMapInt::show()
|
||||||
{
|
{
|
||||||
if(state != INGAME)
|
if(state != INGAME)
|
||||||
return;
|
return;
|
||||||
@ -746,14 +746,14 @@ void CAdvMapInt::show(SDL_Surface * to)
|
|||||||
}
|
}
|
||||||
if(updateScreen)
|
if(updateScreen)
|
||||||
{
|
{
|
||||||
terrain.show(to);
|
terrain.show();
|
||||||
for(int i=0;i<4;i++)
|
//* for(int i=0;i<4;i++)
|
||||||
blitAt(gems[i]->ourImages[LOCPLINT->playerID.getNum()].bitmap,ADVOPT.gemX[i],ADVOPT.gemY[i],to);
|
//* blitAt(gems[i]->ourImages[LOCPLINT->playerID.getNum()].bitmap,ADVOPT.gemX[i],ADVOPT.gemY[i],to);
|
||||||
updateScreen=false;
|
updateScreen=false;
|
||||||
LOCPLINT->cingconsole->showAll(to);
|
LOCPLINT->cingconsole->showAll();
|
||||||
}
|
}
|
||||||
infoBar.show(to);
|
infoBar.show();
|
||||||
statusbar.showAll(to);
|
statusbar.showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAdvMapInt::selectionChanged()
|
void CAdvMapInt::selectionChanged()
|
||||||
@ -1490,7 +1490,7 @@ void CAdvMapInt::aiTurnStarted()
|
|||||||
CCS->musich->playMusicFromSet("enemy-turn", true);
|
CCS->musich->playMusicFromSet("enemy-turn", true);
|
||||||
adventureInt->minimap.setAIRadar(true);
|
adventureInt->minimap.setAIRadar(true);
|
||||||
adventureInt->infoBar.startEnemyTurn(LOCPLINT->cb->getCurrentPlayer());
|
adventureInt->infoBar.startEnemyTurn(LOCPLINT->cb->getCurrentPlayer());
|
||||||
adventureInt->infoBar.showAll(screen);//force refresh on inactive object
|
adventureInt->infoBar.showAll(); //force refresh on inactive object
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAdvMapInt::adjustActiveness(bool aiTurnStart)
|
void CAdvMapInt::adjustActiveness(bool aiTurnStart)
|
||||||
|
@ -55,7 +55,7 @@ public:
|
|||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
void hover(bool on);
|
void hover(bool on);
|
||||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void showPath(const SDL_Rect * extRect, SDL_Surface * to);
|
void showPath(const SDL_Rect * extRect, SDL_Surface * to);
|
||||||
int3 whichTileIsIt(const int & x, const int & y); //x,y are cursor position
|
int3 whichTileIsIt(const int & x, const int & y); //x,y are cursor position
|
||||||
int3 whichTileIsIt(); //uses current cursor pos
|
int3 whichTileIsIt(); //uses current cursor pos
|
||||||
@ -76,8 +76,8 @@ public:
|
|||||||
~CResDataBar();
|
~CResDataBar();
|
||||||
|
|
||||||
void draw(SDL_Surface * to);
|
void draw(SDL_Surface * to);
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// That's a huge class which handles general adventure map actions and
|
/// That's a huge class which handles general adventure map actions and
|
||||||
@ -147,8 +147,8 @@ public:
|
|||||||
void activate();
|
void activate();
|
||||||
void deactivate();
|
void deactivate();
|
||||||
|
|
||||||
void show(SDL_Surface * to); //redraws terrain
|
void show(); //redraws terrain
|
||||||
void showAll(SDL_Surface * to); //shows and activates adv. map interface
|
void showAll(); //shows and activates adv. map interface
|
||||||
|
|
||||||
void select(const CArmedInstance *sel, bool centerView = true);
|
void select(const CArmedInstance *sel, bool centerView = true);
|
||||||
void selectionChanged();
|
void selectionChanged();
|
||||||
|
@ -1218,9 +1218,9 @@ CAnimImage::~CAnimImage()
|
|||||||
delete anim;
|
delete anim;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAnimImage::showAll(SDL_Surface * to)
|
void CAnimImage::showAll()
|
||||||
{
|
{
|
||||||
IImage *img;
|
/* IImage *img;
|
||||||
|
|
||||||
if ( flags & CShowableAnim::BASE && frame != 0)
|
if ( flags & CShowableAnim::BASE && frame != 0)
|
||||||
if ((img = anim->getImage(0, group)))
|
if ((img = anim->getImage(0, group)))
|
||||||
@ -1228,6 +1228,7 @@ void CAnimImage::showAll(SDL_Surface * to)
|
|||||||
|
|
||||||
if ((img = anim->getImage(frame, group)))
|
if ((img = anim->getImage(frame, group)))
|
||||||
img->draw(to, pos.x, pos.y);
|
img->draw(to, pos.x, pos.y);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAnimImage::setFrame(size_t Frame, size_t Group)
|
void CAnimImage::setFrame(size_t Frame, size_t Group)
|
||||||
@ -1345,11 +1346,11 @@ void CShowableAnim::clipRect(int posX, int posY, int width, int height)
|
|||||||
pos.h = height;
|
pos.h = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CShowableAnim::show(SDL_Surface * to)
|
void CShowableAnim::show()
|
||||||
{
|
{
|
||||||
if ( flags & BASE && frame != first)
|
//* if ( flags & BASE && frame != first)
|
||||||
blitImage(first, group, to);
|
//* blitImage(first, group, to);
|
||||||
blitImage(frame, group, to);
|
//* blitImage(frame, group, to);
|
||||||
|
|
||||||
if ((flags & PLAY_ONCE) && frame + 1 == last)
|
if ((flags & PLAY_ONCE) && frame + 1 == last)
|
||||||
return;
|
return;
|
||||||
@ -1362,11 +1363,11 @@ void CShowableAnim::show(SDL_Surface * to)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CShowableAnim::showAll(SDL_Surface * to)
|
void CShowableAnim::showAll()
|
||||||
{
|
{
|
||||||
if ( flags & BASE && frame != first)
|
//* if ( flags & BASE && frame != first)
|
||||||
blitImage(first, group, to);
|
//* blitImage(first, group, to);
|
||||||
blitImage(frame, group, to);
|
//* blitImage(frame, group, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CShowableAnim::blitImage(size_t frame, size_t group, SDL_Surface *to)
|
void CShowableAnim::blitImage(size_t frame, size_t group, SDL_Surface *to)
|
||||||
|
@ -247,7 +247,7 @@ public:
|
|||||||
//makes image player-colored
|
//makes image player-colored
|
||||||
void playerColored(PlayerColor player);
|
void playerColored(PlayerColor player);
|
||||||
|
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Base class for displaying animation, used as superclass for different animations
|
/// Base class for displaying animation, used as superclass for different animations
|
||||||
@ -308,8 +308,8 @@ public:
|
|||||||
virtual void reset();
|
virtual void reset();
|
||||||
|
|
||||||
//show current frame and increase counter
|
//show current frame and increase counter
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Creature-dependend animations like attacking, moving,...
|
/// Creature-dependend animations like attacking, moving,...
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct SDL_Surface;
|
struct SDL_Surface;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -14,11 +12,6 @@ struct SDL_Surface;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/// Struct which stands for a simple rgba palette
|
|
||||||
struct BMPPalette
|
|
||||||
{
|
|
||||||
ui8 R,G,B,F;
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace BitmapHandler
|
namespace BitmapHandler
|
||||||
{
|
{
|
||||||
|
@ -129,7 +129,7 @@ SDL_Color multiplyColors (const SDL_Color &b, const SDL_Color &a, double f)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBuildingRect::show(SDL_Surface * to)
|
void CBuildingRect::show()
|
||||||
{
|
{
|
||||||
const ui32 stageDelay = 16;
|
const ui32 stageDelay = 16;
|
||||||
|
|
||||||
@ -141,20 +141,20 @@ void CBuildingRect::show(SDL_Surface * to)
|
|||||||
if (stateCounter < S1_TRANSP)
|
if (stateCounter < S1_TRANSP)
|
||||||
{
|
{
|
||||||
setAlpha(255*stateCounter/stageDelay);
|
setAlpha(255*stateCounter/stageDelay);
|
||||||
CShowableAnim::show(to);
|
CShowableAnim::show();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
setAlpha(255);
|
setAlpha(255);
|
||||||
CShowableAnim::show(to);
|
CShowableAnim::show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (border && stateCounter > S1_TRANSP)
|
if (border && stateCounter > S1_TRANSP)
|
||||||
{
|
{
|
||||||
if (stateCounter == BUILDED)
|
if (stateCounter == BUILDED)
|
||||||
{
|
{
|
||||||
if (parent->selectedBuilding == this)
|
//* if (parent->selectedBuilding == this)
|
||||||
blitAtLoc(border,0,0,to);
|
//* blitAtLoc(border,0,0,to);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// key colors in glowing border
|
// key colors in glowing border
|
||||||
@ -175,7 +175,7 @@ void CBuildingRect::show(SDL_Surface * to)
|
|||||||
newColor = oldColor;
|
newColor = oldColor;
|
||||||
|
|
||||||
SDL_SetColors(border, &newColor, colorID, 1);
|
SDL_SetColors(border, &newColor, colorID, 1);
|
||||||
blitAtLoc(border,0,0,to);
|
//* blitAtLoc(border,0,0,to);
|
||||||
SDL_SetColors(border, &oldColor, colorID, 1);
|
SDL_SetColors(border, &oldColor, colorID, 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -183,14 +183,14 @@ void CBuildingRect::show(SDL_Surface * to)
|
|||||||
stateCounter++;
|
stateCounter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBuildingRect::showAll(SDL_Surface * to)
|
void CBuildingRect::showAll()
|
||||||
{
|
{
|
||||||
if (stateCounter == 0)
|
if (stateCounter == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CShowableAnim::showAll(to);
|
CShowableAnim::showAll();
|
||||||
if(!active && parent->selectedBuilding == this && border)
|
//* if(!active && parent->selectedBuilding == this && border)
|
||||||
blitAtLoc(border,0,0,to);
|
//* blitAtLoc(border,0,0,to);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string getBuildingSubtitle(const CStructure * structure)//hover text for building
|
std::string getBuildingSubtitle(const CStructure * structure)//hover text for building
|
||||||
@ -370,7 +370,7 @@ void CHeroGSlot::clickLeft(tribool down, bool previousState)
|
|||||||
{
|
{
|
||||||
setHighlight(true);
|
setHighlight(true);
|
||||||
owner->garr->selectSlot(nullptr);
|
owner->garr->selectSlot(nullptr);
|
||||||
showAll(screen2);
|
showAll();
|
||||||
}
|
}
|
||||||
hover(false);hover(true); //refresh statusbar
|
hover(false);hover(true); //refresh statusbar
|
||||||
}
|
}
|
||||||
@ -545,18 +545,18 @@ void CCastleBuildings::removeBuilding(BuildingID building)
|
|||||||
recreate();
|
recreate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCastleBuildings::show(SDL_Surface * to)
|
void CCastleBuildings::show()
|
||||||
{
|
{
|
||||||
CIntObject::show(to);
|
CIntObject::show();
|
||||||
BOOST_FOREACH(CBuildingRect * str, buildings)
|
BOOST_FOREACH(CBuildingRect * str, buildings)
|
||||||
str->show(to);
|
str->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCastleBuildings::showAll(SDL_Surface * to)
|
void CCastleBuildings::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
BOOST_FOREACH(CBuildingRect * str, buildings)
|
BOOST_FOREACH(CBuildingRect * str, buildings)
|
||||||
str->showAll(to);
|
str->showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
const CGHeroInstance* CCastleBuildings::getHero()
|
const CGHeroInstance* CCastleBuildings::getHero()
|
||||||
@ -749,9 +749,9 @@ void CCastleBuildings::enterCastleGate()
|
|||||||
availableTowns.push_back(t->id.getNum());//add to the list
|
availableTowns.push_back(t->id.getNum());//add to the list
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CPicture *titlePic = new CPicture (LOCPLINT->castleInt->bicons->ourImages[BuildingID::CASTLE_GATE].bitmap, 0,0, false);//will be deleted by selection window
|
//* CPicture *titlePic = new CPicture (LOCPLINT->castleInt->bicons->ourImages[BuildingID::CASTLE_GATE].bitmap, 0,0, false);//will be deleted by selection window
|
||||||
GH.pushInt (new CObjectListWindow(availableTowns, titlePic, CGI->generaltexth->jktexts[40],
|
//* GH.pushInt (new CObjectListWindow(availableTowns, titlePic, CGI->generaltexth->jktexts[40],
|
||||||
CGI->generaltexth->jktexts[41], boost::bind (&CCastleInterface::castleTeleport, LOCPLINT->castleInt, _1)));
|
//* CGI->generaltexth->jktexts[41], boost::bind (&CCastleInterface::castleTeleport, LOCPLINT->castleInt, _1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCastleBuildings::enterDwelling(int level)
|
void CCastleBuildings::enterDwelling(int level)
|
||||||
@ -858,7 +858,7 @@ CCastleInterface::CCastleInterface(const CGTownInstance * Town, const CGTownInst
|
|||||||
center();
|
center();
|
||||||
updateShadow();
|
updateShadow();
|
||||||
|
|
||||||
garr = new CGarrisonInt(305, 387, 4, Point(0,96), panel->bg, Point(62,374), town->getUpperArmy(), town->visitingHero);
|
garr = new CGarrisonInt(305, 387, 4, Point(0,96), NULL /*panel->bg*/, Point(62,374), town->getUpperArmy(), town->visitingHero);
|
||||||
heroes = new HeroSlots(town, Point(241, 387), Point(241, 483), garr, true);
|
heroes = new HeroSlots(town, Point(241, 387), Point(241, 483), garr, true);
|
||||||
title = new CLabel(85, 387, FONT_MEDIUM, TOPLEFT, Colors::WHITE, town->name);
|
title = new CLabel(85, 387, FONT_MEDIUM, TOPLEFT, Colors::WHITE, town->name);
|
||||||
income = new CLabel(195, 443, FONT_SMALL, CENTER);
|
income = new CLabel(195, 443, FONT_SMALL, CENTER);
|
||||||
@ -873,7 +873,7 @@ CCastleInterface::CCastleInterface(const CGTownInstance * Town, const CGTownInst
|
|||||||
garr->addSplitBtn(split);
|
garr->addSplitBtn(split);
|
||||||
|
|
||||||
Rect barRect(9, 182, 732, 18);
|
Rect barRect(9, 182, 732, 18);
|
||||||
statusbar = new CGStatusBar(new CPicture(*panel, barRect, 9, 555, false));
|
statusbar = new CGStatusBar(new CPicture(panel->getImage(), barRect, 9, 555, false));
|
||||||
resdatabar = new CResDataBar("ZRESBAR", 3, 575, 32, 2, 85, 85);
|
resdatabar = new CResDataBar("ZRESBAR", 3, 575, 32, 2, 85, 85);
|
||||||
|
|
||||||
townlist = new CTownList(3, Point(744, 414), "IAM014", "IAM015");
|
townlist = new CTownList(3, Point(744, 414), "IAM014", "IAM015");
|
||||||
@ -1283,7 +1283,7 @@ CHallInterface::CHallInterface(const CGTownInstance *Town):
|
|||||||
resdatabar->pos.x += pos.x;
|
resdatabar->pos.x += pos.x;
|
||||||
resdatabar->pos.y += pos.y;
|
resdatabar->pos.y += pos.y;
|
||||||
Rect barRect(5, 556, 740, 18);
|
Rect barRect(5, 556, 740, 18);
|
||||||
statusBar = new CGStatusBar(new CPicture(*background, barRect, 5, 556, false));
|
statusBar = new CGStatusBar(new CPicture(background->getImage(), barRect, 5, 556, false));
|
||||||
|
|
||||||
title = new CLabel(399, 12, FONT_MEDIUM, CENTER, Colors::WHITE, town->town->buildings[BuildingID(town->hallLevel()+BuildingID::VILLAGE_HALL)]->Name());
|
title = new CLabel(399, 12, FONT_MEDIUM, CENTER, Colors::WHITE, town->town->buildings[BuildingID(town->hallLevel()+BuildingID::VILLAGE_HALL)]->Name());
|
||||||
exit = new CAdventureMapButton(CGI->generaltexth->hcommands[8], "",
|
exit = new CAdventureMapButton(CGI->generaltexth->hcommands[8], "",
|
||||||
@ -1357,7 +1357,7 @@ CBuildWindow::CBuildWindow(const CGTownInstance *Town, const CBuilding * Buildin
|
|||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
|
|
||||||
new CAnimImage(town->town->clientInfo.buildingsIcons, building->bid, 0, 125, 50);
|
new CAnimImage(town->town->clientInfo.buildingsIcons, building->bid, 0, 125, 50);
|
||||||
new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
new CGStatusBar(new CPicture(background->getImage(), Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
|
|
||||||
new CLabel(197, 30, FONT_MEDIUM, CENTER, Colors::WHITE,
|
new CLabel(197, 30, FONT_MEDIUM, CENTER, Colors::WHITE,
|
||||||
boost::str(boost::format(CGI->generaltexth->hcommands[7]) % building->Name()));
|
boost::str(boost::format(CGI->generaltexth->hcommands[7]) % building->Name()));
|
||||||
@ -1450,7 +1450,7 @@ CFortScreen::CFortScreen(const CGTownInstance * town):
|
|||||||
resdatabar->pos.y += pos.y;
|
resdatabar->pos.y += pos.y;
|
||||||
|
|
||||||
Rect barRect(4, 554, 740, 18);
|
Rect barRect(4, 554, 740, 18);
|
||||||
statusBar = new CGStatusBar(new CPicture(*background, barRect, 4, 554, false));
|
statusBar = new CGStatusBar(new CPicture(background->getImage(), barRect, 4, 554, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFortScreen::creaturesChanged()
|
void CFortScreen::creaturesChanged()
|
||||||
@ -1595,7 +1595,7 @@ CMageGuildScreen::CMageGuildScreen(CCastleInterface * owner):
|
|||||||
resdatabar->pos.x += pos.x;
|
resdatabar->pos.x += pos.x;
|
||||||
resdatabar->pos.y += pos.y;
|
resdatabar->pos.y += pos.y;
|
||||||
Rect barRect(7, 556, 737, 18);
|
Rect barRect(7, 556, 737, 18);
|
||||||
statusBar = new CGStatusBar(new CPicture(*background, barRect, 7, 556, false));
|
//* statusBar = new CGStatusBar(new CPicture(*background, barRect, 7, 556, false));
|
||||||
|
|
||||||
exit = new CAdventureMapButton(CGI->generaltexth->allTexts[593],"",boost::bind(&CMageGuildScreen::close,this), 748, 556,"TPMAGE1.DEF",SDLK_RETURN);
|
exit = new CAdventureMapButton(CGI->generaltexth->allTexts[593],"",boost::bind(&CMageGuildScreen::close,this), 748, 556,"TPMAGE1.DEF",SDLK_RETURN);
|
||||||
exit->assignedKeys.insert(SDLK_ESCAPE);
|
exit->assignedKeys.insert(SDLK_ESCAPE);
|
||||||
@ -1658,7 +1658,7 @@ CBlacksmithDialog::CBlacksmithDialog(bool possible, CreatureID creMachineID, Art
|
|||||||
{
|
{
|
||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
|
|
||||||
statusBar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
//* statusBar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
|
|
||||||
animBG = new CPicture("TPSMITBK", 64, 50);
|
animBG = new CPicture("TPSMITBK", 64, 50);
|
||||||
animBG->needRefresh = true;
|
animBG->needRefresh = true;
|
||||||
|
@ -52,8 +52,8 @@ public:
|
|||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Dwelling info box - right-click screen for dwellings
|
/// Dwelling info box - right-click screen for dwellings
|
||||||
@ -146,8 +146,8 @@ public:
|
|||||||
void addBuilding(BuildingID building);
|
void addBuilding(BuildingID building);
|
||||||
void removeBuilding(BuildingID building);//FIXME: not tested!!!
|
void removeBuilding(BuildingID building);//FIXME: not tested!!!
|
||||||
|
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Creature info window
|
/// Creature info window
|
||||||
|
@ -443,7 +443,7 @@ void CCreatureWindow::init(const CStackInstance *Stack, const CBonusSystemNode *
|
|||||||
else //slider automatically places bonus Items
|
else //slider automatically places bonus Items
|
||||||
recreateSkillList (0);
|
recreateSkillList (0);
|
||||||
|
|
||||||
showAll(screen2);
|
showAll();
|
||||||
|
|
||||||
//AUIDAT.DEF
|
//AUIDAT.DEF
|
||||||
}
|
}
|
||||||
@ -505,11 +505,11 @@ void CCreatureWindow::recreateSkillList(int Pos)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCreatureWindow::showAll(SDL_Surface * to)
|
void CCreatureWindow::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
|
|
||||||
printAtMiddleLoc((type >= COMMANDER ? c->nameSing : c->namePl), 180, 30, FONT_SMALL, Colors::YELLOW, to); //creature name
|
//* printAtMiddleLoc((type >= COMMANDER ? c->nameSing : c->namePl), 180, 30, FONT_SMALL, Colors::YELLOW, to); //creature name
|
||||||
|
|
||||||
printLine(0, CGI->generaltexth->primarySkillNames[0], c->valOfBonuses(Bonus::PRIMARY_SKILL, PrimarySkill::ATTACK), stackNode->Attack());
|
printLine(0, CGI->generaltexth->primarySkillNames[0], c->valOfBonuses(Bonus::PRIMARY_SKILL, PrimarySkill::ATTACK), stackNode->Attack());
|
||||||
printLine(1, CGI->generaltexth->primarySkillNames[1], c->valOfBonuses(Bonus::PRIMARY_SKILL, PrimarySkill::DEFENSE), stackNode->Defense());
|
printLine(1, CGI->generaltexth->primarySkillNames[1], c->valOfBonuses(Bonus::PRIMARY_SKILL, PrimarySkill::DEFENSE), stackNode->Defense());
|
||||||
@ -523,13 +523,13 @@ void CCreatureWindow::showAll(SDL_Surface * to)
|
|||||||
}
|
}
|
||||||
if (stackNode->valOfBonuses(Bonus::CASTS))
|
if (stackNode->valOfBonuses(Bonus::CASTS))
|
||||||
{
|
{
|
||||||
printAtMiddleLoc(CGI->generaltexth->allTexts[399], 356, 62, FONT_SMALL, Colors::WHITE, to);
|
//* printAtMiddleLoc(CGI->generaltexth->allTexts[399], 356, 62, FONT_SMALL, Colors::WHITE, to);
|
||||||
std::string casts;
|
std::string casts;
|
||||||
if (type == BATTLE)
|
if (type == BATTLE)
|
||||||
casts = boost::lexical_cast<std::string>((ui16)dynamic_cast<const CStack*>(stackNode)->casts); //ui8 is converted to char :(
|
casts = boost::lexical_cast<std::string>((ui16)dynamic_cast<const CStack*>(stackNode)->casts); //ui8 is converted to char :(
|
||||||
else
|
else
|
||||||
casts = boost::lexical_cast<std::string>(stackNode->valOfBonuses(Bonus::CASTS));
|
casts = boost::lexical_cast<std::string>(stackNode->valOfBonuses(Bonus::CASTS));
|
||||||
printAtMiddleLoc(casts, 356, 82, FONT_SMALL, Colors::WHITE, to);
|
//* printAtMiddleLoc(casts, 356, 82, FONT_SMALL, Colors::WHITE, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
@ -542,29 +542,29 @@ void CCreatureWindow::showAll(SDL_Surface * to)
|
|||||||
printLine(6, CGI->generaltexth->zelp[441].first, c->valOfBonuses(Bonus::STACKS_SPEED), stackNode->valOfBonuses(Bonus::STACKS_SPEED));
|
printLine(6, CGI->generaltexth->zelp[441].first, c->valOfBonuses(Bonus::STACKS_SPEED), stackNode->valOfBonuses(Bonus::STACKS_SPEED));
|
||||||
|
|
||||||
BOOST_FOREACH(CBonusItem* b, bonusItems)
|
BOOST_FOREACH(CBonusItem* b, bonusItems)
|
||||||
b->showAll (to);
|
b->showAll();
|
||||||
|
|
||||||
BOOST_FOREACH(auto s, selectableSkills)
|
BOOST_FOREACH(auto s, selectableSkills)
|
||||||
s->showAll (to);
|
s->showAll();
|
||||||
|
|
||||||
for (int i = 0; i < skillPictures.size(); i++)
|
for (int i = 0; i < skillPictures.size(); i++)
|
||||||
{
|
{
|
||||||
skillPictures[i]->bg = BitmapHandler::loadBitmap (skillToFile(i));
|
//* skillPictures[i]->bg = BitmapHandler::loadBitmap (skillToFile(i));
|
||||||
skillPictures[i]->showAll (to);
|
//* skillPictures[i]->showAll (to);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (upgradeOptions.size() && (type == COMMANDER_LEVEL_UP && upgradeOptions[selectedOption] >= 100)) //add frame to selected skill
|
if (upgradeOptions.size() && (type == COMMANDER_LEVEL_UP && upgradeOptions[selectedOption] >= 100)) //add frame to selected skill
|
||||||
{
|
{
|
||||||
int index = selectedOption - selectableSkills.size(); //this is screwed
|
int index = selectedOption - selectableSkills.size(); //this is screwed
|
||||||
CSDL_Ext::drawBorder(to, Rect::around(selectableBonuses[index]->pos), int3(Colors::METALLIC_GOLD.r, Colors::METALLIC_GOLD.g, Colors::METALLIC_GOLD.b));
|
//* CSDL_Ext::drawBorder(to, Rect::around(selectableBonuses[index]->pos), int3(Colors::METALLIC_GOLD.r, Colors::METALLIC_GOLD.g, Colors::METALLIC_GOLD.b));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCreatureWindow::show(SDL_Surface * to)
|
void CCreatureWindow::show()
|
||||||
{
|
{
|
||||||
CIntObject::show(to);
|
CIntObject::show();
|
||||||
if (!count.empty()) //army stack
|
//* if (!count.empty()) //army stack
|
||||||
graphics->fonts[FONT_TIMES]->renderTextRight(to, count, Colors::WHITE, Point(pos.x + 114, pos.y + 174));
|
//* graphics->fonts[FONT_TIMES]->renderTextRight(to, count, Colors::WHITE, Point(pos.x + 114, pos.y + 174));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -709,14 +709,14 @@ CBonusItem::CBonusItem(const Rect &Pos, const std::string &Name, const std::stri
|
|||||||
removeUsedEvents(ALL); //no actions atm
|
removeUsedEvents(ALL); //no actions atm
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBonusItem::showAll (SDL_Surface * to)
|
void CBonusItem::showAll()
|
||||||
{
|
{
|
||||||
if (visible)
|
if (visible)
|
||||||
{
|
{
|
||||||
graphics->fonts[FONT_SMALL]->renderTextLeft(to, name, Colors::YELLOW, Point(pos.x + 72, pos.y + 6));
|
//* graphics->fonts[FONT_SMALL]->renderTextLeft(to, name, Colors::YELLOW, Point(pos.x + 72, pos.y + 6));
|
||||||
graphics->fonts[FONT_SMALL]->renderTextLeft(to, description, Colors::WHITE, Point(pos.x + 72, pos.y + 30));
|
//* graphics->fonts[FONT_SMALL]->renderTextLeft(to, description, Colors::WHITE, Point(pos.x + 72, pos.y + 30));
|
||||||
if (bonusGraphics && bonusGraphics->bg)
|
//* if (bonusGraphics && bonusGraphics->bg)
|
||||||
blitAtLoc(bonusGraphics->bg, 12, 2, to);
|
//* blitAtLoc(bonusGraphics->bg, 12, 2, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -731,10 +731,10 @@ void CSelectableSkill::clickLeft(tribool down, bool previousState)
|
|||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCreInfoWindow::show(SDL_Surface * to)
|
void CCreInfoWindow::show()
|
||||||
{
|
{
|
||||||
CIntObject::show(to);
|
CIntObject::show();
|
||||||
creatureCount->showAll(to);
|
creatureCount->showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
CCreInfoWindow::CCreInfoWindow(const CStackInstance &stack, bool LClicked, boost::function<void()> upgradeFunc, boost::function<void()> dismissFunc, UpgradeInfo *upgradeInfo):
|
CCreInfoWindow::CCreInfoWindow(const CStackInstance &stack, bool LClicked, boost::function<void()> upgradeFunc, boost::function<void()> dismissFunc, UpgradeInfo *upgradeInfo):
|
||||||
|
@ -94,8 +94,8 @@ public:
|
|||||||
CCreatureWindow(CreatureID Cid, CreWinType Type, int creatureCount); //c-tor
|
CCreatureWindow(CreatureID Cid, CreWinType Type, int creatureCount); //c-tor
|
||||||
|
|
||||||
void init(const CStackInstance *stack, const CBonusSystemNode *stackNode, const CGHeroInstance *heroOwner);
|
void init(const CStackInstance *stack, const CBonusSystemNode *stackNode, const CGHeroInstance *heroOwner);
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void printLine(int nr, const std::string &text, int baseVal, int val=-1, bool range=false);
|
void printLine(int nr, const std::string &text, int baseVal, int val=-1, bool range=false);
|
||||||
void sliderMoved(int newpos);
|
void sliderMoved(int newpos);
|
||||||
void close();
|
void close();
|
||||||
@ -117,8 +117,8 @@ public:
|
|||||||
CBonusItem(const Rect &Pos, const std::string &Name, const std::string &Description, const std::string &graphicsName);
|
CBonusItem(const Rect &Pos, const std::string &Name, const std::string &Description, const std::string &graphicsName);
|
||||||
~CBonusItem();
|
~CBonusItem();
|
||||||
|
|
||||||
void setBonus (const Bonus &bonus);
|
void setBonus(const Bonus &bonus);
|
||||||
void showAll (SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
class CSelectableSkill : public LRClickableAreaWText
|
class CSelectableSkill : public LRClickableAreaWText
|
||||||
@ -155,7 +155,7 @@ public:
|
|||||||
void init(const CCreature * cre, const CBonusSystemNode * stackNode, const CGHeroInstance * heroOwner, int creatureCount, bool LClicked);
|
void init(const CCreature * cre, const CBonusSystemNode * stackNode, const CGHeroInstance * heroOwner, int creatureCount, bool LClicked);
|
||||||
void printLine(int nr, const std::string & text, int baseVal, int val = -1, bool range = false);
|
void printLine(int nr, const std::string & text, int baseVal, int val = -1, bool range = false);
|
||||||
|
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
};
|
};
|
||||||
|
|
||||||
CIntObject *createCreWindow(const CStack *s, bool lclick = false);
|
CIntObject *createCreWindow(const CStack *s, bool lclick = false);
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
#include "../lib/Filesystem/CResourceLoader.h"
|
#include "../lib/Filesystem/CResourceLoader.h"
|
||||||
#include "../lib/VCMI_Lib.h"
|
#include "../lib/VCMI_Lib.h"
|
||||||
#include "CBitmapHandler.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CDefHandler.cpp, part of VCMI engine
|
* CDefHandler.cpp, part of VCMI engine
|
||||||
@ -52,7 +51,6 @@ CDefEssential::~CDefEssential()
|
|||||||
|
|
||||||
void CDefHandler::openFromMemory(ui8 *table, const std::string & name)
|
void CDefHandler::openFromMemory(ui8 *table, const std::string & name)
|
||||||
{
|
{
|
||||||
BMPPalette palette[256];
|
|
||||||
SDefEntry &de = * reinterpret_cast<SDefEntry *>(table);
|
SDefEntry &de = * reinterpret_cast<SDefEntry *>(table);
|
||||||
ui8 *p;
|
ui8 *p;
|
||||||
|
|
||||||
@ -62,13 +60,7 @@ void CDefHandler::openFromMemory(ui8 *table, const std::string & name)
|
|||||||
height = read_le_u32(&de.height);
|
height = read_le_u32(&de.height);
|
||||||
ui32 totalBlocks = read_le_u32(&de.totalBlocks);
|
ui32 totalBlocks = read_le_u32(&de.totalBlocks);
|
||||||
|
|
||||||
for (ui32 it=0;it<256;it++)
|
//CPaletteRGBA palette(de);
|
||||||
{
|
|
||||||
palette[it].R = de.palette[it].R;
|
|
||||||
palette[it].G = de.palette[it].G;
|
|
||||||
palette[it].B = de.palette[it].B;
|
|
||||||
palette[it].F = 255;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The SDefEntryBlock starts just after the SDefEntry
|
// The SDefEntryBlock starts just after the SDefEntry
|
||||||
p = reinterpret_cast<ui8 *>(&de);
|
p = reinterpret_cast<ui8 *>(&de);
|
||||||
@ -115,7 +107,7 @@ void CDefHandler::openFromMemory(ui8 *table, const std::string & name)
|
|||||||
for(ui32 i=0; i < SEntries.size(); ++i)
|
for(ui32 i=0; i < SEntries.size(); ++i)
|
||||||
{
|
{
|
||||||
Cimage nimg;
|
Cimage nimg;
|
||||||
nimg.bitmap = getSprite(i, table, palette);
|
nimg.bitmap = getSprite(i, table);
|
||||||
nimg.imName = SEntries[i].name;
|
nimg.imName = SEntries[i].name;
|
||||||
nimg.groupNumber = SEntries[i].group;
|
nimg.groupNumber = SEntries[i].group;
|
||||||
ourImages.push_back(nimg);
|
ourImages.push_back(nimg);
|
||||||
@ -128,7 +120,7 @@ void CDefHandler::expand(ui8 N,ui8 & BL, ui8 & BR)
|
|||||||
BR = N & 0x1F;
|
BR = N & 0x1F;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_Surface * CDefHandler::getSprite (int SIndex, const ui8 * FDef, const BMPPalette * palette) const
|
SDL_Surface * CDefHandler::getSprite (int SIndex, const ui8 * FDef) const
|
||||||
{
|
{
|
||||||
SDL_Surface * ret=NULL;
|
SDL_Surface * ret=NULL;
|
||||||
|
|
||||||
@ -175,12 +167,12 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, const ui8 * FDef, const BMPPal
|
|||||||
|
|
||||||
for(int i=0; i<256; ++i)
|
for(int i=0; i<256; ++i)
|
||||||
{
|
{
|
||||||
SDL_Color pr;
|
// SDL_Color pr;
|
||||||
pr.r = palette[i].R;
|
// pr.r = palette[i].R;
|
||||||
pr.g = palette[i].G;
|
// pr.g = palette[i].G;
|
||||||
pr.b = palette[i].B;
|
// pr.b = palette[i].B;
|
||||||
pr.unused = palette[i].F;
|
// pr.unused = palette[i].F;
|
||||||
(*(ret->format->palette->colors+i))=pr;
|
// (*(ret->format->palette->colors+i))=pr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ftcp=0;
|
int ftcp=0;
|
||||||
@ -371,6 +363,7 @@ CDefHandler * CDefHandler::giveDef(const std::string & defName)
|
|||||||
delete [] data;
|
delete [] data;
|
||||||
return nh;
|
return nh;
|
||||||
}
|
}
|
||||||
|
|
||||||
CDefEssential * CDefHandler::giveDefEss(const std::string & defName)
|
CDefEssential * CDefHandler::giveDefEss(const std::string & defName)
|
||||||
{
|
{
|
||||||
CDefEssential * ret;
|
CDefEssential * ret;
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../lib/vcmi_endian.h"
|
#include "../lib/vcmi_endian.h"
|
||||||
|
|
||||||
struct SDL_Surface;
|
struct SDL_Surface;
|
||||||
struct BMPPalette;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CDefHandler.h, part of VCMI engine
|
* CDefHandler.h, part of VCMI engine
|
||||||
@ -76,7 +74,7 @@ public:
|
|||||||
|
|
||||||
class CDefHandler
|
class CDefHandler
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
ui32 DEFType;
|
ui32 DEFType;
|
||||||
struct SEntry
|
struct SEntry
|
||||||
{
|
{
|
||||||
@ -94,7 +92,7 @@ public:
|
|||||||
|
|
||||||
CDefHandler(); //c-tor
|
CDefHandler(); //c-tor
|
||||||
~CDefHandler(); //d-tor
|
~CDefHandler(); //d-tor
|
||||||
SDL_Surface * getSprite (int SIndex, const ui8 * FDef, const BMPPalette * palette) const; //saves picture with given number to "testtt.bmp"
|
SDL_Surface * getSprite (int SIndex, const ui8 * FDef) const; //saves picture with given number to "testtt.bmp"
|
||||||
static void expand(ui8 N,ui8 & BL, ui8 & BR);
|
static void expand(ui8 N,ui8 & BL, ui8 & BR);
|
||||||
void openFromMemory(ui8 * table, const std::string & name);
|
void openFromMemory(ui8 * table, const std::string & name);
|
||||||
CDefEssential * essentialize();
|
CDefEssential * essentialize();
|
||||||
|
@ -191,7 +191,7 @@ void CHeroWindow::update(const CGHeroInstance * hero, bool redrawNeeded /*= fals
|
|||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
if(!garr)
|
if(!garr)
|
||||||
{
|
{
|
||||||
garr = new CGarrisonInt(15, 485, 8, Point(), background->bg, Point(15,485), curHero);
|
garr = new CGarrisonInt(15, 485, 8, Point(), NULL /*background->bg*/, Point(15,485), curHero);
|
||||||
split = new CAdventureMapButton(CGI->generaltexth->allTexts[256], CGI->generaltexth->heroscrn[32],
|
split = new CAdventureMapButton(CGI->generaltexth->allTexts[256], CGI->generaltexth->heroscrn[32],
|
||||||
boost::bind(&CGarrisonInt::splitClick,garr), 539, 519, "hsbtns9.def", false, NULL, false); //deleted by garrison destructor
|
boost::bind(&CGarrisonInt::splitClick,garr), 539, 519, "hsbtns9.def", false, NULL, false); //deleted by garrison destructor
|
||||||
boost::algorithm::replace_first(split->hoverTexts[0],"%s",CGI->generaltexth->allTexts[43]);
|
boost::algorithm::replace_first(split->hoverTexts[0],"%s",CGI->generaltexth->allTexts[43]);
|
||||||
@ -319,55 +319,55 @@ void CHeroWindow::commanderWindow()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHeroWindow::showAll(SDL_Surface * to)
|
void CHeroWindow::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
|
|
||||||
//printing hero's name
|
//printing hero's name
|
||||||
printAtMiddleLoc(curHero->name, 190, 38, FONT_BIG, Colors::YELLOW, to);
|
//* printAtMiddleLoc(curHero->name, 190, 38, FONT_BIG, Colors::YELLOW, to);
|
||||||
|
|
||||||
//printing hero's level
|
//printing hero's level
|
||||||
std::string secondLine= CGI->generaltexth->allTexts[342];
|
std::string secondLine= CGI->generaltexth->allTexts[342];
|
||||||
boost::algorithm::replace_first(secondLine,"%d",boost::lexical_cast<std::string>(curHero->level));
|
boost::algorithm::replace_first(secondLine,"%d",boost::lexical_cast<std::string>(curHero->level));
|
||||||
boost::algorithm::replace_first(secondLine,"%s",curHero->type->heroClass->name);
|
boost::algorithm::replace_first(secondLine,"%s",curHero->type->heroClass->name);
|
||||||
printAtMiddleLoc(secondLine, 190, 65, FONT_MEDIUM, Colors::WHITE, to);
|
//* printAtMiddleLoc(secondLine, 190, 65, FONT_MEDIUM, Colors::WHITE, to);
|
||||||
|
|
||||||
//primary skills names
|
//primary skills names
|
||||||
printAtMiddleLoc(CGI->generaltexth->jktexts[1], 52, 99, FONT_SMALL, Colors::YELLOW, to);
|
//* printAtMiddleLoc(CGI->generaltexth->jktexts[1], 52, 99, FONT_SMALL, Colors::YELLOW, to);
|
||||||
printAtMiddleLoc(CGI->generaltexth->jktexts[2], 123, 99, FONT_SMALL, Colors::YELLOW, to);
|
//* printAtMiddleLoc(CGI->generaltexth->jktexts[2], 123, 99, FONT_SMALL, Colors::YELLOW, to);
|
||||||
printAtMiddleLoc(CGI->generaltexth->jktexts[3], 193, 99, FONT_SMALL, Colors::YELLOW, to);
|
//* printAtMiddleLoc(CGI->generaltexth->jktexts[3], 193, 99, FONT_SMALL, Colors::YELLOW, to);
|
||||||
printAtMiddleLoc(CGI->generaltexth->jktexts[4], 262, 99, FONT_SMALL, Colors::YELLOW, to);
|
//* printAtMiddleLoc(CGI->generaltexth->jktexts[4], 262, 99, FONT_SMALL, Colors::YELLOW, to);
|
||||||
|
|
||||||
//dismiss / quest log
|
//dismiss / quest log
|
||||||
printAtMiddleWBLoc(CGI->generaltexth->jktexts[8], 388, 455, FONT_SMALL, 50, Colors::WHITE, to);
|
//* printAtMiddleWBLoc(CGI->generaltexth->jktexts[8], 388, 455, FONT_SMALL, 50, Colors::WHITE, to);
|
||||||
printAtMiddleWBLoc(CGI->generaltexth->jktexts[9], 534, 455, FONT_SMALL, 50, Colors::WHITE, to);
|
//* printAtMiddleWBLoc(CGI->generaltexth->jktexts[9], 534, 455, FONT_SMALL, 50, Colors::WHITE, to);
|
||||||
|
|
||||||
//printing primary skills' amounts
|
//printing primary skills' amounts
|
||||||
for(int m=0; m<4; ++m)
|
for(int m=0; m<4; ++m)
|
||||||
{
|
{
|
||||||
std::ostringstream primarySkill;
|
std::ostringstream primarySkill;
|
||||||
primarySkill << primSkillAreas[m]->bonusValue;
|
primarySkill << primSkillAreas[m]->bonusValue;
|
||||||
printAtMiddleLoc(primarySkill.str(), 53 + 70 * m, 166, FONT_SMALL, Colors::WHITE, to);
|
//* printAtMiddleLoc(primarySkill.str(), 53 + 70 * m, 166, FONT_SMALL, Colors::WHITE, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
//secondary skills
|
//secondary skills
|
||||||
for(size_t v=0; v<std::min(secSkillAreas.size(), curHero->secSkills.size()); ++v)
|
for(size_t v=0; v<std::min(secSkillAreas.size(), curHero->secSkills.size()); ++v)
|
||||||
{
|
{
|
||||||
printAtLoc(CGI->generaltexth->levels[curHero->secSkills[v].second-1], (v%2) ? 212 : 68, 280 + 48 * (v/2), FONT_SMALL, Colors::WHITE, to);
|
//* printAtLoc(CGI->generaltexth->levels[curHero->secSkills[v].second-1], (v%2) ? 212 : 68, 280 + 48 * (v/2), FONT_SMALL, Colors::WHITE, to);
|
||||||
printAtLoc(CGI->generaltexth->skillName[curHero->secSkills[v].first], (v%2) ? 212 : 68, 300 + 48 * (v/2), FONT_SMALL, Colors::WHITE, to);
|
//* printAtLoc(CGI->generaltexth->skillName[curHero->secSkills[v].first], (v%2) ? 212 : 68, 300 + 48 * (v/2), FONT_SMALL, Colors::WHITE, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
//printing special ability
|
//printing special ability
|
||||||
printAtLoc(CGI->generaltexth->jktexts[5].substr(1, CGI->generaltexth->jktexts[5].size()-2), 69, 183, FONT_SMALL, Colors::YELLOW, to);
|
//* printAtLoc(CGI->generaltexth->jktexts[5].substr(1, CGI->generaltexth->jktexts[5].size()-2), 69, 183, FONT_SMALL, Colors::YELLOW, to);
|
||||||
printAtLoc(curHero->type->specName, 69, 205, FONT_SMALL, Colors::WHITE, to);
|
//* printAtLoc(curHero->type->specName, 69, 205, FONT_SMALL, Colors::WHITE, to);
|
||||||
|
|
||||||
//printing necessery texts
|
//printing necessery texts
|
||||||
printAtLoc(CGI->generaltexth->jktexts[6].substr(1, CGI->generaltexth->jktexts[6].size()-2), 69, 232, FONT_SMALL, Colors::YELLOW, to);
|
//* printAtLoc(CGI->generaltexth->jktexts[6].substr(1, CGI->generaltexth->jktexts[6].size()-2), 69, 232, FONT_SMALL, Colors::YELLOW, to);
|
||||||
std::ostringstream expstr;
|
std::ostringstream expstr;
|
||||||
expstr << curHero->exp;
|
expstr << curHero->exp;
|
||||||
printAtLoc(expstr.str(), 68, 252, FONT_SMALL, Colors::WHITE, to);
|
//* printAtLoc(expstr.str(), 68, 252, FONT_SMALL, Colors::WHITE, to);
|
||||||
printAtLoc(CGI->generaltexth->jktexts[7].substr(1, CGI->generaltexth->jktexts[7].size()-2), 213, 232, FONT_SMALL, Colors::YELLOW, to);
|
//* printAtLoc(CGI->generaltexth->jktexts[7].substr(1, CGI->generaltexth->jktexts[7].size()-2), 213, 232, FONT_SMALL, Colors::YELLOW, to);
|
||||||
std::ostringstream manastr;
|
std::ostringstream manastr;
|
||||||
manastr << curHero->mana << '/' << heroWArt.manaLimit();
|
manastr << curHero->mana << '/' << heroWArt.manaLimit();
|
||||||
printAtLoc(manastr.str(), 211, 252, FONT_SMALL, Colors::WHITE, to);
|
//* printAtLoc(manastr.str(), 211, 252, FONT_SMALL, Colors::WHITE, to);
|
||||||
}
|
}
|
@ -83,7 +83,7 @@ public:
|
|||||||
CHeroWindow(const CGHeroInstance *hero); //c-tor
|
CHeroWindow(const CGHeroInstance *hero); //c-tor
|
||||||
|
|
||||||
void update(const CGHeroInstance * hero, bool redrawNeeded = false); //sets main displayed hero
|
void update(const CGHeroInstance * hero, bool redrawNeeded = false); //sets main displayed hero
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
|
|
||||||
void dismissCurrent(); //dissmissed currently displayed hero (curHero)
|
void dismissCurrent(); //dissmissed currently displayed hero (curHero)
|
||||||
void questlog(); //show quest log in hero window
|
void questlog(); //show quest log in hero window
|
||||||
|
125
client/CMT.cpp
125
client/CMT.cpp
@ -3,6 +3,7 @@
|
|||||||
#include "StdInc.h"
|
#include "StdInc.h"
|
||||||
#include <boost/filesystem/operations.hpp>
|
#include <boost/filesystem/operations.hpp>
|
||||||
#include <SDL_mixer.h>
|
#include <SDL_mixer.h>
|
||||||
|
#include "UIFramework/GL2D.h"
|
||||||
#include "UIFramework/SDL_Extensions.h"
|
#include "UIFramework/SDL_Extensions.h"
|
||||||
#include "CGameInfo.h"
|
#include "CGameInfo.h"
|
||||||
#include "mapHandler.h"
|
#include "mapHandler.h"
|
||||||
@ -40,17 +41,15 @@
|
|||||||
#include "../lib/GameConstants.h"
|
#include "../lib/GameConstants.h"
|
||||||
#include "UIFramework/CGuiHandler.h"
|
#include "UIFramework/CGuiHandler.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
#include "SDL_syswm.h"
|
|
||||||
#endif
|
|
||||||
#include "../lib/CDefObjInfoHandler.h"
|
#include "../lib/CDefObjInfoHandler.h"
|
||||||
#include "../lib/UnlockGuard.h"
|
#include "../lib/UnlockGuard.h"
|
||||||
|
|
||||||
#if __MINGW32__
|
#if __MINGW32__ || defined(_WIN32)
|
||||||
#undef main
|
#undef main
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace po = boost::program_options;
|
namespace po = boost::program_options;
|
||||||
|
namespace fs = boost::filesystem;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CMT.cpp, part of VCMI engine
|
* CMT.cpp, part of VCMI engine
|
||||||
@ -62,8 +61,7 @@ namespace po = boost::program_options;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
std::string NAME_AFFIX = "client";
|
std::string NAME = GameConstants::VCMI_VERSION + std::string(" (client)"); //application name
|
||||||
std::string NAME = GameConstants::VCMI_VERSION + std::string(" (") + NAME_AFFIX + ')'; //application name
|
|
||||||
CGuiHandler GH;
|
CGuiHandler GH;
|
||||||
static CClient *client=NULL;
|
static CClient *client=NULL;
|
||||||
SDL_Surface *screen = NULL, //main screen surface
|
SDL_Surface *screen = NULL, //main screen surface
|
||||||
@ -136,8 +134,7 @@ void init()
|
|||||||
tlog0<<"Initializing VCMI_Lib: "<<tmh.getDiff()<<std::endl;
|
tlog0<<"Initializing VCMI_Lib: "<<tmh.getDiff()<<std::endl;
|
||||||
|
|
||||||
pomtime.getDiff();
|
pomtime.getDiff();
|
||||||
CCS->curh = new CCursorHandler;
|
CCS->curh = new CCursorHandler();
|
||||||
CCS->curh->initCursor();
|
|
||||||
CCS->curh->show();
|
CCS->curh->show();
|
||||||
tlog0<<"Screen handler: "<<pomtime.getDiff()<<std::endl;
|
tlog0<<"Screen handler: "<<pomtime.getDiff()<<std::endl;
|
||||||
pomtime.getDiff();
|
pomtime.getDiff();
|
||||||
@ -177,20 +174,34 @@ static void prog_help(const po::options_description &opts)
|
|||||||
void OSX_checkForUpdates();
|
void OSX_checkForUpdates();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void initScreen(int w, int h, bool fullscreen)
|
||||||
|
{
|
||||||
|
SDL_EnableUNICODE(1);
|
||||||
|
SDL_WM_SetCaption(NAME.c_str(),""); //set window title
|
||||||
|
|
||||||
|
GL2D::initVideo(w, h, fullscreen);
|
||||||
|
|
||||||
|
SDL_ShowCursor(SDL_DISABLE);
|
||||||
|
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int _tmain(int argc, _TCHAR* argv[])
|
int _tmain(int argc, _TCHAR* argv[])
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
int SDL_main(int argc, char *argv[])
|
int SDL_main(int argc, char *argv[])
|
||||||
#else
|
#else
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char* argv[])
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
tlog0 << "Starting... " << std::endl;
|
||||||
|
|
||||||
|
#if defined(__APPLE__) || defined(_WIN32)
|
||||||
|
//Set working directory to parent directory of executable
|
||||||
|
//so we can use executable relative pathes
|
||||||
|
fs::current_path(fs::path(argv[0]).parent_path());
|
||||||
|
#endif
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
// Correct working dir executable folder (not bundle folder) so we can use executable relative pathes
|
|
||||||
std::string executablePath = argv[0];
|
|
||||||
std::string workDir = executablePath.substr(0, executablePath.rfind('/'));
|
|
||||||
chdir(workDir.c_str());
|
|
||||||
|
|
||||||
// Check for updates
|
// Check for updates
|
||||||
OSX_checkForUpdates();
|
OSX_checkForUpdates();
|
||||||
|
|
||||||
@ -203,7 +214,6 @@ int main(int argc, char** argv)
|
|||||||
fclose(check);
|
fclose(check);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tlog0 << "Starting... " << std::endl;
|
|
||||||
po::options_description opts("Allowed options");
|
po::options_description opts("Allowed options");
|
||||||
opts.add_options()
|
opts.add_options()
|
||||||
("help,h", "display help and exit")
|
("help,h", "display help and exit")
|
||||||
@ -242,8 +252,8 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Set environment vars to make window centered. Sometimes work, sometimes not. :/
|
//Set environment vars to make window centered. Sometimes work, sometimes not. :/
|
||||||
putenv((char*)"SDL_VIDEO_WINDOW_POS");
|
putenv("SDL_VIDEO_CENTERED=center");
|
||||||
putenv((char*)"SDL_VIDEO_CENTERED=1");
|
//putenv("SDL_VIDEO_WINDOW_POS");
|
||||||
|
|
||||||
// Have effect on X11 system only (Linux).
|
// Have effect on X11 system only (Linux).
|
||||||
// For whatever reason in fullscreen mode SDL takes "raw" mouse input from DGA X11 extension
|
// For whatever reason in fullscreen mode SDL takes "raw" mouse input from DGA X11 extension
|
||||||
@ -293,7 +303,7 @@ int main(int argc, char** argv)
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
setScreenRes(res["width"].Float(), res["height"].Float(), video["bitsPerPixel"].Float(), video["fullscreen"].Bool());
|
initScreen(res["width"].Float(), res["height"].Float(), video["fullscreen"].Bool());
|
||||||
|
|
||||||
tlog0 <<"\tInitializing screen: "<<pomtime.getDiff() << std::endl;
|
tlog0 <<"\tInitializing screen: "<<pomtime.getDiff() << std::endl;
|
||||||
|
|
||||||
@ -315,8 +325,6 @@ int main(int argc, char** argv)
|
|||||||
if(!vm.count("battle") && !vm.count("nointro"))
|
if(!vm.count("battle") && !vm.count("nointro"))
|
||||||
playIntro();
|
playIntro();
|
||||||
|
|
||||||
SDL_FillRect(screen,NULL,0);
|
|
||||||
CSDL_Ext::update(screen);
|
|
||||||
loading.join();
|
loading.join();
|
||||||
tlog0<<"Initialization of VCMI (together): "<<total.getDiff()<<std::endl;
|
tlog0<<"Initialization of VCMI (together): "<<total.getDiff()<<std::endl;
|
||||||
|
|
||||||
@ -654,9 +662,9 @@ void processCommand(const std::string &message)
|
|||||||
//plays intro, ends when intro is over or button has been pressed (handles events)
|
//plays intro, ends when intro is over or button has been pressed (handles events)
|
||||||
void playIntro()
|
void playIntro()
|
||||||
{
|
{
|
||||||
if(CCS->videoh->openAndPlayVideo("3DOLOGO.SMK", 60, 40, screen, true))
|
if (CCS->videoh->openAndPlayVideo("3DOLOGO.SMK", 60, 40, true))
|
||||||
{
|
{
|
||||||
CCS->videoh->openAndPlayVideo("AZVS.SMK", 60, 80, screen, true);
|
CCS->videoh->openAndPlayVideo("AZVS.SMK", 60, 80, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -667,79 +675,6 @@ void dispose()
|
|||||||
delete logfile;
|
delete logfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
//used only once during initialization
|
|
||||||
static void setScreenRes(int w, int h, int bpp, bool fullscreen, bool resetVideo)
|
|
||||||
{
|
|
||||||
// VCMI will only work with 2, 3 or 4 bytes per pixel
|
|
||||||
vstd::amax(bpp, 16);
|
|
||||||
vstd::amin(bpp, 32);
|
|
||||||
|
|
||||||
// Try to use the best screen depth for the display
|
|
||||||
int suggestedBpp = SDL_VideoModeOK(w, h, bpp, SDL_SWSURFACE|(fullscreen?SDL_FULLSCREEN:0));
|
|
||||||
if(suggestedBpp == 0)
|
|
||||||
{
|
|
||||||
tlog1 << "Error: SDL says that " << w << "x" << h << " resolution is not available!\n";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bufOnScreen = (screenBuf == screen);
|
|
||||||
|
|
||||||
if(suggestedBpp != bpp)
|
|
||||||
{
|
|
||||||
tlog2 << "Note: SDL suggests to use " << suggestedBpp << " bpp instead of" << bpp << " bpp " << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
//For some reason changing fullscreen via config window checkbox result in SDL_Quit event
|
|
||||||
if (resetVideo)
|
|
||||||
{
|
|
||||||
if(screen) //screen has been already initialized
|
|
||||||
SDL_QuitSubSystem(SDL_INIT_VIDEO);
|
|
||||||
SDL_InitSubSystem(SDL_INIT_VIDEO);
|
|
||||||
}
|
|
||||||
|
|
||||||
if((screen = SDL_SetVideoMode(w, h, suggestedBpp, SDL_SWSURFACE|(fullscreen?SDL_FULLSCREEN:0))) == NULL)
|
|
||||||
{
|
|
||||||
tlog1 << "Requested screen resolution is not available (" << w << "x" << h << "x" << suggestedBpp << "bpp)\n";
|
|
||||||
throw std::runtime_error("Requested screen resolution is not available\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
tlog0 << "New screen flags: " << screen->flags << std::endl;
|
|
||||||
|
|
||||||
if(screen2)
|
|
||||||
SDL_FreeSurface(screen2);
|
|
||||||
screen2 = CSDL_Ext::copySurface(screen);
|
|
||||||
SDL_EnableUNICODE(1);
|
|
||||||
SDL_WM_SetCaption(NAME.c_str(),""); //set window title
|
|
||||||
SDL_ShowCursor(SDL_DISABLE);
|
|
||||||
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
SDL_SysWMinfo wm;
|
|
||||||
SDL_VERSION(&wm.version);
|
|
||||||
int getwm = SDL_GetWMInfo(&wm);
|
|
||||||
if(getwm == 1)
|
|
||||||
{
|
|
||||||
int sw = GetSystemMetrics(SM_CXSCREEN),
|
|
||||||
sh = GetSystemMetrics(SM_CYSCREEN);
|
|
||||||
RECT curpos;
|
|
||||||
GetWindowRect(wm.window,&curpos);
|
|
||||||
int ourw = curpos.right - curpos.left,
|
|
||||||
ourh = curpos.bottom - curpos.top;
|
|
||||||
SetWindowPos(wm.window, 0, (sw - ourw)/2, (sh - ourh)/2, 0, 0, SWP_NOZORDER|SWP_NOSIZE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tlog3 << "Something went wrong, getwm=" << getwm << std::endl;
|
|
||||||
tlog3 << "SDL says: " << SDL_GetError() << std::endl;
|
|
||||||
tlog3 << "Window won't be centered.\n";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
//TODO: centering game window on other platforms (or does the environment do their job correctly there?)
|
|
||||||
|
|
||||||
screenBuf = bufOnScreen ? screen : screen2;
|
|
||||||
//setResolution = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void fullScreenChanged()
|
static void fullScreenChanged()
|
||||||
{
|
{
|
||||||
boost::unique_lock<boost::recursive_mutex> lock(*LOCPLINT->pim);
|
boost::unique_lock<boost::recursive_mutex> lock(*LOCPLINT->pim);
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include "CDefHandler.h"
|
#include "CDefHandler.h"
|
||||||
#include "CAnimation.h"
|
#include "CAnimation.h"
|
||||||
#include "CGameInfo.h"
|
#include "CGameInfo.h"
|
||||||
|
#include "UIFramework/GL2D.h"
|
||||||
#include "UIFramework/SDL_Extensions.h"
|
#include "UIFramework/SDL_Extensions.h"
|
||||||
#include "../lib/CGeneralTextHandler.h"
|
#include "../lib/CGeneralTextHandler.h"
|
||||||
#include "Graphics.h"
|
#include "Graphics.h"
|
||||||
@ -46,7 +47,7 @@ public:
|
|||||||
CComponent *comp;
|
CComponent *comp;
|
||||||
|
|
||||||
//blit component with image centered at this position
|
//blit component with image centered at this position
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
|
|
||||||
//ComponentResolved(); //c-tor
|
//ComponentResolved(); //c-tor
|
||||||
ComponentResolved(CComponent *Comp); //c-tor
|
ComponentResolved(CComponent *Comp); //c-tor
|
||||||
@ -117,18 +118,18 @@ void CMessage::dispose()
|
|||||||
SDL_Surface * CMessage::drawDialogBox(int w, int h, PlayerColor playerColor)
|
SDL_Surface * CMessage::drawDialogBox(int w, int h, PlayerColor playerColor)
|
||||||
{
|
{
|
||||||
//prepare surface
|
//prepare surface
|
||||||
SDL_Surface * ret = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
|
//* SDL_Surface * ret = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
|
||||||
for (int i=0; i<w; i+=background->w)//background
|
for (int i=0; i<w; i+=background->w)//background
|
||||||
{
|
{
|
||||||
for (int j=0; j<h; j+=background->h)
|
for (int j=0; j<h; j+=background->h)
|
||||||
{
|
{
|
||||||
Rect srcR(0,0,background->w, background->h);
|
Rect srcR(0,0,background->w, background->h);
|
||||||
Rect dstR(i,j,w,h);
|
Rect dstR(i,j,w,h);
|
||||||
CSDL_Ext::blitSurface(background, &srcR, ret, &dstR);
|
//* CSDL_Ext::blitSurface(background, &srcR, ret, &dstR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
drawBorder(playerColor, ret, w, h);
|
//* drawBorder(playerColor, ret, w, h);
|
||||||
return ret;
|
return nullptr; //* ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> CMessage::breakText( std::string text, size_t maxLineSize, EFonts font )
|
std::vector<std::string> CMessage::breakText( std::string text, size_t maxLineSize, EFonts font )
|
||||||
@ -229,8 +230,8 @@ void CMessage::drawIWindow(CInfoWindow * ret, std::string text, PlayerColor play
|
|||||||
|
|
||||||
for(int i = 0;
|
for(int i = 0;
|
||||||
i < ARRAY_COUNT(sizes)
|
i < ARRAY_COUNT(sizes)
|
||||||
&& sizes[i][0] < screen->w - 150
|
&& sizes[i][0] < GL2D::getScreenWidth() - 150
|
||||||
&& sizes[i][1] < screen->h - 150
|
&& sizes[i][1] < GL2D::getScreenHeight() - 150
|
||||||
&& ret->text->slider;
|
&& ret->text->slider;
|
||||||
i++)
|
i++)
|
||||||
{
|
{
|
||||||
@ -263,20 +264,20 @@ void CMessage::drawIWindow(CInfoWindow * ret, std::string text, PlayerColor play
|
|||||||
vstd::amax(winSize.first, comps.w);
|
vstd::amax(winSize.first, comps.w);
|
||||||
vstd::amax(winSize.first, bw);
|
vstd::amax(winSize.first, bw);
|
||||||
|
|
||||||
vstd::amin(winSize.first, screen->w - 150);
|
vstd::amin(winSize.first, GL2D::getScreenWidth() - 150);
|
||||||
|
|
||||||
ret->bitmap = drawDialogBox (winSize.first + 2*SIDE_MARGIN, winSize.second + 2*SIDE_MARGIN, player);
|
//* ret->bitmap = drawDialogBox (winSize.first + 2*SIDE_MARGIN, winSize.second + 2*SIDE_MARGIN, player);
|
||||||
ret->pos.h=ret->bitmap->h;
|
//* ret->pos.h=ret->bitmap->h;
|
||||||
ret->pos.w=ret->bitmap->w;
|
//* ret->pos.w=ret->bitmap->w;
|
||||||
ret->center();
|
//* ret->center();
|
||||||
|
|
||||||
int curh = SIDE_MARGIN;
|
int curh = SIDE_MARGIN;
|
||||||
int xOffset = (ret->pos.w - ret->text->pos.w)/2;
|
int xOffset = (ret->pos.w - ret->text->pos.w)/2;
|
||||||
|
|
||||||
if(!ret->buttons.size() && !ret->components.size()) //improvement for very small text only popups -> center text vertically
|
if(!ret->buttons.size() && !ret->components.size()) //improvement for very small text only popups -> center text vertically
|
||||||
{
|
{
|
||||||
if(ret->bitmap->h > ret->text->pos.h + 2*SIDE_MARGIN)
|
//* if(ret->bitmap->h > ret->text->pos.h + 2*SIDE_MARGIN)
|
||||||
curh = (ret->bitmap->h - ret->text->pos.h)/2;
|
//* curh = (ret->bitmap->h - ret->text->pos.h)/2;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret->text->moveBy(Point(xOffset, curh));
|
ret->text->moveBy(Point(xOffset, curh));
|
||||||
@ -291,8 +292,8 @@ void CMessage::drawIWindow(CInfoWindow * ret, std::string text, PlayerColor play
|
|||||||
if(ret->buttons.size())
|
if(ret->buttons.size())
|
||||||
{
|
{
|
||||||
// Position the buttons at the bottom of the window
|
// Position the buttons at the bottom of the window
|
||||||
bw = (ret->bitmap->w/2) - (bw/2);
|
//* bw = (ret->bitmap->w/2) - (bw/2);
|
||||||
curh = ret->bitmap->h - SIDE_MARGIN - ret->buttons[0]->pos.h;
|
//* curh = ret->bitmap->h - SIDE_MARGIN - ret->buttons[0]->pos.h;
|
||||||
|
|
||||||
for(size_t i=0; i<ret->buttons.size(); i++)
|
for(size_t i=0; i<ret->buttons.size(); i++)
|
||||||
{
|
{
|
||||||
@ -395,10 +396,10 @@ ComponentResolved::~ComponentResolved()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComponentResolved::showAll(SDL_Surface *to)
|
void ComponentResolved::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
comp->showAll(to);
|
comp->showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
ComponentsToBlit::~ComponentsToBlit()
|
ComponentsToBlit::~ComponentsToBlit()
|
||||||
@ -481,7 +482,7 @@ void ComponentsToBlit::blitCompsOnSur( bool blitOr, int inter, int &curh, SDL_Su
|
|||||||
cur->moveTo(Point(curw, curh));
|
cur->moveTo(Point(curw, curh));
|
||||||
|
|
||||||
//blit component
|
//blit component
|
||||||
cur->showAll(ret);
|
cur->showAll();
|
||||||
curw += cur->pos.w;
|
curw += cur->pos.w;
|
||||||
|
|
||||||
//if there is subsequent component blit "or"
|
//if there is subsequent component blit "or"
|
||||||
|
@ -318,8 +318,7 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details)
|
|||||||
{
|
{
|
||||||
movementPxStep(details, i, hp, ho);
|
movementPxStep(details, i, hp, ho);
|
||||||
adventureInt->updateScreen = true;
|
adventureInt->updateScreen = true;
|
||||||
adventureInt->show(screen);
|
adventureInt->show();
|
||||||
CSDL_Ext::update(screen);
|
|
||||||
GH.mainFPSmng->framerateDelay(); //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
|
||||||
@ -2185,7 +2184,7 @@ void CPlayerInterface::acceptTurn()
|
|||||||
adventureInt->infoBar.showDate();
|
adventureInt->infoBar.showDate();
|
||||||
|
|
||||||
adventureInt->updateNextHero(NULL);
|
adventureInt->updateNextHero(NULL);
|
||||||
adventureInt->showAll(screen);
|
adventureInt->showAll();
|
||||||
|
|
||||||
if(settings["session"]["autoSkip"].Bool() && !LOCPLINT->shiftPressed())
|
if(settings["session"]["autoSkip"].Bool() && !LOCPLINT->shiftPressed())
|
||||||
{
|
{
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include "../lib/CThreadHelper.h"
|
#include "../lib/CThreadHelper.h"
|
||||||
#include "../lib/CConfigHandler.h"
|
#include "../lib/CConfigHandler.h"
|
||||||
#include "../lib/GameConstants.h"
|
#include "../lib/GameConstants.h"
|
||||||
|
#include "UIFramework/GL2D.h"
|
||||||
#include "UIFramework/CGuiHandler.h"
|
#include "UIFramework/CGuiHandler.h"
|
||||||
#include "UIFramework/CIntObjectClasses.h"
|
#include "UIFramework/CIntObjectClasses.h"
|
||||||
#include "../lib/Mapping/CMapService.h"
|
#include "../lib/Mapping/CMapService.h"
|
||||||
@ -237,8 +238,8 @@ CMenuScreen::CMenuScreen(const JsonNode& configNode):
|
|||||||
background = new CPicture(config["background"].String());
|
background = new CPicture(config["background"].String());
|
||||||
if (config["scalable"].Bool())
|
if (config["scalable"].Bool())
|
||||||
{
|
{
|
||||||
if (background->bg->format->palette)
|
//* if (background->bg->format->palette)
|
||||||
background->convertToScreenBPP();
|
//* background->convertToScreenBPP();
|
||||||
background->scaleTo(Point(screen->w, screen->h));
|
background->scaleTo(Point(screen->w, screen->h));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,20 +266,20 @@ CIntObject * CMenuScreen::createTab(size_t index)
|
|||||||
return new CMenuEntry(this, config["items"].Vector()[index]);
|
return new CMenuEntry(this, config["items"].Vector()[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMenuScreen::showAll(SDL_Surface * to)
|
void CMenuScreen::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
|
|
||||||
if (pos.h != to->h || pos.w != to->w)
|
if (pos.w != GL2D::getScreenWidth() || pos.h != GL2D::getScreenHeight())
|
||||||
CMessage::drawBorder(PlayerColor(1), to, pos.w+28, pos.h+30, pos.x-14, pos.y-15);
|
CMessage::drawBorder(PlayerColor(1), nullptr, pos.w+28, pos.h+30, pos.x-14, pos.y-15);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMenuScreen::show(SDL_Surface * to)
|
void CMenuScreen::show()
|
||||||
{
|
{
|
||||||
if (!config["video"].isNull())
|
if (!config["video"].isNull())
|
||||||
CCS->videoh->update(config["video"]["x"].Float() + pos.x, config["video"]["y"].Float() + pos.y, to, true, false);
|
CCS->videoh->update(config["video"]["x"].Float() + pos.x, config["video"]["y"].Float() + pos.y, true, false);
|
||||||
CIntObject::show(to);
|
CIntObject::show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMenuScreen::activate()
|
void CMenuScreen::activate()
|
||||||
@ -418,12 +419,12 @@ CreditsScreen::CreditsScreen()
|
|||||||
credits->pos.h = credits->maxH;
|
credits->pos.h = credits->maxH;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreditsScreen::showAll(SDL_Surface * to)
|
void CreditsScreen::showAll()
|
||||||
{
|
{
|
||||||
//Do not draw anything
|
//Do not draw anything
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreditsScreen::show(SDL_Surface * to)
|
void CreditsScreen::show()
|
||||||
{
|
{
|
||||||
static int count = 0;
|
static int count = 0;
|
||||||
count++;
|
count++;
|
||||||
@ -436,7 +437,7 @@ void CreditsScreen::show(SDL_Surface * to)
|
|||||||
SDL_SetClipRect(screenBuf, &creditsArea);
|
SDL_SetClipRect(screenBuf, &creditsArea);
|
||||||
SDL_SetClipRect(screen, &creditsArea);
|
SDL_SetClipRect(screen, &creditsArea);
|
||||||
redraw();
|
redraw();
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
SDL_SetClipRect(screen, NULL);
|
SDL_SetClipRect(screen, NULL);
|
||||||
SDL_SetClipRect(screenBuf, NULL);
|
SDL_SetClipRect(screenBuf, NULL);
|
||||||
|
|
||||||
@ -460,8 +461,8 @@ void CreditsScreen::clickRight(tribool down, bool previousState)
|
|||||||
CGPreGame::CGPreGame():
|
CGPreGame::CGPreGame():
|
||||||
pregameConfig(new JsonNode(ResourceID("config/mainmenu.json")))
|
pregameConfig(new JsonNode(ResourceID("config/mainmenu.json")))
|
||||||
{
|
{
|
||||||
pos.w = screen->w;
|
pos.w = GL2D::getScreenWidth();
|
||||||
pos.h = screen->h;
|
pos.h = GL2D::getScreenHeight();
|
||||||
|
|
||||||
GH.defActionsDef = 63;
|
GH.defActionsDef = 63;
|
||||||
CGP = this;
|
CGP = this;
|
||||||
@ -502,7 +503,6 @@ void CGPreGame::disposeGraphics()
|
|||||||
|
|
||||||
void CGPreGame::update()
|
void CGPreGame::update()
|
||||||
{
|
{
|
||||||
boost::unique_lock<boost::recursive_mutex> lock(*CPlayerInterface::pim);
|
|
||||||
if(CGP != this) //don't update if you are not a main interface
|
if(CGP != this) //don't update if you are not a main interface
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -513,25 +513,7 @@ void CGPreGame::update()
|
|||||||
menu->switchToTab(0);
|
menu->switchToTab(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(SEL)
|
if (SEL) SEL->update();
|
||||||
SEL->update();
|
|
||||||
|
|
||||||
// Handles mouse and key input
|
|
||||||
GH.updateTime();
|
|
||||||
GH.handleEvents();
|
|
||||||
|
|
||||||
//if (GH.curInt == NULL) // no redraw, when a new game was created
|
|
||||||
//return;
|
|
||||||
|
|
||||||
GH.topInt()->show(screen);
|
|
||||||
|
|
||||||
if (settings["general"]["showfps"].Bool())
|
|
||||||
GH.drawFPSCounter();
|
|
||||||
|
|
||||||
// draw the mouse cursor and update the screen
|
|
||||||
CCS->curh->drawWithScreenRestore();
|
|
||||||
CSDL_Ext::update(screen);
|
|
||||||
CCS->curh->drawRestored();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGPreGame::openCampaignScreen(std::string name)
|
void CGPreGame::openCampaignScreen(std::string name)
|
||||||
@ -1035,11 +1017,11 @@ void CSelectionScreen::propagateNames()
|
|||||||
*serv << &pn;
|
*serv << &pn;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSelectionScreen::showAll(SDL_Surface *to)
|
void CSelectionScreen::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
if (bordered && (pos.h != to->h || pos.w != to->w))
|
//* if (bordered && (pos.h != to->h || pos.w != to->w))
|
||||||
CMessage::drawBorder(PlayerColor(1), to, pos.w+28, pos.h+30, pos.x-14, pos.y-15);
|
//* CMessage::drawBorder(PlayerColor(1), to, pos.w+28, pos.h+30, pos.x-14, pos.y-15);
|
||||||
}
|
}
|
||||||
|
|
||||||
// A new size filter (Small, Medium, ...) has been selected. Populate
|
// A new size filter (Small, Medium, ...) has been selected. Populate
|
||||||
@ -1484,10 +1466,10 @@ void SelectionTab::printMaps(SDL_Surface *to)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectionTab::showAll(SDL_Surface * to)
|
void SelectionTab::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
printMaps(to);
|
//* printMaps(to);
|
||||||
|
|
||||||
std::string title;
|
std::string title;
|
||||||
switch(tabType) {
|
switch(tabType) {
|
||||||
@ -1505,10 +1487,10 @@ void SelectionTab::showAll(SDL_Surface * to)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
printAtMiddleLoc(title, 205, 28, FONT_MEDIUM, Colors::YELLOW, to); //Select a Scenario to Play
|
//* printAtMiddleLoc(title, 205, 28, FONT_MEDIUM, Colors::YELLOW, to); //Select a Scenario to Play
|
||||||
if(tabType != CMenuScreen::campaignList)
|
if(tabType != CMenuScreen::campaignList)
|
||||||
{
|
{
|
||||||
printAtMiddleLoc(CGI->generaltexth->allTexts[510], 87, 62, FONT_SMALL, Colors::YELLOW, to); //Map sizes
|
//* printAtMiddleLoc(CGI->generaltexth->allTexts[510], 87, 62, FONT_SMALL, Colors::YELLOW, to); //Map sizes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1798,10 +1780,10 @@ void RandomMapTab::validateCompOnlyPlayersCnt(int compOnlyPlayersCnt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RandomMapTab::showAll(SDL_Surface * to)
|
void RandomMapTab::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
|
/*
|
||||||
// Headline
|
// Headline
|
||||||
printAtMiddleLoc(CGI->generaltexth->allTexts[738], 222, 36, FONT_BIG, Colors::YELLOW, to);
|
printAtMiddleLoc(CGI->generaltexth->allTexts[738], 222, 36, FONT_BIG, Colors::YELLOW, to);
|
||||||
printAtMiddleLoc(CGI->generaltexth->allTexts[739], 222, 56, FONT_SMALL, Colors::WHITE, to);
|
printAtMiddleLoc(CGI->generaltexth->allTexts[739], 222, 56, FONT_SMALL, Colors::WHITE, to);
|
||||||
@ -1826,6 +1808,7 @@ void RandomMapTab::showAll(SDL_Surface * to)
|
|||||||
|
|
||||||
// Monster strength
|
// Monster strength
|
||||||
printAtLoc(CGI->generaltexth->allTexts[758], 68, 465, FONT_SMALL, Colors::WHITE, to);
|
printAtLoc(CGI->generaltexth->allTexts[758], 68, 465, FONT_SMALL, Colors::WHITE, to);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void RandomMapTab::updateMapInfo()
|
void RandomMapTab::updateMapInfo()
|
||||||
@ -1926,7 +1909,7 @@ InfoCard::InfoCard( bool Network )
|
|||||||
if(SEL->screenType == CMenuScreen::campaignList)
|
if(SEL->screenType == CMenuScreen::campaignList)
|
||||||
{
|
{
|
||||||
CSelectionScreen *ss = static_cast<CSelectionScreen*>(parent);
|
CSelectionScreen *ss = static_cast<CSelectionScreen*>(parent);
|
||||||
mapDescription->addChild(new CPicture(*ss->bg, descriptionRect + Point(-393, 0)), true); //move subpicture bg to our description control (by default it's our (Infocard) child)
|
mapDescription->addChild(new CPicture(ss->bg->getImage(), descriptionRect + Point(-393, 0)), true); //move subpicture bg to our description control (by default it's our (Infocard) child)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1953,13 +1936,13 @@ InfoCard::InfoCard( bool Network )
|
|||||||
difficulty->block(true);
|
difficulty->block(true);
|
||||||
|
|
||||||
//description needs bg
|
//description needs bg
|
||||||
mapDescription->addChild(new CPicture(*bg, descriptionRect), true); //move subpicture bg to our description control (by default it's our (Infocard) child)
|
mapDescription->addChild(new CPicture(bg->getImage(), descriptionRect), true); //move subpicture bg to our description control (by default it's our (Infocard) child)
|
||||||
|
|
||||||
if(network)
|
if(network)
|
||||||
{
|
{
|
||||||
playerListBg = new CPicture("CHATPLUG.bmp", 16, 276);
|
playerListBg = new CPicture("CHATPLUG.bmp", 16, 276);
|
||||||
chat = new CChatBox(descriptionRect);
|
chat = new CChatBox(descriptionRect);
|
||||||
chat->chatHistory->addChild(new CPicture(*bg, chat->chatHistory->pos - pos), true); //move subpicture bg to our description control (by default it's our (Infocard) child)
|
chat->chatHistory->addChild(new CPicture(bg->getImage(), chat->chatHistory->pos - pos), true); //move subpicture bg to our description control (by default it's our (Infocard) child)
|
||||||
|
|
||||||
chatOn = true;
|
chatOn = true;
|
||||||
mapDescription->disable();
|
mapDescription->disable();
|
||||||
@ -1974,14 +1957,14 @@ InfoCard::~InfoCard()
|
|||||||
delete sFlags;
|
delete sFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InfoCard::showAll(SDL_Surface * to)
|
void InfoCard::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
|
|
||||||
//blit texts
|
//blit texts
|
||||||
if(SEL->screenType != CMenuScreen::campaignList)
|
if(SEL->screenType != CMenuScreen::campaignList)
|
||||||
{
|
{
|
||||||
printAtLoc(CGI->generaltexth->allTexts[390] + ":", 24, 400, FONT_SMALL, Colors::WHITE, to); //Allies
|
/* printAtLoc(CGI->generaltexth->allTexts[390] + ":", 24, 400, FONT_SMALL, Colors::WHITE, to); //Allies
|
||||||
printAtLoc(CGI->generaltexth->allTexts[391] + ":", 190, 400, FONT_SMALL, Colors::WHITE, to); //Enemies
|
printAtLoc(CGI->generaltexth->allTexts[391] + ":", 190, 400, FONT_SMALL, Colors::WHITE, to); //Enemies
|
||||||
printAtLoc(CGI->generaltexth->allTexts[494], 33, 430, FONT_SMALL, Colors::YELLOW, to);//"Map Diff:"
|
printAtLoc(CGI->generaltexth->allTexts[494], 33, 430, FONT_SMALL, Colors::YELLOW, to);//"Map Diff:"
|
||||||
printAtLoc(CGI->generaltexth->allTexts[492] + ":", 133,430, FONT_SMALL, Colors::YELLOW, to); //player difficulty
|
printAtLoc(CGI->generaltexth->allTexts[492] + ":", 133,430, FONT_SMALL, Colors::YELLOW, to); //player difficulty
|
||||||
@ -2013,6 +1996,7 @@ void InfoCard::showAll(SDL_Surface * to)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if(SEL->current)
|
if(SEL->current)
|
||||||
@ -2028,27 +2012,27 @@ void InfoCard::showAll(SDL_Surface * to)
|
|||||||
if (temp>20) temp=0;
|
if (temp>20) temp=0;
|
||||||
std::string sss = CGI->generaltexth->victoryConditions[temp];
|
std::string sss = CGI->generaltexth->victoryConditions[temp];
|
||||||
if (temp && SEL->current->mapHeader->victoryCondition.allowNormalVictory) sss+= "/" + CGI->generaltexth->victoryConditions[0];
|
if (temp && SEL->current->mapHeader->victoryCondition.allowNormalVictory) sss+= "/" + CGI->generaltexth->victoryConditions[0];
|
||||||
printAtLoc(sss, 60, 307, FONT_SMALL, Colors::WHITE, to);
|
//* printAtLoc(sss, 60, 307, FONT_SMALL, Colors::WHITE, to);
|
||||||
|
|
||||||
temp = SEL->current->mapHeader->victoryCondition.condition;
|
temp = SEL->current->mapHeader->victoryCondition.condition;
|
||||||
if (temp>12) temp=11;
|
if (temp>12) temp=11;
|
||||||
blitAtLoc(CGP->victory->ourImages[temp].bitmap, 24, 302, to); //victory cond descr
|
//* blitAtLoc(CGP->victory->ourImages[temp].bitmap, 24, 302, to); //victory cond descr
|
||||||
|
|
||||||
//loss conditoins
|
//loss conditoins
|
||||||
temp = SEL->current->mapHeader->lossCondition.typeOfLossCon+1;
|
temp = SEL->current->mapHeader->lossCondition.typeOfLossCon+1;
|
||||||
if (temp>20) temp=0;
|
if (temp>20) temp=0;
|
||||||
sss = CGI->generaltexth->lossCondtions[temp];
|
sss = CGI->generaltexth->lossCondtions[temp];
|
||||||
printAtLoc(sss, 60, 366, FONT_SMALL, Colors::WHITE, to);
|
//* printAtLoc(sss, 60, 366, FONT_SMALL, Colors::WHITE, to);
|
||||||
|
|
||||||
temp=SEL->current->mapHeader->lossCondition.typeOfLossCon;
|
temp=SEL->current->mapHeader->lossCondition.typeOfLossCon;
|
||||||
if (temp>12) temp=3;
|
if (temp>12) temp=3;
|
||||||
blitAtLoc(CGP->loss->ourImages[temp].bitmap, 24, 359, to); //loss cond
|
//* blitAtLoc(CGP->loss->ourImages[temp].bitmap, 24, 359, to); //loss cond
|
||||||
}
|
}
|
||||||
|
|
||||||
//difficulty
|
//difficulty
|
||||||
assert(SEL->current->mapHeader->difficulty <= 4);
|
assert(SEL->current->mapHeader->difficulty <= 4);
|
||||||
std::string &diff = CGI->generaltexth->arraytxt[142 + SEL->current->mapHeader->difficulty];
|
std::string &diff = CGI->generaltexth->arraytxt[142 + SEL->current->mapHeader->difficulty];
|
||||||
printAtMiddleLoc(diff, 62, 472, FONT_SMALL, Colors::WHITE, to);
|
//* printAtMiddleLoc(diff, 62, 472, FONT_SMALL, Colors::WHITE, to);
|
||||||
|
|
||||||
//selecting size icon
|
//selecting size icon
|
||||||
switch (SEL->current->mapHeader->width)
|
switch (SEL->current->mapHeader->width)
|
||||||
@ -2069,11 +2053,11 @@ void InfoCard::showAll(SDL_Surface * to)
|
|||||||
temp=4;
|
temp=4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
blitAtLoc(sizes->ourImages[temp].bitmap, 318, 22, to);
|
//* blitAtLoc(sizes->ourImages[temp].bitmap, 318, 22, to);
|
||||||
|
|
||||||
|
|
||||||
if(SEL->screenType == CMenuScreen::loadGame)
|
//* if(SEL->screenType == CMenuScreen::loadGame)
|
||||||
printToLoc((static_cast<const CMapInfo*>(SEL->current))->date,308,34, FONT_SMALL, Colors::WHITE, to);
|
//* printToLoc((static_cast<const CMapInfo*>(SEL->current))->date,308,34, FONT_SMALL, Colors::WHITE, to);
|
||||||
|
|
||||||
//print flags
|
//print flags
|
||||||
int fx = 34 + graphics->fonts[FONT_SMALL]->getStringWidth(CGI->generaltexth->allTexts[390]);
|
int fx = 34 + graphics->fonts[FONT_SMALL]->getStringWidth(CGI->generaltexth->allTexts[390]);
|
||||||
@ -2089,7 +2073,7 @@ void InfoCard::showAll(SDL_Surface * to)
|
|||||||
for (auto i = SEL->sInfo.playerInfos.cbegin(); i != SEL->sInfo.playerInfos.cend(); i++)
|
for (auto i = SEL->sInfo.playerInfos.cbegin(); i != SEL->sInfo.playerInfos.cend(); i++)
|
||||||
{
|
{
|
||||||
int *myx = ((i->first == playerColor || SEL->current->mapHeader->players[i->first.getNum()].team == myT) ? &fx : &ex);
|
int *myx = ((i->first == playerColor || SEL->current->mapHeader->players[i->first.getNum()].team == myT) ? &fx : &ex);
|
||||||
blitAtLoc(sFlags->ourImages[i->first.getNum()].bitmap, *myx, 399, to);
|
//* blitAtLoc(sFlags->ourImages[i->first.getNum()].bitmap, *myx, 399, to);
|
||||||
*myx += sFlags->ourImages[i->first.getNum()].bitmap->w;
|
*myx += sFlags->ourImages[i->first.getNum()].bitmap->w;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2112,7 +2096,7 @@ void InfoCard::showAll(SDL_Surface * to)
|
|||||||
tob="200%";
|
tob="200%";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
printAtMiddleLoc(tob, 311, 472, FONT_SMALL, Colors::WHITE, to);
|
//* printAtMiddleLoc(tob, 311, 472, FONT_SMALL, Colors::WHITE, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
//blit description
|
//blit description
|
||||||
@ -2128,10 +2112,10 @@ void InfoCard::showAll(SDL_Surface * to)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//name
|
//name
|
||||||
if (name.length())
|
//* if (name.length())
|
||||||
printAtLoc(name, 26, 39, FONT_BIG, Colors::YELLOW, to);
|
//* printAtLoc(name, 26, 39, FONT_BIG, Colors::YELLOW, to);
|
||||||
else
|
//* else
|
||||||
printAtLoc("Unnamed", 26, 39, FONT_BIG, Colors::YELLOW, to);
|
//* printAtLoc("Unnamed", 26, 39, FONT_BIG, Colors::YELLOW, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2234,9 +2218,10 @@ OptionsTab::~OptionsTab()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsTab::showAll(SDL_Surface * to)
|
void OptionsTab::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
|
/*
|
||||||
printAtMiddleLoc(CGI->generaltexth->allTexts[515], 222, 30, FONT_BIG, Colors::YELLOW, to);
|
printAtMiddleLoc(CGI->generaltexth->allTexts[515], 222, 30, FONT_BIG, Colors::YELLOW, to);
|
||||||
printAtMiddleWBLoc(CGI->generaltexth->allTexts[516], 222, 68, FONT_SMALL, 300, Colors::WHITE, to); //Select starting options, handicap, and name for each player in the game.
|
printAtMiddleWBLoc(CGI->generaltexth->allTexts[516], 222, 68, FONT_SMALL, 300, Colors::WHITE, to); //Select starting options, handicap, and name for each player in the game.
|
||||||
printAtMiddleWBLoc(CGI->generaltexth->allTexts[517], 107, 110, FONT_SMALL, 100, Colors::YELLOW, to); //Player Name Handicap Type
|
printAtMiddleWBLoc(CGI->generaltexth->allTexts[517], 107, 110, FONT_SMALL, 100, Colors::YELLOW, to); //Player Name Handicap Type
|
||||||
@ -2246,6 +2231,7 @@ void OptionsTab::showAll(SDL_Surface * to)
|
|||||||
printAtMiddleLoc(CGI->generaltexth->allTexts[521], 222, 538, FONT_SMALL, Colors::YELLOW, to); // Player Turn Duration
|
printAtMiddleLoc(CGI->generaltexth->allTexts[521], 222, 538, FONT_SMALL, Colors::YELLOW, to); // Player Turn Duration
|
||||||
if (turnDuration)
|
if (turnDuration)
|
||||||
printAtMiddleLoc(CGI->generaltexth->turnDurations[turnDuration->value], 319,559, FONT_SMALL, Colors::WHITE, to);//Turn duration value
|
printAtMiddleLoc(CGI->generaltexth->turnDurations[turnDuration->value], 319,559, FONT_SMALL, Colors::WHITE, to);//Turn duration value
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsTab::nextCastle( PlayerColor player, int dir )
|
void OptionsTab::nextCastle( PlayerColor player, int dir )
|
||||||
@ -2527,7 +2513,7 @@ OptionsTab::PlayerOptionsEntry::PlayerOptionsEntry( OptionsTab *owner, PlayerSet
|
|||||||
static const char *bgs[] = {"ADOPRPNL.bmp", "ADOPBPNL.bmp", "ADOPYPNL.bmp", "ADOPGPNL.bmp",
|
static const char *bgs[] = {"ADOPRPNL.bmp", "ADOPBPNL.bmp", "ADOPYPNL.bmp", "ADOPGPNL.bmp",
|
||||||
"ADOPOPNL.bmp", "ADOPPPNL.bmp", "ADOPTPNL.bmp", "ADOPSPNL.bmp"};
|
"ADOPOPNL.bmp", "ADOPPPNL.bmp", "ADOPTPNL.bmp", "ADOPSPNL.bmp"};
|
||||||
|
|
||||||
bg = new CPicture(BitmapHandler::loadBitmap(bgs[s.color.getNum()]), 0, 0, true);
|
bg = new CPicture(Gfx::CManager::getImage(bgs[s.color.getNum()]), 0, 0, true);
|
||||||
if(SEL->screenType == CMenuScreen::newGame)
|
if(SEL->screenType == CMenuScreen::newGame)
|
||||||
{
|
{
|
||||||
btns[0] = new CAdventureMapButton(CGI->generaltexth->zelp[132], bind(&OptionsTab::nextCastle, owner, s.color, -1), 107, 5, "ADOPLFA.DEF");
|
btns[0] = new CAdventureMapButton(CGI->generaltexth->zelp[132], bind(&OptionsTab::nextCastle, owner, s.color, -1), 107, 5, "ADOPLFA.DEF");
|
||||||
@ -2568,11 +2554,11 @@ OptionsTab::PlayerOptionsEntry::PlayerOptionsEntry( OptionsTab *owner, PlayerSet
|
|||||||
bonus = new SelectedBox(Point(271, 2), s, BONUS);
|
bonus = new SelectedBox(Point(271, 2), s, BONUS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsTab::PlayerOptionsEntry::showAll(SDL_Surface * to)
|
void OptionsTab::PlayerOptionsEntry::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
printAtMiddleLoc(s.name, 55, 10, FONT_SMALL, Colors::WHITE, to);
|
//* printAtMiddleLoc(s.name, 55, 10, FONT_SMALL, Colors::WHITE, to);
|
||||||
printAtMiddleWBLoc(CGI->generaltexth->arraytxt[206+whoCanPlay], 28, 39, FONT_TINY, 50, Colors::WHITE, to);
|
//* printAtMiddleWBLoc(CGI->generaltexth->arraytxt[206+whoCanPlay], 28, 39, FONT_TINY, 50, Colors::WHITE, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsTab::PlayerOptionsEntry::update()
|
void OptionsTab::PlayerOptionsEntry::update()
|
||||||
@ -3031,11 +3017,11 @@ CMultiMode::CMultiMode()
|
|||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
bg = new CPicture("MUPOPUP.bmp");
|
bg = new CPicture("MUPOPUP.bmp");
|
||||||
bg->convertToScreenBPP(); //so we could draw without problems
|
bg->convertToScreenBPP(); //so we could draw without problems
|
||||||
blitAt(CPicture("MUMAP.bmp"), 16, 77, *bg); //blit img
|
//* blitAt(CPicture("MUMAP.bmp"), 16, 77, *bg); //blit img
|
||||||
pos = bg->center(); //center, window has size of bg graphic
|
pos = bg->center(); //center, window has size of bg graphic
|
||||||
|
|
||||||
bar = new CGStatusBar(new CPicture(Rect(7, 465, 440, 18), 0));//226, 472
|
bar = new CGStatusBar(new CPicture(Rect(7, 465, 440, 18), 0));//226, 472
|
||||||
txt = new CTextInput(Rect(19, 436, 334, 16), *bg);
|
//* txt = new CTextInput(Rect(19, 436, 334, 16), *bg);
|
||||||
txt->setTxt(settings["general"]["playerName"].String()); //Player
|
txt->setTxt(settings["general"]["playerName"].String()); //Player
|
||||||
|
|
||||||
btns[0] = new CAdventureMapButton(CGI->generaltexth->zelp[266], bind(&CMultiMode::openHotseat, this), 373, 78, "MUBHOT.DEF");
|
btns[0] = new CAdventureMapButton(CGI->generaltexth->zelp[266], bind(&CMultiMode::openHotseat, this), 373, 78, "MUBHOT.DEF");
|
||||||
@ -3078,7 +3064,7 @@ CHotSeatPlayers::CHotSeatPlayers(const std::string &firstPlayer)
|
|||||||
|
|
||||||
for(int i = 0; i < ARRAY_COUNT(txt); i++)
|
for(int i = 0; i < ARRAY_COUNT(txt); i++)
|
||||||
{
|
{
|
||||||
txt[i] = new CTextInput(Rect(60, 85 + i*30, 280, 16), *bg);
|
//* txt[i] = new CTextInput(Rect(60, 85 + i*30, 280, 16), *bg);
|
||||||
txt[i]->cb += boost::bind(&CHotSeatPlayers::onChange, this, _1);
|
txt[i]->cb += boost::bind(&CHotSeatPlayers::onChange, this, _1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3258,14 +3244,14 @@ void CBonusSelection::goBack()
|
|||||||
GH.popIntTotally(this);
|
GH.popIntTotally(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBonusSelection::showAll(SDL_Surface * to)
|
void CBonusSelection::showAll()
|
||||||
{
|
{
|
||||||
blitAt(background, pos.x, pos.y, to);
|
//* blitAt(background, pos.x, pos.y, to);
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
|
|
||||||
show(to);
|
show();
|
||||||
if (pos.h != to->h || pos.w != to->w)
|
//* if (pos.h != to->h || pos.w != to->w)
|
||||||
CMessage::drawBorder(PlayerColor(1), to, pos.w+28, pos.h+30, pos.x-14, pos.y-15);
|
//* CMessage::drawBorder(PlayerColor(1), to, pos.w+28, pos.h+30, pos.x-14, pos.y-15);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBonusSelection::loadPositionsOfGraphics()
|
void CBonusSelection::loadPositionsOfGraphics()
|
||||||
@ -3326,22 +3312,22 @@ void CBonusSelection::selectMap( int whichOne, bool initialSelect )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBonusSelection::show(SDL_Surface * to)
|
void CBonusSelection::show()
|
||||||
{
|
{
|
||||||
//blitAt(background, pos.x, pos.y, to);
|
//blitAt(background, pos.x, pos.y, to);
|
||||||
|
|
||||||
//map name
|
//map name
|
||||||
std::string mapName = ourHeader->name;
|
std::string mapName = ourHeader->name;
|
||||||
|
/*
|
||||||
if (mapName.length())
|
if (mapName.length())
|
||||||
printAtLoc(mapName, 481, 219, FONT_BIG, Colors::YELLOW, to);
|
printAtLoc(mapName, 481, 219, FONT_BIG, Colors::YELLOW, to);
|
||||||
else
|
else
|
||||||
printAtLoc("Unnamed", 481, 219, FONT_BIG, Colors::YELLOW, to);
|
printAtLoc("Unnamed", 481, 219, FONT_BIG, Colors::YELLOW, to);
|
||||||
|
*/
|
||||||
//map description
|
//map description
|
||||||
printAtLoc(CGI->generaltexth->allTexts[496], 481, 253, FONT_SMALL, Colors::YELLOW, to);
|
//* printAtLoc(CGI->generaltexth->allTexts[496], 481, 253, FONT_SMALL, Colors::YELLOW, to);
|
||||||
|
|
||||||
mapDesc->showAll(to); //showAll because CTextBox has no show()
|
mapDesc->showAll(); //showAll because CTextBox has no show()
|
||||||
|
|
||||||
//map size icon
|
//map size icon
|
||||||
int temp;
|
int temp;
|
||||||
@ -3363,7 +3349,7 @@ void CBonusSelection::show(SDL_Surface * to)
|
|||||||
temp=4;
|
temp=4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
blitAtLoc(sizes->ourImages[temp].bitmap, 735, 26, to);
|
//* blitAtLoc(sizes->ourImages[temp].bitmap, 735, 26, to);
|
||||||
|
|
||||||
//flags
|
//flags
|
||||||
int fx = 496 + graphics->fonts[FONT_SMALL]->getStringWidth(CGI->generaltexth->allTexts[390]);
|
int fx = 496 + graphics->fonts[FONT_SMALL]->getStringWidth(CGI->generaltexth->allTexts[390]);
|
||||||
@ -3373,14 +3359,14 @@ void CBonusSelection::show(SDL_Surface * to)
|
|||||||
for (auto i = sInfo.playerInfos.cbegin(); i != sInfo.playerInfos.cend(); i++)
|
for (auto i = sInfo.playerInfos.cbegin(); i != sInfo.playerInfos.cend(); i++)
|
||||||
{
|
{
|
||||||
int *myx = ((i->first == playerColor || ourHeader->players[i->first.getNum()].team == myT) ? &fx : &ex);
|
int *myx = ((i->first == playerColor || ourHeader->players[i->first.getNum()].team == myT) ? &fx : &ex);
|
||||||
blitAtLoc(sFlags->ourImages[i->first.getNum()].bitmap, pos.x + *myx, pos.y + 405, to);
|
//* blitAtLoc(sFlags->ourImages[i->first.getNum()].bitmap, pos.x + *myx, pos.y + 405, to);
|
||||||
*myx += sFlags->ourImages[i->first.getNum()].bitmap->w;
|
*myx += sFlags->ourImages[i->first.getNum()].bitmap->w;
|
||||||
}
|
}
|
||||||
|
|
||||||
//difficulty
|
//difficulty
|
||||||
blitAtLoc(diffPics[sInfo.difficulty], 709, 455, to);
|
//* blitAtLoc(diffPics[sInfo.difficulty], 709, 455, to);
|
||||||
|
|
||||||
CIntObject::show(to);
|
CIntObject::show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBonusSelection::updateBonusSelection()
|
void CBonusSelection::updateBonusSelection()
|
||||||
@ -3566,9 +3552,7 @@ void CBonusSelection::updateBonusSelection()
|
|||||||
if (picNumber != -1)
|
if (picNumber != -1)
|
||||||
picName += ":" + boost::lexical_cast<std::string>(picNumber);
|
picName += ":" + boost::lexical_cast<std::string>(picNumber);
|
||||||
|
|
||||||
CAnimation * anim = new CAnimation();
|
bonusButton->setImage(Gfx::CManager::getAnimation(picName));
|
||||||
anim->setCustom(picName, 0);
|
|
||||||
bonusButton->setImage(anim);
|
|
||||||
const SDL_Color brightYellow = { 242, 226, 110, 0 };
|
const SDL_Color brightYellow = { 242, 226, 110, 0 };
|
||||||
bonusButton->borderColor = brightYellow;
|
bonusButton->borderColor = brightYellow;
|
||||||
bonuses->addButton(bonusButton);
|
bonuses->addButton(bonusButton);
|
||||||
@ -3704,7 +3688,7 @@ void CBonusSelection::CRegion::clickLeft( tribool down, bool previousState )
|
|||||||
{
|
{
|
||||||
owner->selectMap(myNumber, false);
|
owner->selectMap(myNumber, false);
|
||||||
owner->highlightedRegion = this;
|
owner->highlightedRegion = this;
|
||||||
parent->showAll(screen);
|
parent->showAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3718,23 +3702,23 @@ void CBonusSelection::CRegion::clickRight( tribool down, bool previousState )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBonusSelection::CRegion::show(SDL_Surface * to)
|
void CBonusSelection::CRegion::show()
|
||||||
{
|
{
|
||||||
//const SCampPositions::SRegionDesc & desc = owner->campDescriptions[owner->ourCampaign->camp->header.mapVersion].regions[myNumber];
|
//const SCampPositions::SRegionDesc & desc = owner->campDescriptions[owner->ourCampaign->camp->header.mapVersion].regions[myNumber];
|
||||||
if (!accessible)
|
if (!accessible)
|
||||||
{
|
{
|
||||||
//show as striped
|
//show as striped
|
||||||
blitAtLoc(graphics[2], 0, 0, to);
|
//* blitAtLoc(graphics[2], 0, 0, to);
|
||||||
}
|
}
|
||||||
else if (this == owner->highlightedRegion)
|
else if (this == owner->highlightedRegion)
|
||||||
{
|
{
|
||||||
//show as selected
|
//show as selected
|
||||||
blitAtLoc(graphics[1], 0, 0, to);
|
//* blitAtLoc(graphics[1], 0, 0, to);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//show as not selected selected
|
//show as not selected selected
|
||||||
blitAtLoc(graphics[0], 0, 0, to);
|
//* blitAtLoc(graphics[0], 0, 0, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3989,12 +3973,12 @@ void CCampaignScreen::CCampaignButton::hover(bool on)
|
|||||||
hoverLabel->setTxt(" ");
|
hoverLabel->setTxt(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCampaignScreen::CCampaignButton::show(SDL_Surface * to)
|
void CCampaignScreen::CCampaignButton::show()
|
||||||
{
|
{
|
||||||
if (status == CCampaignScreen::DISABLED)
|
if (status == CCampaignScreen::DISABLED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CIntObject::show(to);
|
CIntObject::show();
|
||||||
|
|
||||||
// Play the campaign button video when the mouse cursor is placed over the button
|
// Play the campaign button video when the mouse cursor is placed over the button
|
||||||
if (hovered)
|
if (hovered)
|
||||||
@ -4002,7 +3986,7 @@ void CCampaignScreen::CCampaignButton::show(SDL_Surface * to)
|
|||||||
if (CCS->videoh->fname != video)
|
if (CCS->videoh->fname != video)
|
||||||
CCS->videoh->open(video);
|
CCS->videoh->open(video);
|
||||||
|
|
||||||
CCS->videoh->update(pos.x, pos.y, to, true, false); // plays sequentially frame by frame, starts at the beginning when the video is over
|
CCS->videoh->update(pos.x, pos.y, true, false); // plays sequentially frame by frame, starts at the beginning when the video is over
|
||||||
}
|
}
|
||||||
else if (CCS->videoh->fname == video) // When you got out of the bounds of the button then close the video
|
else if (CCS->videoh->fname == video) // When you got out of the bounds of the button then close the video
|
||||||
{
|
{
|
||||||
@ -4047,11 +4031,11 @@ CCampaignScreen::CCampaignScreen(const JsonNode &config)
|
|||||||
campButtons.push_back(new CCampaignButton(node));
|
campButtons.push_back(new CCampaignButton(node));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCampaignScreen::showAll(SDL_Surface *to)
|
void CCampaignScreen::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
if (pos.h != to->h || pos.w != to->w)
|
//* if (pos.h != to->h || pos.w != to->w)
|
||||||
CMessage::drawBorder(PlayerColor(1), to, pos.w+28, pos.h+30, pos.x-14, pos.y-15);
|
//* CMessage::drawBorder(PlayerColor(1), to, pos.w+28, pos.h+30, pos.x-14, pos.y-15);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGPreGame::showLoadingScreen(boost::function<void()> loader)
|
void CGPreGame::showLoadingScreen(boost::function<void()> loader)
|
||||||
@ -4082,12 +4066,12 @@ CLoadingScreen::~CLoadingScreen()
|
|||||||
loadingThread.join();
|
loadingThread.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CLoadingScreen::showAll(SDL_Surface *to)
|
void CLoadingScreen::showAll()
|
||||||
{
|
{
|
||||||
Rect rect(0,0,to->w, to->h);
|
//* Rect rect(0,0,to->w, to->h);
|
||||||
SDL_FillRect(to, &rect, 0);
|
//* SDL_FillRect(to, &rect, 0);
|
||||||
|
|
||||||
CWindowObject::showAll(to);
|
CWindowObject::showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
CPrologEpilogVideo::CPrologEpilogVideo( CCampaignScenario::SScenarioPrologEpilog _spe, std::function<void()> callback )
|
CPrologEpilogVideo::CPrologEpilogVideo( CCampaignScenario::SScenarioPrologEpilog _spe, std::function<void()> callback )
|
||||||
@ -4107,9 +4091,9 @@ CPrologEpilogVideo::CPrologEpilogVideo( CCampaignScenario::SScenarioPrologEpilog
|
|||||||
//SDL_SaveBMP(txt, "txtsrfc.bmp");
|
//SDL_SaveBMP(txt, "txtsrfc.bmp");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPrologEpilogVideo::show( SDL_Surface * to )
|
void CPrologEpilogVideo::show()
|
||||||
{
|
{
|
||||||
memset(to->pixels, 0, to->h*to->pitch); //make bg black
|
/* memset(to->pixels, 0, to->h*to->pitch); //make bg black
|
||||||
CCS->videoh->update(pos.x, pos.y, to, true, false);
|
CCS->videoh->update(pos.x, pos.y, to, true, false);
|
||||||
SDL_Rect tmp, our;
|
SDL_Rect tmp, our;
|
||||||
our = Rect(0, to->h-100, to->w, 100);
|
our = Rect(0, to->h-100, to->w, 100);
|
||||||
@ -4125,6 +4109,7 @@ void CPrologEpilogVideo::show( SDL_Surface * to )
|
|||||||
curTxtH = std::max(curTxtH - 1, to->h - txt->h);
|
curTxtH = std::max(curTxtH - 1, to->h - txt->h);
|
||||||
decrementDelayCounter = 0;
|
decrementDelayCounter = 0;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPrologEpilogVideo::clickLeft( tribool down, bool previousState )
|
void CPrologEpilogVideo::clickLeft( tribool down, bool previousState )
|
||||||
|
@ -69,8 +69,8 @@ public:
|
|||||||
};
|
};
|
||||||
CMenuScreen(const JsonNode& configNode);
|
CMenuScreen(const JsonNode& configNode);
|
||||||
|
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void activate();
|
void activate();
|
||||||
void deactivate();
|
void deactivate();
|
||||||
|
|
||||||
@ -93,8 +93,8 @@ class CreditsScreen : public CIntObject
|
|||||||
public:
|
public:
|
||||||
CreditsScreen();
|
CreditsScreen();
|
||||||
|
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
|
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
@ -130,7 +130,7 @@ public:
|
|||||||
CDefHandler *sizes, *sFlags;
|
CDefHandler *sizes, *sFlags;
|
||||||
|
|
||||||
void changeSelection(const CMapInfo *to);
|
void changeSelection(const CMapInfo *to);
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
void showTeamsPopup();
|
void showTeamsPopup();
|
||||||
void toggleChat();
|
void toggleChat();
|
||||||
@ -177,7 +177,7 @@ public:
|
|||||||
void selectFName(std::string fname);
|
void selectFName(std::string fname);
|
||||||
const CMapInfo * getSelectedMapInfo() const;
|
const CMapInfo * getSelectedMapInfo() const;
|
||||||
|
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void keyPressed(const SDL_KeyboardEvent & key);
|
void keyPressed(const SDL_KeyboardEvent & key);
|
||||||
void onDoubleClick();
|
void onDoubleClick();
|
||||||
@ -247,7 +247,7 @@ public:
|
|||||||
|
|
||||||
PlayerOptionsEntry(OptionsTab *owner, PlayerSettings &S);
|
PlayerOptionsEntry(OptionsTab *owner, PlayerSettings &S);
|
||||||
void selectButtons(); //hides unavailable buttons
|
void selectButtons(); //hides unavailable buttons
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void update();
|
void update();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -275,7 +275,7 @@ public:
|
|||||||
void recreate();
|
void recreate();
|
||||||
OptionsTab();
|
OptionsTab();
|
||||||
~OptionsTab();
|
~OptionsTab();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
|
|
||||||
int nextAllowedHero(PlayerColor player, int min, int max, int incl, int dir );
|
int nextAllowedHero(PlayerColor player, int min, int max, int incl, int dir );
|
||||||
|
|
||||||
@ -298,7 +298,7 @@ public:
|
|||||||
*
|
*
|
||||||
* @param to where the graphics should be inserted
|
* @param to where the graphics should be inserted
|
||||||
*/
|
*/
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the map info object and fires the associated callback method.
|
* Updates the map info object and fires the associated callback method.
|
||||||
@ -483,7 +483,7 @@ public:
|
|||||||
void postRequest(ui8 what, ui8 dir) override;
|
void postRequest(ui8 what, ui8 dir) override;
|
||||||
void postChatMessage(const std::string &txt) override;
|
void postChatMessage(const std::string &txt) override;
|
||||||
void propagateNames();
|
void propagateNames();
|
||||||
void showAll(SDL_Surface *to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Save game screen
|
/// Save game screen
|
||||||
@ -551,7 +551,7 @@ public:
|
|||||||
CPrologEpilogVideo(CCampaignScenario::SScenarioPrologEpilog _spe, std::function<void()> callback);
|
CPrologEpilogVideo(CCampaignScenario::SScenarioPrologEpilog _spe, std::function<void()> callback);
|
||||||
|
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Campaign screen where you can choose one out of three starting bonuses
|
/// Campaign screen where you can choose one out of three starting bonuses
|
||||||
@ -594,7 +594,7 @@ class CBonusSelection : public CIntObject
|
|||||||
|
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
};
|
};
|
||||||
|
|
||||||
std::vector<CRegion *> regions;
|
std::vector<CRegion *> regions;
|
||||||
@ -626,8 +626,8 @@ public:
|
|||||||
CBonusSelection(shared_ptr<CCampaignState> _ourCampaign);
|
CBonusSelection(shared_ptr<CCampaignState> _ourCampaign);
|
||||||
~CBonusSelection();
|
~CBonusSelection();
|
||||||
|
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
|
|
||||||
void goBack();
|
void goBack();
|
||||||
void startMap();
|
void startMap();
|
||||||
@ -659,7 +659,7 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
CCampaignButton(const JsonNode &config );
|
CCampaignButton(const JsonNode &config );
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
};
|
};
|
||||||
|
|
||||||
CAdventureMapButton *back;
|
CAdventureMapButton *back;
|
||||||
@ -672,7 +672,7 @@ public:
|
|||||||
enum CampaignSet {ROE, AB, SOD, WOG};
|
enum CampaignSet {ROE, AB, SOD, WOG};
|
||||||
|
|
||||||
CCampaignScreen(const JsonNode &config);
|
CCampaignScreen(const JsonNode &config);
|
||||||
void showAll(SDL_Surface *to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Handles background screen, loads graphics for victory/loss condition and random town or hero selection
|
/// Handles background screen, loads graphics for victory/loss condition and random town or hero selection
|
||||||
@ -710,7 +710,7 @@ public:
|
|||||||
CLoadingScreen(boost::function<void()> loader);
|
CLoadingScreen(boost::function<void()> loader);
|
||||||
~CLoadingScreen();
|
~CLoadingScreen();
|
||||||
|
|
||||||
void showAll(SDL_Surface *to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
extern ISelectionScreenInfo *SEL;
|
extern ISelectionScreenInfo *SEL;
|
||||||
|
@ -40,10 +40,10 @@ void CQuestLabel::clickLeft(tribool down, bool previousState)
|
|||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CQuestLabel::showAll(SDL_Surface * to)
|
void CQuestLabel::showAll()
|
||||||
{
|
{
|
||||||
if (active)
|
if (active)
|
||||||
CBoundedLabel::showAll (to);
|
CBoundedLabel::showAll ();
|
||||||
}
|
}
|
||||||
|
|
||||||
CQuestIcon::CQuestIcon (const std::string &defname, int index, int x, int y) :
|
CQuestIcon::CQuestIcon (const std::string &defname, int index, int x, int y) :
|
||||||
@ -58,10 +58,10 @@ void CQuestIcon::clickLeft(tribool down, bool previousState)
|
|||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CQuestIcon::showAll(SDL_Surface * to)
|
void CQuestIcon::showAll()
|
||||||
{
|
{
|
||||||
CSDL_Ext::CClipRectGuard guard(to, parent->pos);
|
//* CSDL_Ext::CClipRectGuard guard(to, parent->pos);
|
||||||
CAnimImage::showAll(to);
|
CAnimImage::showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
CQuestMinimap::CQuestMinimap (const Rect & position) :
|
CQuestMinimap::CQuestMinimap (const Rect & position) :
|
||||||
@ -109,11 +109,11 @@ void CQuestMinimap::iconClicked()
|
|||||||
moveAdvMapSelection();
|
moveAdvMapSelection();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CQuestMinimap::showAll(SDL_Surface * to)
|
void CQuestMinimap::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to); // blitting IntObject directly to hide radar
|
//* CIntObject::showAll(to); // blitting IntObject directly to hide radar
|
||||||
BOOST_FOREACH (auto pic, icons)
|
//* BOOST_FOREACH (auto pic, icons)
|
||||||
pic->showAll(to);
|
//* pic->showAll(to);
|
||||||
}
|
}
|
||||||
|
|
||||||
CQuestLog::CQuestLog (const std::vector<QuestInfo> & Quests) :
|
CQuestLog::CQuestLog (const std::vector<QuestInfo> & Quests) :
|
||||||
@ -151,20 +151,20 @@ void CQuestLog::init()
|
|||||||
recreateQuestList (0);
|
recreateQuestList (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CQuestLog::showAll(SDL_Surface * to)
|
void CQuestLog::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll (to);
|
CIntObject::showAll();
|
||||||
BOOST_FOREACH (auto label, labels)
|
BOOST_FOREACH (auto label, labels)
|
||||||
{
|
{
|
||||||
label->show(to); //shows only if active
|
label->show(); //shows only if active
|
||||||
}
|
}
|
||||||
if (labels.size() && labels[questIndex]->active)
|
if (labels.size() && labels[questIndex]->active)
|
||||||
{
|
{
|
||||||
CSDL_Ext::drawBorder(to, Rect::around(labels[questIndex]->pos), int3(Colors::METALLIC_GOLD.r, Colors::METALLIC_GOLD.g, Colors::METALLIC_GOLD.b));
|
//* CSDL_Ext::drawBorder(to, Rect::around(labels[questIndex]->pos), int3(Colors::METALLIC_GOLD.r, Colors::METALLIC_GOLD.g, Colors::METALLIC_GOLD.b));
|
||||||
}
|
}
|
||||||
description->show(to);
|
description->show();
|
||||||
minimap->update();
|
minimap->update();
|
||||||
minimap->show(to);
|
minimap->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CQuestLog::recreateQuestList (int newpos)
|
void CQuestLog::recreateQuestList (int newpos)
|
||||||
|
@ -41,7 +41,7 @@ public:
|
|||||||
CQuestLabel (int x=0, int y=0, EFonts Font = FONT_SMALL, EAlignment Align = TOPLEFT, const SDL_Color &Color = Colors::WHITE, const std::string &Text = "")
|
CQuestLabel (int x=0, int y=0, EFonts Font = FONT_SMALL, EAlignment Align = TOPLEFT, const SDL_Color &Color = Colors::WHITE, const std::string &Text = "")
|
||||||
: CBoundedLabel (x, y, FONT_SMALL, TOPLEFT, Colors::WHITE, Text){};
|
: CBoundedLabel (x, y, FONT_SMALL, TOPLEFT, Colors::WHITE, Text){};
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
class CQuestIcon : public CAnimImage
|
class CQuestIcon : public CAnimImage
|
||||||
@ -52,7 +52,7 @@ public:
|
|||||||
CQuestIcon (const std::string &defname, int index, int x=0, int y=0);
|
CQuestIcon (const std::string &defname, int index, int x=0, int y=0);
|
||||||
|
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
class CQuestMinimap : public CMinimap
|
class CQuestMinimap : public CMinimap
|
||||||
@ -73,7 +73,7 @@ public:
|
|||||||
void setLevel(int level);
|
void setLevel(int level);
|
||||||
void addQuestMarks (const QuestInfo * q);
|
void addQuestMarks (const QuestInfo * q);
|
||||||
|
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
class CQuestLog : public CWindowObject
|
class CQuestLog : public CWindowObject
|
||||||
@ -100,5 +100,5 @@ public:
|
|||||||
void printDescription (int which){};
|
void printDescription (int which){};
|
||||||
void sliderMoved (int newpos);
|
void sliderMoved (int newpos);
|
||||||
void recreateQuestList (int pos);
|
void recreateQuestList (int pos);
|
||||||
void showAll (SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
@ -314,43 +314,43 @@ void CSpellWindow::fRcornerb()
|
|||||||
GH.breakEventHandling();
|
GH.breakEventHandling();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSpellWindow::showAll(SDL_Surface * to)
|
void CSpellWindow::showAll()
|
||||||
{
|
{
|
||||||
CWindowObject::showAll(to);
|
CWindowObject::showAll();
|
||||||
blitAt(spellTab->ourImages[selectedTab].bitmap, 524 + pos.x, 88 + pos.y, to);
|
//* blitAt(spellTab->ourImages[selectedTab].bitmap, 524 + pos.x, 88 + pos.y, to);
|
||||||
|
|
||||||
std::ostringstream mana;
|
std::ostringstream mana;
|
||||||
mana<<myHero->mana;
|
mana<<myHero->mana;
|
||||||
printAtMiddleLoc(mana.str(), 435, 426, FONT_SMALL, Colors::YELLOW, to);
|
//* printAtMiddleLoc(mana.str(), 435, 426, FONT_SMALL, Colors::YELLOW, to);
|
||||||
|
|
||||||
statusBar->showAll(to);
|
statusBar->showAll();
|
||||||
|
|
||||||
//printing school images
|
//printing school images
|
||||||
if(selectedTab!=4 && currentPage == 0)
|
if(selectedTab!=4 && currentPage == 0)
|
||||||
{
|
{
|
||||||
blitAt(schools->ourImages[selectedTab].bitmap, 117 + pos.x, 74 + pos.y, to);
|
//* blitAt(schools->ourImages[selectedTab].bitmap, 117 + pos.x, 74 + pos.y, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
//printing corners
|
//printing corners
|
||||||
if(currentPage!=0)
|
if(currentPage!=0)
|
||||||
{
|
{
|
||||||
blitAt(leftCorner, lCorner->pos.x, lCorner->pos.y, to);
|
//* blitAt(leftCorner, lCorner->pos.x, lCorner->pos.y, to);
|
||||||
}
|
}
|
||||||
if((currentPage+1) < (pagesWithinCurrentTab()) )
|
if((currentPage+1) < (pagesWithinCurrentTab()) )
|
||||||
{
|
{
|
||||||
blitAt(rightCorner, rCorner->pos.x, rCorner->pos.y, to);
|
//* blitAt(rightCorner, rCorner->pos.x, rCorner->pos.y, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
//printing spell info
|
//printing spell info
|
||||||
for(int b=0; b<12; ++b)
|
for(int b=0; b<12; ++b)
|
||||||
{
|
{
|
||||||
spellAreas[b]->showAll(to);
|
//* spellAreas[b]->showAll(to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSpellWindow::show(SDL_Surface * to)
|
void CSpellWindow::show()
|
||||||
{
|
{
|
||||||
statusBar->show(to);
|
statusBar->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
class SpellbookSpellSorter
|
class SpellbookSpellSorter
|
||||||
@ -766,11 +766,11 @@ void CSpellWindow::SpellArea::clickLeft(tribool down, bool previousState)
|
|||||||
}
|
}
|
||||||
if (availableTowns.empty())
|
if (availableTowns.empty())
|
||||||
LOCPLINT->showInfoDialog(CGI->generaltexth->allTexts[124]);
|
LOCPLINT->showInfoDialog(CGI->generaltexth->allTexts[124]);
|
||||||
else
|
//* else
|
||||||
GH.pushInt (new CObjectListWindow(availableTowns,
|
//* GH.pushInt (new CObjectListWindow(availableTowns,
|
||||||
new CPicture(graphics->spellscr->ourImages[spell].bitmap, 0, 0, false),
|
//* new CPicture(graphics->spellscr->ourImages[spell].bitmap, 0, 0, false),
|
||||||
CGI->generaltexth->jktexts[40], CGI->generaltexth->jktexts[41],
|
//* CGI->generaltexth->jktexts[40], CGI->generaltexth->jktexts[41],
|
||||||
boost::bind (&CSpellWindow::teleportTo, owner, _1, h)));
|
//* boost::bind (&CSpellWindow::teleportTo, owner, _1, h)));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -823,15 +823,15 @@ void CSpellWindow::SpellArea::hover(bool on)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSpellWindow::SpellArea::showAll(SDL_Surface * to)
|
void CSpellWindow::SpellArea::showAll()
|
||||||
{
|
{
|
||||||
if(mySpell < 0)
|
if(mySpell < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const CSpell * spell = mySpell.toSpell();
|
const CSpell * spell = mySpell.toSpell();
|
||||||
|
|
||||||
blitAt(owner->spells->ourImages[mySpell].bitmap, pos.x, pos.y, to);
|
//* blitAt(owner->spells->ourImages[mySpell].bitmap, pos.x, pos.y, to);
|
||||||
blitAt(owner->schoolBorders[owner->selectedTab >= 4 ? whichSchool : owner->selectedTab]->ourImages[schoolLevel].bitmap, pos.x, pos.y, to); //printing border (indicates level of magic school)
|
//* blitAt(owner->schoolBorders[owner->selectedTab >= 4 ? whichSchool : owner->selectedTab]->ourImages[schoolLevel].bitmap, pos.x, pos.y, to); //printing border (indicates level of magic school)
|
||||||
|
|
||||||
SDL_Color firstLineColor, secondLineColor;
|
SDL_Color firstLineColor, secondLineColor;
|
||||||
if(spellCost > owner->myHero->mana) //hero cannot cast this spell
|
if(spellCost > owner->myHero->mana) //hero cannot cast this spell
|
||||||
@ -846,13 +846,13 @@ void CSpellWindow::SpellArea::showAll(SDL_Surface * to)
|
|||||||
secondLineColor = Colors::WHITE;
|
secondLineColor = Colors::WHITE;
|
||||||
}
|
}
|
||||||
//printing spell's name
|
//printing spell's name
|
||||||
printAtMiddleLoc(spell->name, 39, 70, FONT_TINY, firstLineColor, to);
|
//* printAtMiddleLoc(spell->name, 39, 70, FONT_TINY, firstLineColor, to);
|
||||||
//printing lvl
|
//printing lvl
|
||||||
printAtMiddleLoc(CGI->generaltexth->allTexts[171 + spell->level], 39, 82, FONT_TINY, secondLineColor, to);
|
//* printAtMiddleLoc(CGI->generaltexth->allTexts[171 + spell->level], 39, 82, FONT_TINY, secondLineColor, to);
|
||||||
//printing cost
|
//printing cost
|
||||||
std::ostringstream ss;
|
std::ostringstream ss;
|
||||||
ss << CGI->generaltexth->allTexts[387] << ": " << spellCost;
|
ss << CGI->generaltexth->allTexts[387] << ": " << spellCost;
|
||||||
printAtMiddleLoc(ss.str(), 39, 94, FONT_TINY, secondLineColor, to);
|
//* printAtMiddleLoc(ss.str(), 39, 94, FONT_TINY, secondLineColor, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSpellWindow::SpellArea::setSpell(SpellID spellID)
|
void CSpellWindow::SpellArea::setSpell(SpellID spellID)
|
||||||
|
@ -58,7 +58,7 @@ private:
|
|||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
void hover(bool on);
|
void hover(bool on);
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
SDL_Surface * leftCorner, * rightCorner;
|
SDL_Surface * leftCorner, * rightCorner;
|
||||||
@ -108,8 +108,8 @@ public:
|
|||||||
void keyPressed(const SDL_KeyboardEvent & key);
|
void keyPressed(const SDL_KeyboardEvent & key);
|
||||||
void activate();
|
void activate();
|
||||||
void deactivate();
|
void deactivate();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
|
|
||||||
void teleportTo(int town, const CGHeroInstance * hero);
|
void teleportTo(int town, const CGHeroInstance * hero);
|
||||||
};
|
};
|
||||||
|
@ -167,41 +167,16 @@ checkErrorAndClean:
|
|||||||
throw std::runtime_error("BIK failed opening video!");
|
throw std::runtime_error("BIK failed opening video!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBIKHandler::show( int x, int y, SDL_Surface *dst, bool update )
|
void CBIKHandler::show( int x, int y, bool update )
|
||||||
{
|
{
|
||||||
const int w = hBink->width,
|
const int w = hBink->width,
|
||||||
h = hBink->height,
|
h = hBink->height;
|
||||||
Bpp = dst->format->BytesPerPixel;
|
|
||||||
|
|
||||||
int mode = -1;
|
|
||||||
|
|
||||||
//screen color depth might have changed... (eg. because F4)
|
|
||||||
if(bufferSize != w * h * Bpp)
|
|
||||||
{
|
|
||||||
freeBuffer();
|
|
||||||
allocBuffer(Bpp);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(Bpp)
|
|
||||||
{
|
|
||||||
case 2:
|
|
||||||
mode = 3; //565, mode 2 is 555 probably
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
mode = 0;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
mode = 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return; //not supported screen depth
|
|
||||||
}
|
|
||||||
|
|
||||||
binkDoFrame(hBink);
|
binkDoFrame(hBink);
|
||||||
binkCopyToBuffer(hBink, buffer, w*Bpp, h, 0, 0, mode);
|
binkCopyToBuffer(hBink, buffer, w*4, h, 0, 0, 1);
|
||||||
blitBuffer(buffer, x, y, w, h, dst);
|
//blitBuffer(buffer, x, y, w, h, dst);
|
||||||
if(update)
|
//if(update)
|
||||||
SDL_UpdateRect(dst, x, y, w, h);
|
// SDL_UpdateRect(dst, x, y, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CBIKHandler::nextFrame()
|
bool CBIKHandler::nextFrame()
|
||||||
@ -237,17 +212,17 @@ int CBIKHandler::frameCount() const
|
|||||||
return hBink->frameCount;
|
return hBink->frameCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBIKHandler::redraw( int x, int y, SDL_Surface *dst, bool update )
|
void CBIKHandler::redraw( int x, int y, bool update)
|
||||||
{
|
{
|
||||||
int w = hBink->width, h = hBink->height;
|
int w = hBink->width, h = hBink->height;
|
||||||
blitBuffer(buffer, x, y, w, h, dst);
|
//blitBuffer(buffer, x, y, w, h, dst);
|
||||||
if(update)
|
//if(update)
|
||||||
SDL_UpdateRect(dst, x, y, w, h);
|
// SDL_UpdateRect(dst, x, y, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBIKHandler::allocBuffer(int Bpp)
|
void CBIKHandler::allocBuffer(int Bpp)
|
||||||
{
|
{
|
||||||
if(!Bpp) Bpp = screen->format->BytesPerPixel;
|
//* if(!Bpp) Bpp = screen->format->BytesPerPixel;
|
||||||
|
|
||||||
bufferSize = hBink->width * hBink->height * Bpp;
|
bufferSize = hBink->width * hBink->height * Bpp;
|
||||||
buffer = new char[bufferSize];
|
buffer = new char[bufferSize];
|
||||||
@ -315,7 +290,7 @@ bool CSmackPlayer::open( std::string name )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSmackPlayer::show( int x, int y, SDL_Surface *dst, bool update)
|
void CSmackPlayer::show( int x, int y, bool update)
|
||||||
{
|
{
|
||||||
int w = data->width;
|
int w = data->width;
|
||||||
int stripe = (-w*2) & (~3);
|
int stripe = (-w*2) & (~3);
|
||||||
@ -323,7 +298,7 @@ void CSmackPlayer::show( int x, int y, SDL_Surface *dst, bool update)
|
|||||||
//put frame to the buffer
|
//put frame to the buffer
|
||||||
ptrSmackToBuffer(data, 0, 0, stripe, w, buf, 0x80000000);
|
ptrSmackToBuffer(data, 0, 0, stripe, w, buf, 0x80000000);
|
||||||
ptrSmackDoFrame(data);
|
ptrSmackDoFrame(data);
|
||||||
redraw(x, y, dst, update);
|
redraw(x, y, update);
|
||||||
}
|
}
|
||||||
|
|
||||||
int CSmackPlayer::curFrame() const
|
int CSmackPlayer::curFrame() const
|
||||||
@ -336,63 +311,31 @@ int CSmackPlayer::frameCount() const
|
|||||||
return data->frameCount;
|
return data->frameCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSmackPlayer::redraw( int x, int y, SDL_Surface *dst, bool update )
|
void CSmackPlayer::redraw( int x, int y, bool update )
|
||||||
{
|
{
|
||||||
int w = std::min<int>(data->width, dst->w - x), h = std::min<int>(data->height, dst->h - y);
|
//int w = std::min<int>(data->width, dst->w - x), h = std::min<int>(data->height, dst->h - y);
|
||||||
/* Lock the screen for direct access to the pixels */
|
int w = data->width, h = data->height;
|
||||||
if ( SDL_MUSTLOCK(dst) )
|
|
||||||
{
|
|
||||||
if ( SDL_LockSurface(dst) < 0 )
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Can't lock screen: %s\n", SDL_GetError());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw the frame
|
// draw the frame
|
||||||
Uint16* addr = (Uint16*) (buffer+w*(h-1)*2-2);
|
Uint16* addr = (Uint16*) (buffer+w*(h-1)*2-2);
|
||||||
if(dst->format->BytesPerPixel >= 3)
|
/*
|
||||||
|
for( int j=0; j<h-1; j++) // why -1 ?
|
||||||
{
|
{
|
||||||
for( int j=0; j<h-1; j++) // why -1 ?
|
for ( int i=w-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
for ( int i=w-1; i>=0; i--)
|
Uint16 pixel = *addr;
|
||||||
{
|
|
||||||
Uint16 pixel = *addr;
|
|
||||||
|
|
||||||
Uint8 *p = (Uint8 *)dst->pixels + (j+y) * dst->pitch + (i + x) * dst->format->BytesPerPixel;
|
Uint8 *p = (Uint8 *)dst->pixels + (j+y) * dst->pitch + (i + x) * dst->format->BytesPerPixel;
|
||||||
p[2] = ((pixel & 0x7c00) >> 10) * 8;
|
p[2] = ((pixel & 0x7c00) >> 10) * 8;
|
||||||
p[1] = ((pixel & 0x3e0) >> 5) * 8;
|
p[1] = ((pixel & 0x3e0) >> 5) * 8;
|
||||||
p[0] = ((pixel & 0x1F)) * 8;
|
p[0] = ((pixel & 0x1F)) * 8;
|
||||||
|
|
||||||
addr--;
|
addr--;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(dst->format->BytesPerPixel == 2)
|
*/
|
||||||
{
|
//if(update)
|
||||||
for( int j=0; j<h-1; j++) // why -1 ?
|
// SDL_UpdateRect(dst, x, y, w, h);
|
||||||
{
|
|
||||||
for ( int i=w-1; i>=0; i--)
|
|
||||||
{
|
|
||||||
//convert rgb 555 to 565
|
|
||||||
Uint16 pixel = *addr;
|
|
||||||
Uint16 *p = (Uint16 *)((Uint8 *)dst->pixels + (j+y) * dst->pitch + (i + x) * dst->format->BytesPerPixel);
|
|
||||||
*p = (pixel & 0x1F)
|
|
||||||
+ ((pixel & 0x3e0) << 1)
|
|
||||||
+ ((pixel & 0x7c00) << 1);
|
|
||||||
|
|
||||||
addr--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( SDL_MUSTLOCK(dst) )
|
|
||||||
{
|
|
||||||
SDL_UnlockSurface(dst);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(update)
|
|
||||||
SDL_UpdateRect(dst, x, y, w, h);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CVideoPlayer::CVideoPlayer()
|
CVideoPlayer::CVideoPlayer()
|
||||||
@ -472,10 +415,10 @@ bool CVideoPlayer::nextFrame()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVideoPlayer::show(int x, int y, SDL_Surface *dst, bool update)
|
void CVideoPlayer::show(int x, int y, bool update)
|
||||||
{
|
{
|
||||||
if(current)
|
if(current)
|
||||||
current->show(x, y, dst, update);
|
current->show(x, y, update);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CVideoPlayer::wait()
|
bool CVideoPlayer::wait()
|
||||||
@ -502,17 +445,17 @@ int CVideoPlayer::frameCount() const
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CVideoPlayer::openAndPlayVideo(std::string name, int x, int y, SDL_Surface *dst, bool stopOnKey)
|
bool CVideoPlayer::openAndPlayVideo(std::string name, int x, int y, bool stopOnKey)
|
||||||
{
|
{
|
||||||
if(!open(name))
|
if(!open(name))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
bool ret = playVideo(x, y, dst, stopOnKey);
|
bool ret = playVideo(x, y, stopOnKey);
|
||||||
close();
|
close();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVideoPlayer::update( int x, int y, SDL_Surface *dst, bool forceRedraw, bool update )
|
void CVideoPlayer::update( int x, int y, bool forceRedraw, bool update )
|
||||||
{
|
{
|
||||||
if(!current)
|
if(!current)
|
||||||
return;
|
return;
|
||||||
@ -529,25 +472,23 @@ void CVideoPlayer::update( int x, int y, SDL_Surface *dst, bool forceRedraw, boo
|
|||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(!w)
|
if(!w)
|
||||||
{
|
{
|
||||||
show(x,y,dst,update);
|
show(x, y, update);
|
||||||
}
|
}
|
||||||
else if (forceRedraw)
|
else if (forceRedraw)
|
||||||
{
|
{
|
||||||
redraw(x, y, dst, update);
|
redraw(x, y, update);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVideoPlayer::redraw( int x, int y, SDL_Surface *dst, bool update )
|
void CVideoPlayer::redraw( int x, int y, bool update)
|
||||||
{
|
{
|
||||||
if(current)
|
if(current)
|
||||||
current->redraw(x, y, dst, update);
|
current->redraw(x, y, update);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CVideoPlayer::playVideo(int x, int y, SDL_Surface *dst, bool stopOnKey)
|
bool CVideoPlayer::playVideo(int x, int y, bool stopOnKey)
|
||||||
{
|
{
|
||||||
if(!current)
|
if(!current)
|
||||||
return false;
|
return false;
|
||||||
@ -560,7 +501,7 @@ bool CVideoPlayer::playVideo(int x, int y, SDL_Surface *dst, bool stopOnKey)
|
|||||||
|
|
||||||
if(!wait())
|
if(!wait())
|
||||||
{
|
{
|
||||||
show(x, y, dst);
|
show(x, y);
|
||||||
nextFrame();
|
nextFrame();
|
||||||
frame++;
|
frame++;
|
||||||
}
|
}
|
||||||
|
@ -9,8 +9,8 @@ public:
|
|||||||
virtual bool open(std::string name)=0; //true - succes
|
virtual bool open(std::string name)=0; //true - succes
|
||||||
virtual void close()=0;
|
virtual void close()=0;
|
||||||
virtual bool nextFrame()=0;
|
virtual bool nextFrame()=0;
|
||||||
virtual void show(int x, int y, SDL_Surface *dst, bool update = true)=0;
|
virtual void show(int x, int y, bool update = true)=0;
|
||||||
virtual void redraw(int x, int y, SDL_Surface *dst, bool update = true)=0; //reblits buffer
|
virtual void redraw(int x, int y, bool update = true)=0; //reblits buffer
|
||||||
virtual bool wait()=0;
|
virtual bool wait()=0;
|
||||||
virtual int curFrame() const =0;
|
virtual int curFrame() const =0;
|
||||||
virtual int frameCount() const =0;
|
virtual int frameCount() const =0;
|
||||||
@ -22,8 +22,8 @@ class IMainVideoPlayer : public IVideoPlayer
|
|||||||
public:
|
public:
|
||||||
std::string fname; //name of current video file (empty if idle)
|
std::string fname; //name of current video file (empty if idle)
|
||||||
|
|
||||||
virtual void update(int x, int y, SDL_Surface *dst, bool forceRedraw, bool update = true){}
|
virtual void update(int x, int y, bool forceRedraw, bool update = true){}
|
||||||
virtual bool openAndPlayVideo(std::string name, int x, int y, SDL_Surface *dst, bool stopOnKey = false)
|
virtual bool openAndPlayVideo(std::string name, int x, int y, bool stopOnKey = false)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -34,8 +34,8 @@ class CEmptyVideoPlayer : public IMainVideoPlayer
|
|||||||
public:
|
public:
|
||||||
virtual int curFrame() const {return -1;};
|
virtual int curFrame() const {return -1;};
|
||||||
virtual int frameCount() const {return -1;};
|
virtual int frameCount() const {return -1;};
|
||||||
virtual void redraw( int x, int y, SDL_Surface *dst, bool update = true ) {};
|
virtual void redraw( int x, int y, bool update = true ) {};
|
||||||
virtual void show( int x, int y, SDL_Surface *dst, bool update = true ) {};
|
virtual void show( int x, int y, bool update = true ) {};
|
||||||
virtual bool nextFrame() {return false;};
|
virtual bool nextFrame() {return false;};
|
||||||
virtual void close() {};
|
virtual void close() {};
|
||||||
virtual bool wait() {return false;};
|
virtual bool wait() {return false;};
|
||||||
@ -119,8 +119,8 @@ public:
|
|||||||
bool open(std::string name);
|
bool open(std::string name);
|
||||||
void close();
|
void close();
|
||||||
bool nextFrame();
|
bool nextFrame();
|
||||||
void show(int x, int y, SDL_Surface *dst, bool update = true);
|
void show(int x, int y, bool update = true);
|
||||||
void redraw(int x, int y, SDL_Surface *dst, bool update = true); //reblits buffer
|
void redraw(int x, int y, bool update = true); //reblits buffer
|
||||||
bool wait();
|
bool wait();
|
||||||
int curFrame() const;
|
int curFrame() const;
|
||||||
int frameCount() const;
|
int frameCount() const;
|
||||||
@ -175,8 +175,8 @@ public:
|
|||||||
bool open(std::string name);
|
bool open(std::string name);
|
||||||
void close();
|
void close();
|
||||||
bool nextFrame();
|
bool nextFrame();
|
||||||
void show(int x, int y, SDL_Surface *dst, bool update = true);
|
void show(int x, int y, bool update = true);
|
||||||
void redraw(int x, int y, SDL_Surface *dst, bool update = true); //reblits buffer
|
void redraw(int x, int y, bool update = true); //reblits buffer
|
||||||
bool wait();
|
bool wait();
|
||||||
int curFrame() const;
|
int curFrame() const;
|
||||||
int frameCount() const;
|
int frameCount() const;
|
||||||
@ -202,15 +202,15 @@ public:
|
|||||||
bool open(std::string name);
|
bool open(std::string name);
|
||||||
void close();
|
void close();
|
||||||
bool nextFrame(); //move animation to the next frame
|
bool nextFrame(); //move animation to the next frame
|
||||||
void show(int x, int y, SDL_Surface *dst, bool update = true); //blit current frame
|
void show(int x, int y, bool update = true); //blit current frame
|
||||||
void redraw(int x, int y, SDL_Surface *dst, bool update = true); //reblits buffer
|
void redraw(int x, int y, bool update = true); //reblits buffer
|
||||||
void update(int x, int y, SDL_Surface *dst, bool forceRedraw, bool update = true); //moves to next frame if appropriate, and blits it or blits only if redraw paremeter is set true
|
void update(int x, int y, bool forceRedraw, bool update = true); //moves to next frame if appropriate, and blits it or blits only if redraw paremeter is set true
|
||||||
bool wait(); //true if we should wait before displaying next frame (for keeping FPS)
|
bool wait(); //true if we should wait before displaying next frame (for keeping FPS)
|
||||||
int curFrame() const; //current frame number <1, framecount>
|
int curFrame() const; //current frame number <1, framecount>
|
||||||
int frameCount() const;
|
int frameCount() const;
|
||||||
|
|
||||||
bool openAndPlayVideo(std::string name, int x, int y, SDL_Surface *dst, bool stopOnKey = false); //opens video, calls playVideo, closes video; returns playVideo result (if whole video has been played)
|
bool openAndPlayVideo(std::string name, int x, int y, bool stopOnKey = false); //opens video, calls playVideo, closes video; returns playVideo result (if whole video has been played)
|
||||||
bool playVideo(int x, int y, SDL_Surface *dst, bool stopOnKey = false); //plays whole opened video; returns: true when whole video has been shown, false when it has been interrupted
|
bool playVideo(int x, int y, bool stopOnKey = false); //plays whole opened video; returns: true when whole video has been shown, false when it has been interrupted
|
||||||
};
|
};
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -701,9 +701,9 @@ void CInfoWindow::close()
|
|||||||
LOCPLINT->showingDialog->setn(false);
|
LOCPLINT->showingDialog->setn(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CInfoWindow::show(SDL_Surface * to)
|
void CInfoWindow::show()
|
||||||
{
|
{
|
||||||
CIntObject::show(to);
|
CIntObject::show();
|
||||||
}
|
}
|
||||||
|
|
||||||
CInfoWindow::~CInfoWindow()
|
CInfoWindow::~CInfoWindow()
|
||||||
@ -715,10 +715,10 @@ CInfoWindow::~CInfoWindow()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CInfoWindow::showAll(SDL_Surface * to)
|
void CInfoWindow::showAll()
|
||||||
{
|
{
|
||||||
CSimpleWindow::show(to);
|
CSimpleWindow::show();
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CInfoWindow::showYesNoDialog(const std::string & text, const std::vector<CComponent*> *components, const CFunctionList<void( ) > &onYes, const CFunctionList<void()> &onNo, bool DelComps, PlayerColor player)
|
void CInfoWindow::showYesNoDialog(const std::string & text, const std::vector<CComponent*> *components, const CFunctionList<void( ) > &onYes, const CFunctionList<void()> &onNo, bool DelComps, PlayerColor player)
|
||||||
@ -1056,12 +1056,12 @@ void CSelectableComponent::select(bool on)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSelectableComponent::showAll(SDL_Surface * to)
|
void CSelectableComponent::showAll()
|
||||||
{
|
{
|
||||||
CComponent::showAll(to);
|
CComponent::showAll();
|
||||||
if(selected)
|
if(selected)
|
||||||
{
|
{
|
||||||
CSDL_Ext::drawBorder(to, Rect::around(image->pos), int3(239,215,123));
|
//* CSDL_Ext::drawBorder(to, Rect::around(image->pos), int3(239,215,123));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1364,13 +1364,13 @@ void CRecruitmentWindow::CCreatureCard::clickRight(tribool down, bool previousSt
|
|||||||
GH.pushInt(createCreWindow(creature->idNumber, CCreatureWindow::OTHER, 0));
|
GH.pushInt(createCreWindow(creature->idNumber, CCreatureWindow::OTHER, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRecruitmentWindow::CCreatureCard::showAll(SDL_Surface * to)
|
void CRecruitmentWindow::CCreatureCard::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
if (selected)
|
//* if (selected)
|
||||||
drawBorder(to, pos, int3(248, 0, 0));
|
//* drawBorder(to, pos, int3(248, 0, 0));
|
||||||
else
|
//* else
|
||||||
drawBorder(to, pos, int3(232, 212, 120));
|
//* drawBorder(to, pos, int3(232, 212, 120));
|
||||||
}
|
}
|
||||||
|
|
||||||
CRecruitmentWindow::CCostBox::CCostBox(Rect position, std::string title)
|
CRecruitmentWindow::CCostBox::CCostBox(Rect position, std::string title)
|
||||||
@ -1492,10 +1492,10 @@ void CRecruitmentWindow::buy()
|
|||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRecruitmentWindow::showAll(SDL_Surface * to)
|
void CRecruitmentWindow::showAll()
|
||||||
{
|
{
|
||||||
CWindowObject::showAll(to);
|
CWindowObject::showAll();
|
||||||
|
/*
|
||||||
// recruit\total values
|
// recruit\total values
|
||||||
drawBorder(to, pos.x + 172, pos.y + 222, 67, 42, int3(239,215,123));
|
drawBorder(to, pos.x + 172, pos.y + 222, 67, 42, int3(239,215,123));
|
||||||
drawBorder(to, pos.x + 246, pos.y + 222, 67, 42, int3(239,215,123));
|
drawBorder(to, pos.x + 246, pos.y + 222, 67, 42, int3(239,215,123));
|
||||||
@ -1508,6 +1508,7 @@ void CRecruitmentWindow::showAll(SDL_Surface * to)
|
|||||||
drawBorder(to, pos.x + 133, pos.y + 312, 66, 34, int3(173,142,66));
|
drawBorder(to, pos.x + 133, pos.y + 312, 66, 34, int3(173,142,66));
|
||||||
drawBorder(to, pos.x + 211, pos.y + 312, 66, 34, int3(173,142,66));
|
drawBorder(to, pos.x + 211, pos.y + 312, 66, 34, int3(173,142,66));
|
||||||
drawBorder(to, pos.x + 289, pos.y + 312, 66, 34, int3(173,142,66));
|
drawBorder(to, pos.x + 289, pos.y + 312, 66, 34, int3(173,142,66));
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
CRecruitmentWindow::CRecruitmentWindow(const CGDwelling *Dwelling, int Level, const CArmedInstance *Dst, const boost::function<void(CreatureID,int)> &Recruit, int y_offset):
|
CRecruitmentWindow::CRecruitmentWindow(const CGDwelling *Dwelling, int Level, const CArmedInstance *Dst, const boost::function<void(CreatureID,int)> &Recruit, int y_offset):
|
||||||
@ -1521,7 +1522,7 @@ CRecruitmentWindow::CRecruitmentWindow(const CGDwelling *Dwelling, int Level, co
|
|||||||
moveBy(Point(0, y_offset));
|
moveBy(Point(0, y_offset));
|
||||||
|
|
||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
new CGStatusBar(new CPicture(background->getImage(), Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
|
|
||||||
slider = new CSlider(176,279,135,0,0,0,0,true);
|
slider = new CSlider(176,279,135,0,0,0,0,true);
|
||||||
slider->moved = boost::bind(&CRecruitmentWindow::sliderMoved,this, _1);
|
slider->moved = boost::bind(&CRecruitmentWindow::sliderMoved,this, _1);
|
||||||
@ -2028,7 +2029,7 @@ int CTradeWindow::CTradeableItem::getIndex()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTradeWindow::CTradeableItem::showAll(SDL_Surface * to)
|
void CTradeWindow::CTradeableItem::showAll()
|
||||||
{
|
{
|
||||||
Point posToBitmap;
|
Point posToBitmap;
|
||||||
Point posToSubCenter;
|
Point posToSubCenter;
|
||||||
@ -2062,10 +2063,10 @@ void CTradeWindow::CTradeableItem::showAll(SDL_Surface * to)
|
|||||||
if (image)
|
if (image)
|
||||||
{
|
{
|
||||||
image->moveTo(pos.topLeft() + posToBitmap);
|
image->moveTo(pos.topLeft() + posToBitmap);
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
printAtMiddleLoc(subtitle, posToSubCenter, FONT_SMALL, Colors::WHITE, to);
|
//* printAtMiddleLoc(subtitle, posToSubCenter, FONT_SMALL, Colors::WHITE, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTradeWindow::CTradeableItem::clickLeft(tribool down, bool previousState)
|
void CTradeWindow::CTradeableItem::clickLeft(tribool down, bool previousState)
|
||||||
@ -2119,7 +2120,7 @@ void CTradeWindow::CTradeableItem::clickLeft(tribool down, bool previousState)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTradeWindow::CTradeableItem::showAllAt(const Point &dstPos, const std::string &customSub, SDL_Surface * to)
|
void CTradeWindow::CTradeableItem::showAllAt(const Point &dstPos, const std::string &customSub)
|
||||||
{
|
{
|
||||||
Rect oldPos = pos;
|
Rect oldPos = pos;
|
||||||
std::string oldSub = subtitle;
|
std::string oldSub = subtitle;
|
||||||
@ -2127,7 +2128,7 @@ void CTradeWindow::CTradeableItem::showAllAt(const Point &dstPos, const std::str
|
|||||||
|
|
||||||
moveTo(dstPos);
|
moveTo(dstPos);
|
||||||
subtitle = customSub;
|
subtitle = customSub;
|
||||||
showAll(to);
|
showAll();
|
||||||
|
|
||||||
downSelection = false;
|
downSelection = false;
|
||||||
moveTo(oldPos.topLeft());
|
moveTo(oldPos.topLeft());
|
||||||
@ -2457,10 +2458,10 @@ void CTradeWindow::initSubs(bool Left)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTradeWindow::showAll(SDL_Surface * to)
|
void CTradeWindow::showAll()
|
||||||
{
|
{
|
||||||
CWindowObject::showAll(to);
|
CWindowObject::showAll();
|
||||||
|
/*
|
||||||
if(hRight)
|
if(hRight)
|
||||||
CSDL_Ext::drawBorder(to,hRight->pos.x-1,hRight->pos.y-1,hRight->pos.w+2,hRight->pos.h+2,int3(255,231,148));
|
CSDL_Ext::drawBorder(to,hRight->pos.x-1,hRight->pos.y-1,hRight->pos.w+2,hRight->pos.h+2,int3(255,231,148));
|
||||||
if(hLeft && hLeft->type != ARTIFACT_INSTANCE)
|
if(hLeft && hLeft->type != ARTIFACT_INSTANCE)
|
||||||
@ -2471,6 +2472,7 @@ void CTradeWindow::showAll(SDL_Surface * to)
|
|||||||
hLeft->showAllAt(pos.topLeft() + selectionOffset(true), selectionSubtitle(true), to);
|
hLeft->showAllAt(pos.topLeft() + selectionOffset(true), selectionSubtitle(true), to);
|
||||||
hRight->showAllAt(pos.topLeft() + selectionOffset(false), selectionSubtitle(false), to);
|
hRight->showAllAt(pos.topLeft() + selectionOffset(false), selectionSubtitle(false), to);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTradeWindow::removeItems(const std::set<CTradeableItem *> &toRemove)
|
void CTradeWindow::removeItems(const std::set<CTradeableItem *> &toRemove)
|
||||||
@ -2559,7 +2561,7 @@ CMarketplaceWindow::CMarketplaceWindow(const IMarket *Market, const CGHeroInstan
|
|||||||
madeTransaction = false;
|
madeTransaction = false;
|
||||||
bool sliderNeeded = true;
|
bool sliderNeeded = true;
|
||||||
|
|
||||||
new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
//* new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
|
|
||||||
std::string title;
|
std::string title;
|
||||||
|
|
||||||
@ -3050,7 +3052,7 @@ CAltarWindow::CAltarWindow(const IMarket *Market, const CGHeroInstance *Hero /*=
|
|||||||
//Total experience on the Altar
|
//Total experience on the Altar
|
||||||
new CTextBox(CGI->generaltexth->allTexts[476], Rect(15, 495, 125, 40), 0, FONT_SMALL, CENTER, Colors::YELLOW);
|
new CTextBox(CGI->generaltexth->allTexts[476], Rect(15, 495, 125, 40), 0, FONT_SMALL, CENTER, Colors::YELLOW);
|
||||||
|
|
||||||
new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
//* new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
|
|
||||||
ok = new CAdventureMapButton(CGI->generaltexth->zelp[568],boost::bind(&CGuiHandler::popIntTotally,&GH,this),516,520,"IOK6432.DEF",SDLK_RETURN);
|
ok = new CAdventureMapButton(CGI->generaltexth->zelp[568],boost::bind(&CGuiHandler::popIntTotally,&GH,this),516,520,"IOK6432.DEF",SDLK_RETURN);
|
||||||
ok->assignedKeys.insert(SDLK_ESCAPE);
|
ok->assignedKeys.insert(SDLK_ESCAPE);
|
||||||
@ -3340,17 +3342,17 @@ void CAltarWindow::artifactPicked()
|
|||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAltarWindow::showAll(SDL_Surface * to)
|
void CAltarWindow::showAll()
|
||||||
{
|
{
|
||||||
CTradeWindow::showAll(to);
|
CTradeWindow::showAll();
|
||||||
if(mode == EMarketMode::ARTIFACT_EXP && arts && arts->commonInfo->src.art)
|
if(mode == EMarketMode::ARTIFACT_EXP && arts && arts->commonInfo->src.art)
|
||||||
{
|
{
|
||||||
artIcon->setFrame(arts->commonInfo->src.art->artType->iconIndex);
|
artIcon->setFrame(arts->commonInfo->src.art->artType->iconIndex);
|
||||||
artIcon->showAll(to);
|
artIcon->showAll();
|
||||||
|
|
||||||
int dmp, val;
|
int dmp, val;
|
||||||
market->getOffer(arts->commonInfo->src.art->artType->id, 0, dmp, val, EMarketMode::ARTIFACT_EXP);
|
market->getOffer(arts->commonInfo->src.art->artType->id, 0, dmp, val, EMarketMode::ARTIFACT_EXP);
|
||||||
printAtMiddleLoc(boost::lexical_cast<std::string>(val), 304, 498, FONT_SMALL, Colors::WHITE, to);
|
//* printAtMiddleLoc(boost::lexical_cast<std::string>(val), 304, 498, FONT_SMALL, Colors::WHITE, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3667,7 +3669,7 @@ CTavernWindow::CTavernWindow(const CGObjectInstance *TavernObj):
|
|||||||
new CLabel(320, 328, FONT_SMALL, CENTER, Colors::WHITE, "2500");
|
new CLabel(320, 328, FONT_SMALL, CENTER, Colors::WHITE, "2500");
|
||||||
new CTextBox(LOCPLINT->cb->getTavernGossip(tavernObj), Rect(32, 190, 330, 68), 0, FONT_SMALL, CENTER, Colors::WHITE);
|
new CTextBox(LOCPLINT->cb->getTavernGossip(tavernObj), Rect(32, 190, 330, 68), 0, FONT_SMALL, CENTER, Colors::WHITE);
|
||||||
|
|
||||||
new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
//* new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
cancel = new CAdventureMapButton(CGI->generaltexth->tavernInfo[7],"", boost::bind(&CTavernWindow::close, this), 310, 428, "ICANCEL.DEF", SDLK_ESCAPE);
|
cancel = new CAdventureMapButton(CGI->generaltexth->tavernInfo[7],"", boost::bind(&CTavernWindow::close, this), 310, 428, "ICANCEL.DEF", SDLK_ESCAPE);
|
||||||
recruit = new CAdventureMapButton("", "", boost::bind(&CTavernWindow::recruitb, this), 272, 355, "TPTAV01.DEF", SDLK_RETURN);
|
recruit = new CAdventureMapButton("", "", boost::bind(&CTavernWindow::recruitb, this), 272, 355, "TPTAV01.DEF", SDLK_RETURN);
|
||||||
thiefGuild = new CAdventureMapButton(CGI->generaltexth->tavernInfo[5],"", boost::bind(&CTavernWindow::thievesguildb, this), 22, 428, "TPTAV02.DEF", SDLK_t);
|
thiefGuild = new CAdventureMapButton(CGI->generaltexth->tavernInfo[5],"", boost::bind(&CTavernWindow::thievesguildb, this), 22, 428, "TPTAV02.DEF", SDLK_t);
|
||||||
@ -3717,9 +3719,9 @@ CTavernWindow::~CTavernWindow()
|
|||||||
|
|
||||||
void CTavernWindow::show(SDL_Surface * to)
|
void CTavernWindow::show(SDL_Surface * to)
|
||||||
{
|
{
|
||||||
CWindowObject::show(to);
|
//* CWindowObject::show(to);
|
||||||
|
|
||||||
CCS->videoh->update(pos.x+70, pos.y+56, to, true, false);
|
CCS->videoh->update(pos.x+70, pos.y+56, true, false);
|
||||||
if(selected >= 0)
|
if(selected >= 0)
|
||||||
{
|
{
|
||||||
HeroPortrait *sel = selected ? h2 : h1;
|
HeroPortrait *sel = selected ? h2 : h1;
|
||||||
@ -3735,7 +3737,7 @@ void CTavernWindow::show(SDL_Surface * to)
|
|||||||
}
|
}
|
||||||
|
|
||||||
printAtMiddleWBLoc(sel->descr, 146, 395, FONT_SMALL, 200, Colors::WHITE, to);
|
printAtMiddleWBLoc(sel->descr, 146, 395, FONT_SMALL, 200, Colors::WHITE, to);
|
||||||
CSDL_Ext::drawBorder(to,sel->pos.x-2,sel->pos.y-2,sel->pos.w+4,sel->pos.h+4,int3(247,223,123));
|
//* CSDL_Ext::drawBorder(to,sel->pos.x-2,sel->pos.y-2,sel->pos.w+4,sel->pos.h+4,int3(247,223,123));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4010,7 +4012,7 @@ CGarrisonWindow::CGarrisonWindow( const CArmedInstance *up, const CGHeroInstance
|
|||||||
{
|
{
|
||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
|
|
||||||
garr = new CGarrisonInt(92, 127, 4, Point(0,96), background->bg, Point(93,127), up, down, removableUnits);
|
//* garr = new CGarrisonInt(92, 127, 4, Point(0,96), background->bg, Point(93,127), up, down, removableUnits);
|
||||||
{
|
{
|
||||||
CAdventureMapButton *split = new CAdventureMapButton(CGI->generaltexth->tcommands[3],"",boost::bind(&CGarrisonInt::splitClick,garr),88,314,"IDV6432.DEF");
|
CAdventureMapButton *split = new CAdventureMapButton(CGI->generaltexth->tcommands[3],"",boost::bind(&CGarrisonInt::splitClick,garr),88,314,"IDV6432.DEF");
|
||||||
removeChild(split);
|
removeChild(split);
|
||||||
@ -4332,11 +4334,11 @@ void CArtPlace::deselect ()
|
|||||||
ourOwner->safeRedraw();
|
ourOwner->safeRedraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CArtPlace::showAll(SDL_Surface * to)
|
void CArtPlace::showAll()
|
||||||
{
|
{
|
||||||
if (ourArt && !picked && ourArt == ourOwner->curHero->getArt(slotID, false)) //last condition is needed for disassembling -> artifact may be gone, but we don't know yet TODO: real, nice solution
|
if (ourArt && !picked && ourArt == ourOwner->curHero->getArt(slotID, false)) //last condition is needed for disassembling -> artifact may be gone, but we don't know yet TODO: real, nice solution
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(marked && active)
|
if(marked && active)
|
||||||
@ -4344,15 +4346,15 @@ void CArtPlace::showAll(SDL_Surface * to)
|
|||||||
// Draw vertical bars.
|
// Draw vertical bars.
|
||||||
for (int i = 0; i < pos.h; ++i)
|
for (int i = 0; i < pos.h; ++i)
|
||||||
{
|
{
|
||||||
CSDL_Ext::SDL_PutPixelWithoutRefresh(to, pos.x, pos.y + i, 240, 220, 120);
|
//* CSDL_Ext::SDL_PutPixelWithoutRefresh(to, pos.x, pos.y + i, 240, 220, 120);
|
||||||
CSDL_Ext::SDL_PutPixelWithoutRefresh(to, pos.x + pos.w - 1, pos.y + i, 240, 220, 120);
|
//* CSDL_Ext::SDL_PutPixelWithoutRefresh(to, pos.x + pos.w - 1, pos.y + i, 240, 220, 120);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw horizontal bars.
|
// Draw horizontal bars.
|
||||||
for (int i = 0; i < pos.w; ++i)
|
for (int i = 0; i < pos.w; ++i)
|
||||||
{
|
{
|
||||||
CSDL_Ext::SDL_PutPixelWithoutRefresh(to, pos.x + i, pos.y, 240, 220, 120);
|
//* CSDL_Ext::SDL_PutPixelWithoutRefresh(to, pos.x + i, pos.y, 240, 220, 120);
|
||||||
CSDL_Ext::SDL_PutPixelWithoutRefresh(to, pos.x + i, pos.y + pos.h - 1, 240, 220, 120);
|
//* CSDL_Ext::SDL_PutPixelWithoutRefresh(to, pos.x + i, pos.y + pos.h - 1, 240, 220, 120);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5162,10 +5164,10 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2)
|
|||||||
questlogButton[1] = new CAdventureMapButton(CGI->generaltexth->heroscrn[0], "", boost::bind(&CExchangeWindow::questlog,this, 1), 740, 44, "hsbtns4.def");
|
questlogButton[1] = new CAdventureMapButton(CGI->generaltexth->heroscrn[0], "", boost::bind(&CExchangeWindow::questlog,this, 1), 740, 44, "hsbtns4.def");
|
||||||
|
|
||||||
Rect barRect(5, 578, 725, 18);
|
Rect barRect(5, 578, 725, 18);
|
||||||
ourBar = new CGStatusBar(new CPicture(*background, barRect, 5, 578, false));
|
//* ourBar = new CGStatusBar(new CPicture(*background, barRect, 5, 578, false));
|
||||||
|
|
||||||
//garrison interface
|
//garrison interface
|
||||||
garr = new CGarrisonInt(69, 131, 4, Point(418,0), *background, Point(69,131), heroInst[0],heroInst[1], true, true);
|
//* garr = new CGarrisonInt(69, 131, 4, Point(418,0), *background, Point(69,131), heroInst[0],heroInst[1], true, true);
|
||||||
garr->addSplitBtn(new CAdventureMapButton(CGI->generaltexth->tcommands[3], "", boost::bind(&CGarrisonInt::splitClick, garr), 10, 132, "TSBTNS.DEF"));
|
garr->addSplitBtn(new CAdventureMapButton(CGI->generaltexth->tcommands[3], "", boost::bind(&CGarrisonInt::splitClick, garr), 10, 132, "TSBTNS.DEF"));
|
||||||
garr->addSplitBtn(new CAdventureMapButton(CGI->generaltexth->tcommands[3], "", boost::bind(&CGarrisonInt::splitClick, garr), 740, 132, "TSBTNS.DEF"));
|
garr->addSplitBtn(new CAdventureMapButton(CGI->generaltexth->tcommands[3], "", boost::bind(&CGarrisonInt::splitClick, garr), 740, 132, "TSBTNS.DEF"));
|
||||||
}
|
}
|
||||||
@ -5213,7 +5215,7 @@ CShipyardWindow::CShipyardWindow(const std::vector<si32> &cost, int state, int b
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
statusBar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
//* statusBar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
|
|
||||||
title = new CLabel(164, 27, FONT_BIG, CENTER, Colors::YELLOW, CGI->generaltexth->jktexts[13]);
|
title = new CLabel(164, 27, FONT_BIG, CENTER, Colors::YELLOW, CGI->generaltexth->jktexts[13]);
|
||||||
costLabel = new CLabel(164, 220, FONT_MEDIUM, CENTER, Colors::WHITE, CGI->generaltexth->jktexts[14]);
|
costLabel = new CLabel(164, 220, FONT_MEDIUM, CENTER, Colors::WHITE, CGI->generaltexth->jktexts[14]);
|
||||||
@ -5256,20 +5258,20 @@ CPuzzleWindow::CPuzzleWindow(const int3 &GrailPos, double discoveredRatio):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPuzzleWindow::showAll(SDL_Surface * to)
|
void CPuzzleWindow::showAll()
|
||||||
{
|
{
|
||||||
int3 moveInt = int3(8, 9, 0);
|
int3 moveInt = int3(8, 9, 0);
|
||||||
Rect mapRect = genRect(544, 591, pos.x + 8, pos.y + 7);
|
Rect mapRect = genRect(544, 591, pos.x + 8, pos.y + 7);
|
||||||
|
/*
|
||||||
CGI->mh->terrainRect
|
CGI->mh->terrainRect
|
||||||
(grailPos - moveInt, adventureInt->anim,
|
(grailPos - moveInt, adventureInt->anim,
|
||||||
&LOCPLINT->cb->getVisibilityMap(), true, adventureInt->heroAnim,
|
&LOCPLINT->cb->getVisibilityMap(), true, adventureInt->heroAnim,
|
||||||
to, &mapRect, 0, 0, true, moveInt);
|
to, &mapRect, 0, 0, true, moveInt);
|
||||||
|
*/
|
||||||
CWindowObject::showAll(to);
|
CWindowObject::showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPuzzleWindow::show(SDL_Surface * to)
|
void CPuzzleWindow::show()
|
||||||
{
|
{
|
||||||
static int animSpeed = 2;
|
static int animSpeed = 2;
|
||||||
|
|
||||||
@ -5287,7 +5289,7 @@ void CPuzzleWindow::show(SDL_Surface * to)
|
|||||||
piece->setAlpha(currentAlpha);
|
piece->setAlpha(currentAlpha);
|
||||||
currentAlpha -= animSpeed;
|
currentAlpha -= animSpeed;
|
||||||
}
|
}
|
||||||
CWindowObject::show(to);
|
CWindowObject::show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTransformerWindow::CItem::move()
|
void CTransformerWindow::CItem::move()
|
||||||
@ -5304,7 +5306,7 @@ void CTransformerWindow::CItem::clickLeft(tribool down, bool previousState)
|
|||||||
if(previousState && (!down))
|
if(previousState && (!down))
|
||||||
{
|
{
|
||||||
move();
|
move();
|
||||||
parent->showAll(screen2);
|
parent->showAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5340,7 +5342,7 @@ void CTransformerWindow::addAll()
|
|||||||
for (int i=0; i<items.size(); i++)
|
for (int i=0; i<items.size(); i++)
|
||||||
if (items[i]->left)
|
if (items[i]->left)
|
||||||
items[i]->move();
|
items[i]->move();
|
||||||
showAll(screen2);
|
showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTransformerWindow::updateGarrisons()
|
void CTransformerWindow::updateGarrisons()
|
||||||
@ -5369,7 +5371,7 @@ CTransformerWindow::CTransformerWindow(const CGHeroInstance * _hero, const CGTow
|
|||||||
all = new CAdventureMapButton(CGI->generaltexth->zelp[590],boost::bind(&CTransformerWindow::addAll,this), 146,416,"ALTARMY.DEF",SDLK_a);
|
all = new CAdventureMapButton(CGI->generaltexth->zelp[590],boost::bind(&CTransformerWindow::addAll,this), 146,416,"ALTARMY.DEF",SDLK_a);
|
||||||
convert= new CAdventureMapButton(CGI->generaltexth->zelp[591],boost::bind(&CTransformerWindow::makeDeal,this), 269,416,"ALTSACR.DEF",SDLK_RETURN);
|
convert= new CAdventureMapButton(CGI->generaltexth->zelp[591],boost::bind(&CTransformerWindow::makeDeal,this), 269,416,"ALTSACR.DEF",SDLK_RETURN);
|
||||||
cancel = new CAdventureMapButton(CGI->generaltexth->zelp[592],boost::bind(&CTransformerWindow::close, this),392,416,"ICANCEL.DEF",SDLK_ESCAPE);
|
cancel = new CAdventureMapButton(CGI->generaltexth->zelp[592],boost::bind(&CTransformerWindow::close, this),392,416,"ICANCEL.DEF",SDLK_ESCAPE);
|
||||||
bar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
//* bar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
|
|
||||||
new CLabel(153, 29,FONT_SMALL, CENTER, Colors::YELLOW, CGI->generaltexth->allTexts[485]);//holding area
|
new CLabel(153, 29,FONT_SMALL, CENTER, Colors::YELLOW, CGI->generaltexth->allTexts[485]);//holding area
|
||||||
new CLabel(153+295, 29, FONT_SMALL, CENTER, Colors::YELLOW, CGI->generaltexth->allTexts[486]);//transformer
|
new CLabel(153+295, 29, FONT_SMALL, CENTER, Colors::YELLOW, CGI->generaltexth->allTexts[486]);//transformer
|
||||||
@ -5417,7 +5419,7 @@ int CUniversityWindow::CItem::state()
|
|||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CUniversityWindow::CItem::showAll(SDL_Surface * to)
|
void CUniversityWindow::CItem::showAll()
|
||||||
{
|
{
|
||||||
CPicture * bar;
|
CPicture * bar;
|
||||||
switch (state())
|
switch (state())
|
||||||
@ -5433,12 +5435,12 @@ void CUniversityWindow::CItem::showAll(SDL_Surface * to)
|
|||||||
}
|
}
|
||||||
assert(bar);
|
assert(bar);
|
||||||
|
|
||||||
blitAtLoc(bar->bg, -28, -22, to);
|
//* blitAtLoc(bar->bg, -28, -22, to);
|
||||||
blitAtLoc(bar->bg, -28, 48, to);
|
//* blitAtLoc(bar->bg, -28, 48, to);
|
||||||
printAtMiddleLoc (CGI->generaltexth->skillName[ID], 22, -13, FONT_SMALL, Colors::WHITE,to);//Name
|
//* printAtMiddleLoc (CGI->generaltexth->skillName[ID], 22, -13, FONT_SMALL, Colors::WHITE,to);//Name
|
||||||
printAtMiddleLoc (CGI->generaltexth->levels[0], 22, 57, FONT_SMALL, Colors::WHITE,to);//Level(always basic)
|
//* printAtMiddleLoc (CGI->generaltexth->levels[0], 22, 57, FONT_SMALL, Colors::WHITE,to);//Level(always basic)
|
||||||
|
|
||||||
CAnimImage::showAll(to);
|
CAnimImage::showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
CUniversityWindow::CItem::CItem(CUniversityWindow * _parent, int _ID, int X, int Y):
|
CUniversityWindow::CItem::CItem(CUniversityWindow * _parent, int _ID, int X, int Y):
|
||||||
@ -5489,7 +5491,7 @@ CUniversityWindow::CUniversityWindow(const CGHeroInstance * _hero, const IMarket
|
|||||||
cancel = new CAdventureMapButton(CGI->generaltexth->zelp[632],
|
cancel = new CAdventureMapButton(CGI->generaltexth->zelp[632],
|
||||||
boost::bind(&CUniversityWindow::close, this),200,313,"IOKAY.DEF",SDLK_RETURN);
|
boost::bind(&CUniversityWindow::close, this),200,313,"IOKAY.DEF",SDLK_RETURN);
|
||||||
|
|
||||||
bar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
//* bar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
}
|
}
|
||||||
|
|
||||||
CUnivConfirmWindow::CUnivConfirmWindow(CUniversityWindow * PARENT, int SKILL, bool available ):
|
CUnivConfirmWindow::CUnivConfirmWindow(CUniversityWindow * PARENT, int SKILL, bool available ):
|
||||||
@ -5526,7 +5528,7 @@ CUnivConfirmWindow::CUnivConfirmWindow(CUniversityWindow * PARENT, int SKILL, bo
|
|||||||
|
|
||||||
cancel = new CAdventureMapButton(CGI->generaltexth->zelp[631],boost::bind(&CUnivConfirmWindow::close, this),
|
cancel = new CAdventureMapButton(CGI->generaltexth->zelp[631],boost::bind(&CUnivConfirmWindow::close, this),
|
||||||
252,299,"ICANCEL.DEF",SDLK_ESCAPE);
|
252,299,"ICANCEL.DEF",SDLK_ESCAPE);
|
||||||
bar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
//* bar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CUnivConfirmWindow::makeDeal(int skill)
|
void CUnivConfirmWindow::makeDeal(int skill)
|
||||||
@ -5567,9 +5569,9 @@ CHillFortWindow::CHillFortWindow(const CGHeroInstance *visitor, const CGObjectIn
|
|||||||
upgradeAll = new CAdventureMapButton(CGI->generaltexth->allTexts[432],"",boost::bind(&CHillFortWindow::makeDeal, this, SlotID(slotsCount)),
|
upgradeAll = new CAdventureMapButton(CGI->generaltexth->allTexts[432],"",boost::bind(&CHillFortWindow::makeDeal, this, SlotID(slotsCount)),
|
||||||
30, 231, "", SDLK_0, &files);
|
30, 231, "", SDLK_0, &files);
|
||||||
quit = new CAdventureMapButton("","",boost::bind(&CHillFortWindow::close, this), 294, 275, "IOKAY.DEF", SDLK_RETURN);
|
quit = new CAdventureMapButton("","",boost::bind(&CHillFortWindow::close, this), 294, 275, "IOKAY.DEF", SDLK_RETURN);
|
||||||
bar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
//* bar = new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
|
|
||||||
garr = new CGarrisonInt(108, 60, 18, Point(),background->bg,Point(108,60),hero,NULL);
|
//* garr = new CGarrisonInt(108, 60, 18, Point(),background->bg,Point(108,60),hero,NULL);
|
||||||
updateGarrisons();
|
updateGarrisons();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5632,9 +5634,9 @@ void CHillFortWindow::makeDeal(SlotID slot)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHillFortWindow::showAll (SDL_Surface *to)
|
void CHillFortWindow::showAll()
|
||||||
{
|
{
|
||||||
CWindowObject::showAll(to);
|
CWindowObject::showAll();
|
||||||
|
|
||||||
for ( int i=0; i<slotsCount; i++)
|
for ( int i=0; i<slotsCount; i++)
|
||||||
{
|
{
|
||||||
@ -5648,15 +5650,15 @@ void CHillFortWindow::showAll (SDL_Surface *to)
|
|||||||
int val = costs[i][j];
|
int val = costs[i][j];
|
||||||
if(!val) continue;
|
if(!val) continue;
|
||||||
|
|
||||||
blitAtLoc(resources->ourImages[j].bitmap, 104+76*i, curY, to);
|
//* blitAtLoc(resources->ourImages[j].bitmap, 104+76*i, curY, to);
|
||||||
printToLoc(boost::lexical_cast<std::string>(val), 168+76*i, curY+16, FONT_SMALL, Colors::WHITE, to);
|
//* printToLoc(boost::lexical_cast<std::string>(val), 168+76*i, curY+16, FONT_SMALL, Colors::WHITE, to);
|
||||||
curY += 20;
|
curY += 20;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else//free upgrade - print gold image and "Free" text
|
else//free upgrade - print gold image and "Free" text
|
||||||
{
|
{
|
||||||
blitAtLoc(resources->ourImages[6].bitmap, 104+76*i, 128, to);
|
//* blitAtLoc(resources->ourImages[6].bitmap, 104+76*i, 128, to);
|
||||||
printToLoc(CGI->generaltexth->allTexts[344], 168+76*i, 144, FONT_SMALL, Colors::WHITE, to);
|
//* printToLoc(CGI->generaltexth->allTexts[344], 168+76*i, 144, FONT_SMALL, Colors::WHITE, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5664,8 +5666,8 @@ void CHillFortWindow::showAll (SDL_Surface *to)
|
|||||||
{
|
{
|
||||||
if (totalSumm[i])//this resource is used - display it
|
if (totalSumm[i])//this resource is used - display it
|
||||||
{
|
{
|
||||||
blitAtLoc(resources->ourImages[i].bitmap, 104+76*i, 237, to);
|
//* blitAtLoc(resources->ourImages[i].bitmap, 104+76*i, 237, to);
|
||||||
printToLoc(boost::lexical_cast<std::string>(totalSumm[i]), 166+76*i, 253, FONT_SMALL, Colors::WHITE, to);
|
//* printToLoc(boost::lexical_cast<std::string>(totalSumm[i]), 166+76*i, 253, FONT_SMALL, Colors::WHITE, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6099,9 +6101,9 @@ CRClickPopup::~CRClickPopup()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRClickPopupInt::show(SDL_Surface * to)
|
void CRClickPopupInt::show()
|
||||||
{
|
{
|
||||||
inner->show(to);
|
inner->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
CRClickPopupInt::CRClickPopupInt( IShowActivatable *our, bool deleteInt )
|
CRClickPopupInt::CRClickPopupInt( IShowActivatable *our, bool deleteInt )
|
||||||
@ -6124,7 +6126,7 @@ CRClickPopupInt::~CRClickPopupInt()
|
|||||||
CCS->curh->show();
|
CCS->curh->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRClickPopupInt::showAll(SDL_Surface * to)
|
void CRClickPopupInt::showAll()
|
||||||
{
|
{
|
||||||
inner->showAll(to);
|
inner->showAll();
|
||||||
}
|
}
|
||||||
|
@ -96,8 +96,8 @@ public:
|
|||||||
void setDelComps(bool DelComps);
|
void setDelComps(bool DelComps);
|
||||||
virtual void close();
|
virtual void close();
|
||||||
|
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void sliderMoved(int to);
|
void sliderMoved(int to);
|
||||||
|
|
||||||
CInfoWindow(std::string Text, PlayerColor player, const TCompsInfo &comps = TCompsInfo(), const TButtonsInfo &Buttons = TButtonsInfo(), bool delComps = true); //c-tor
|
CInfoWindow(std::string Text, PlayerColor player, const TCompsInfo &comps = TCompsInfo(), const TButtonsInfo &Buttons = TButtonsInfo(), bool delComps = true); //c-tor
|
||||||
@ -145,8 +145,8 @@ public:
|
|||||||
IShowActivatable *inner;
|
IShowActivatable *inner;
|
||||||
bool delInner;
|
bool delInner;
|
||||||
|
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
CRClickPopupInt(IShowActivatable *our, bool deleteInt); //c-tor
|
CRClickPopupInt(IShowActivatable *our, bool deleteInt); //c-tor
|
||||||
virtual ~CRClickPopupInt(); //d-tor
|
virtual ~CRClickPopupInt(); //d-tor
|
||||||
};
|
};
|
||||||
@ -229,7 +229,7 @@ public:
|
|||||||
bool selected; //if true, this component is selected
|
bool selected; //if true, this component is selected
|
||||||
boost::function<void()> onSelect; //function called on selection change
|
boost::function<void()> onSelect; //function called on selection change
|
||||||
|
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void select(bool on);
|
void select(bool on);
|
||||||
|
|
||||||
void clickLeft(tribool down, bool previousState); //call-in
|
void clickLeft(tribool down, bool previousState); //call-in
|
||||||
@ -408,7 +408,7 @@ class CRecruitmentWindow : public CWindowObject
|
|||||||
|
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
void showAll(SDL_Surface *to);
|
void showAll();
|
||||||
public:
|
public:
|
||||||
const CCreature * creature;
|
const CCreature * creature;
|
||||||
si32 amount;
|
si32 amount;
|
||||||
@ -451,7 +451,7 @@ class CRecruitmentWindow : public CWindowObject
|
|||||||
void buy();
|
void buy();
|
||||||
void sliderMoved(int to);
|
void sliderMoved(int to);
|
||||||
|
|
||||||
void showAll(SDL_Surface *to);
|
void showAll();
|
||||||
public:
|
public:
|
||||||
const CGDwelling * const dwelling;
|
const CGDwelling * const dwelling;
|
||||||
CRecruitmentWindow(const CGDwelling *Dwelling, int Level, const CArmedInstance *Dst, const boost::function<void(CreatureID,int)> & Recruit, int y_offset = 0); //creatures - pairs<creature_ID,amount> //c-tor
|
CRecruitmentWindow(const CGDwelling *Dwelling, int Level, const CArmedInstance *Dst, const boost::function<void(CreatureID,int)> & Recruit, int y_offset = 0); //creatures - pairs<creature_ID,amount> //c-tor
|
||||||
@ -609,11 +609,11 @@ public:
|
|||||||
CFunctionList<void()> callback;
|
CFunctionList<void()> callback;
|
||||||
bool downSelection;
|
bool downSelection;
|
||||||
|
|
||||||
void showAllAt(const Point &dstPos, const std::string &customSub, SDL_Surface * to);
|
void showAllAt(const Point &dstPos, const std::string &customSub);
|
||||||
|
|
||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
void hover (bool on);
|
void hover (bool on);
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
std::string getName(int number = -1) const;
|
std::string getName(int number = -1) const;
|
||||||
CTradeableItem(Point pos, EType Type, int ID, bool Left, int Serial);
|
CTradeableItem(Point pos, EType Type, int ID, bool Left, int Serial);
|
||||||
@ -635,7 +635,7 @@ public:
|
|||||||
|
|
||||||
CTradeWindow(std::string bgName, const IMarket *Market, const CGHeroInstance *Hero, EMarketMode::EMarketMode Mode); //c
|
CTradeWindow(std::string bgName, const IMarket *Market, const CGHeroInstance *Hero, EMarketMode::EMarketMode Mode); //c
|
||||||
|
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
|
|
||||||
void initSubs(bool Left);
|
void initSubs(bool Left);
|
||||||
void initTypes();
|
void initTypes();
|
||||||
@ -709,7 +709,7 @@ public:
|
|||||||
void putOnAltar(int backpackIndex);
|
void putOnAltar(int backpackIndex);
|
||||||
bool putOnAltar(CTradeableItem* altarSlot, const CArtifactInstance *art);
|
bool putOnAltar(CTradeableItem* altarSlot, const CArtifactInstance *art);
|
||||||
void makeDeal();
|
void makeDeal();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
|
|
||||||
void blockTrade();
|
void blockTrade();
|
||||||
void sliderMoved(int to);
|
void sliderMoved(int to);
|
||||||
@ -910,10 +910,10 @@ public:
|
|||||||
CArtPlace(Point position, const CArtifactInstance * Art = NULL); //c-tor
|
CArtPlace(Point position, const CArtifactInstance * Art = NULL); //c-tor
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
void select ();
|
void select();
|
||||||
void deselect ();
|
void deselect();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
bool fitsHere (const CArtifactInstance * art) const; //returns true if given artifact can be placed here
|
bool fitsHere(const CArtifactInstance * art) const; //returns true if given artifact can be placed here
|
||||||
|
|
||||||
void setMeAsDest(bool backpackAsVoid = true);
|
void setMeAsDest(bool backpackAsVoid = true);
|
||||||
void setArtifact(const CArtifactInstance *art);
|
void setArtifact(const CArtifactInstance *art);
|
||||||
@ -1071,8 +1071,8 @@ private:
|
|||||||
ui8 currentAlpha;
|
ui8 currentAlpha;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
|
|
||||||
CPuzzleWindow(const int3 &grailPos, double discoveredRatio);
|
CPuzzleWindow(const int3 &grailPos, double discoveredRatio);
|
||||||
};
|
};
|
||||||
@ -1117,7 +1117,7 @@ class CUniversityWindow : public CWindowObject
|
|||||||
int ID;//id of selected skill
|
int ID;//id of selected skill
|
||||||
CUniversityWindow * parent;
|
CUniversityWindow * parent;
|
||||||
|
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
void hover(bool on);
|
void hover(bool on);
|
||||||
@ -1171,7 +1171,7 @@ public:
|
|||||||
|
|
||||||
CHillFortWindow(const CGHeroInstance *visitor, const CGObjectInstance *object); //c-tor
|
CHillFortWindow(const CGHeroInstance *visitor, const CGObjectInstance *object); //c-tor
|
||||||
|
|
||||||
void showAll (SDL_Surface *to);
|
void showAll();
|
||||||
std::string getDefForSlot(SlotID slot);//return def name for this slot
|
std::string getDefForSlot(SlotID slot);//return def name for this slot
|
||||||
std::string getTextForSlot(SlotID slot);//return hover text for this slot
|
std::string getTextForSlot(SlotID slot);//return hover text for this slot
|
||||||
void makeDeal(SlotID slot);//-1 for upgrading all creatures
|
void makeDeal(SlotID slot);//-1 for upgrading all creatures
|
||||||
|
93
client/Gfx/Animations.cpp
Normal file
93
client/Gfx/Animations.cpp
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
#include "StdInc.h"
|
||||||
|
|
||||||
|
#include "Animations.h"
|
||||||
|
#include "Images.h"
|
||||||
|
#include "FilesHeaders.h"
|
||||||
|
|
||||||
|
namespace Gfx
|
||||||
|
{
|
||||||
|
#define LE(x) SDL_SwapLE32(x)
|
||||||
|
|
||||||
|
/*********** CAnimation ***********/
|
||||||
|
|
||||||
|
CAnimation* CAnimation::makeFromDEF(const SH3DefFile& def, size_t fileSize)
|
||||||
|
{
|
||||||
|
if (def.totalBlocks == 0 || def.width == 0 || def.height == 0) return nullptr;
|
||||||
|
|
||||||
|
if (def.fbEntrCount() == LE(1))
|
||||||
|
{
|
||||||
|
CImage* img = CImage::makeFromDEF(def, fileSize);
|
||||||
|
|
||||||
|
if (img == nullptr) return nullptr;
|
||||||
|
return new COneFrameAnimation(*img);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new (LE(def.fbEntrCount())) CPalettedAnimation(def, fileSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CAnimation::~CAnimation() {}
|
||||||
|
|
||||||
|
|
||||||
|
/*********** COneFrameAnimation ***********/
|
||||||
|
|
||||||
|
COneFrameAnimation::COneFrameAnimation(CImage& img) :
|
||||||
|
CAnimation(1, img.getWidth(), img.getHeight()),
|
||||||
|
frame(img)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
COneFrameAnimation::~COneFrameAnimation()
|
||||||
|
{
|
||||||
|
delete &frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CImage* COneFrameAnimation::getFrame(ui32 fnr)
|
||||||
|
{
|
||||||
|
if (fnr == 0) return &frame;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********** CPalettedAnimation ***********/
|
||||||
|
|
||||||
|
CPalettedAnimation::CPalettedAnimation(const SH3DefFile& def, size_t fileSize) :
|
||||||
|
|
||||||
|
CAnimation(LE(def.fbEntrCount()), LE(def.width), LE(def.height)),
|
||||||
|
|
||||||
|
palette(def.palette, def.type == LE(71) ? 1 : 10, true)
|
||||||
|
//type == 71 - Buttons/buildings don't have shadows\semi-transparency
|
||||||
|
{
|
||||||
|
ua_ui32_ptr offsets = def.firstBlock.offsets();
|
||||||
|
|
||||||
|
for (ui32 j=0; j<framesCount; ++j)
|
||||||
|
{
|
||||||
|
CPalettedBitmap* fr = CImage::makeFromDEFSprite(def.getSprite(offsets[j]), palette);
|
||||||
|
if (fr == nullptr)
|
||||||
|
{
|
||||||
|
framesCount = j;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
frames[j] = fr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CPalettedAnimation::~CPalettedAnimation()
|
||||||
|
{
|
||||||
|
for (ui32 j=0; j<framesCount; ++j)
|
||||||
|
{
|
||||||
|
delete frames[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CImage* CPalettedAnimation::getFrame(ui32 fnr)
|
||||||
|
{
|
||||||
|
if (fnr >= framesCount) return nullptr;
|
||||||
|
return frames[fnr];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
70
client/Gfx/Animations.h
Normal file
70
client/Gfx/Animations.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CPaletteRGBA.h"
|
||||||
|
|
||||||
|
namespace Gfx
|
||||||
|
{
|
||||||
|
struct SH3DefFile;
|
||||||
|
class CImage;
|
||||||
|
|
||||||
|
|
||||||
|
class CAnimation
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
ui32 framesCount;
|
||||||
|
ui32 width;
|
||||||
|
ui32 height;
|
||||||
|
|
||||||
|
inline CAnimation(ui32 fc, ui32 w, ui32 h) : framesCount(fc), width(w), height(h) {};
|
||||||
|
|
||||||
|
public:
|
||||||
|
static CAnimation* makeFromDEF(const SH3DefFile& def, size_t fileSize);
|
||||||
|
|
||||||
|
virtual ~CAnimation();
|
||||||
|
virtual CImage* getFrame(ui32 fnr) = 0;
|
||||||
|
|
||||||
|
inline ui32 getFramesCount() { return framesCount; };
|
||||||
|
inline ui32 getWidth() { return width; };
|
||||||
|
inline ui32 getHeight() { return height; };
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class COneFrameAnimation : CAnimation
|
||||||
|
{
|
||||||
|
friend class CAnimation;
|
||||||
|
CImage& frame;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
COneFrameAnimation(CImage& img);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual ~COneFrameAnimation();
|
||||||
|
virtual CImage* getFrame(ui32 fnr);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#pragma warning(disable : 4200)
|
||||||
|
|
||||||
|
class CPalettedAnimation : CAnimation
|
||||||
|
{
|
||||||
|
friend class CAnimation;
|
||||||
|
CPaletteRGBA palette;
|
||||||
|
CImage* frames[];
|
||||||
|
|
||||||
|
protected:
|
||||||
|
inline void* operator new(size_t size, ui32 frCount) {
|
||||||
|
return ::operator new(size + frCount * sizeof(void*));
|
||||||
|
}
|
||||||
|
inline void operator delete(void* ptr, ui32 frCount) {
|
||||||
|
::operator delete(ptr);
|
||||||
|
}
|
||||||
|
CPalettedAnimation(const SH3DefFile& def, size_t fileSize);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual ~CPalettedAnimation();
|
||||||
|
virtual CImage* getFrame(ui32 fnr);
|
||||||
|
};
|
||||||
|
|
||||||
|
#pragma warning(default : 4200)
|
||||||
|
|
||||||
|
}
|
63
client/Gfx/CPaletteRGBA.cpp
Normal file
63
client/Gfx/CPaletteRGBA.cpp
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#include "StdInc.h"
|
||||||
|
#include <SDL_opengl.h>
|
||||||
|
#include "CPaletteRGBA.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Gfx
|
||||||
|
{
|
||||||
|
|
||||||
|
CPaletteRGBA::CPaletteRGBA(const ColorRGBA palBuff[]) : texHandle(0), shared(false)
|
||||||
|
{
|
||||||
|
memcpy(buffer, palBuff, 256);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CPaletteRGBA::CPaletteRGBA(const ui8 palBuff[][3], int alphaMode, bool shr) : texHandle(0), shared(shr)
|
||||||
|
{
|
||||||
|
static const ui8 defPalette[10][4] = {{0,0,0,0}, {0,0,0,32}, {0,0,0,64}, {0,0,0,128}, {0,0,0,128},
|
||||||
|
{255,255,255,0}, {255,255,255,0}, {255,255,255,0}, {0,0,0,192}, {0,0,0,192}};
|
||||||
|
|
||||||
|
if (alphaMode > 0)
|
||||||
|
{
|
||||||
|
if (alphaMode > 10) alphaMode = 10;
|
||||||
|
memcpy(buffer, defPalette, alphaMode*sizeof(ColorRGBA));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ui32 it = alphaMode; it<256; ++it)
|
||||||
|
{
|
||||||
|
memcpy(&buffer[it], palBuff[it], 3);
|
||||||
|
buffer[it].comp.A = 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CPaletteRGBA::~CPaletteRGBA()
|
||||||
|
{
|
||||||
|
unloadFromVideoRAM();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPaletteRGBA::Unlink()
|
||||||
|
{
|
||||||
|
if (!shared) delete this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPaletteRGBA::loadToVideoRAM()
|
||||||
|
{
|
||||||
|
if (texHandle > 0) return;
|
||||||
|
glGenTextures(1, &texHandle);
|
||||||
|
glBindTexture(GL_TEXTURE_1D, texHandle);
|
||||||
|
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA8, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPaletteRGBA::unloadFromVideoRAM()
|
||||||
|
{
|
||||||
|
glDeleteTextures(1, &texHandle);
|
||||||
|
texHandle = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
46
client/Gfx/CPaletteRGBA.h
Normal file
46
client/Gfx/CPaletteRGBA.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace Gfx
|
||||||
|
{
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
|
||||||
|
typedef ui8 ColorRGB[3]; // 24bit RGB color
|
||||||
|
|
||||||
|
union ColorRGBA // 32bit RGBA color
|
||||||
|
{
|
||||||
|
ui32 color32;
|
||||||
|
ui8 arr[4];
|
||||||
|
struct {
|
||||||
|
ui8 R,G,B,A;
|
||||||
|
} comp;
|
||||||
|
|
||||||
|
inline ColorRGBA() {};
|
||||||
|
inline ColorRGBA(ui32 c) : color32(c) {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
|
||||||
|
class CPaletteRGBA
|
||||||
|
{
|
||||||
|
friend class CPalettedAnimation;
|
||||||
|
|
||||||
|
ui32 texHandle; // OpenGL texture handle
|
||||||
|
bool shared;
|
||||||
|
ColorRGBA buffer[256];
|
||||||
|
|
||||||
|
~CPaletteRGBA();
|
||||||
|
|
||||||
|
public:
|
||||||
|
CPaletteRGBA(const ColorRGBA palBuff[]); // 32bit RGBA source
|
||||||
|
CPaletteRGBA(const ColorRGB palBuff[], int alphaMode, bool shr=false); // 24-bit RGB source
|
||||||
|
|
||||||
|
void Unlink();
|
||||||
|
|
||||||
|
inline ui32 getTexHandle() { return texHandle; };
|
||||||
|
void loadToVideoRAM();
|
||||||
|
void unloadFromVideoRAM();
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
81
client/Gfx/FilesHeaders.h
Normal file
81
client/Gfx/FilesHeaders.h
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <SDL_endian.h>
|
||||||
|
#include "CPaletteRGBA.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Gfx
|
||||||
|
{
|
||||||
|
#define RGB_PALETTE_SIZE 0x300
|
||||||
|
#define H3PCX_HEADER_SIZE sizeof(SH3PcxFile)
|
||||||
|
#define H3DEF_HEADER_SIZE sizeof(SH3DefFile)
|
||||||
|
|
||||||
|
#define SELF_ADDR reinterpret_cast<const ui8*>(this)
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
#pragma warning(disable : 4200)
|
||||||
|
|
||||||
|
struct SH3PcxFile
|
||||||
|
{
|
||||||
|
ui32 size;
|
||||||
|
ui32 width;
|
||||||
|
ui32 height;
|
||||||
|
ui8 data[];
|
||||||
|
|
||||||
|
// palette = last 256*3 bytes of PCX
|
||||||
|
inline const ColorRGB* palette(size_t sizeOfPcx) const {
|
||||||
|
return (ColorRGB*) (SELF_ADDR + sizeOfPcx - RGB_PALETTE_SIZE);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct SH3DefSprite
|
||||||
|
{
|
||||||
|
ui32 size;
|
||||||
|
ui32 format; /// format in which pixel data is stored
|
||||||
|
ui32 fullWidth; /// full width and height of frame, including borders
|
||||||
|
ui32 fullHeight;
|
||||||
|
ui32 width; /// width and height of pixel data, borders excluded
|
||||||
|
ui32 height;
|
||||||
|
si32 leftMargin;
|
||||||
|
si32 topMargin;
|
||||||
|
ui8 data[];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct SH3DefBlock {
|
||||||
|
ui32 id;
|
||||||
|
ui32 entriesCount;
|
||||||
|
ui32 unknown1;
|
||||||
|
ui32 unknown2;
|
||||||
|
char names[][13]; // [entriesCount][13] - array of frames names
|
||||||
|
|
||||||
|
inline const ua_ui32_ptr offsets() const {
|
||||||
|
return (ua_ui32_ptr)(names + SDL_SwapLE32(entriesCount));
|
||||||
|
} // array of offsets of frames
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct SH3DefFile {
|
||||||
|
ui32 type;
|
||||||
|
ui32 width;
|
||||||
|
ui32 height;
|
||||||
|
ui32 totalBlocks;
|
||||||
|
ColorRGB palette[256];
|
||||||
|
|
||||||
|
// SDefHeader is followed by a series of SH3DefBlock
|
||||||
|
SH3DefBlock firstBlock;
|
||||||
|
|
||||||
|
// Number of entries (sprites) in first block
|
||||||
|
inline ui32 fbEntrCount() const { return firstBlock.entriesCount; };
|
||||||
|
|
||||||
|
inline SH3DefSprite& getSprite(ui32 offset) const {
|
||||||
|
return *(SH3DefSprite*) (SELF_ADDR + offset);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#pragma warning(default : 4200)
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
#undef SELF_ADDR
|
||||||
|
}
|
440
client/Gfx/Images.cpp
Normal file
440
client/Gfx/Images.cpp
Normal file
@ -0,0 +1,440 @@
|
|||||||
|
#include "StdInc.h"
|
||||||
|
#include <SDL_opengl.h>
|
||||||
|
#include <SDL_endian.h>
|
||||||
|
#include "Images.h"
|
||||||
|
|
||||||
|
namespace Gfx
|
||||||
|
{
|
||||||
|
|
||||||
|
/*********** CImage ***********/
|
||||||
|
|
||||||
|
CImage::~CImage()
|
||||||
|
{
|
||||||
|
unloadFromVideoRAM();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CImage::loadToVideoRAM()
|
||||||
|
{
|
||||||
|
if (texHandle > 0) return;
|
||||||
|
glGenTextures(1, &texHandle);
|
||||||
|
glBindTexture(GL_TEXTURE_RECTANGLE, texHandle);
|
||||||
|
textureTransfer();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CImage::unloadFromVideoRAM()
|
||||||
|
{
|
||||||
|
glDeleteTextures(1, &texHandle);
|
||||||
|
texHandle = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CImage::bindTexture()
|
||||||
|
{
|
||||||
|
if (texHandle > 0)
|
||||||
|
{
|
||||||
|
glBindTexture(GL_TEXTURE_RECTANGLE, texHandle);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
glGenTextures(1, &texHandle);
|
||||||
|
glBindTexture(GL_TEXTURE_RECTANGLE, texHandle);
|
||||||
|
textureTransfer();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*********** CBitmap32::QuadInstance ***********/
|
||||||
|
|
||||||
|
CBitmap32::QuadInstance::QuadInstance(Point p) : coords()
|
||||||
|
{
|
||||||
|
for (int i=0; i<4; ++i) coords[i].vertex = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBitmap32::QuadInstance::setOffset(TransformFlags flags, si32 x, si32 y)
|
||||||
|
{
|
||||||
|
if (flags & ROTATE_90_DEG)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBitmap32::QuadInstance::transform(TransformFlags flags, ui32 w0, ui32 h0, ui32 w, ui32 h)
|
||||||
|
{
|
||||||
|
if (flags & MIRROR_HORIZ)
|
||||||
|
{
|
||||||
|
coords[0].vertex.x += w;
|
||||||
|
coords[3].vertex.x += w;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
coords[1].vertex.x += w;
|
||||||
|
coords[2].vertex.x += w;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags & MIRROR_VERTIC)
|
||||||
|
{
|
||||||
|
coords[0].vertex.y += h;
|
||||||
|
coords[1].vertex.y += h;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
coords[2].vertex.y += h;
|
||||||
|
coords[3].vertex.y += h;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags & ROTATE_90_DEG)
|
||||||
|
{
|
||||||
|
coords[0].texture.x = w0;
|
||||||
|
coords[1].texture.x = w0;
|
||||||
|
coords[1].texture.y = h0;
|
||||||
|
coords[2].texture.y = h0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
coords[1].texture.x = w0;
|
||||||
|
coords[2].texture.x = w0;
|
||||||
|
coords[2].texture.y = h0;
|
||||||
|
coords[3].texture.y = h0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBitmap32::QuadInstance::putToGL() const
|
||||||
|
{
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
for (int i=0; i<4; ++i)
|
||||||
|
{
|
||||||
|
const CoordBind& row = coords[i];
|
||||||
|
glTexCoord2i(row.texture.x, row.texture.y);
|
||||||
|
glVertex2i(row.vertex.x, row.vertex.y);
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********** CBitmap32 ***********/
|
||||||
|
|
||||||
|
CBitmap32::CBitmap32(ui32 w, ui32 h, const ColorRGB pixBuff[]) : CImage(w, h)
|
||||||
|
{
|
||||||
|
const ui32 size = w * h;
|
||||||
|
buffer = new ColorRGBA[size];
|
||||||
|
|
||||||
|
for (ui32 it=0; it<size; ++it)
|
||||||
|
{
|
||||||
|
memcpy(&buffer[it], &pixBuff[it], 3);
|
||||||
|
buffer[it].comp.A = 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CBitmap32::~CBitmap32()
|
||||||
|
{
|
||||||
|
delete buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBitmap32::textureTransfer()
|
||||||
|
{
|
||||||
|
glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBitmap32::putAt(Point p)
|
||||||
|
{
|
||||||
|
GL2D::useNoShader();
|
||||||
|
bindTexture();
|
||||||
|
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
glTexCoord2i(0, 0);
|
||||||
|
glVertex2i(p.x, p.y);
|
||||||
|
glTexCoord2i(width, 0);
|
||||||
|
glVertex2i(p.x + width, p.y);
|
||||||
|
glTexCoord2i(width, height);
|
||||||
|
glVertex2i(p.x + width, p.y + height);
|
||||||
|
glTexCoord2i(0, height);
|
||||||
|
glVertex2i(p.x, p.y + height);
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBitmap32::putAt(Point p, TransformFlags flags)
|
||||||
|
{
|
||||||
|
QuadInstance qi(p);
|
||||||
|
qi.transform(flags, width, height, width, height);
|
||||||
|
|
||||||
|
GL2D::useNoShader();
|
||||||
|
bindTexture();
|
||||||
|
qi.putToGL();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBitmap32::putAt(Point p, TransformFlags flags, float scale)
|
||||||
|
{
|
||||||
|
QuadInstance qi(p);
|
||||||
|
qi.transform(flags, width, height, width*scale, height*scale);
|
||||||
|
|
||||||
|
GL2D::useNoShader();
|
||||||
|
bindTexture();
|
||||||
|
qi.putToGL();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBitmap32::putAt(Point p, TransformFlags flags, Rect clipRect)
|
||||||
|
{
|
||||||
|
QuadInstance qi(p);
|
||||||
|
qi.setOffset(flags, clipRect.lt.x, clipRect.lt.y);
|
||||||
|
qi.transform(flags, clipRect.rb.x - p.x, clipRect.rb.y - p.y, clipRect.width(), clipRect.height());
|
||||||
|
|
||||||
|
GL2D::useNoShader();
|
||||||
|
bindTexture();
|
||||||
|
qi.putToGL();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBitmap32::putAt(Point p, TransformFlags flags, const ColorMatrix cm)
|
||||||
|
{
|
||||||
|
QuadInstance qi(p);
|
||||||
|
qi.transform(flags, width, height, width, height);
|
||||||
|
|
||||||
|
GL2D::useColorizeShader(cm);
|
||||||
|
bindTexture();
|
||||||
|
qi.putToGL();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBitmap32::putWithPlrColor(Point p, ColorRGBA c)
|
||||||
|
{
|
||||||
|
putAt(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBitmap32::putWithPlrColor(Point p, ColorRGBA c, float scale)
|
||||||
|
{
|
||||||
|
putAt(p, NONE, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********** CPalettedBitmap ***********/
|
||||||
|
|
||||||
|
CPalettedBitmap::CPalettedBitmap(ui32 w, ui32 h, CPaletteRGBA& pal, const ui8 pixBuff[]) :
|
||||||
|
CImage(w, h),
|
||||||
|
palette(pal)
|
||||||
|
{
|
||||||
|
const ui32 rowStride = (w + 3) & ~3;
|
||||||
|
const ui32 size = rowStride * h;
|
||||||
|
buffer = new ui8[size];
|
||||||
|
|
||||||
|
if (rowStride == w)
|
||||||
|
{
|
||||||
|
memcpy(buffer, pixBuff, size);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ui32 y=0; y<h; ++y)
|
||||||
|
{
|
||||||
|
memset(&buffer[rowStride*(y+1)-4], 0, 4);
|
||||||
|
memcpy(&buffer[rowStride*y], &pixBuff[w*y], w);
|
||||||
|
}
|
||||||
|
width = rowStride;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CPalettedBitmap::CPalettedBitmap(ui32 w, ui32 h, CPaletteRGBA& pal, const ui8 pixBuff[], ui32 format) :
|
||||||
|
CImage(w, h),
|
||||||
|
palette(pal)
|
||||||
|
{
|
||||||
|
const ui32 rowStride = (w + 3) & ~3;
|
||||||
|
buffer = new ui8[rowStride * h];
|
||||||
|
|
||||||
|
switch (format)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
const ua_ui32_ptr rowsOffsets = (ua_ui32_ptr)pixBuff;
|
||||||
|
|
||||||
|
for (ui32 y=0; y<h; ++y)
|
||||||
|
{
|
||||||
|
const ui8* srcRowPtr = pixBuff + SDL_SwapLE32(rowsOffsets[y]);
|
||||||
|
ui8* dstRowPtr = buffer + (y * rowStride);
|
||||||
|
|
||||||
|
ui32 rowLength = 0;
|
||||||
|
do {
|
||||||
|
ui8 segmentType = *(srcRowPtr++);
|
||||||
|
size_t segmentLength = *(srcRowPtr++) + 1;
|
||||||
|
|
||||||
|
if (segmentType == 0xFF)
|
||||||
|
{
|
||||||
|
memcpy(dstRowPtr, srcRowPtr, segmentLength);
|
||||||
|
srcRowPtr += segmentLength;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memset(dstRowPtr, segmentType, segmentLength);
|
||||||
|
}
|
||||||
|
dstRowPtr += segmentLength;
|
||||||
|
rowLength += segmentLength;
|
||||||
|
}
|
||||||
|
while (rowLength < w);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CPalettedBitmap::~CPalettedBitmap()
|
||||||
|
{
|
||||||
|
delete buffer;
|
||||||
|
palette.Unlink();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalettedBitmap::textureTransfer()
|
||||||
|
{
|
||||||
|
glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_R8UI, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, buffer);
|
||||||
|
palette.loadToVideoRAM();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalettedBitmap::putAt(Point p)
|
||||||
|
{
|
||||||
|
loadToVideoRAM();
|
||||||
|
GL2D::assignTexture(GL_TEXTURE1, GL_TEXTURE_1D, palette.getTexHandle());
|
||||||
|
GL2D::assignTexture(GL_TEXTURE0, GL_TEXTURE_RECTANGLE, texHandle);
|
||||||
|
GL2D::usePaletteBitmapShader(p.x, p.y);
|
||||||
|
glRecti(p.x, p.y, p.x + width, p.y + height);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalettedBitmap::putAt(Point p, TransformFlags flags)
|
||||||
|
{
|
||||||
|
putAt(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalettedBitmap::putAt(Point p, TransformFlags flags, float scale)
|
||||||
|
{
|
||||||
|
loadToVideoRAM();
|
||||||
|
GL2D::assignTexture(GL_TEXTURE1, GL_TEXTURE_1D, palette.getTexHandle());
|
||||||
|
GL2D::assignTexture(GL_TEXTURE0, GL_TEXTURE_RECTANGLE, texHandle);
|
||||||
|
GL2D::usePaletteBitmapShader(p.x, p.y);
|
||||||
|
glRecti(p.x, p.y, p.x + width*scale, p.y + height*scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalettedBitmap::putAt(Point p, TransformFlags flags, Rect clipRect)
|
||||||
|
{
|
||||||
|
putAt(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalettedBitmap::putAt(Point p, TransformFlags flags, const ColorMatrix cm)
|
||||||
|
{
|
||||||
|
loadToVideoRAM();
|
||||||
|
GL2D::assignTexture(GL_TEXTURE1, GL_TEXTURE_1D, palette.getTexHandle());
|
||||||
|
GL2D::assignTexture(GL_TEXTURE0, GL_TEXTURE_RECTANGLE, texHandle);
|
||||||
|
GL2D::usePaletteBitmapShader(p.x, p.y, cm);
|
||||||
|
glRecti(p.x, p.y, p.x + width, p.y + height);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalettedBitmap::putWithPlrColor(Point p, ColorRGBA c)
|
||||||
|
{
|
||||||
|
putAt(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalettedBitmap::putWithPlrColor(Point p, ColorRGBA c, float scale)
|
||||||
|
{
|
||||||
|
putAt(p, NONE, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********** CPalBitmapWithMargin ***********/
|
||||||
|
|
||||||
|
CPalBitmapWithMargin::CPalBitmapWithMargin(ui32 fw, ui32 fh, ui32 lm, ui32 tm, ui32 iw, ui32 ih,
|
||||||
|
CPaletteRGBA& pal, const ui8 pixBuff[]) :
|
||||||
|
CPalettedBitmap(iw, ih, pal, pixBuff),
|
||||||
|
leftMargin(lm), topMargin(tm),
|
||||||
|
intWidth(iw), intHeight(ih)
|
||||||
|
{
|
||||||
|
width = fw;
|
||||||
|
height = fh;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalBitmapWithMargin::textureTransfer()
|
||||||
|
{
|
||||||
|
glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_R8UI, intWidth, intHeight, 0, GL_RED_INTEGER, GL_UNSIGNED_BYTE, buffer);
|
||||||
|
palette.loadToVideoRAM();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CPalBitmapWithMargin::CPalBitmapWithMargin(ui32 fw, ui32 fh, ui32 lm, ui32 tm, ui32 iw, ui32 ih,
|
||||||
|
CPaletteRGBA& pal, const ui8 pixBuff[], ui32 format) :
|
||||||
|
CPalettedBitmap(iw, ih, pal, pixBuff, format),
|
||||||
|
leftMargin(lm), topMargin(tm),
|
||||||
|
intWidth(iw), intHeight(ih)
|
||||||
|
{
|
||||||
|
width = fw;
|
||||||
|
height = fh;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalBitmapWithMargin::putAt(Point p)
|
||||||
|
{
|
||||||
|
loadToVideoRAM();
|
||||||
|
GL2D::assignTexture(GL_TEXTURE1, GL_TEXTURE_1D, palette.getTexHandle());
|
||||||
|
GL2D::assignTexture(GL_TEXTURE0, GL_TEXTURE_RECTANGLE, texHandle);
|
||||||
|
GL2D::usePaletteBitmapShader(p.x, p.y);
|
||||||
|
glRecti(p.x, p.y, p.x + intWidth, p.y + intHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalBitmapWithMargin::putAt(Point p, TransformFlags flags)
|
||||||
|
{
|
||||||
|
putAt(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalBitmapWithMargin::putAt(Point p, TransformFlags flags, float scale)
|
||||||
|
{
|
||||||
|
putAt(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalBitmapWithMargin::putAt(Point p, TransformFlags flags, Rect clipRect)
|
||||||
|
{
|
||||||
|
putAt(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalBitmapWithMargin::putAt(Point p, TransformFlags flags, const ColorMatrix cm)
|
||||||
|
{
|
||||||
|
loadToVideoRAM();
|
||||||
|
GL2D::assignTexture(GL_TEXTURE1, GL_TEXTURE_1D, palette.getTexHandle());
|
||||||
|
GL2D::assignTexture(GL_TEXTURE0, GL_TEXTURE_RECTANGLE, texHandle);
|
||||||
|
GL2D::usePaletteBitmapShader(p.x, p.y, cm);
|
||||||
|
glRecti(p.x, p.y, p.x + width, p.y + height);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalBitmapWithMargin::putWithPlrColor(Point p, ColorRGBA c)
|
||||||
|
{
|
||||||
|
putAt(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPalBitmapWithMargin::putWithPlrColor(Point p, ColorRGBA c, float scale)
|
||||||
|
{
|
||||||
|
putAt(p, NONE, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
164
client/Gfx/Images.h
Normal file
164
client/Gfx/Images.h
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CPaletteRGBA.h"
|
||||||
|
#include "../UIFramework/GL2D.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Gfx
|
||||||
|
{
|
||||||
|
|
||||||
|
struct Point
|
||||||
|
{
|
||||||
|
si32 x;
|
||||||
|
si32 y;
|
||||||
|
|
||||||
|
inline Point() {};
|
||||||
|
inline Point(si32 _x, si32 _y) : x(_x), y(_y) {};
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Rect
|
||||||
|
{
|
||||||
|
Point lt;
|
||||||
|
Point rb;
|
||||||
|
|
||||||
|
inline ui32 width() { return rb.x - lt.x; };
|
||||||
|
inline ui32 height() { return rb.y - lt.y; };
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum TransformFlags
|
||||||
|
{
|
||||||
|
NONE = 0,
|
||||||
|
MIRROR_HORIZ = 1,
|
||||||
|
MIRROR_VERTIC = 2,
|
||||||
|
ROTATE_90_DEG = 4
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Color transform matrix for: grayscale, clone, bloodlust, etc */
|
||||||
|
typedef float ColorMatrix[4][4];
|
||||||
|
|
||||||
|
|
||||||
|
class CImage
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
ui32 texHandle;
|
||||||
|
ui32 width;
|
||||||
|
ui32 height;
|
||||||
|
|
||||||
|
inline CImage(ui32 w, ui32 h) : texHandle(0), width(w), height(h) {};
|
||||||
|
virtual void textureTransfer() = 0;
|
||||||
|
|
||||||
|
public:
|
||||||
|
static CImage* makeFromPCX(const struct SH3PcxFile& pcx, size_t fileSize);
|
||||||
|
static CImage* makeFromDEF(const struct SH3DefFile& def, size_t fileSize);
|
||||||
|
static class CPalettedBitmap* makeFromDEFSprite(
|
||||||
|
const struct SH3DefSprite& spr, CPaletteRGBA& pal);
|
||||||
|
|
||||||
|
virtual ~CImage();
|
||||||
|
|
||||||
|
inline ui32 getWidth() { return width; };
|
||||||
|
inline ui32 getHeight() { return height; };
|
||||||
|
|
||||||
|
void loadToVideoRAM();
|
||||||
|
void unloadFromVideoRAM();
|
||||||
|
void bindTexture();
|
||||||
|
|
||||||
|
virtual void putAt(Point p) = 0;
|
||||||
|
virtual void putAt(Point p, TransformFlags flags) = 0;
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, float scale) = 0;
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, Rect clipRect) = 0;
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm) = 0;
|
||||||
|
virtual void putWithPlrColor(Point p, ColorRGBA c) = 0;
|
||||||
|
virtual void putWithPlrColor(Point p, ColorRGBA c, float scale) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CBitmap32 : public CImage
|
||||||
|
{
|
||||||
|
friend class CImage;
|
||||||
|
ColorRGBA* buffer;
|
||||||
|
|
||||||
|
struct CoordBind {
|
||||||
|
Point texture, vertex;
|
||||||
|
inline CoordBind() : texture(0, 0) {};
|
||||||
|
};
|
||||||
|
|
||||||
|
class QuadInstance {
|
||||||
|
CoordBind coords[4];
|
||||||
|
public:
|
||||||
|
QuadInstance(Point p);
|
||||||
|
QuadInstance(const CoordBind c[4]);
|
||||||
|
void setOffset(TransformFlags flags, si32 x, si32 y);
|
||||||
|
void transform(TransformFlags flags, ui32 w0, ui32 h0, ui32 w, ui32 h);
|
||||||
|
void putToGL() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CBitmap32(ui32 w, ui32 h, const ColorRGB pixBuff[]); // 24bit RGB source
|
||||||
|
virtual void textureTransfer();
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual ~CBitmap32();
|
||||||
|
|
||||||
|
virtual void putAt(Point p);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, float scale);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, Rect clipRect);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm);
|
||||||
|
virtual void putWithPlrColor(Point p, ColorRGBA c);
|
||||||
|
virtual void putWithPlrColor(Point p, ColorRGBA c, float scale);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CPalettedBitmap : public CImage
|
||||||
|
{
|
||||||
|
friend class CImage;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CPaletteRGBA& palette;
|
||||||
|
ui8* buffer;
|
||||||
|
|
||||||
|
CPalettedBitmap(ui32 w, ui32 h, CPaletteRGBA& pal, const ui8 pixBuff[]);
|
||||||
|
CPalettedBitmap(ui32 w, ui32 h, CPaletteRGBA& pal, const ui8 pixBuff[], ui32 format);
|
||||||
|
virtual void textureTransfer();
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual ~CPalettedBitmap();
|
||||||
|
|
||||||
|
virtual void putAt(Point p);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, float scale);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, Rect clipRect);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm);
|
||||||
|
virtual void putWithPlrColor(Point p, ColorRGBA c);
|
||||||
|
virtual void putWithPlrColor(Point p, ColorRGBA c, float scale);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CPalBitmapWithMargin : public CPalettedBitmap
|
||||||
|
{
|
||||||
|
friend class CImage;
|
||||||
|
ui32 leftMargin;
|
||||||
|
ui32 topMargin;
|
||||||
|
ui32 intWidth;
|
||||||
|
ui32 intHeight;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CPalBitmapWithMargin(ui32 fw, ui32 fh, ui32 lm, ui32 tm, ui32 iw, ui32 ih,
|
||||||
|
CPaletteRGBA& pal, const ui8 pixBuff[]);
|
||||||
|
CPalBitmapWithMargin(ui32 fw, ui32 fh, ui32 lm, ui32 tm, ui32 iw, ui32 ih,
|
||||||
|
CPaletteRGBA& pal, const ui8 pixBuff[], ui32 format);
|
||||||
|
virtual void textureTransfer();
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual void putAt(Point p);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, float scale);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, Rect clipRect);
|
||||||
|
virtual void putAt(Point p, TransformFlags flags, const ColorMatrix cm);
|
||||||
|
virtual void putWithPlrColor(Point p, ColorRGBA c);
|
||||||
|
virtual void putWithPlrColor(Point p, ColorRGBA c, float scale);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
82
client/Gfx/ImgMakers.cpp
Normal file
82
client/Gfx/ImgMakers.cpp
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#include "StdInc.h"
|
||||||
|
|
||||||
|
#include "Images.h"
|
||||||
|
#include "FilesHeaders.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Gfx
|
||||||
|
{
|
||||||
|
#define LE(x) SDL_SwapLE32(x)
|
||||||
|
|
||||||
|
/*********** H3 PCX image format ***********/
|
||||||
|
|
||||||
|
CImage * CImage::makeFromPCX(const SH3PcxFile& pcx, size_t fileSize)
|
||||||
|
{
|
||||||
|
ui32 imgSize = LE(pcx.size);
|
||||||
|
ui32 width = LE(pcx.width);
|
||||||
|
ui32 height = LE(pcx.height);
|
||||||
|
|
||||||
|
if (imgSize == width*height)
|
||||||
|
{
|
||||||
|
if (H3PCX_HEADER_SIZE + RGB_PALETTE_SIZE + imgSize > fileSize) return nullptr;
|
||||||
|
|
||||||
|
CPaletteRGBA* ppal = new CPaletteRGBA(pcx.palette(fileSize), 0);
|
||||||
|
return new CPalettedBitmap(width, height, *ppal, pcx.data);
|
||||||
|
}
|
||||||
|
if (imgSize == width*height*3)
|
||||||
|
{
|
||||||
|
if (H3PCX_HEADER_SIZE + imgSize > fileSize) return nullptr;
|
||||||
|
|
||||||
|
return new CBitmap32(width, height, (ColorRGB*)pcx.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********** DEF animation frame ***********/
|
||||||
|
|
||||||
|
CImage* CImage::makeFromDEF(const struct SH3DefFile& def, size_t fileSize)
|
||||||
|
{
|
||||||
|
CPaletteRGBA* ppal = new CPaletteRGBA(def.palette, def.type == LE(71) ? 1 : 10);
|
||||||
|
|
||||||
|
CPalettedBitmap* img = makeFromDEFSprite(def.getSprite(def.firstBlock.offsets()[0]), *ppal);
|
||||||
|
|
||||||
|
if (img == nullptr) ppal->Unlink();
|
||||||
|
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CPalettedBitmap* CImage::makeFromDEFSprite(const SH3DefSprite& spr, CPaletteRGBA& pal)
|
||||||
|
{
|
||||||
|
ui32 format = LE(spr.format);
|
||||||
|
if (format > 3) return nullptr;
|
||||||
|
|
||||||
|
ui32 fullWidth = LE(spr.fullWidth);
|
||||||
|
ui32 fullHeight = LE(spr.fullHeight);
|
||||||
|
ui32 intWidth = LE(spr.width);
|
||||||
|
ui32 intHeight = LE(spr.height);
|
||||||
|
ui32 leftMargin = LE(spr.leftMargin);
|
||||||
|
ui32 topMargin = LE(spr.topMargin);
|
||||||
|
|
||||||
|
bool noMargins = (leftMargin == 0 && topMargin == 0 && fullWidth == intWidth && fullHeight == intHeight);
|
||||||
|
|
||||||
|
if (format == 0)
|
||||||
|
{
|
||||||
|
if (noMargins)
|
||||||
|
{
|
||||||
|
return new CPalettedBitmap(fullWidth, fullHeight, pal, spr.data);
|
||||||
|
}
|
||||||
|
return new CPalBitmapWithMargin(fullWidth, fullHeight, leftMargin, topMargin, intWidth, intHeight, pal, spr.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (noMargins)
|
||||||
|
{
|
||||||
|
return new CPalettedBitmap(fullWidth, fullHeight, pal, spr.data, format);
|
||||||
|
}
|
||||||
|
return new CPalBitmapWithMargin(fullWidth, fullHeight, leftMargin, topMargin, intWidth, intHeight, pal, spr.data, format);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
76
client/Gfx/Manager.cpp
Normal file
76
client/Gfx/Manager.cpp
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
#include "StdInc.h"
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
#include "Manager.h"
|
||||||
|
#include "Animations.h"
|
||||||
|
#include "Images.h"
|
||||||
|
#include "FilesHeaders.h"
|
||||||
|
#include "../../lib/Filesystem/CResourceLoader.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Gfx
|
||||||
|
{
|
||||||
|
|
||||||
|
class Resources
|
||||||
|
{
|
||||||
|
friend class CManager;
|
||||||
|
static std::map<std::string, PImage> images;
|
||||||
|
static std::map<std::string, PAnimation> anims;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::map<std::string, PImage> Resources::images;
|
||||||
|
std::map<std::string, PAnimation> Resources::anims;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PImage CManager::getImage(const std::string& fname)
|
||||||
|
{
|
||||||
|
PImage& img_ptr = Resources::images[fname];
|
||||||
|
|
||||||
|
if (img_ptr) return img_ptr;
|
||||||
|
|
||||||
|
ResourceID resImageId("DATA/" + fname, EResType::IMAGE);
|
||||||
|
auto stream = CResourceHandler::get()->load(resImageId);
|
||||||
|
|
||||||
|
auto streamSize = stream->getSize();
|
||||||
|
if (streamSize < H3PCX_HEADER_SIZE) return nullptr;
|
||||||
|
if (streamSize > 0x10000000) streamSize = 0x10000000;
|
||||||
|
|
||||||
|
std::unique_ptr<ui8[]> data(new ui8[(size_t)streamSize]);
|
||||||
|
auto readSize = stream->read(data.get(), streamSize);
|
||||||
|
|
||||||
|
assert(readSize == stream->getSize());
|
||||||
|
|
||||||
|
CImage* img_tmp = CImage::makeFromPCX(*(SH3PcxFile*)data.get(), (size_t)readSize);
|
||||||
|
if (img_tmp == nullptr) return nullptr;
|
||||||
|
|
||||||
|
return img_ptr = PImage(img_tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PAnimation CManager::getAnimation(const std::string& fname)
|
||||||
|
{
|
||||||
|
PAnimation& anim_ptr = Resources::anims[fname];
|
||||||
|
|
||||||
|
if (anim_ptr) return anim_ptr;
|
||||||
|
|
||||||
|
ResourceID resAnimId("SPRITES/" + fname, EResType::ANIMATION);
|
||||||
|
auto stream = CResourceHandler::get()->load(resAnimId);
|
||||||
|
|
||||||
|
auto streamSize = stream->getSize();
|
||||||
|
if (streamSize < H3DEF_HEADER_SIZE) return nullptr;
|
||||||
|
if (streamSize > 0x7FFFFFF0) streamSize = 0x7FFFFFF0;
|
||||||
|
|
||||||
|
std::unique_ptr<ui8[]> data(new ui8[(size_t)streamSize]);
|
||||||
|
auto readSize = stream->read(data.get(), streamSize);
|
||||||
|
|
||||||
|
assert(readSize == stream->getSize());
|
||||||
|
|
||||||
|
CAnimation* anim_tmp = CAnimation::makeFromDEF(*(SH3DefFile*)data.get(), (size_t)readSize);
|
||||||
|
if (anim_tmp == nullptr) return nullptr;
|
||||||
|
|
||||||
|
return anim_ptr = PAnimation(anim_tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
21
client/Gfx/Manager.h
Normal file
21
client/Gfx/Manager.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace Gfx
|
||||||
|
{
|
||||||
|
class CImage;
|
||||||
|
class CAnimation;
|
||||||
|
|
||||||
|
typedef std::shared_ptr<CImage> PImage;
|
||||||
|
typedef std::shared_ptr<CAnimation> PAnimation;
|
||||||
|
|
||||||
|
class CManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static PImage getImage(const std::string& fname);
|
||||||
|
static PAnimation getAnimation(const std::string& fname);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -193,7 +193,7 @@ CDefEssential * Graphics::loadHeroAnim( const std::string &name, const std::vect
|
|||||||
}
|
}
|
||||||
for(size_t ff=0; ff<anim->ourImages.size(); ++ff)
|
for(size_t ff=0; ff<anim->ourImages.size(); ++ff)
|
||||||
{
|
{
|
||||||
CSDL_Ext::alphaTransform(anim->ourImages[ff].bitmap);
|
if (anim->ourImages[ff].bitmap != nullptr) CSDL_Ext::alphaTransform(anim->ourImages[ff].bitmap);
|
||||||
}
|
}
|
||||||
return anim;
|
return anim;
|
||||||
}
|
}
|
||||||
@ -245,8 +245,9 @@ void Graphics::loadHeroFlags(std::pair<std::vector<CDefEssential *> Graphics::*,
|
|||||||
}
|
}
|
||||||
for(size_t ff=0; ff<curImgs.size(); ++ff)
|
for(size_t ff=0; ff<curImgs.size(); ++ff)
|
||||||
{
|
{
|
||||||
SDL_SetColorKey(curImgs[ff].bitmap, SDL_SRCCOLORKEY,
|
if (curImgs[ff].bitmap != nullptr)
|
||||||
SDL_MapRGB(curImgs[ff].bitmap->format, 0, 255, 255)
|
SDL_SetColorKey(curImgs[ff].bitmap, SDL_SRCCOLORKEY,
|
||||||
|
SDL_MapRGB(curImgs[ff].bitmap->format, 0, 255, 255)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#include "StdInc.h"
|
#include "StdInc.h"
|
||||||
#include "CCursorHandler.h"
|
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
#include "SDL_Extensions.h"
|
#include "CCursorHandler.h"
|
||||||
|
#include "GL2D.h"
|
||||||
|
#include "../Gfx/Animations.h"
|
||||||
|
#include "../Gfx/Images.h"
|
||||||
|
|
||||||
#include "../CAnimation.h"
|
#include "../CAnimation.h"
|
||||||
#include "CGuiHandler.h"
|
#include "CGuiHandler.h"
|
||||||
|
|
||||||
@ -16,24 +18,23 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern SDL_Surface * screen;
|
CCursorHandler::CCursorHandler()
|
||||||
|
|
||||||
void CCursorHandler::initCursor()
|
|
||||||
{
|
{
|
||||||
xpos = ypos = 0;
|
xpos = ypos = 0;
|
||||||
type = ECursor::DEFAULT;
|
type = ECursor::DEFAULT;
|
||||||
dndObject = nullptr;
|
dndObject = nullptr;
|
||||||
currentCursor = nullptr;
|
currentCursor = nullptr;
|
||||||
|
|
||||||
help = CSDL_Ext::newSurface(40,40);
|
//* help = CSDL_Ext::newSurface(40,40);
|
||||||
SDL_ShowCursor(SDL_DISABLE);
|
SDL_ShowCursor(SDL_DISABLE);
|
||||||
|
|
||||||
changeGraphic(ECursor::ADVENTURE, 0);
|
changeGraphic(ECursor::ADVENTURE, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CCursorHandler::changeGraphic(ECursor::ECursorTypes type, int index)
|
void CCursorHandler::changeGraphic(ECursor::ECursorTypes type, int index)
|
||||||
{
|
{
|
||||||
std::string cursorDefs[4] = { "CRADVNTR.DEF", "CRCOMBAT.DEF", "CRDEFLT.DEF", "CRSPELL.DEF" };
|
const std::string cursorDefs[4] = { "CRADVNTR", "CRCOMBAT", "CRDEFLT", "CRSPELL" };
|
||||||
|
|
||||||
if (type != this->type)
|
if (type != this->type)
|
||||||
{
|
{
|
||||||
@ -42,26 +43,20 @@ void CCursorHandler::changeGraphic(ECursor::ECursorTypes type, int index)
|
|||||||
this->type = type;
|
this->type = type;
|
||||||
this->frame = index;
|
this->frame = index;
|
||||||
|
|
||||||
delete currentCursor;
|
currentCursor = Gfx::CManager::getAnimation(cursorDefs[type]);
|
||||||
currentCursor = new CAnimImage(cursorDefs[int(type)], index);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (frame != index)
|
|
||||||
{
|
|
||||||
frame = index;
|
|
||||||
currentCursor->setFrame(index);
|
|
||||||
}
|
}
|
||||||
|
frame = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CCursorHandler::dragAndDropCursor(CAnimImage * object)
|
void CCursorHandler::dragAndDropCursor(CAnimImage * object)
|
||||||
{
|
{
|
||||||
if (dndObject)
|
if (dndObject) delete dndObject;
|
||||||
delete dndObject;
|
|
||||||
|
|
||||||
dndObject = object;
|
dndObject = object;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCursorHandler::cursorMove(const int & x, const int & y)
|
void CCursorHandler::cursorMove(int x, int y)
|
||||||
{
|
{
|
||||||
xpos = x;
|
xpos = x;
|
||||||
ypos = y;
|
ypos = y;
|
||||||
@ -73,19 +68,14 @@ void CCursorHandler::drawWithScreenRestore()
|
|||||||
int x = xpos, y = ypos;
|
int x = xpos, y = ypos;
|
||||||
shiftPos(x, y);
|
shiftPos(x, y);
|
||||||
|
|
||||||
SDL_Rect temp_rect1 = genRect(40,40,x,y);
|
|
||||||
SDL_Rect temp_rect2 = genRect(40,40,0,0);
|
|
||||||
SDL_BlitSurface(screen, &temp_rect1, help, &temp_rect2);
|
|
||||||
|
|
||||||
if (dndObject)
|
if (dndObject)
|
||||||
{
|
{
|
||||||
dndObject->moveTo(Point(x - dndObject->pos.w/2, y - dndObject->pos.h/2));
|
dndObject->moveTo(Point(x - dndObject->pos.w/2, y - dndObject->pos.h/2));
|
||||||
dndObject->showAll(screen);
|
dndObject->showAll();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
currentCursor->moveTo(Point(x,y));
|
currentCursor->getFrame(frame)->putAt(Gfx::Point(x, y));
|
||||||
currentCursor->showAll(screen);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,18 +86,14 @@ void CCursorHandler::drawRestored()
|
|||||||
|
|
||||||
int x = xpos, y = ypos;
|
int x = xpos, y = ypos;
|
||||||
shiftPos(x, y);
|
shiftPos(x, y);
|
||||||
|
|
||||||
SDL_Rect temp_rect = genRect(40, 40, x, y);
|
|
||||||
SDL_BlitSurface(help, NULL, screen, &temp_rect);
|
|
||||||
//blitAt(help,x,y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCursorHandler::draw(SDL_Surface *to)
|
void CCursorHandler::draw()
|
||||||
{
|
{
|
||||||
currentCursor->moveTo(Point(xpos, ypos));
|
currentCursor->getFrame(frame)->putAt(Gfx::Point(xpos, ypos));
|
||||||
currentCursor->showAll(screen);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CCursorHandler::shiftPos( int &x, int &y )
|
void CCursorHandler::shiftPos( int &x, int &y )
|
||||||
{
|
{
|
||||||
if(( type == ECursor::COMBAT && frame != ECursor::COMBAT_POINTER) || type == ECursor::SPELLBOOK)
|
if(( type == ECursor::COMBAT && frame != ECursor::COMBAT_POINTER) || type == ECursor::SPELLBOOK)
|
||||||
@ -215,20 +201,17 @@ void CCursorHandler::shiftPos( int &x, int &y )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CCursorHandler::centerCursor()
|
void CCursorHandler::centerCursor()
|
||||||
{
|
{
|
||||||
this->xpos = (screen->w / 2.) - (currentCursor->pos.w / 2.);
|
this->xpos = (GL2D::getScreenWidth() - currentCursor->getWidth()) / 2;
|
||||||
this->ypos = (screen->h / 2.) - (currentCursor->pos.h / 2.);
|
this->ypos = (GL2D::getScreenHeight() - currentCursor->getHeight()) / 2;
|
||||||
SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
|
SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
|
||||||
SDL_WarpMouse(this->xpos, this->ypos);
|
SDL_WarpMouse(this->xpos, this->ypos);
|
||||||
SDL_EventState(SDL_MOUSEMOTION, SDL_ENABLE);
|
SDL_EventState(SDL_MOUSEMOTION, SDL_ENABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
CCursorHandler::~CCursorHandler()
|
CCursorHandler::~CCursorHandler()
|
||||||
{
|
{
|
||||||
if(help)
|
|
||||||
SDL_FreeSurface(help);
|
|
||||||
|
|
||||||
delete currentCursor;
|
|
||||||
delete dndObject;
|
delete dndObject;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "../Gfx/Manager.h"
|
||||||
|
|
||||||
class CAnimImage;
|
class CAnimImage;
|
||||||
struct SDL_Surface;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CCursorhandler.h, part of VCMI engine
|
* CCursorhandler.h, part of VCMI engine
|
||||||
@ -27,9 +28,9 @@ namespace ECursor
|
|||||||
/// handles mouse cursor
|
/// handles mouse cursor
|
||||||
class CCursorHandler
|
class CCursorHandler
|
||||||
{
|
{
|
||||||
SDL_Surface * help;
|
Gfx::PImage help;
|
||||||
CAnimImage * currentCursor;
|
Gfx::PAnimation currentCursor;
|
||||||
CAnimImage * dndObject; //if set, overrides currentCursor
|
CAnimImage* dndObject; // if set, overrides currentCursor
|
||||||
bool showing;
|
bool showing;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -41,7 +42,7 @@ public:
|
|||||||
size_t frame;
|
size_t frame;
|
||||||
|
|
||||||
/// inits cursorHandler - run only once, it's not memleak-proof (rev 1333)
|
/// inits cursorHandler - run only once, it's not memleak-proof (rev 1333)
|
||||||
void initCursor();
|
CCursorHandler();
|
||||||
|
|
||||||
/// changes cursor graphic for type type (0 - adventure, 1 - combat, 2 - default, 3 - spellbook) and frame index (not used for type 3)
|
/// changes cursor graphic for type type (0 - adventure, 1 - combat, 2 - default, 3 - spellbook) and frame index (not used for type 3)
|
||||||
void changeGraphic(ECursor::ECursorTypes type, int index);
|
void changeGraphic(ECursor::ECursorTypes type, int index);
|
||||||
@ -59,14 +60,14 @@ public:
|
|||||||
/// Restore original image below cursor
|
/// Restore original image below cursor
|
||||||
void drawRestored();
|
void drawRestored();
|
||||||
/// Simple draw cursor
|
/// Simple draw cursor
|
||||||
void draw(SDL_Surface *to);
|
void draw();
|
||||||
|
|
||||||
void shiftPos( int &x, int &y );
|
void shiftPos( int &x, int &y );
|
||||||
void hide() { showing=0; };
|
void hide() { showing=0; };
|
||||||
void show() { showing=1; };
|
void show() { showing=1; };
|
||||||
|
|
||||||
/// change cursor's positions to (x, y)
|
/// change cursor's positions to (x, y)
|
||||||
void cursorMove(const int & x, const int & y);
|
void cursorMove(int x, int y);
|
||||||
/// Move cursor to screen center
|
/// Move cursor to screen center
|
||||||
void centerCursor();
|
void centerCursor();
|
||||||
|
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
#include "StdInc.h"
|
#include "StdInc.h"
|
||||||
#include "CGuiHandler.h"
|
#include "CGuiHandler.h"
|
||||||
|
#include "GL2D.h"
|
||||||
|
|
||||||
#include "SDL_Extensions.h"
|
#include "SDL_Extensions.h"
|
||||||
#include "CIntObject.h"
|
#include "CIntObject.h"
|
||||||
#include "../CGameInfo.h"
|
#include "../CGameInfo.h"
|
||||||
|
#include "../CPlayerInterface.h"
|
||||||
#include "CCursorHandler.h"
|
#include "CCursorHandler.h"
|
||||||
#include "../../lib/CThreadHelper.h"
|
#include "../../lib/CThreadHelper.h"
|
||||||
#include "../../lib/CConfigHandler.h"
|
#include "../../lib/CConfigHandler.h"
|
||||||
@ -141,13 +143,22 @@ IShowActivatable * CGuiHandler::topInt()
|
|||||||
return listInt.front();
|
return listInt.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CGuiHandler::totalRedraw()
|
void CGuiHandler::totalRedraw()
|
||||||
{
|
{
|
||||||
for(int i=0;i<objsToBlit.size();i++)
|
for (size_t i=0; i<objsToBlit.size(); ++i)
|
||||||
objsToBlit[i]->showAll(screen2);
|
objsToBlit[i]->showAll();
|
||||||
blitAt(screen2,0,0,screen);
|
|
||||||
|
if (settings["general"]["showfps"].Bool()) drawFPSCounter();
|
||||||
|
|
||||||
|
// draw the mouse cursor and update the screen
|
||||||
|
CCS->curh->drawWithScreenRestore();
|
||||||
|
CCS->curh->drawRestored();
|
||||||
|
|
||||||
|
SDL_GL_SwapBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CGuiHandler::updateTime()
|
void CGuiHandler::updateTime()
|
||||||
{
|
{
|
||||||
int ms = mainFPSmng->getElapsedMilliseconds();
|
int ms = mainFPSmng->getElapsedMilliseconds();
|
||||||
@ -336,9 +347,9 @@ void CGuiHandler::handleMouseMotion(SDL_Event *sEvent)
|
|||||||
void CGuiHandler::simpleRedraw()
|
void CGuiHandler::simpleRedraw()
|
||||||
{
|
{
|
||||||
//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(); //blit active interface/window
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGuiHandler::handleMoveInterested( const SDL_MouseMotionEvent & motion )
|
void CGuiHandler::handleMoveInterested( const SDL_MouseMotionEvent & motion )
|
||||||
@ -375,14 +386,23 @@ void CGuiHandler::run()
|
|||||||
inGuiThread.reset(new bool(true));
|
inGuiThread.reset(new bool(true));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(settings["video"]["fullscreen"].Bool())
|
GL2D::attachToCurrentThread();
|
||||||
|
|
||||||
|
if (settings["video"]["fullscreen"].Bool())
|
||||||
CCS->curh->centerCursor();
|
CCS->curh->centerCursor();
|
||||||
|
|
||||||
mainFPSmng->init(); // resets internal clock, needed for FPS manager
|
mainFPSmng->init(); // resets internal clock, needed for FPS manager
|
||||||
while(!terminate)
|
while(!terminate)
|
||||||
{
|
{
|
||||||
if(curInt)
|
boost::unique_lock<boost::recursive_mutex> lock(*CPlayerInterface::pim);
|
||||||
curInt->update(); // calls a update and drawing process of the loaded game interface object at the moment
|
|
||||||
|
if (curInt) curInt->update();
|
||||||
|
|
||||||
|
// Handles mouse and key input
|
||||||
|
updateTime();
|
||||||
|
handleEvents();
|
||||||
|
|
||||||
|
totalRedraw();
|
||||||
|
|
||||||
mainFPSmng->framerateDelay(); // holds a constant FPS
|
mainFPSmng->framerateDelay(); // holds a constant FPS
|
||||||
}
|
}
|
||||||
@ -500,7 +520,7 @@ void CGuiHandler::pushSDLEvent(int type, int usercode)
|
|||||||
CFramerateManager::CFramerateManager(int rate)
|
CFramerateManager::CFramerateManager(int rate)
|
||||||
{
|
{
|
||||||
this->rate = rate;
|
this->rate = rate;
|
||||||
this->rateticks = (1000.0 / rate);
|
this->rateticks = (ui32)ceil(1000.0 / rate);
|
||||||
this->fps = 0;
|
this->fps = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -517,7 +537,7 @@ void CFramerateManager::framerateDelay()
|
|||||||
// FPS is higher than it should be, then wait some time
|
// FPS is higher than it should be, then wait some time
|
||||||
if (timeElapsed < rateticks)
|
if (timeElapsed < rateticks)
|
||||||
{
|
{
|
||||||
SDL_Delay(ceil(this->rateticks) - timeElapsed);
|
SDL_Delay(rateticks - timeElapsed);
|
||||||
}
|
}
|
||||||
currentTicks = SDL_GetTicks();
|
currentTicks = SDL_GetTicks();
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ class IShowable;
|
|||||||
class CFramerateManager
|
class CFramerateManager
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
double rateticks;
|
ui32 rateticks;
|
||||||
ui32 lastticks, timeElapsed;
|
ui32 lastticks, timeElapsed;
|
||||||
int rate;
|
int rate;
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "StdInc.h"
|
#include "StdInc.h"
|
||||||
|
#include "GL2D.h"
|
||||||
#include "CIntObject.h"
|
#include "CIntObject.h"
|
||||||
#include "CGuiHandler.h"
|
#include "CGuiHandler.h"
|
||||||
#include "SDL_Extensions.h"
|
#include "SDL_Extensions.h"
|
||||||
@ -43,21 +44,21 @@ void CIntObject::onTimer(int timePassed)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CIntObject::show(SDL_Surface * to)
|
void CIntObject::show()
|
||||||
{
|
{
|
||||||
if(defActions & UPDATE)
|
if(defActions & UPDATE)
|
||||||
for(size_t i = 0; i < children.size(); i++)
|
for(size_t i = 0; i < children.size(); i++)
|
||||||
if(children[i]->recActions & UPDATE)
|
if(children[i]->recActions & UPDATE)
|
||||||
children[i]->show(to);
|
children[i]->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CIntObject::showAll(SDL_Surface * to)
|
void CIntObject::showAll()
|
||||||
{
|
{
|
||||||
if(defActions & SHOWALL)
|
if(defActions & SHOWALL)
|
||||||
{
|
{
|
||||||
for(size_t i = 0; i < children.size(); i++)
|
for(size_t i = 0; i < children.size(); i++)
|
||||||
if(children[i]->recActions & SHOWALL)
|
if(children[i]->recActions & SHOWALL)
|
||||||
children[i]->showAll(to);
|
children[i]->showAll();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -208,8 +209,8 @@ void CIntObject::fitToScreen(int borderWidth, bool propagate)
|
|||||||
Point newPos = pos.topLeft();
|
Point newPos = pos.topLeft();
|
||||||
vstd::amax(newPos.x, borderWidth);
|
vstd::amax(newPos.x, borderWidth);
|
||||||
vstd::amax(newPos.y, borderWidth);
|
vstd::amax(newPos.y, borderWidth);
|
||||||
vstd::amin(newPos.x, screen->w - borderWidth - pos.w);
|
vstd::amin(newPos.x, GL2D::getScreenWidth() - borderWidth - pos.w);
|
||||||
vstd::amin(newPos.y, screen->h - borderWidth - pos.h);
|
vstd::amin(newPos.y, GL2D::getScreenHeight() - borderWidth - pos.h);
|
||||||
if (newPos != pos.topLeft())
|
if (newPos != pos.topLeft())
|
||||||
moveTo(newPos, propagate);
|
moveTo(newPos, propagate);
|
||||||
}
|
}
|
||||||
@ -281,9 +282,7 @@ void CIntObject::redraw()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
showAll(screenBuf);
|
showAll();
|
||||||
if(screenBuf != screen)
|
|
||||||
showAll(screen);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -292,7 +291,7 @@ const Rect & CIntObject::center( const Rect &r, bool propagate )
|
|||||||
{
|
{
|
||||||
pos.w = r.w;
|
pos.w = r.w;
|
||||||
pos.h = r.h;
|
pos.h = r.h;
|
||||||
return center(Point(screen->w/2, screen->h/2), propagate);
|
return center(Point(GL2D::getScreenWidth()/2, GL2D::getScreenHeight()/2), propagate);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Rect & CIntObject::center( bool propagate )
|
const Rect & CIntObject::center( bool propagate )
|
||||||
|
@ -41,10 +41,10 @@ class IShowable
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void redraw()=0;
|
virtual void redraw()=0;
|
||||||
virtual void show(SDL_Surface * to) = 0;
|
virtual void show() = 0;
|
||||||
virtual void showAll(SDL_Surface * to)
|
virtual void showAll()
|
||||||
{
|
{
|
||||||
show(to);
|
show();
|
||||||
}
|
}
|
||||||
virtual ~IShowable(){}; //d-tor
|
virtual ~IShowable(){}; //d-tor
|
||||||
};
|
};
|
||||||
@ -156,9 +156,9 @@ public:
|
|||||||
void deactivate();
|
void deactivate();
|
||||||
|
|
||||||
//called each frame to update screen
|
//called each frame to update screen
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
//called on complete redraw only
|
//called on complete redraw only
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
//request complete redraw of this object
|
//request complete redraw of this object
|
||||||
void redraw();
|
void redraw();
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "StdInc.h"
|
#include "StdInc.h"
|
||||||
#include "CIntObjectClasses.h"
|
#include "CIntObjectClasses.h"
|
||||||
|
#include "GL2D.h"
|
||||||
|
|
||||||
#include "../CBitmapHandler.h"
|
#include "../CBitmapHandler.h"
|
||||||
#include "SDL_Pixels.h"
|
#include "SDL_Pixels.h"
|
||||||
@ -18,29 +19,31 @@
|
|||||||
#include "../GUIClasses.h"
|
#include "../GUIClasses.h"
|
||||||
#include "CGuiHandler.h"
|
#include "CGuiHandler.h"
|
||||||
#include "../CAdvmapInterface.h"
|
#include "../CAdvmapInterface.h"
|
||||||
|
#include "../Gfx/Animations.h"
|
||||||
|
#include "../Gfx/Images.h"
|
||||||
|
|
||||||
CPicture::CPicture( SDL_Surface *BG, int x, int y, bool Free )
|
CPicture::CPicture(Gfx::PImage BG, int x, int y, bool Free )
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
bg = BG;
|
bg = BG;
|
||||||
freeSurf = Free;
|
freeSurf = Free;
|
||||||
pos.x += x;
|
pos.x += x;
|
||||||
pos.y += y;
|
pos.y += y;
|
||||||
pos.w = BG->w;
|
pos.w = BG->getWidth();
|
||||||
pos.h = BG->h;
|
pos.h = BG->getHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
CPicture::CPicture( const std::string &bmpname, int x, int y )
|
CPicture::CPicture( const std::string &bmpname, int x, int y )
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
bg = BitmapHandler::loadBitmap(bmpname);
|
bg = Gfx::CManager::getImage(bmpname);
|
||||||
freeSurf = true;;
|
freeSurf = true;;
|
||||||
pos.x += x;
|
pos.x += x;
|
||||||
pos.y += y;
|
pos.y += y;
|
||||||
if(bg)
|
if(bg)
|
||||||
{
|
{
|
||||||
pos.w = bg->w;
|
pos.w = bg->getWidth();
|
||||||
pos.h = bg->h;
|
pos.h = bg->getHeight();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -51,7 +54,7 @@ CPicture::CPicture( const std::string &bmpname, int x, int y )
|
|||||||
CPicture::CPicture(const Rect &r, const SDL_Color &color, bool screenFormat /*= false*/)
|
CPicture::CPicture(const Rect &r, const SDL_Color &color, bool screenFormat /*= false*/)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
createSimpleRect(r, screenFormat, SDL_MapRGB(bg->format, color.r, color.g,color.b));
|
//createSimpleRect(r, screenFormat, SDL_MapRGB(bg->format, color.r, color.g,color.b));
|
||||||
}
|
}
|
||||||
|
|
||||||
CPicture::CPicture(const Rect &r, ui32 color, bool screenFormat /*= false*/)
|
CPicture::CPicture(const Rect &r, ui32 color, bool screenFormat /*= false*/)
|
||||||
@ -60,7 +63,7 @@ CPicture::CPicture(const Rect &r, ui32 color, bool screenFormat /*= false*/)
|
|||||||
createSimpleRect(r, screenFormat, color);
|
createSimpleRect(r, screenFormat, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
CPicture::CPicture(SDL_Surface *BG, const Rect &SrcRect, int x /*= 0*/, int y /*= 0*/, bool free /*= false*/)
|
CPicture::CPicture(Gfx::PImage BG, const Rect &SrcRect, int x /*= 0*/, int y /*= 0*/, bool free /*= false*/)
|
||||||
{
|
{
|
||||||
needRefresh = false;
|
needRefresh = false;
|
||||||
srcRect = new Rect(SrcRect);
|
srcRect = new Rect(SrcRect);
|
||||||
@ -74,7 +77,7 @@ CPicture::CPicture(SDL_Surface *BG, const Rect &SrcRect, int x /*= 0*/, int y /*
|
|||||||
|
|
||||||
void CPicture::setSurface(SDL_Surface *to)
|
void CPicture::setSurface(SDL_Surface *to)
|
||||||
{
|
{
|
||||||
bg = to;
|
//* bg = to;
|
||||||
if (srcRect)
|
if (srcRect)
|
||||||
{
|
{
|
||||||
pos.w = srcRect->w;
|
pos.w = srcRect->w;
|
||||||
@ -82,15 +85,13 @@ void CPicture::setSurface(SDL_Surface *to)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pos.w = bg->w;
|
pos.w = bg->getWidth();
|
||||||
pos.h = bg->h;
|
pos.h = bg->getHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CPicture::~CPicture()
|
CPicture::~CPicture()
|
||||||
{
|
{
|
||||||
if(freeSurf)
|
|
||||||
SDL_FreeSurface(bg);
|
|
||||||
delete srcRect;
|
delete srcRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,14 +101,15 @@ void CPicture::init()
|
|||||||
srcRect = NULL;
|
srcRect = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPicture::show(SDL_Surface * to)
|
void CPicture::show()
|
||||||
{
|
{
|
||||||
if (needRefresh)
|
if (bg) bg->putAt(Gfx::Point(pos.x, pos.y));
|
||||||
showAll(to);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPicture::showAll(SDL_Surface * to)
|
void CPicture::showAll()
|
||||||
{
|
{
|
||||||
|
if (bg) bg->putAt(Gfx::Point(pos.x, pos.y));
|
||||||
|
/*
|
||||||
if(bg)
|
if(bg)
|
||||||
{
|
{
|
||||||
if(srcRect)
|
if(srcRect)
|
||||||
@ -122,30 +124,32 @@ void CPicture::showAll(SDL_Surface * to)
|
|||||||
else
|
else
|
||||||
blitAt(bg, pos, to);
|
blitAt(bg, pos, to);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPicture::convertToScreenBPP()
|
void CPicture::convertToScreenBPP()
|
||||||
{
|
{
|
||||||
SDL_Surface *hlp = bg;
|
/* SDL_Surface *hlp = bg;
|
||||||
bg = SDL_ConvertSurface(hlp,screen->format,0);
|
bg = SDL_ConvertSurface(hlp,screen->format,0);
|
||||||
SDL_SetColorKey(bg,SDL_SRCCOLORKEY,SDL_MapRGB(bg->format,0,255,255));
|
SDL_SetColorKey(bg,SDL_SRCCOLORKEY,SDL_MapRGB(bg->format,0,255,255));
|
||||||
SDL_FreeSurface(hlp);
|
SDL_FreeSurface(hlp); */
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPicture::setAlpha(int value)
|
void CPicture::setAlpha(int value)
|
||||||
{
|
{
|
||||||
SDL_SetAlpha(bg, SDL_SRCALPHA, value);
|
//* SDL_SetAlpha(bg, SDL_SRCALPHA, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPicture::scaleTo(Point size)
|
void CPicture::scaleTo(Point size)
|
||||||
{
|
{
|
||||||
SDL_Surface * scaled = CSDL_Ext::scaleSurface(bg, size.x, size.y);
|
/* SDL_Surface * scaled = CSDL_Ext::scaleSurface(bg, size.x, size.y);
|
||||||
|
|
||||||
if(freeSurf)
|
if(freeSurf)
|
||||||
SDL_FreeSurface(bg);
|
SDL_FreeSurface(bg);
|
||||||
|
|
||||||
setSurface(scaled);
|
setSurface(scaled);
|
||||||
freeSurf = false;
|
freeSurf = false;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPicture::createSimpleRect(const Rect &r, bool screenFormat, ui32 color)
|
void CPicture::createSimpleRect(const Rect &r, bool screenFormat, ui32 color)
|
||||||
@ -153,12 +157,12 @@ void CPicture::createSimpleRect(const Rect &r, bool screenFormat, ui32 color)
|
|||||||
pos += r;
|
pos += r;
|
||||||
pos.w = r.w;
|
pos.w = r.w;
|
||||||
pos.h = r.h;
|
pos.h = r.h;
|
||||||
if(screenFormat)
|
/* if(screenFormat)
|
||||||
bg = CSDL_Ext::newSurface(r.w, r.h);
|
bg = CSDL_Ext::newSurface(r.w, r.h);
|
||||||
else
|
else
|
||||||
bg = SDL_CreateRGBSurface(SDL_SWSURFACE, r.w, r.h, 8, 0, 0, 0, 0);
|
bg = SDL_CreateRGBSurface(SDL_SWSURFACE, r.w, r.h, 8, 0, 0, 0, 0);
|
||||||
|
|
||||||
SDL_FillRect(bg, NULL, color);
|
SDL_FillRect(bg, NULL, color); */
|
||||||
freeSurf = true;
|
freeSurf = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,8 +176,8 @@ void CPicture::colorizeAndConvert(PlayerColor player)
|
|||||||
void CPicture::colorize(PlayerColor player)
|
void CPicture::colorize(PlayerColor player)
|
||||||
{
|
{
|
||||||
assert(bg);
|
assert(bg);
|
||||||
assert(bg->format->BitsPerPixel == 8);
|
//* assert(bg->format->BitsPerPixel == 8);
|
||||||
graphics->blueToPlayersAdv(bg, player);
|
//* graphics->blueToPlayersAdv(bg, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
CFilledTexture::CFilledTexture(std::string imageName, Rect position):
|
CFilledTexture::CFilledTexture(std::string imageName, Rect position):
|
||||||
@ -189,10 +193,10 @@ CFilledTexture::~CFilledTexture()
|
|||||||
SDL_FreeSurface(texture);
|
SDL_FreeSurface(texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFilledTexture::showAll(SDL_Surface *to)
|
void CFilledTexture::showAll()
|
||||||
{
|
{
|
||||||
CSDL_Ext::CClipRectGuard guard(to, pos);
|
//* CSDL_Ext::CClipRectGuard guard(to, pos);
|
||||||
CSDL_Ext::fillTexture(to, texture);
|
//* CSDL_Ext::fillTexture(to, texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
CButtonBase::CButtonBase()
|
CButtonBase::CButtonBase()
|
||||||
@ -223,8 +227,8 @@ void CButtonBase::update()
|
|||||||
if (newPos < 0)
|
if (newPos < 0)
|
||||||
newPos = 0;
|
newPos = 0;
|
||||||
|
|
||||||
if (state == HIGHLIGHTED && image->size() < 4)
|
if (state == HIGHLIGHTED && image->getFramesCount() < 4)
|
||||||
newPos = image->size()-1;
|
newPos = image->getFramesCount()-1;
|
||||||
|
|
||||||
if (swappedImages)
|
if (swappedImages)
|
||||||
{
|
{
|
||||||
@ -232,8 +236,8 @@ void CButtonBase::update()
|
|||||||
else if (newPos == 1) newPos = 0;
|
else if (newPos == 1) newPos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!keepFrame)
|
//* if (!keepFrame)
|
||||||
image->setFrame(newPos);
|
//* image->setFrame(newPos);
|
||||||
|
|
||||||
if (active)
|
if (active)
|
||||||
redraw();
|
redraw();
|
||||||
@ -310,6 +314,7 @@ CAdventureMapButton::CAdventureMapButton( const std::pair<std::string, std::stri
|
|||||||
pom[0] = help.first;
|
pom[0] = help.first;
|
||||||
init(Callback, pom, help.second, playerColoredButton, defName, add, x, y, key);
|
init(Callback, pom, help.second, playerColoredButton, defName, add, x, y, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAdventureMapButton::clickLeft(tribool down, bool previousState)
|
void CAdventureMapButton::clickLeft(tribool down, bool previousState)
|
||||||
{
|
{
|
||||||
if(isBlocked())
|
if(isBlocked())
|
||||||
@ -412,34 +417,36 @@ void CAdventureMapButton::setIndex(size_t index, bool playerColoredButton)
|
|||||||
if (index == currentImage || index>=imageNames.size())
|
if (index == currentImage || index>=imageNames.size())
|
||||||
return;
|
return;
|
||||||
currentImage = index;
|
currentImage = index;
|
||||||
setImage(new CAnimation(imageNames[index]), playerColoredButton);
|
setImage(Gfx::CManager::getAnimation(imageNames[index]));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAdventureMapButton::setImage(CAnimation* anim, bool playerColoredButton, int animFlags)
|
void CAdventureMapButton::setImage(Gfx::PAnimation anim, bool playerColoredButton, int animFlags)
|
||||||
{
|
{
|
||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
|
|
||||||
delete image;
|
image = anim; //new CAnimImage(anim, getState(), 0, 0, 0, animFlags);
|
||||||
image = new CAnimImage(anim, getState(), 0, 0, 0, animFlags);
|
//* if (playerColoredButton)
|
||||||
if (playerColoredButton)
|
//* image->playerColored(LOCPLINT->playerID);
|
||||||
image->playerColored(LOCPLINT->playerID);
|
|
||||||
|
pos.w = image->getWidth();
|
||||||
|
pos.h = image->getHeight();
|
||||||
|
|
||||||
pos.w = image->pos.w;
|
|
||||||
pos.h = image->pos.h;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAdventureMapButton::setPlayerColor(PlayerColor player)
|
void CAdventureMapButton::setPlayerColor(PlayerColor player)
|
||||||
{
|
{
|
||||||
if (image)
|
// if (image)
|
||||||
image->playerColored(player);
|
// image->playerColored(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAdventureMapButton::showAll(SDL_Surface * to)
|
void CAdventureMapButton::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
image->getFrame(0)->putAt(Gfx::Point(pos.x, pos.y));
|
||||||
|
|
||||||
if (borderEnabled && borderColor.unused == 0)
|
CIntObject::showAll();
|
||||||
CSDL_Ext::drawBorder(to, pos.x-1, pos.y-1, pos.w+2, pos.h+2, int3(borderColor.r, borderColor.g, borderColor.b));
|
|
||||||
|
//* if (borderEnabled && borderColor.unused == 0)
|
||||||
|
//* CSDL_Ext::drawBorder(to, pos.x-1, pos.y-1, pos.w+2, pos.h+2, int3(borderColor.r, borderColor.g, borderColor.b));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHighlightableButton::select(bool on)
|
void CHighlightableButton::select(bool on)
|
||||||
@ -571,28 +578,28 @@ void CHighlightableButtonsGroup::selectionChanged(int to)
|
|||||||
parent->redraw();
|
parent->redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHighlightableButtonsGroup::show(SDL_Surface * to)
|
void CHighlightableButtonsGroup::show()
|
||||||
{
|
{
|
||||||
if (musicLike)
|
if (musicLike)
|
||||||
{
|
{
|
||||||
for(size_t i=0;i<buttons.size(); ++i)
|
for(size_t i=0;i<buttons.size(); ++i)
|
||||||
if(buttons[i]->isHighlighted())
|
if(buttons[i]->isHighlighted())
|
||||||
buttons[i]->show(to);
|
buttons[i]->show();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
CIntObject::show(to);
|
CIntObject::show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHighlightableButtonsGroup::showAll(SDL_Surface * to)
|
void CHighlightableButtonsGroup::showAll()
|
||||||
{
|
{
|
||||||
if (musicLike)
|
if (musicLike)
|
||||||
{
|
{
|
||||||
for(size_t i=0;i<buttons.size(); ++i)
|
for(size_t i=0;i<buttons.size(); ++i)
|
||||||
if(buttons[i]->isHighlighted())
|
if(buttons[i]->isHighlighted())
|
||||||
buttons[i]->showAll(to);
|
buttons[i]->showAll();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHighlightableButtonsGroup::block( ui8 on )
|
void CHighlightableButtonsGroup::block( ui8 on )
|
||||||
@ -770,11 +777,11 @@ CSlider::CSlider(int x, int y, int totalw, boost::function<void(int)> Moved, int
|
|||||||
|
|
||||||
if(style == 0)
|
if(style == 0)
|
||||||
{
|
{
|
||||||
std::string name = horizontal?"IGPCRDIV.DEF":"OVBUTN2.DEF";
|
std::string name = horizontal ? "IGPCRDIV":"OVBUTN2";
|
||||||
//NOTE: this images do not have "blocked" frames. They should be implemented somehow (e.g. palette transform or something...)
|
//NOTE: this images do not have "blocked" frames. They should be implemented somehow (e.g. palette transform or something...)
|
||||||
|
|
||||||
//use source def to create custom animations. Format "name.def:123" will load this frame from def file
|
//use source def to create custom animations. Format "name.def:123" will load this frame from def file
|
||||||
CAnimation *animLeft = new CAnimation();
|
/* CAnimation *animLeft = new CAnimation();
|
||||||
animLeft->setCustom(name + ":0", 0);
|
animLeft->setCustom(name + ":0", 0);
|
||||||
animLeft->setCustom(name + ":1", 1);
|
animLeft->setCustom(name + ":1", 1);
|
||||||
left->setImage(animLeft);
|
left->setImage(animLeft);
|
||||||
@ -787,12 +794,13 @@ CSlider::CSlider(int x, int y, int totalw, boost::function<void(int)> Moved, int
|
|||||||
CAnimation *animSlider = new CAnimation();
|
CAnimation *animSlider = new CAnimation();
|
||||||
animSlider->setCustom(name + ":4", 0);
|
animSlider->setCustom(name + ":4", 0);
|
||||||
slider->setImage(animSlider);
|
slider->setImage(animSlider);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
left->setImage(new CAnimation(horizontal ? "SCNRBLF.DEF" : "SCNRBUP.DEF"));
|
left->setImage(Gfx::CManager::getAnimation(horizontal ? "SCNRBLF" : "SCNRBUP"));
|
||||||
right->setImage(new CAnimation(horizontal ? "SCNRBRT.DEF" : "SCNRBDN.DEF"));
|
right->setImage(Gfx::CManager::getAnimation(horizontal ? "SCNRBRT" : "SCNRBDN"));
|
||||||
slider->setImage(new CAnimation("SCNRBSL.DEF"));
|
slider->setImage(Gfx::CManager::getAnimation("SCNRBSL"));
|
||||||
}
|
}
|
||||||
slider->actOnDown = true;
|
slider->actOnDown = true;
|
||||||
slider->soundDisabled = true;
|
slider->soundDisabled = true;
|
||||||
@ -817,10 +825,10 @@ void CSlider::setAmount( int to )
|
|||||||
vstd::amax(positions, 0);
|
vstd::amax(positions, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSlider::showAll(SDL_Surface * to)
|
void CSlider::showAll()
|
||||||
{
|
{
|
||||||
CSDL_Ext::fillRect(to, &pos, 0);
|
//* CSDL_Ext::fillRect(to, &pos, 0);
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSlider::wheelScrolled(bool down, bool in)
|
void CSlider::wheelScrolled(bool down, bool in)
|
||||||
@ -1085,11 +1093,12 @@ const std::list<CIntObject *> &CListBox::getItems()
|
|||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimpleWindow::show(SDL_Surface * to)
|
void CSimpleWindow::show()
|
||||||
{
|
{
|
||||||
if(bitmap)
|
//* if(bitmap)
|
||||||
blitAt(bitmap,pos.x,pos.y,to);
|
//* blitAt(bitmap,pos.x,pos.y,to);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSimpleWindow::~CSimpleWindow()
|
CSimpleWindow::~CSimpleWindow()
|
||||||
{
|
{
|
||||||
if (bitmap)
|
if (bitmap)
|
||||||
@ -1150,16 +1159,16 @@ void LRClickableAreaWText::init()
|
|||||||
addUsedEvents(LCLICK | RCLICK | HOVER);
|
addUsedEvents(LCLICK | RCLICK | HOVER);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CLabel::showAll(SDL_Surface * to)
|
void CLabel::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
|
|
||||||
std::string toPrint = visibleText();
|
std::string toPrint = visibleText();
|
||||||
if(!toPrint.length())
|
if(!toPrint.length())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//blitLine(to, pos.topLeft()/2 + pos.bottomRight()/2, toPrint);
|
//blitLine(to, pos.topLeft()/2 + pos.bottomRight()/2, toPrint);
|
||||||
blitLine(to, pos.topLeft() + textOffset, toPrint);
|
//* blitLine(to, pos.topLeft() + textOffset, toPrint);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1260,9 +1269,9 @@ CTextContainer::CTextContainer(EAlignment alignment, EFonts font, SDL_Color colo
|
|||||||
color(color)
|
color(color)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void CBoundedLabel::showAll(SDL_Surface * to)
|
void CBoundedLabel::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
|
|
||||||
const IFont * f = graphics->fonts[font];
|
const IFont * f = graphics->fonts[font];
|
||||||
int lineHeight = f->getLineHeight();
|
int lineHeight = f->getLineHeight();
|
||||||
@ -1285,7 +1294,7 @@ void CBoundedLabel::showAll(SDL_Surface * to)
|
|||||||
x += pos.w - f->getStringWidth(line.c_str()) / 2;
|
x += pos.w - f->getStringWidth(line.c_str()) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
blitLine(to, Point(x, base_y + i * dy), line);
|
//* blitLine(to, Point(x, base_y + i * dy), line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1352,9 +1361,9 @@ void CTextBox::recalculateLines(const std::string &Txt)
|
|||||||
vstd::amax(maxW, f->getStringWidth(line));
|
vstd::amax(maxW, f->getStringWidth(line));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTextBox::showAll(SDL_Surface * to)
|
void CTextBox::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
|
|
||||||
const IFont * f = graphics->fonts[font];
|
const IFont * f = graphics->fonts[font];
|
||||||
int dy = f->getLineHeight(); //line height
|
int dy = f->getLineHeight(); //line height
|
||||||
@ -1374,7 +1383,7 @@ void CTextBox::showAll(SDL_Surface * to)
|
|||||||
int width = pos.w + (slider ? (slider->pos.w) : 0);
|
int width = pos.w + (slider ? (slider->pos.w) : 0);
|
||||||
int x = pos.x + int(alignment) * width / 2;
|
int x = pos.x + int(alignment) * width / 2;
|
||||||
|
|
||||||
blitLine(to, Point(x, base_y + i * dy), line);
|
//* blitLine(to, Point(x, base_y + i * dy), line);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1444,9 +1453,9 @@ CGStatusBar::~CGStatusBar()
|
|||||||
GH.statusbar = oldStatusBar;
|
GH.statusbar = oldStatusBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGStatusBar::show(SDL_Surface * to)
|
void CGStatusBar::show()
|
||||||
{
|
{
|
||||||
showAll(to);
|
showAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGStatusBar::init()
|
void CGStatusBar::init()
|
||||||
@ -1511,10 +1520,10 @@ CTextInput::CTextInput(const Rect &Pos, SDL_Surface *srf)
|
|||||||
OBJ_CONSTRUCTION;
|
OBJ_CONSTRUCTION;
|
||||||
bg = new CPicture(Pos, 0, true);
|
bg = new CPicture(Pos, 0, true);
|
||||||
Rect hlp = Pos;
|
Rect hlp = Pos;
|
||||||
if(srf)
|
/* if(srf)
|
||||||
CSDL_Ext::blitSurface(srf, &hlp, *bg, NULL);
|
CSDL_Ext::blitSurface(srf, &hlp, *bg, NULL);
|
||||||
else
|
else
|
||||||
SDL_FillRect(*bg, NULL, 0);
|
SDL_FillRect(*bg, NULL, 0); */
|
||||||
pos.w = bg->pos.w;
|
pos.w = bg->pos.w;
|
||||||
pos.h = bg->pos.h;
|
pos.h = bg->pos.h;
|
||||||
bg->pos = pos;
|
bg->pos = pos;
|
||||||
@ -1847,26 +1856,26 @@ void CWindowObject::setShadow(bool on)
|
|||||||
fullsize = Point(pos.w, pos.h);
|
fullsize = Point(pos.w, pos.h);
|
||||||
|
|
||||||
//create base 8x8 piece of shadow
|
//create base 8x8 piece of shadow
|
||||||
SDL_Surface * shadowCorner = CSDL_Ext::copySurface(shadowCornerTempl);
|
//* SDL_Surface * shadowCorner = CSDL_Ext::copySurface(shadowCornerTempl);
|
||||||
SDL_Surface * shadowBottom = CSDL_Ext::scaleSurfaceFast(shadowBottomTempl, fullsize.x - size, size);
|
//* SDL_Surface * shadowBottom = CSDL_Ext::scaleSurfaceFast(shadowBottomTempl, fullsize.x - size, size);
|
||||||
SDL_Surface * shadowRight = CSDL_Ext::scaleSurfaceFast(shadowRightTempl, size, fullsize.y - size);
|
//* SDL_Surface * shadowRight = CSDL_Ext::scaleSurfaceFast(shadowRightTempl, size, fullsize.y - size);
|
||||||
|
|
||||||
blitAlphaCol(shadowBottom, 0);
|
//* blitAlphaCol(shadowBottom, 0);
|
||||||
blitAlphaRow(shadowRight, 0);
|
//* blitAlphaRow(shadowRight, 0);
|
||||||
|
|
||||||
//generate "shadow" object with these 3 pieces in it
|
//generate "shadow" object with these 3 pieces in it
|
||||||
shadow = new CIntObject;
|
shadow = new CIntObject;
|
||||||
shadow->addChild(new CPicture(shadowCorner, shadowPos.x, shadowPos.y));
|
//* shadow->addChild(new CPicture(shadowCorner, shadowPos.x, shadowPos.y));
|
||||||
shadow->addChild(new CPicture(shadowRight, shadowPos.x, shadowStart.y));
|
//* shadow->addChild(new CPicture(shadowRight, shadowPos.x, shadowStart.y));
|
||||||
shadow->addChild(new CPicture(shadowBottom, shadowStart.x, shadowPos.y));
|
//* shadow->addChild(new CPicture(shadowBottom, shadowStart.x, shadowPos.y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWindowObject::showAll(SDL_Surface *to)
|
void CWindowObject::showAll()
|
||||||
{
|
{
|
||||||
CIntObject::showAll(to);
|
CIntObject::showAll();
|
||||||
if ((options & BORDERED) && (pos.h != to->h || pos.w != to->w))
|
if ((options & BORDERED) && (pos.w != GL2D::getScreenWidth() || pos.h != GL2D::getScreenHeight()))
|
||||||
CMessage::drawBorder(LOCPLINT ? LOCPLINT->playerID : PlayerColor(1), to, pos.w+28, pos.h+29, pos.x-14, pos.y-15);
|
CMessage::drawBorder(LOCPLINT ? LOCPLINT->playerID : PlayerColor(1), nullptr, pos.w+28, pos.h+29, pos.x-14, pos.y-15);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWindowObject::close()
|
void CWindowObject::close()
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "CIntObject.h"
|
#include "CIntObject.h"
|
||||||
#include "SDL_Extensions.h"
|
#include "SDL_Extensions.h"
|
||||||
#include "../FunctionList.h"
|
#include "../FunctionList.h"
|
||||||
|
#include "../Gfx/Manager.h"
|
||||||
|
|
||||||
struct SDL_Surface;
|
struct SDL_Surface;
|
||||||
struct Rect;
|
struct Rect;
|
||||||
@ -26,7 +27,7 @@ class CSimpleWindow : public CIntObject
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SDL_Surface * bitmap; //background
|
SDL_Surface * bitmap; //background
|
||||||
virtual void show(SDL_Surface * to);
|
virtual void show();
|
||||||
CSimpleWindow():bitmap(NULL){}; //c-tor
|
CSimpleWindow():bitmap(NULL){}; //c-tor
|
||||||
virtual ~CSimpleWindow(); //d-tor
|
virtual ~CSimpleWindow(); //d-tor
|
||||||
};
|
};
|
||||||
@ -35,22 +36,20 @@ public:
|
|||||||
class CPicture : public CIntObject
|
class CPicture : public CIntObject
|
||||||
{
|
{
|
||||||
void setSurface(SDL_Surface *to);
|
void setSurface(SDL_Surface *to);
|
||||||
|
Gfx::PImage bg;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SDL_Surface * bg;
|
|
||||||
Rect * srcRect; //if NULL then whole surface will be used
|
Rect * srcRect; //if NULL then whole surface will be used
|
||||||
bool freeSurf; //whether surface will be freed upon CPicture destruction
|
bool freeSurf; //whether surface will be freed upon CPicture destruction
|
||||||
bool needRefresh;//Surface needs to be displayed each frame
|
bool needRefresh;//Surface needs to be displayed each frame
|
||||||
|
|
||||||
operator SDL_Surface*()
|
inline Gfx::PImage getImage() { return bg; };
|
||||||
{
|
|
||||||
return bg;
|
|
||||||
}
|
|
||||||
|
|
||||||
CPicture(const Rect & r, const SDL_Color & color, bool screenFormat = false); //rect filled with given color
|
CPicture(const Rect & r, const SDL_Color & color, bool screenFormat = false); //rect filled with given color
|
||||||
CPicture(const Rect & r, ui32 color, bool screenFormat = false); //rect filled with given color
|
CPicture(const Rect & r, ui32 color, bool screenFormat = false); //rect filled with given color
|
||||||
CPicture(SDL_Surface * BG, int x = 0, int y=0, bool Free = true); //wrap existing SDL_Surface
|
CPicture(Gfx::PImage BG, int x = 0, int y=0, bool Free = true); //wrap existing SDL_Surface
|
||||||
CPicture(const std::string &bmpname, int x=0, int y=0);
|
CPicture(const std::string &bmpname, int x=0, int y=0);
|
||||||
CPicture(SDL_Surface *BG, const Rect &SrcRext, int x = 0, int y = 0, bool free = false); //wrap subrect of given surface
|
CPicture(Gfx::PImage BG, const Rect &SrcRext, int x = 0, int y = 0, bool free = false); //wrap subrect of given surface
|
||||||
~CPicture();
|
~CPicture();
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
@ -60,8 +59,8 @@ public:
|
|||||||
|
|
||||||
void scaleTo(Point size);
|
void scaleTo(Point size);
|
||||||
void createSimpleRect(const Rect &r, bool screenFormat, ui32 color);
|
void createSimpleRect(const Rect &r, bool screenFormat, ui32 color);
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void convertToScreenBPP();
|
void convertToScreenBPP();
|
||||||
void colorizeAndConvert(PlayerColor player);
|
void colorizeAndConvert(PlayerColor player);
|
||||||
void colorize(PlayerColor player);
|
void colorize(PlayerColor player);
|
||||||
@ -75,7 +74,7 @@ class CFilledTexture : CIntObject
|
|||||||
public:
|
public:
|
||||||
CFilledTexture(std::string imageName, Rect position);
|
CFilledTexture(std::string imageName, Rect position);
|
||||||
~CFilledTexture();
|
~CFilledTexture();
|
||||||
void showAll(SDL_Surface *to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace config{struct ButtonInfo;}
|
namespace config{struct ButtonInfo;}
|
||||||
@ -111,7 +110,7 @@ public:
|
|||||||
bool isBlocked();
|
bool isBlocked();
|
||||||
bool isHighlighted();
|
bool isHighlighted();
|
||||||
|
|
||||||
CAnimImage * image; //image for this button
|
Gfx::PAnimation image; //image for this button
|
||||||
CLabel * text;//text overlay
|
CLabel * text;//text overlay
|
||||||
|
|
||||||
CButtonBase(); //c-tor
|
CButtonBase(); //c-tor
|
||||||
@ -146,9 +145,9 @@ public:
|
|||||||
void init(const CFunctionList<void()> &Callback, const std::map<int,std::string> &Name, const std::string &HelpBox, bool playerColoredButton, const std::string &defName, std::vector<std::string> * add, int x, int y, int key );
|
void init(const CFunctionList<void()> &Callback, const std::map<int,std::string> &Name, const std::string &HelpBox, bool playerColoredButton, const std::string &defName, std::vector<std::string> * add, int x, int y, int key );
|
||||||
|
|
||||||
void setIndex(size_t index, bool playerColoredButton=false);
|
void setIndex(size_t index, bool playerColoredButton=false);
|
||||||
void setImage(CAnimation* anim, bool playerColoredButton=false, int animFlags=0);
|
void setImage(Gfx::PAnimation anim, bool playerColoredButton=false, int animFlags=0);
|
||||||
void setPlayerColor(PlayerColor player);
|
void setPlayerColor(PlayerColor player);
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// A button which can be selected/deselected
|
/// A button which can be selected/deselected
|
||||||
@ -182,8 +181,8 @@ public:
|
|||||||
~CHighlightableButtonsGroup();
|
~CHighlightableButtonsGroup();
|
||||||
void select(int id, bool mode); //mode==0: id is serial; mode==1: id is unique button id
|
void select(int id, bool mode); //mode==0: id is serial; mode==1: id is unique button id
|
||||||
void selectionChanged(int to);
|
void selectionChanged(int to);
|
||||||
void show(SDL_Surface * to);
|
void show();
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
void block(ui8 on);
|
void block(ui8 on);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -214,7 +213,7 @@ public:
|
|||||||
void wheelScrolled(bool down, bool in);
|
void wheelScrolled(bool down, bool in);
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
|
|
||||||
CSlider(int x, int y, int totalw, boost::function<void(int)> Moved, int Capacity, int Amount,
|
CSlider(int x, int y, int totalw, boost::function<void(int)> Moved, int Capacity, int Amount,
|
||||||
int Value=0, bool Horizontal=true, int style = 0); //style 0 - brown, 1 - blue
|
int Value=0, bool Horizontal=true, int style = 0); //style 0 - brown, 1 - blue
|
||||||
@ -340,7 +339,7 @@ public:
|
|||||||
bool ignoreLeadingWhitespace;
|
bool ignoreLeadingWhitespace;
|
||||||
|
|
||||||
virtual void setTxt(const std::string &Txt);
|
virtual void setTxt(const std::string &Txt);
|
||||||
void showAll(SDL_Surface * to); //shows statusbar (with current text)
|
void showAll(); //shows statusbar (with current text)
|
||||||
CLabel(int x=0, int y=0, EFonts Font = FONT_SMALL, EAlignment Align = TOPLEFT, const SDL_Color &Color = Colors::WHITE, const std::string &Text = "");
|
CLabel(int x=0, int y=0, EFonts Font = FONT_SMALL, EAlignment Align = TOPLEFT, const SDL_Color &Color = Colors::WHITE, const std::string &Text = "");
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -358,7 +357,7 @@ public:
|
|||||||
void setTxt(const std::string &Txt);
|
void setTxt(const std::string &Txt);
|
||||||
void setBounds(int limitW, int limitH);
|
void setBounds(int limitW, int limitH);
|
||||||
virtual void recalculateLines(const std::string &Txt);
|
virtual void recalculateLines(const std::string &Txt);
|
||||||
void showAll(SDL_Surface * to);
|
void showAll();
|
||||||
};
|
};
|
||||||
|
|
||||||
//Small helper class to manage group of similar labels
|
//Small helper class to manage group of similar labels
|
||||||
@ -385,7 +384,7 @@ public:
|
|||||||
|
|
||||||
//CTextBox( std::string Text, const Point &Pos, int w, int h, EFonts Font = FONT_SMALL, EAlignment Align = TOPLEFT, const SDL_Color &Color = Colors::WHITE);
|
//CTextBox( std::string Text, const Point &Pos, int w, int h, EFonts Font = FONT_SMALL, EAlignment Align = TOPLEFT, const SDL_Color &Color = Colors::WHITE);
|
||||||
CTextBox(std::string Text, const Rect &rect, int SliderStyle, EFonts Font = FONT_SMALL, EAlignment Align = TOPLEFT, const SDL_Color &Color = Colors::WHITE);
|
CTextBox(std::string Text, const Rect &rect, int SliderStyle, EFonts Font = FONT_SMALL, EAlignment Align = TOPLEFT, const SDL_Color &Color = Colors::WHITE);
|
||||||
void showAll(SDL_Surface * to); //shows statusbar (with current text)
|
void showAll(); //shows statusbar (with current text)
|
||||||
void recalculateLines(const std::string &Txt);
|
void recalculateLines(const std::string &Txt);
|
||||||
|
|
||||||
void sliderMoved(int to);
|
void sliderMoved(int to);
|
||||||
@ -403,7 +402,7 @@ public:
|
|||||||
void print(const std::string & Text); //prints text and refreshes statusbar
|
void print(const std::string & Text); //prints text and refreshes statusbar
|
||||||
void clear();//clears statusbar and refreshes
|
void clear();//clears statusbar and refreshes
|
||||||
std::string getCurrent(); //returns currently displayed text
|
std::string getCurrent(); //returns currently displayed text
|
||||||
void show(SDL_Surface * to); //shows statusbar (with current text)
|
void show(); //shows statusbar (with current text)
|
||||||
|
|
||||||
//CGStatusBar(int x, int y, EFonts Font = FONT_SMALL, EAlignment Align = CENTER, const SDL_Color &Color = Colors::WHITE, const std::string &Text = "");
|
//CGStatusBar(int x, int y, EFonts Font = FONT_SMALL, EAlignment Align = CENTER, const SDL_Color &Color = Colors::WHITE, const std::string &Text = "");
|
||||||
CGStatusBar(CPicture *BG, EFonts Font = FONT_SMALL, EAlignment Align = CENTER, const SDL_Color &Color = Colors::WHITE); //given CPicture will be captured by created sbar and it's pos will be used as pos for sbar
|
CGStatusBar(CPicture *BG, EFonts Font = FONT_SMALL, EAlignment Align = CENTER, const SDL_Color &Color = Colors::WHITE); //given CPicture will be captured by created sbar and it's pos will be used as pos for sbar
|
||||||
@ -504,7 +503,7 @@ protected:
|
|||||||
//Used only if RCLICK_POPUP was set
|
//Used only if RCLICK_POPUP was set
|
||||||
void clickRight(tribool down, bool previousState);
|
void clickRight(tribool down, bool previousState);
|
||||||
//To display border
|
//To display border
|
||||||
void showAll(SDL_Surface *to);
|
void showAll();
|
||||||
//change or set background image
|
//change or set background image
|
||||||
void setBackground(std::string filename);
|
void setBackground(std::string filename);
|
||||||
void updateShadow();
|
void updateShadow();
|
||||||
|
242
client/UIFramework/GL2D.cpp
Normal file
242
client/UIFramework/GL2D.cpp
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
#include "StdInc.h"
|
||||||
|
#include <SDL.h>
|
||||||
|
#include <SDL_video.h>
|
||||||
|
#include "SDL_syswm.h"
|
||||||
|
#include <SDL_opengl.h>
|
||||||
|
#include "GL2D.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace GL2D
|
||||||
|
{
|
||||||
|
|
||||||
|
// Variables initialized by initVideo, updated by setScreenRes:
|
||||||
|
static SDL_SysWMinfo wmInfo;
|
||||||
|
ui32 screenWidth = 0, screenHeight = 0; // Screen/Window size
|
||||||
|
|
||||||
|
// OpenGL 1.3 functions pointers
|
||||||
|
PFNGLACTIVETEXTUREPROC glActiveTexture;
|
||||||
|
// OpenGL 2.0 functions pointers
|
||||||
|
PFNGLCREATEPROGRAMPROC glCreateProgram;
|
||||||
|
PFNGLCREATESHADERPROC glCreateShader;
|
||||||
|
PFNGLSHADERSOURCEPROC glShaderSource;
|
||||||
|
PFNGLCOMPILESHADERPROC glCompileShader;
|
||||||
|
PFNGLATTACHSHADERPROC glAttachShader;
|
||||||
|
PFNGLLINKPROGRAMPROC glLinkProgram;
|
||||||
|
PFNGLUSEPROGRAMPROC glUseProgram;
|
||||||
|
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
|
||||||
|
PFNGLUNIFORM1IPROC glUniform1i;
|
||||||
|
PFNGLUNIFORM2IPROC glUniform2i;
|
||||||
|
|
||||||
|
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
|
||||||
|
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
|
||||||
|
|
||||||
|
|
||||||
|
// Shaders' sources
|
||||||
|
static const char frag_palette_bitmap[] = (
|
||||||
|
"uniform usampler2DRect bitmap;"
|
||||||
|
"uniform sampler1D palette;"
|
||||||
|
"uniform ivec2 coordOffs;"
|
||||||
|
"layout (origin_upper_left) in vec4 gl_FragCoord;"
|
||||||
|
|
||||||
|
"void main(){"
|
||||||
|
"gl_FragColor = texelFetch(palette, int(texelFetch(bitmap, ivec2(gl_FragCoord.xy) - coordOffs).r), 0);"
|
||||||
|
"}"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Programs' handlers
|
||||||
|
static GLuint currentProgram = 0;
|
||||||
|
static GLuint colorizeProgram = 0;
|
||||||
|
static GLuint paletteBitmapProgram = 0;
|
||||||
|
|
||||||
|
// Uniforms handlers
|
||||||
|
static GLint coord_uniform = -1;
|
||||||
|
|
||||||
|
|
||||||
|
// Print out the information log for a shader object
|
||||||
|
void printInfoLog(PFNGLGETPROGRAMINFOLOGPROC logFunc, GLuint object)
|
||||||
|
{
|
||||||
|
if (logFunc != nullptr)
|
||||||
|
{
|
||||||
|
GLsizei infoLogLength = 0;
|
||||||
|
GLchar infoLog[1024];
|
||||||
|
logFunc(object, sizeof(infoLog)-1, &infoLogLength, infoLog);
|
||||||
|
|
||||||
|
if (infoLogLength > 0) tlog1 << infoLog;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GLuint makeShaderProgram(const char * frg_src)
|
||||||
|
{
|
||||||
|
// Creating a fragment shader object
|
||||||
|
GLuint shader_object = glCreateShader(GL_FRAGMENT_SHADER);
|
||||||
|
glShaderSource(shader_object, 1, &frg_src, nullptr); // assigning the shader source
|
||||||
|
// Compiling the shader
|
||||||
|
glCompileShader(shader_object);
|
||||||
|
printInfoLog(glGetShaderInfoLog, shader_object);
|
||||||
|
|
||||||
|
// Creating a program object
|
||||||
|
GLuint program_object = glCreateProgram();
|
||||||
|
// Attaching the shader into program
|
||||||
|
glAttachShader(program_object, shader_object);
|
||||||
|
|
||||||
|
// Link the shaders into a complete GLSL program.
|
||||||
|
glLinkProgram(program_object);
|
||||||
|
printInfoLog(glGetProgramInfoLog, program_object);
|
||||||
|
|
||||||
|
return program_object;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void initVideo(ui32 w, ui32 h, bool fullscreen)
|
||||||
|
{
|
||||||
|
SDL_VERSION(&wmInfo.version);
|
||||||
|
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||||
|
|
||||||
|
if (!setScreenRes(w, h, fullscreen))
|
||||||
|
{
|
||||||
|
throw std::runtime_error("Video mode setting failed\n");
|
||||||
|
}
|
||||||
|
glClearColor(0, 0, 0, 0); // Black Background
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
SDL_GL_SwapBuffers();
|
||||||
|
|
||||||
|
// Dynamic-linked OpenGL 1.3 and 2.0 functions - required to 2D rendeing
|
||||||
|
if ( (glActiveTexture = (PFNGLACTIVETEXTUREPROC) SDL_GL_GetProcAddress("glActiveTexture")) == nullptr
|
||||||
|
|| (glCreateProgram = (PFNGLCREATEPROGRAMPROC) SDL_GL_GetProcAddress("glCreateProgram")) == nullptr
|
||||||
|
|| (glCreateShader = (PFNGLCREATESHADERPROC) SDL_GL_GetProcAddress("glCreateShader")) == nullptr
|
||||||
|
|| (glShaderSource = (PFNGLSHADERSOURCEPROC) SDL_GL_GetProcAddress("glShaderSource")) == nullptr
|
||||||
|
|| (glCompileShader = (PFNGLCOMPILESHADERPROC) SDL_GL_GetProcAddress("glCompileShader")) == nullptr
|
||||||
|
|| (glAttachShader = (PFNGLATTACHSHADERPROC) SDL_GL_GetProcAddress("glAttachShader")) == nullptr
|
||||||
|
|| (glLinkProgram = (PFNGLLINKPROGRAMPROC) SDL_GL_GetProcAddress("glLinkProgram")) == nullptr
|
||||||
|
|| (glUseProgram = (PFNGLUSEPROGRAMPROC) SDL_GL_GetProcAddress("glUseProgram")) == nullptr
|
||||||
|
|| (glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) SDL_GL_GetProcAddress("glGetUniformLocation")) == nullptr
|
||||||
|
|| (glUniform1i = (PFNGLUNIFORM1IPROC) SDL_GL_GetProcAddress("glUniform1i")) == nullptr
|
||||||
|
|| (glUniform2i = (PFNGLUNIFORM2IPROC) SDL_GL_GetProcAddress("glUniform2i")) == nullptr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
tlog1 << "Error: OpenGL2 Extenstions are not available\n";
|
||||||
|
tlog1 << "SDL says: " << SDL_GetError() << std::endl;
|
||||||
|
throw std::runtime_error("OpenGL2 Extenstions are not available\n");
|
||||||
|
}
|
||||||
|
glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) SDL_GL_GetProcAddress("glGetProgramInfoLog"); // not required
|
||||||
|
glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) SDL_GL_GetProcAddress("glGetShaderInfoLog"); // not required
|
||||||
|
|
||||||
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
glDisable(GL_LIGHTING);
|
||||||
|
glDisable(GL_DITHER);
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
glEnable(GL_TEXTURE_RECTANGLE);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
paletteBitmapProgram = makeShaderProgram(frag_palette_bitmap);
|
||||||
|
GLint bitmap_uniform = glGetUniformLocation(paletteBitmapProgram, "bitmap");
|
||||||
|
GLint palette_uniform = glGetUniformLocation(paletteBitmapProgram, "palette");
|
||||||
|
coord_uniform = glGetUniformLocation(paletteBitmapProgram, "coordOffs");
|
||||||
|
|
||||||
|
glUseProgram(currentProgram = paletteBitmapProgram);
|
||||||
|
glUniform1i(bitmap_uniform, 0);
|
||||||
|
glUniform1i(palette_uniform, 1);
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
wglMakeCurrent(NULL, NULL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void attachToCurrentThread()
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
HDC hdc = GetDC(wmInfo.window);
|
||||||
|
wglMakeCurrent(hdc, wmInfo.hglrc);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool setScreenRes(ui32 w, ui32 h, bool fullscreen)
|
||||||
|
{
|
||||||
|
// Try to use the best screen depth for the display
|
||||||
|
int suggestedBpp = SDL_VideoModeOK(w, h, 32, SDL_OPENGL | SDL_ANYFORMAT | (fullscreen?SDL_FULLSCREEN:0));
|
||||||
|
if(suggestedBpp == 0)
|
||||||
|
{
|
||||||
|
tlog1 << "Error: SDL says that " << w << "x" << h << " resolution is not available!\n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(suggestedBpp != 32)
|
||||||
|
{
|
||||||
|
tlog2 << "Note: SDL suggests to use " << suggestedBpp << " bpp instead of 32 bpp\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(SDL_SetVideoMode(w, h, suggestedBpp, SDL_OPENGL | SDL_ANYFORMAT | (fullscreen?SDL_FULLSCREEN:0)) == NULL)
|
||||||
|
{
|
||||||
|
tlog1 << "Error: Video mode setting failed (" << w << "x" << h << "x" << suggestedBpp << "bpp)\n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
screenWidth = w; screenHeight = h;
|
||||||
|
|
||||||
|
int getwm = SDL_GetWMInfo(&wmInfo);
|
||||||
|
if(getwm != 1)
|
||||||
|
{
|
||||||
|
tlog2 << "Something went wrong, getwm=" << getwm << std::endl;
|
||||||
|
tlog2 << "SDL says: " << SDL_GetError() << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
glViewport(0, 0, w, h);
|
||||||
|
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
|
||||||
|
glLoadIdentity(); // Reset The Projection Matrix
|
||||||
|
glOrtho(0, w, h, 0, 0, 1);
|
||||||
|
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
|
||||||
|
glLoadIdentity(); // Reset The Modelview Matrix
|
||||||
|
glTranslatef(0.375, 0.375, 0); // Displacement trick for exact pixelization
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void assignTexture(ui32 slot, ui32 type, ui32 handle)
|
||||||
|
{
|
||||||
|
glActiveTexture(slot);
|
||||||
|
glBindTexture(type, handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void useNoShader()
|
||||||
|
{
|
||||||
|
if (currentProgram != 0) {
|
||||||
|
glUseProgram(currentProgram = 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void useColorizeShader(const float cm[4][4])
|
||||||
|
{
|
||||||
|
if (currentProgram != colorizeProgram) {
|
||||||
|
glUseProgram(currentProgram = colorizeProgram);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void usePaletteBitmapShader(si32 x, si32 y)
|
||||||
|
{
|
||||||
|
if (currentProgram != paletteBitmapProgram) {
|
||||||
|
glUseProgram(currentProgram = paletteBitmapProgram);
|
||||||
|
}
|
||||||
|
glUniform2i(coord_uniform, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void usePaletteBitmapShader(si32 x, si32 y, const float cm[4][4])
|
||||||
|
{
|
||||||
|
if (currentProgram != paletteBitmapProgram) {
|
||||||
|
glUseProgram(currentProgram = paletteBitmapProgram);
|
||||||
|
}
|
||||||
|
glUniform2i(coord_uniform, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
17
client/UIFramework/GL2D.h
Normal file
17
client/UIFramework/GL2D.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace GL2D
|
||||||
|
{
|
||||||
|
void initVideo(ui32 w, ui32 h, bool fullscreen);
|
||||||
|
void attachToCurrentThread();
|
||||||
|
bool setScreenRes(ui32 w, ui32 h, bool fullscreen);
|
||||||
|
|
||||||
|
inline ui32 getScreenWidth() { extern ui32 screenWidth; return screenWidth; };
|
||||||
|
inline ui32 getScreenHeight() { extern ui32 screenHeight; return screenHeight; };
|
||||||
|
|
||||||
|
void assignTexture(ui32 slot, ui32 type, ui32 handle);
|
||||||
|
void useNoShader();
|
||||||
|
void useColorizeShader(const float cm[4][4]);
|
||||||
|
void usePaletteBitmapShader(si32 x, si32 y);
|
||||||
|
void usePaletteBitmapShader(si32 x, si32 y, const float cm[4][4]);
|
||||||
|
}
|
@ -51,9 +51,9 @@ bool isItIn(const SDL_Rect * rect, int x, int y)
|
|||||||
|
|
||||||
void blitAt(SDL_Surface * src, int x, int y, SDL_Surface * dst)
|
void blitAt(SDL_Surface * src, int x, int y, SDL_Surface * dst)
|
||||||
{
|
{
|
||||||
if(!dst) dst = screen;
|
//if(!dst) dst = screen;
|
||||||
SDL_Rect pom = genRect(src->h,src->w,x,y);
|
//SDL_Rect pom = genRect(src->h,src->w,x,y);
|
||||||
CSDL_Ext::blitSurface(src,NULL,dst,&pom);
|
//CSDL_Ext::blitSurface(src,NULL,dst,&pom);
|
||||||
}
|
}
|
||||||
|
|
||||||
void blitAt(SDL_Surface * src, const SDL_Rect & pos, SDL_Surface * dst)
|
void blitAt(SDL_Surface * src, const SDL_Rect & pos, SDL_Surface * dst)
|
||||||
@ -81,6 +81,8 @@ void updateRect (SDL_Rect * rect, SDL_Surface * scr)
|
|||||||
SDL_Surface * CSDL_Ext::rotate01(SDL_Surface * toRot)
|
SDL_Surface * CSDL_Ext::rotate01(SDL_Surface * toRot)
|
||||||
{
|
{
|
||||||
SDL_Surface * ret = SDL_ConvertSurface(toRot, toRot->format, toRot->flags);
|
SDL_Surface * ret = SDL_ConvertSurface(toRot, toRot->format, toRot->flags);
|
||||||
|
if (ret == nullptr) return nullptr;
|
||||||
|
|
||||||
const int bpl = ret->pitch;
|
const int bpl = ret->pitch;
|
||||||
const int bpp = ret->format->BytesPerPixel;
|
const int bpp = ret->format->BytesPerPixel;
|
||||||
|
|
||||||
|
@ -33,12 +33,12 @@
|
|||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<PlatformToolset>v110_xp</PlatformToolset>
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
<PlatformToolset>v110</PlatformToolset>
|
<PlatformToolset>v110_xp</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>Application</ConfigurationType>
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
@ -103,7 +103,7 @@
|
|||||||
<PrecompiledHeaderFile>StdInc.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>StdInc.h</PrecompiledHeaderFile>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>SDL.lib;zlib.lib;SDL_image.lib;SDL_ttf.lib;SDL_mixer.lib;VCMI_lib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>SDL.lib;zlib.lib;opengl32.lib;SDL_image.lib;SDL_ttf.lib;SDL_mixer.lib;VCMI_lib.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<ShowProgress>NotSet</ShowProgress>
|
<ShowProgress>NotSet</ShowProgress>
|
||||||
<OptimizeReferences>false</OptimizeReferences>
|
<OptimizeReferences>false</OptimizeReferences>
|
||||||
<Profile>true</Profile>
|
<Profile>true</Profile>
|
||||||
@ -184,6 +184,11 @@
|
|||||||
<ClCompile Include="CQuestLog.cpp" />
|
<ClCompile Include="CQuestLog.cpp" />
|
||||||
<ClCompile Include="CSpellWindow.cpp" />
|
<ClCompile Include="CSpellWindow.cpp" />
|
||||||
<ClCompile Include="CVideoHandler.cpp" />
|
<ClCompile Include="CVideoHandler.cpp" />
|
||||||
|
<ClCompile Include="Gfx\Animations.cpp" />
|
||||||
|
<ClCompile Include="Gfx\CPaletteRGBA.cpp" />
|
||||||
|
<ClCompile Include="Gfx\Images.cpp" />
|
||||||
|
<ClCompile Include="Gfx\ImgMakers.cpp" />
|
||||||
|
<ClCompile Include="Gfx\Manager.cpp" />
|
||||||
<ClCompile Include="Graphics.cpp" />
|
<ClCompile Include="Graphics.cpp" />
|
||||||
<ClCompile Include="GUIClasses.cpp" />
|
<ClCompile Include="GUIClasses.cpp" />
|
||||||
<ClCompile Include="mapHandler.cpp" />
|
<ClCompile Include="mapHandler.cpp" />
|
||||||
@ -201,6 +206,7 @@
|
|||||||
<ClCompile Include="UIFramework\CIntObjectClasses.cpp" />
|
<ClCompile Include="UIFramework\CIntObjectClasses.cpp" />
|
||||||
<ClCompile Include="UIFramework\Fonts.cpp" />
|
<ClCompile Include="UIFramework\Fonts.cpp" />
|
||||||
<ClCompile Include="UIFramework\Geometries.cpp" />
|
<ClCompile Include="UIFramework\Geometries.cpp" />
|
||||||
|
<ClCompile Include="UIFramework\GL2D.cpp" />
|
||||||
<ClCompile Include="UIFramework\SDL_Extensions.cpp" />
|
<ClCompile Include="UIFramework\SDL_Extensions.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -231,6 +237,11 @@
|
|||||||
<ClInclude Include="CVideoHandler.h" />
|
<ClInclude Include="CVideoHandler.h" />
|
||||||
<ClInclude Include="FontBase.h" />
|
<ClInclude Include="FontBase.h" />
|
||||||
<ClInclude Include="FunctionList.h" />
|
<ClInclude Include="FunctionList.h" />
|
||||||
|
<ClInclude Include="Gfx\Animations.h" />
|
||||||
|
<ClInclude Include="Gfx\CPaletteRGBA.h" />
|
||||||
|
<ClInclude Include="Gfx\Images.h" />
|
||||||
|
<ClInclude Include="Gfx\FilesHeaders.h" />
|
||||||
|
<ClInclude Include="Gfx\Manager.h" />
|
||||||
<ClInclude Include="Graphics.h" />
|
<ClInclude Include="Graphics.h" />
|
||||||
<ClInclude Include="GUIClasses.h" />
|
<ClInclude Include="GUIClasses.h" />
|
||||||
<ClInclude Include="mapHandler.h" />
|
<ClInclude Include="mapHandler.h" />
|
||||||
@ -242,6 +253,7 @@
|
|||||||
<ClInclude Include="UIFramework\CIntObjectClasses.h" />
|
<ClInclude Include="UIFramework\CIntObjectClasses.h" />
|
||||||
<ClInclude Include="UIFramework\Fonts.h" />
|
<ClInclude Include="UIFramework\Fonts.h" />
|
||||||
<ClInclude Include="UIFramework\Geometries.h" />
|
<ClInclude Include="UIFramework\Geometries.h" />
|
||||||
|
<ClInclude Include="UIFramework\GL2D.h" />
|
||||||
<ClInclude Include="UIFramework\SDL_Extensions.h" />
|
<ClInclude Include="UIFramework\SDL_Extensions.h" />
|
||||||
<ClInclude Include="UIFramework\SDL_Pixels.h" />
|
<ClInclude Include="UIFramework\SDL_Pixels.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -30,13 +30,37 @@
|
|||||||
<ClCompile Include="NetPacksClient.cpp" />
|
<ClCompile Include="NetPacksClient.cpp" />
|
||||||
<ClCompile Include="StdInc.cpp" />
|
<ClCompile Include="StdInc.cpp" />
|
||||||
<ClCompile Include="UIFramework\CCursorHandler.cpp" />
|
<ClCompile Include="UIFramework\CCursorHandler.cpp" />
|
||||||
<ClCompile Include="UIFramework\CGuiHandler.cpp" />
|
|
||||||
<ClCompile Include="UIFramework\CIntObject.cpp" />
|
|
||||||
<ClCompile Include="UIFramework\CIntObjectClasses.cpp" />
|
|
||||||
<ClCompile Include="UIFramework\Geometries.cpp" />
|
<ClCompile Include="UIFramework\Geometries.cpp" />
|
||||||
<ClCompile Include="UIFramework\SDL_Extensions.cpp" />
|
<ClCompile Include="UIFramework\SDL_Extensions.cpp" />
|
||||||
<ClCompile Include="CQuestLog.cpp" />
|
<ClCompile Include="CQuestLog.cpp" />
|
||||||
<ClCompile Include="UIFramework\Fonts.cpp" />
|
<ClCompile Include="UIFramework\Fonts.cpp" />
|
||||||
|
<ClCompile Include="Gfx\Animations.cpp">
|
||||||
|
<Filter>Gfx</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="Gfx\Images.cpp">
|
||||||
|
<Filter>Gfx</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="Gfx\ImgMakers.cpp">
|
||||||
|
<Filter>Gfx</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="Gfx\CPaletteRGBA.cpp">
|
||||||
|
<Filter>Gfx</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="Gfx\Manager.cpp">
|
||||||
|
<Filter>Gfx</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="UIFramework\CIntObjectClasses.cpp">
|
||||||
|
<Filter>UIFramework</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="UIFramework\CIntObject.cpp">
|
||||||
|
<Filter>UIFramework</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="UIFramework\GL2D.cpp">
|
||||||
|
<Filter>UIFramework</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="UIFramework\CGuiHandler.cpp">
|
||||||
|
<Filter>UIFramework</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\Global.h" />
|
<ClInclude Include="..\Global.h" />
|
||||||
@ -70,8 +94,6 @@
|
|||||||
<ClInclude Include="resource.h" />
|
<ClInclude Include="resource.h" />
|
||||||
<ClInclude Include="StdInc.h" />
|
<ClInclude Include="StdInc.h" />
|
||||||
<ClInclude Include="UIFramework\CCursorHandler.h" />
|
<ClInclude Include="UIFramework\CCursorHandler.h" />
|
||||||
<ClInclude Include="UIFramework\CGuiHandler.h" />
|
|
||||||
<ClInclude Include="UIFramework\CIntObject.h" />
|
|
||||||
<ClInclude Include="UIFramework\CIntObjectClasses.h" />
|
<ClInclude Include="UIFramework\CIntObjectClasses.h" />
|
||||||
<ClInclude Include="UIFramework\Geometries.h" />
|
<ClInclude Include="UIFramework\Geometries.h" />
|
||||||
<ClInclude Include="UIFramework\SDL_Extensions.h" />
|
<ClInclude Include="UIFramework\SDL_Extensions.h" />
|
||||||
@ -82,6 +104,30 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClInclude Include="mapHandler.h" />
|
<ClInclude Include="mapHandler.h" />
|
||||||
<ClInclude Include="UIFramework\Fonts.h" />
|
<ClInclude Include="UIFramework\Fonts.h" />
|
||||||
|
<ClInclude Include="Gfx\Animations.h">
|
||||||
|
<Filter>Gfx</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="Gfx\Images.h">
|
||||||
|
<Filter>Gfx</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="Gfx\FilesHeaders.h">
|
||||||
|
<Filter>Gfx</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="Gfx\CPaletteRGBA.h">
|
||||||
|
<Filter>Gfx</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="Gfx\Manager.h">
|
||||||
|
<Filter>Gfx</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="UIFramework\CIntObject.h">
|
||||||
|
<Filter>UIFramework</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="UIFramework\GL2D.h">
|
||||||
|
<Filter>UIFramework</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="UIFramework\CGuiHandler.h">
|
||||||
|
<Filter>UIFramework</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="VCMI_client.rc" />
|
<ResourceCompile Include="VCMI_client.rc" />
|
||||||
@ -93,4 +139,12 @@
|
|||||||
<None Include="..\ChangeLog" />
|
<None Include="..\ChangeLog" />
|
||||||
<None Include="vcmi.ico" />
|
<None Include="vcmi.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Gfx">
|
||||||
|
<UniqueIdentifier>{215917eb-e8a3-400a-8e1a-d027a532bf3d}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="UIFramework">
|
||||||
|
<UniqueIdentifier>{1ffcd26b-1f6e-4274-8245-3572b26afed5}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -90,7 +90,7 @@ std::unique_ptr<CInputStream> CResourceLoader::load(const ResourceID & resourceI
|
|||||||
const ResourceLocator & locator = resource->second.back();
|
const ResourceLocator & locator = resource->second.back();
|
||||||
|
|
||||||
// load the resource and return it
|
// load the resource and return it
|
||||||
return locator.getLoader()->load(locator.getResourceName());
|
return locator.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<std::unique_ptr<ui8[]>, ui64> CResourceLoader::loadData(const ResourceID & resourceIdent) const
|
std::pair<std::unique_ptr<ui8[]>, ui64> CResourceLoader::loadData(const ResourceID & resourceIdent) const
|
||||||
@ -201,20 +201,9 @@ CResourceLoader * CResourceHandler::get()
|
|||||||
// CResourceLoaderFactory::resourceLoader = resourceLoader;
|
// CResourceLoaderFactory::resourceLoader = resourceLoader;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
ResourceLocator::ResourceLocator(ISimpleResourceLoader * loader, const std::string & resourceName)
|
std::unique_ptr<CInputStream> ResourceLocator::load() const
|
||||||
: loader(loader), resourceName(resourceName)
|
|
||||||
{
|
{
|
||||||
|
return loader->load(resourceName);
|
||||||
}
|
|
||||||
|
|
||||||
ISimpleResourceLoader * ResourceLocator::getLoader() const
|
|
||||||
{
|
|
||||||
return loader;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string ResourceLocator::getResourceName() const
|
|
||||||
{
|
|
||||||
return resourceName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EResType::Type EResTypeHelper::getTypeFromExtension(std::string extension)
|
EResType::Type EResTypeHelper::getTypeFromExtension(std::string extension)
|
||||||
|
@ -409,21 +409,31 @@ public:
|
|||||||
* @param archive A pointer to the resource archive object.
|
* @param archive A pointer to the resource archive object.
|
||||||
* @param resourceName Unique resource name in the space of the given resource archive.
|
* @param resourceName Unique resource name in the space of the given resource archive.
|
||||||
*/
|
*/
|
||||||
ResourceLocator(ISimpleResourceLoader * loader, const std::string & resourceName);
|
inline ResourceLocator(ISimpleResourceLoader * ldr, const std::string & resName)
|
||||||
|
: loader(ldr), resourceName(resName) {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a pointer to the resource loader object.
|
* Gets a pointer to the resource loader object.
|
||||||
*
|
*
|
||||||
* @return a pointer to the resource loader object
|
* @return a pointer to the resource loader object
|
||||||
*/
|
*/
|
||||||
ISimpleResourceLoader * getLoader() const;
|
inline ISimpleResourceLoader * getLoader() const { return loader; };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the resource name.
|
* Gets the resource name.
|
||||||
*
|
*
|
||||||
* @return the resource name.
|
* @return the resource name.
|
||||||
*/
|
*/
|
||||||
std::string getResourceName() const;
|
inline std::string getResourceName() const { return resourceName; };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the resource.
|
||||||
|
*
|
||||||
|
* @return a pointer to the input stream, not null
|
||||||
|
*
|
||||||
|
* @throws std::runtime_error if the resource doesn't exists
|
||||||
|
*/
|
||||||
|
std::unique_ptr<CInputStream> load() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<PlatformToolset>v110_xp</PlatformToolset>
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
Reference in New Issue
Block a user