1
0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-06-23 13:08:30 +02:00
VVVVVV/desktop_version/src/Textbox.cpp
Misa 0127a84698 Move text box fadeout removal to Graphics::drawgui()
Something that's slightly annoying is that in order to make the vector
of text boxes be properly used, the text box cannot remove itself.
Because the text box does not know it's in a vector. So move the removal
of the text box to drawgui() instead.
2020-04-03 23:28:47 -04:00

157 lines
2.6 KiB
C++

#include "Textbox.h"
#include <utf8/unchecked.h>
textboxclass::textboxclass()
{
firstcreate();
}
void textboxclass::firstcreate()
{
//Like clear, only it creates the actual arrays, etc
for (int iter = 0; iter < 10; iter++)
{
std::string t;
t = "";
line.push_back(t);
}
x = 0;
y = 0;
w = 0;
h = 0;
numlines = 0;
lw = 0;
tl = 0;
tm = 0;
active = false;
timer = 0;
}
void textboxclass::clear()
{
//Set all values to a default, required for creating a new entity
for (size_t iter = 0; iter < line.size(); iter++)
{
line[iter]="";
}
xp = 0;
yp = 0;
w = 0;
h = 0;
numlines = 1;
lw = 0;
tl = 0;
tm = 0;
active = true;
timer = 0;
}
void textboxclass::centerx()
{
resize();
xp = 160 - (w / 2);
resize();
}
void textboxclass::centery()
{
resize();
yp = 120 - (h / 2);
resize();
}
void textboxclass::adjust()
{
resize();
if (xp < 10) xp = 10;
if (yp < 10) yp = 10;
if (xp + w > 310) xp = 310 - w;
if (yp + h > 230) yp = 230 - h;
resize();
}
void textboxclass::initcol(int rr, int gg, int bb)
{
tr = rr;
tg = gg;
tb = bb;
r = 0;
g = 0;
b = 0;
tl = 0.5;
}
void textboxclass::setcol(int rr, int gg, int bb)
{
r = rr;
g = gg;
b = bb;
}
void textboxclass::update()
{
if (tm == 0)
{
tl += .1f;
if (tl >= 1)
{
tl = 1;
tm = 1;
}
setcol(int(tr * tl), int(tg * tl), int(tb * tl));
}
else if (tm == 2)
{
tl -= .1f;
if (tl <= 0.5)
{
tl = 0.5;
//this textbox will be removed by drawgui() later
}
setcol(int(tr * tl), int(tg * tl), int(tb * tl));
}
if (timer > 0)
{
timer--;
if (timer == 0) tm = 2;
}
}
void textboxclass::remove()
{
tm = 2;
tl = 1.0f; //Remove mode
}
void textboxclass::removefast()
{
tm = 2;
tl = 0.4f; //Remove mode
}
void textboxclass::resize()
{
//Set the width and height to the correct sizes
max = 0;
for (int iter = 0; iter < numlines; iter++)
{
unsigned int len = utf8::unchecked::distance(line[iter].begin(), line[iter].end());
if (len > (unsigned int)max) max = len;
}
lw = max;
w = (max +2) * 8;
h = (numlines + 2) * 8;
textrect.x = xp;
textrect.y = yp;
textrect.w = w;
textrect.h = h;
}
void textboxclass::addline(std::string t)
{
line[numlines] = t;
numlines++;
resize();
if (numlines >= 12) numlines = 0;
}