diff options
author | Paul Gilbert | 2015-01-27 08:02:54 -0500 |
---|---|---|
committer | Paul Gilbert | 2015-01-27 08:02:54 -0500 |
commit | 88382b2d8f0f1fd27e2100a94ace74453d6186f7 (patch) | |
tree | ca87f8d2ada89aba116f08e0b380456c9d73bc94 /engines/xeen/town.cpp | |
parent | 81e1bd2930bf4192fa8bfdbb805c65795e68c6e1 (diff) | |
download | scummvm-rg350-88382b2d8f0f1fd27e2100a94ace74453d6186f7.tar.gz scummvm-rg350-88382b2d8f0f1fd27e2100a94ace74453d6186f7.tar.bz2 scummvm-rg350-88382b2d8f0f1fd27e2100a94ace74453d6186f7.zip |
XEEN: Added NumericInput class and refactored existing string input
Diffstat (limited to 'engines/xeen/town.cpp')
-rw-r--r-- | engines/xeen/town.cpp | 108 |
1 files changed, 97 insertions, 11 deletions
diff --git a/engines/xeen/town.cpp b/engines/xeen/town.cpp index bb8590fc48..dceb79c354 100644 --- a/engines/xeen/town.cpp +++ b/engines/xeen/town.cpp @@ -195,8 +195,8 @@ int Town::townAction(int actionId) { sound.loadMusic(TOWN_ACTION_MUSIC[actionId], 223); - _townSprites.clear(); - for (int idx = 0; idx < TOWN_ACTION_FILES[isDarkCc][actionId]; ++idx) { + _townSprites.resize(TOWN_ACTION_FILES[isDarkCc][actionId]); + for (uint idx = 0; idx < _townSprites.size(); ++idx) { Common::String shapesName = Common::String::format("%s%d.twn", TOWN_ACTION_SHAPES[actionId], idx + 1); _townSprites[idx].load(shapesName); @@ -281,20 +281,20 @@ int Town::townAction(int actionId) { return result; } -void Town::townWait() { +int Town::townWait() { EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; - while (!_vm->shouldQuit()) { + while (!_vm->shouldQuit() && !_buttonValue) { events.updateGameCounter(); while (!_vm->shouldQuit() && !_buttonValue && events.timeElapsed() < 3) { checkEvents(_vm); } - if (_buttonValue) - return; - - intf.drawTownAnim(!_vm->_screen->_windows[11]._enabled); + if (!_buttonValue) + intf.drawTownAnim(!_vm->_screen->_windows[11]._enabled); } + + return _buttonValue; } void Town::pyramidEvent() { @@ -471,10 +471,96 @@ Common::String Town::createTownText(Character &ch) { } } -Character *Town::doTownOptions(Character *charP) { - Common::String result; +Character *Town::doTownOptions(Character *c) { + switch (_townActionId) { + case 0: + if (_buttonValue == Common::KEYCODE_d) + _buttonValue = 0; + else if (_buttonValue == Common::KEYCODE_w) + _buttonValue = 1; + else + break; + + depositWithdrawl(_buttonValue); + break; + + default: + // TODO: remaining cases + error("TODO: doTownOptions"); + } + + return c; +} + +void Town::depositWithdrawl(int choice) { + Party &party = *_vm->_party; + Screen &screen = *_vm->_screen; + SoundManager &sound = *_vm->_sound; + int gold, gems; + + if (choice) { + gold = party._bankGold; + gems = party._bankGems; + } else { + gold = party._gold; + gems = party._gems; + } + + for (uint idx = 0; idx < _buttons.size(); ++idx) + _buttons[idx]._sprites = &_icons1; + _buttons[0]._value = Common::KEYCODE_o; + _buttons[1]._value = Common::KEYCODE_e; + _buttons[2]._value = Common::KEYCODE_ESCAPE; + + Common::String msg = Common::String::format(GOLD_GEMS, + DEPOSIT_WITHDRAWL[choice], + XeenEngine::printMil(gold).c_str(), + XeenEngine::printMil(gems).c_str()); + + screen._windows[35].open(); + screen._windows[35].writeString(msg); + drawButtons(&screen._windows[35]); + screen._windows[35].update(); + + sound.playSample(nullptr, 0); + File f("coina.voc"); + bool flag; + + do { + bool flag; + switch (townWait()) { + case Common::KEYCODE_o: + continue; + case Common::KEYCODE_e: + flag = 1; + break; + default: + flag = 0; + break; + } + + if ((choice && !party._bankGems && flag) || + (choice && !party._bankGold && !flag) || + (choice && !party._gems && flag) || + (choice && !party._gold && !flag)) { + notEnough(flag, choice, 1, WT_2); + } else { + screen._windows[35].writeString(AMOUNT); + + // TODO + } + // TODO + } while (!_vm->shouldQuit() && _buttonValue != Common::KEYCODE_ESCAPE); + +} + +void Town::notEnough(int consumableId, int whereId, bool mode, ErrorWaitType wait) { + SoundManager &sound = *_vm->_sound; - error("TODO: doTownOptions"); + Common::String msg = Common::String::format( + mode ? NO_X_IN_THE_Y : NOT_ENOUGH_X_IN_THE_Y, + CONSUMABLE_NAMES[consumableId], WHERE_NAMES[whereId]); + ErrorScroll::show(_vm, msg, wait); } |