mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-28 04:34:50 +00:00
Made the game behave properly and safe when clicking on objects multiple times during talking or executing look/use scripts. Previously, the loop could be called nested arbitrarily many times.
svn-id: r43081
This commit is contained in:
parent
e632106169
commit
da8bad0ef5
@ -262,37 +262,41 @@ void Game::loop() {
|
||||
Animation *titleAnim = _vm->_anims->getAnimation(kTitleText);
|
||||
Text *title = reinterpret_cast<Text *>(titleAnim->getFrame());
|
||||
|
||||
// If there is an object under the cursor, display its title and enable
|
||||
// executing its look and use scripts
|
||||
if (curObject != kObjectNotFound) {
|
||||
// Mark dirty rectangle to update the text
|
||||
titleAnim->markDirtyRect(surface);
|
||||
if (_loopStatus == kStatusOrdinary) {
|
||||
// If there is an object under the cursor, display its title and enable
|
||||
// executing its look and use scripts
|
||||
if (curObject != kObjectNotFound) {
|
||||
// Mark dirty rectangle to update the text
|
||||
titleAnim->markDirtyRect(surface);
|
||||
|
||||
// Set the title for the current object
|
||||
title->setText(obj->_title);
|
||||
// Set the title for the current object
|
||||
title->setText(obj->_title);
|
||||
|
||||
// Move the title to the correct place (just above the cursor)
|
||||
int newX = surface->centerOnX(x, title->getWidth());
|
||||
int newY = surface->centerOnY(y - smallFontHeight / 2, title->getHeight() * 2);
|
||||
titleAnim->setRelative(newX, newY);
|
||||
// Move the title to the correct place (just above the cursor)
|
||||
int newX = surface->centerOnX(x, title->getWidth());
|
||||
int newY = surface->centerOnY(y - smallFontHeight / 2, title->getHeight() * 2);
|
||||
titleAnim->setRelative(newX, newY);
|
||||
|
||||
// HACK: Test running look and use scripts
|
||||
if (_vm->_mouse->lButtonPressed()) {
|
||||
_vm->_mouse->lButtonSet(false);
|
||||
_vm->_script->run(obj->_program, obj->_look);
|
||||
if (_loopSubstatus == kStatusOrdinary) {
|
||||
// HACK: Test running look and use scripts
|
||||
if (_vm->_mouse->lButtonPressed()) {
|
||||
_vm->_mouse->lButtonSet(false);
|
||||
_vm->_script->run(obj->_program, obj->_look);
|
||||
}
|
||||
|
||||
if (_vm->_mouse->rButtonPressed()) {
|
||||
_vm->_mouse->rButtonSet(false);
|
||||
_vm->_script->run(obj->_program, obj->_use);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// If there is no object under the cursor, just delete the previous title
|
||||
titleAnim->markDirtyRect(surface);
|
||||
title->setText("");
|
||||
}
|
||||
|
||||
if (_vm->_mouse->rButtonPressed()) {
|
||||
_vm->_mouse->rButtonSet(false);
|
||||
_vm->_script->run(obj->_program, obj->_use);
|
||||
}
|
||||
} else {
|
||||
// If there is no object under the cursor, just delete the previous title
|
||||
titleAnim->markDirtyRect(surface);
|
||||
title->setText("");
|
||||
debugC(2, kDraciAnimationDebugLevel, "Anim under cursor: %d", animUnderCursor);
|
||||
}
|
||||
|
||||
debugC(2, kDraciAnimationDebugLevel, "Anim under cursor: %d", animUnderCursor);
|
||||
}
|
||||
|
||||
// Handle character talking (if there is any)
|
||||
|
Loading…
Reference in New Issue
Block a user