mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-22 09:39:43 +01:00
Store original position of text box
This stores the original x-position and y-position of the text box, and when a text box gets repositioned, it will use those unless a crewmate position overrides it. This is the original position of the text box, before centering or crewmate position is considered. This fixes a bug where a cutscene text box can be "shifted" from its normal position via CTRL+F8 cycling if there is a translation that is too long for the screen and thus gets pushed by adjust(). I tested this with the text box in the Comms Relay cutscene that starts with "If YOU can find a teleporter". This is not applicable to function-based translations (TEXTTRANSLATE_FUNCTION), because the responsibility of correctly positioning the text box resides with the function.
This commit is contained in:
parent
9b56a53d98
commit
c50da88ad4
4 changed files with 25 additions and 3 deletions
|
@ -3344,6 +3344,8 @@ void Graphics::textboxoriginalcontextauto(void)
|
||||||
{
|
{
|
||||||
context.script_name = script.scriptname;
|
context.script_name = script.scriptname;
|
||||||
}
|
}
|
||||||
|
context.x = textboxes[m].xp;
|
||||||
|
context.y = textboxes[m].yp;
|
||||||
|
|
||||||
textboxes[m].original = context;
|
textboxes[m].original = context;
|
||||||
}
|
}
|
||||||
|
|
|
@ -773,6 +773,8 @@ void scriptclass::run(void)
|
||||||
context.text_case = textcase;
|
context.text_case = textcase;
|
||||||
context.lines = std::vector<std::string>(txt);
|
context.lines = std::vector<std::string>(txt);
|
||||||
context.script_name = scriptname;
|
context.script_name = scriptname;
|
||||||
|
context.x = textx;
|
||||||
|
context.y = texty;
|
||||||
|
|
||||||
graphics.textboxcrewmateposition(&textcrewmateposition);
|
graphics.textboxcrewmateposition(&textcrewmateposition);
|
||||||
graphics.textboxoriginalcontext(&context);
|
graphics.textboxoriginalcontext(&context);
|
||||||
|
|
|
@ -78,7 +78,7 @@ void textboxclass::centery(void)
|
||||||
void textboxclass::applyposition(void)
|
void textboxclass::applyposition(void)
|
||||||
{
|
{
|
||||||
resize();
|
resize();
|
||||||
repositionfromcrewmate();
|
reposition();
|
||||||
if (should_centerx)
|
if (should_centerx)
|
||||||
{
|
{
|
||||||
centerx();
|
centerx();
|
||||||
|
@ -165,11 +165,18 @@ void textboxclass::resize(void)
|
||||||
h = lines.size()*(font::height(print_flags) + linegap) + 16 - linegap;
|
h = lines.size()*(font::height(print_flags) + linegap) + 16 - linegap;
|
||||||
}
|
}
|
||||||
|
|
||||||
void textboxclass::repositionfromcrewmate(void)
|
void textboxclass::reposition(void)
|
||||||
{
|
{
|
||||||
|
// Function-based translation overrides position.
|
||||||
|
if (translate == TEXTTRANSLATE_FUNCTION)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const int font_height = font::height(print_flags);
|
const int font_height = font::height(print_flags);
|
||||||
|
|
||||||
// Reposition based off crewmate position, if applicable
|
// Reposition based off crewmate position, if applicable
|
||||||
|
// Otherwise use original position, if applicable
|
||||||
if (crewmate_position.override_x)
|
if (crewmate_position.override_x)
|
||||||
{
|
{
|
||||||
if (crewmate_position.dir == 1) // left
|
if (crewmate_position.dir == 1) // left
|
||||||
|
@ -181,6 +188,11 @@ void textboxclass::repositionfromcrewmate(void)
|
||||||
xp = crewmate_position.x - 16;
|
xp = crewmate_position.x - 16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xp = original.x;
|
||||||
|
}
|
||||||
|
|
||||||
if (crewmate_position.override_y)
|
if (crewmate_position.override_y)
|
||||||
{
|
{
|
||||||
if (crewmate_position.text_above)
|
if (crewmate_position.text_above)
|
||||||
|
@ -199,6 +211,10 @@ void textboxclass::repositionfromcrewmate(void)
|
||||||
yp = crewmate_position.y + 26;
|
yp = crewmate_position.y + 26;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
yp = original.y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void textboxclass::addline(const std::string& t)
|
void textboxclass::addline(const std::string& t)
|
||||||
|
|
|
@ -19,6 +19,8 @@ struct TextboxCrewmatePosition
|
||||||
|
|
||||||
struct TextboxOriginalContext
|
struct TextboxOriginalContext
|
||||||
{
|
{
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
std::vector<std::string> lines;
|
std::vector<std::string> lines;
|
||||||
std::string script_name;
|
std::string script_name;
|
||||||
char text_case;
|
char text_case;
|
||||||
|
@ -85,7 +87,7 @@ public:
|
||||||
|
|
||||||
void resize(void);
|
void resize(void);
|
||||||
|
|
||||||
void repositionfromcrewmate(void);
|
void reposition(void);
|
||||||
|
|
||||||
void addline(const std::string& t);
|
void addline(const std::string& t);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue