EMI: Always reposition from original coordinates

This commit is contained in:
Dries Harnie 2012-02-18 22:18:34 +01:00
parent faa0c3430a
commit 14b485569b
3 changed files with 34 additions and 37 deletions

View File

@ -174,8 +174,8 @@ void Lua_V1::BlastText() {
} }
void Lua_V1::SetOffscreenTextPos() { void Lua_V1::SetOffscreenTextPos() {
// called with (0,0) on dialog entry, (nil, nil) on dialog exit
warning("Lua_V1::SetOffscreenTextPos: implement opcode"); warning("Lua_V1::SetOffscreenTextPos: implement opcode");
// this sets where we shouldn't put dialog maybe?
} }
void Lua_V1::TextFileGetLine() { void Lua_V1::TextFileGetLine() {

View File

@ -146,24 +146,20 @@ void TextObject::destroy() {
} }
void TextObject::reposition() { void TextObject::reposition() {
// In EMI most stuff seems to be relative to the center, if (_positioned)
// but sometimes it is not so I catch that with _x being over 320. return;
// This is probably not the corrent way to do it though.
if (!_positioned && g_grim->getGameType() == GType_MONKEY4) { _positioned = true;
_positioned = true; _posX = _x;
if (_x == 0) { _posY = _y;
_x += 320; if (g_grim->getGameType() == GType_MONKEY4) {
if (_y < 0) { if (_isSpeech) {
_y = -_y; _posY = 480 - _y;
} else {
_y = 240 - _y;
}
} else if (_x > 320) {
_y = -_y;
} else { } else {
_x += 320; _posX = _x + 320;
_y = 240 - _y; _posY = - _y;
} }
Debug::debug(Debug::TextObjects, "Repositioning (%d, %d) -> (%d, %d)", _x, _y, _posX, _posY);
} }
} }
@ -196,10 +192,10 @@ void TextObject::setupText() {
// If the speaker is too close to the edge of the screen we have to make // If the speaker is too close to the edge of the screen we have to make
// some room for the subtitles. // some room for the subtitles.
if (_isSpeech){ if (_isSpeech){
if (_x < SCREEN_MARGIN) { if (_posX < SCREEN_MARGIN) {
_x = SCREEN_MARGIN; _posX = SCREEN_MARGIN;
} else if (SCREEN_WIDTH - _x < SCREEN_MARGIN) { } else if (SCREEN_WIDTH - _posX < SCREEN_MARGIN) {
_x = SCREEN_WIDTH - SCREEN_MARGIN; _posX = SCREEN_WIDTH - SCREEN_MARGIN;
} }
} }
@ -208,11 +204,11 @@ void TextObject::setupText() {
// with GrimE. // with GrimE.
int maxWidth = 0; int maxWidth = 0;
if (_justify == CENTER) { if (_justify == CENTER) {
maxWidth = 2 * MIN(_x, SCREEN_WIDTH - _x); maxWidth = 2 * MIN(_posX, SCREEN_WIDTH - _posX);
} else if (_justify == LJUSTIFY) { } else if (_justify == LJUSTIFY) {
maxWidth = SCREEN_WIDTH - _x; maxWidth = SCREEN_WIDTH - _posX;
} else if (_justify == RJUSTIFY) { } else if (_justify == RJUSTIFY) {
maxWidth = _x; maxWidth = _posX;
} }
// We break the message to lines not longer than maxWidth // We break the message to lines not longer than maxWidth
@ -269,9 +265,9 @@ void TextObject::setupText() {
// printed further down the screen. // printed further down the screen.
const int SCREEN_TOP_MARGIN = 16; const int SCREEN_TOP_MARGIN = 16;
if (_isSpeech) { if (_isSpeech) {
_y -= _numberLines * _font->getHeight(); _posY -= _numberLines * _font->getHeight();
if (_y < SCREEN_TOP_MARGIN) { if (_posY < SCREEN_TOP_MARGIN) {
_y = SCREEN_TOP_MARGIN; _posY = SCREEN_TOP_MARGIN;
} }
} }
@ -299,11 +295,11 @@ void TextObject::setupText() {
} }
int TextObject::getLineX(int line) { int TextObject::getLineX(int line) {
int x = _x; int x = _posX;
if (_justify == CENTER) if (_justify == CENTER)
x = _x - (_font->getStringLength(_lines[line]) / 2); x = _posX - (_font->getStringLength(_lines[line]) / 2);
else if (_justify == RJUSTIFY) else if (_justify == RJUSTIFY)
x = _x - getBitmapWidth(); x = _posX - getBitmapWidth();
if (x < 0) if (x < 0)
x = 0; x = 0;
@ -311,20 +307,20 @@ int TextObject::getLineX(int line) {
} }
int TextObject::getLineY(int line) { int TextObject::getLineY(int line) {
int y = _y; int y = _posY;
if (_blastDraw) if (_blastDraw)
y = _y + 5; y = _posY + 5;
else { else {
if (_font->getHeight() == 21) // talk_font,verb_font if (_font->getHeight() == 21) // talk_font,verb_font
y = _y - 6; y = _posY - 6;
else if (_font->getHeight() == 26) // special_font else if (_font->getHeight() == 26) // special_font
y = _y - 12; y = _posY - 12;
else if (_font->getHeight() == 13) // computer_font else if (_font->getHeight() == 13) // computer_font
y = _y - 6; y = _posY - 6;
else if (_font->getHeight() == 19) // pt_font else if (_font->getHeight() == 19) // pt_font
y = _y - 9; y = _posY - 9;
else else
y = _y; y = _posY;
} }
if (y < 0) if (y < 0)
y = 0; y = 0;

View File

@ -62,6 +62,7 @@ protected:
Color _fgColor; Color _fgColor;
int _x, _y; int _x, _y;
int _posX, _posY;
int _width, _height; int _width, _height;
int _justify; int _justify;
Font *_font; Font *_font;