mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
* better fix for #184 (should fix all related issues)
* fixed #214, #121, #100
This commit is contained in:
parent
a6f61e33bd
commit
4151310be6
@ -434,7 +434,7 @@ void CMinimap::show( SDL_Surface * to )
|
||||
}
|
||||
|
||||
CTerrainRect::CTerrainRect()
|
||||
:currentPath(NULL)
|
||||
:currentPath(NULL), curHoveredTile(-1,-1,-1)
|
||||
{
|
||||
tilesw=(ADVOPT.advmapW+31)/32;
|
||||
tilesh=(ADVOPT.advmapH+31)/32;
|
||||
@ -466,6 +466,7 @@ void CTerrainRect::deactivate()
|
||||
deactivateRClick();
|
||||
deactivateHover();
|
||||
deactivateMouseMove();
|
||||
curHoveredTile = int3(-1,-1,-1); //we lost info about hovered tile when disabling
|
||||
};
|
||||
void CTerrainRect::clickLeft(tribool down, bool previousState)
|
||||
{
|
||||
@ -564,10 +565,12 @@ void CTerrainRect::clickRight(tribool down, bool previousState)
|
||||
return;
|
||||
|
||||
std::vector < const CGObjectInstance * > objs = LOCPLINT->cb->getBlockingObjs(mp);
|
||||
if(!objs.size()) {
|
||||
if(!objs.size())
|
||||
{
|
||||
// Bare or undiscovered terrain
|
||||
const TerrainTile * tile = LOCPLINT->cb->getTileInfo(mp);
|
||||
if (tile) {
|
||||
if (tile)
|
||||
{
|
||||
CSimpleWindow * temp = CMessage::genWindow(VLC->generaltexth->terrainNames[tile->tertype],LOCPLINT->playerID,true);
|
||||
CRClickPopupInt *rcpi = new CRClickPopupInt(temp,true);
|
||||
GH.pushInt(rcpi);
|
||||
@ -1410,7 +1413,9 @@ void CInfoBar::newDay(int Day)
|
||||
}
|
||||
}
|
||||
pom = 0;
|
||||
if(!(active & TIME))
|
||||
activateTimer();
|
||||
|
||||
toNextTick = 500;
|
||||
blitAnim(mode);
|
||||
}
|
||||
@ -1459,6 +1464,18 @@ void CInfoBar::show( SDL_Surface * to )
|
||||
|
||||
}
|
||||
|
||||
void CInfoBar::activate()
|
||||
{
|
||||
//CIntObject::activate();
|
||||
}
|
||||
|
||||
void CInfoBar::deactivate()
|
||||
{
|
||||
//CIntObject::deactivate();
|
||||
if(active & TIME)
|
||||
deactivateTimer();
|
||||
}
|
||||
|
||||
CAdvMapInt::CAdvMapInt(int Player)
|
||||
:player(Player),
|
||||
statusbar(ADVOPT.statusbarX,ADVOPT.statusbarY,ADVOPT.statusbarG),
|
||||
@ -1643,8 +1660,10 @@ void CAdvMapInt::activate()
|
||||
heroList.activate();
|
||||
townList.activate();
|
||||
terrain.activate();
|
||||
infoBar.activate();
|
||||
|
||||
LOCPLINT->cingconsole->activate();
|
||||
GH.fakeMouseMove(); //to restore the cursor
|
||||
}
|
||||
void CAdvMapInt::deactivate()
|
||||
{
|
||||
@ -1666,7 +1685,6 @@ void CAdvMapInt::deactivate()
|
||||
heroList.deactivate();
|
||||
townList.deactivate();
|
||||
terrain.deactivate();
|
||||
if(std::find(GH.timeinterested.begin(),GH.timeinterested.end(),&infoBar)!=GH.timeinterested.end())
|
||||
infoBar.deactivate();
|
||||
infoBar.mode=-1;
|
||||
|
||||
|
@ -127,6 +127,8 @@ public:
|
||||
void blitAnim(int mode);//0 - day, 1 - week
|
||||
CDefHandler * getAnim(int mode);
|
||||
void show(SDL_Surface * to);
|
||||
void activate();
|
||||
void deactivate();
|
||||
};
|
||||
/*****************************/
|
||||
class CAdvMapInt : public CIntObject //adventure map interface
|
||||
|
@ -1522,6 +1522,10 @@ void CBattleInterface::show(SDL_Surface * to)
|
||||
|
||||
if(preSize > 0 && pendingAnims.size() == 0)
|
||||
{
|
||||
//action finished, restore the interface
|
||||
if(!active)
|
||||
activate();
|
||||
|
||||
//restoring good directions of stacks
|
||||
for(std::map<int, CStack>::const_iterator it = stacks.begin(); it != stacks.end(); ++it)
|
||||
{
|
||||
@ -1704,7 +1708,7 @@ void CBattleInterface::mouseMoved(const SDL_MouseMotionEvent &sEvent)
|
||||
CGI->curh->changeGraphic(1,3);
|
||||
//setting console text
|
||||
char buf[500];
|
||||
//calculating esimated dmg
|
||||
//calculating estimated dmg
|
||||
std::pair<ui32, ui32> estimatedDmg = LOCPLINT->cb->battleEstimateDamage(sactive->ID, shere->ID);
|
||||
std::ostringstream estDmg;
|
||||
estDmg << estimatedDmg.first << " - " << estimatedDmg.second;
|
||||
@ -1738,16 +1742,21 @@ void CBattleInterface::mouseMoved(const SDL_MouseMotionEvent &sEvent)
|
||||
|
||||
// Exclude directions which cannot be attacked from.
|
||||
// Check to the left.
|
||||
if (myNumber%BFIELD_WIDTH <= 1 || !vstd::contains(shadedHexes, myNumber - 1)) {
|
||||
if (myNumber%BFIELD_WIDTH <= 1 || !vstd::contains(shadedHexes, myNumber - 1))
|
||||
{
|
||||
sectorCursor[0] = -1;
|
||||
}
|
||||
// Check top left, top right as well as above for 2-hex creatures.
|
||||
if (myNumber/BFIELD_WIDTH == 0) {
|
||||
if (myNumber/BFIELD_WIDTH == 0)
|
||||
{
|
||||
sectorCursor[1] = -1;
|
||||
sectorCursor[2] = -1;
|
||||
aboveAttackable = false;
|
||||
} else {
|
||||
if (doubleWide) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (doubleWide)
|
||||
{
|
||||
bool attackRow[4] = {true, true, true, true};
|
||||
|
||||
if (myNumber%BFIELD_WIDTH <= 1 || !vstd::contains(shadedHexes, myNumber - BFIELD_WIDTH - 2 + zigzagCorrection))
|
||||
@ -1765,7 +1774,9 @@ void CBattleInterface::mouseMoved(const SDL_MouseMotionEvent &sEvent)
|
||||
aboveAttackable = false;
|
||||
if (!(attackRow[2] && attackRow[3]))
|
||||
sectorCursor[2] = -1;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!vstd::contains(shadedHexes, myNumber - BFIELD_WIDTH - 1 + zigzagCorrection))
|
||||
sectorCursor[1] = -1;
|
||||
if (!vstd::contains(shadedHexes, myNumber - BFIELD_WIDTH + zigzagCorrection))
|
||||
@ -1773,16 +1784,21 @@ void CBattleInterface::mouseMoved(const SDL_MouseMotionEvent &sEvent)
|
||||
}
|
||||
}
|
||||
// Check to the right.
|
||||
if (myNumber%BFIELD_WIDTH >= BFIELD_WIDTH - 2 || !vstd::contains(shadedHexes, myNumber + 1)) {
|
||||
if (myNumber%BFIELD_WIDTH >= BFIELD_WIDTH - 2 || !vstd::contains(shadedHexes, myNumber + 1))
|
||||
{
|
||||
sectorCursor[3] = -1;
|
||||
}
|
||||
// Check bottom right, bottom left as well as below for 2-hex creatures.
|
||||
if (myNumber/BFIELD_WIDTH == BFIELD_HEIGHT - 1) {
|
||||
if (myNumber/BFIELD_WIDTH == BFIELD_HEIGHT - 1)
|
||||
{
|
||||
sectorCursor[4] = -1;
|
||||
sectorCursor[5] = -1;
|
||||
belowAttackable = false;
|
||||
} else {
|
||||
if (doubleWide) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (doubleWide)
|
||||
{
|
||||
bool attackRow[4] = {true, true, true, true};
|
||||
|
||||
if (myNumber%BFIELD_WIDTH <= 1 || !vstd::contains(shadedHexes, myNumber + BFIELD_WIDTH - 2 + zigzagCorrection))
|
||||
@ -1800,7 +1816,9 @@ void CBattleInterface::mouseMoved(const SDL_MouseMotionEvent &sEvent)
|
||||
belowAttackable = false;
|
||||
if (!(attackRow[2] && attackRow[3]))
|
||||
sectorCursor[4] = -1;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!vstd::contains(shadedHexes, myNumber + BFIELD_WIDTH + zigzagCorrection))
|
||||
sectorCursor[4] = -1;
|
||||
if (!vstd::contains(shadedHexes, myNumber + BFIELD_WIDTH - 1 + zigzagCorrection))
|
||||
@ -1810,7 +1828,8 @@ void CBattleInterface::mouseMoved(const SDL_MouseMotionEvent &sEvent)
|
||||
|
||||
// Determine index from sector.
|
||||
int cursorIndex;
|
||||
if (doubleWide) {
|
||||
if (doubleWide)
|
||||
{
|
||||
sectorCursor.insert(sectorCursor.begin() + 5, belowAttackable ? 13 : -1);
|
||||
sectorCursor.insert(sectorCursor.begin() + 2, aboveAttackable ? 14 : -1);
|
||||
|
||||
@ -1824,7 +1843,9 @@ void CBattleInterface::mouseMoved(const SDL_MouseMotionEvent &sEvent)
|
||||
cursorIndex = 6;
|
||||
else
|
||||
cursorIndex = (int) sector + 2;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
cursorIndex = sector;
|
||||
}
|
||||
|
||||
@ -1837,7 +1858,7 @@ void CBattleInterface::mouseMoved(const SDL_MouseMotionEvent &sEvent)
|
||||
|
||||
//setting console info
|
||||
char buf[500];
|
||||
//calculating esimated dmg
|
||||
//calculating estimated dmg
|
||||
std::pair<ui32, ui32> estimatedDmg = LOCPLINT->cb->battleEstimateDamage(sactive->ID, shere->ID);
|
||||
std::ostringstream estDmg;
|
||||
estDmg << estimatedDmg.first << " - " << estimatedDmg.second;
|
||||
@ -1985,9 +2006,6 @@ void CBattleInterface::clickRight(tribool down, bool previousState)
|
||||
|
||||
void CBattleInterface::bOptionsf()
|
||||
{
|
||||
if(activeStack < 0) //workaround to prevent crashing calls in the middle of movement (action)
|
||||
return; //TODO: disable options button during action (other buttons should be disabled as well)
|
||||
|
||||
if(spellDestSelectMode) //we are casting a spell
|
||||
return;
|
||||
|
||||
@ -2726,6 +2744,9 @@ void CBattleInterface::activateStack()
|
||||
bSpell->block(!defendingHeroInstance->getArt(17));
|
||||
}
|
||||
GH.fakeMouseMove();
|
||||
|
||||
if(!pendingAnims.size() && !active)
|
||||
activate();
|
||||
}
|
||||
|
||||
float CBattleInterface::getAnimSpeedMultiplier() const
|
||||
@ -3008,9 +3029,9 @@ void CBattleInterface::projectileShowHelper(SDL_Surface * to)
|
||||
void CBattleInterface::endAction(const BattleAction* action)
|
||||
{
|
||||
//if((action->actionType==2 || (action->actionType==6 && action->destinationTile!=cb->battleGetPos(action->stackNumber)))) //activating interface when move is finished
|
||||
{
|
||||
activate();
|
||||
}
|
||||
// {
|
||||
// activate();
|
||||
// }
|
||||
if(action->actionType == 1)
|
||||
{
|
||||
if(action->side)
|
||||
@ -3076,7 +3097,7 @@ void CBattleInterface::startAction(const BattleAction* action)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(active)
|
||||
deactivate();
|
||||
|
||||
char txt[400];
|
||||
|
Loading…
Reference in New Issue
Block a user