mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-29 21:56:54 +02:00
Change to time-based frame counting, easier than I though
This commit is contained in:
parent
cbddf2d8fb
commit
7dd7f4af54
@ -44,10 +44,10 @@
|
|||||||
|
|
||||||
CBuildingRect::CBuildingRect(CCastleBuildings * Par, const CGTownInstance * Town, const CStructure * Str)
|
CBuildingRect::CBuildingRect(CCastleBuildings * Par, const CGTownInstance * Town, const CStructure * Str)
|
||||||
: CShowableAnim(0, 0, Str->defName, CShowableAnim::BASE),
|
: CShowableAnim(0, 0, Str->defName, CShowableAnim::BASE),
|
||||||
parent(Par),
|
parent(Par),
|
||||||
town(Town),
|
town(Town),
|
||||||
str(Str),
|
str(Str),
|
||||||
stateCounter(150)
|
stateTimeCounter(2500)
|
||||||
{
|
{
|
||||||
addUsedEvents(LCLICK | RCLICK | HOVER);
|
addUsedEvents(LCLICK | RCLICK | HOVER);
|
||||||
pos.x += str->pos.x;
|
pos.x += str->pos.x;
|
||||||
@ -154,16 +154,16 @@ SDL_Color multiplyColors(const SDL_Color & b, const SDL_Color & a, double f)
|
|||||||
|
|
||||||
void CBuildingRect::show(SDL_Surface * to)
|
void CBuildingRect::show(SDL_Surface * to)
|
||||||
{
|
{
|
||||||
const ui32 stageDelay = 30;
|
const ui32 stageDelay = 500;
|
||||||
|
|
||||||
const ui32 S1_TRANSP = 30; //0.5 sec building appear 0->100 transparency
|
const ui32 S1_TRANSP = 500; //500 msec building appear 0->100 transparency
|
||||||
const ui32 S2_WHITE_B = 60; //0.5 sec border glows from white to yellow
|
const ui32 S2_WHITE_B = 1000; //500 msec border glows from white to yellow
|
||||||
const ui32 S3_YELLOW_B= 90; //0.5 sec border glows from yellow to normal
|
const ui32 S3_YELLOW_B= 1500; //500 msec border glows from yellow to normal
|
||||||
const ui32 BUILDED = 150; // 1 sec delay, nothing happens
|
const ui32 BUILDED = 2500; //1000 msec delay, nothing happens
|
||||||
|
|
||||||
if(stateCounter < S1_TRANSP)
|
if(stateTimeCounter < S1_TRANSP)
|
||||||
{
|
{
|
||||||
setAlpha(255*stateCounter/stageDelay);
|
setAlpha(255 * stateTimeCounter / stageDelay);
|
||||||
CShowableAnim::show(to);
|
CShowableAnim::show(to);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -172,9 +172,9 @@ void CBuildingRect::show(SDL_Surface * to)
|
|||||||
CShowableAnim::show(to);
|
CShowableAnim::show(to);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(border && stateCounter > S1_TRANSP)
|
if(border && stateTimeCounter > S1_TRANSP)
|
||||||
{
|
{
|
||||||
if(stateCounter == BUILDED)
|
if(stateTimeCounter >= BUILDED)
|
||||||
{
|
{
|
||||||
if(parent->selectedBuilding == this)
|
if(parent->selectedBuilding == this)
|
||||||
blitAtLoc(border,0,0,to);
|
blitAtLoc(border,0,0,to);
|
||||||
@ -191,11 +191,11 @@ void CBuildingRect::show(SDL_Surface * to)
|
|||||||
SDL_Color oldColor = border->format->palette->colors[colorID];
|
SDL_Color oldColor = border->format->palette->colors[colorID];
|
||||||
SDL_Color newColor;
|
SDL_Color newColor;
|
||||||
|
|
||||||
if (stateCounter < S2_WHITE_B)
|
if (stateTimeCounter < S2_WHITE_B)
|
||||||
newColor = multiplyColors(c1, c2, static_cast<double>(stateCounter % stageDelay) / stageDelay);
|
newColor = multiplyColors(c1, c2, static_cast<double>(stateTimeCounter % stageDelay) / stageDelay);
|
||||||
else
|
else
|
||||||
if (stateCounter < S3_YELLOW_B)
|
if (stateTimeCounter < S3_YELLOW_B)
|
||||||
newColor = multiplyColors(c2, c3, static_cast<double>(stateCounter % stageDelay) / stageDelay);
|
newColor = multiplyColors(c2, c3, static_cast<double>(stateTimeCounter % stageDelay) / stageDelay);
|
||||||
else
|
else
|
||||||
newColor = oldColor;
|
newColor = oldColor;
|
||||||
|
|
||||||
@ -204,13 +204,13 @@ void CBuildingRect::show(SDL_Surface * to)
|
|||||||
SDL_SetColors(border, &oldColor, colorID, 1);
|
SDL_SetColors(border, &oldColor, colorID, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(stateCounter < BUILDED)
|
if(stateTimeCounter < BUILDED)
|
||||||
stateCounter++;
|
stateTimeCounter += GH.mainFPSmng->getElapsedMilliseconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBuildingRect::showAll(SDL_Surface * to)
|
void CBuildingRect::showAll(SDL_Surface * to)
|
||||||
{
|
{
|
||||||
if (stateCounter == 0)
|
if (stateTimeCounter == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CShowableAnim::showAll(to);
|
CShowableAnim::showAll(to);
|
||||||
@ -632,9 +632,9 @@ void CCastleBuildings::addBuilding(BuildingID building)
|
|||||||
{
|
{
|
||||||
//reset animation
|
//reset animation
|
||||||
if(structures.size() == 1)
|
if(structures.size() == 1)
|
||||||
buildingRect->stateCounter = 0; // transparency -> fully visible stage
|
buildingRect->stateTimeCounter = 0; // transparency -> fully visible stage
|
||||||
else
|
else
|
||||||
buildingRect->stateCounter = 16; // already in fully visible stage
|
buildingRect->stateTimeCounter = 500; // already in fully visible stage
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ public:
|
|||||||
SDL_Surface* border;
|
SDL_Surface* border;
|
||||||
SDL_Surface* area;
|
SDL_Surface* area;
|
||||||
|
|
||||||
ui32 stateCounter;//For building construction - current stage in animation
|
ui32 stateTimeCounter;//For building construction - current stage in animation
|
||||||
|
|
||||||
CBuildingRect(CCastleBuildings * Par, const CGTownInstance *Town, const CStructure *Str);
|
CBuildingRect(CCastleBuildings * Par, const CGTownInstance *Town, const CStructure *Str);
|
||||||
~CBuildingRect();
|
~CBuildingRect();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user