aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/dialogs/dialogs_awards.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2018-03-04 18:12:09 -0500
committerPaul Gilbert2018-03-04 22:40:42 -0500
commitf2b574d64762d23a83cc682da0e622be99080688 (patch)
tree1ccbabbda83e70911dae0d4042223ee81a006d1d /engines/xeen/dialogs/dialogs_awards.cpp
parent50630efde6d0f42f4d5f371d6818afac64ba86f5 (diff)
downloadscummvm-rg350-f2b574d64762d23a83cc682da0e622be99080688.tar.gz
scummvm-rg350-f2b574d64762d23a83cc682da0e622be99080688.tar.bz2
scummvm-rg350-f2b574d64762d23a83cc682da0e622be99080688.zip
XEEN: Move all the dialog classes to their own sub-folder
Diffstat (limited to 'engines/xeen/dialogs/dialogs_awards.cpp')
-rw-r--r--engines/xeen/dialogs/dialogs_awards.cpp131
1 files changed, 131 insertions, 0 deletions
diff --git a/engines/xeen/dialogs/dialogs_awards.cpp b/engines/xeen/dialogs/dialogs_awards.cpp
new file mode 100644
index 0000000000..8e8bfcf67f
--- /dev/null
+++ b/engines/xeen/dialogs/dialogs_awards.cpp
@@ -0,0 +1,131 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "xeen/dialogs/dialogs_awards.h"
+#include "xeen/party.h"
+#include "xeen/resources.h"
+#include "xeen/xeen.h"
+
+namespace Xeen {
+
+void Awards::show(XeenEngine *vm, const Character *ch) {
+ Awards *dlg = new Awards(vm);
+ dlg->execute(ch);
+ delete dlg;
+}
+
+void Awards::execute(const Character *ch) {
+ EventsManager &events = *g_vm->_events;
+ Windows &windows = *g_vm->_windows;
+ Common::StringArray awards;
+ int numAwards;
+ Mode oldMode = g_vm->_mode;
+ int topIndex = 0;
+
+ loadStrings("award.bin", 1);
+ addButtons();
+
+ // Open the window and draw contents
+ bool win29Open = windows[29]._enabled;
+ if (!win29Open) {
+ windows[29].open();
+ windows[30].open();
+ }
+
+ windows[29].writeString(Res.AWARDS_TEXT);
+ drawButtons(&windows[0]);
+
+ while (!_vm->shouldExit()) {
+ // Build up a list of awards the character has
+ awards.clear();
+ awards.resize(AWARDS_TOTAL);
+ numAwards = 0;
+
+ for (int awardNum = 0; awardNum < AWARDS_TOTAL; ++awardNum) {
+ if (ch->hasAward(awardNum)) {
+ if (awardNum == 9) {
+ // # Warzone Wins
+ awards[numAwards] = Common::String::format(_textStrings[9].c_str(), 28);
+ } else if (awardNum == 17) {
+ // Legendary Race
+ awards[numAwards] = Common::String::format(_textStrings[17].c_str(),
+ Res.RACE_NAMES[ch->_race]);
+ } else {
+ awards[numAwards] = _textStrings[awardNum];
+ }
+ ++numAwards;
+ }
+ }
+
+ // If no awards, add in a message indicating so
+ if (numAwards == 0) {
+ awards[1] = Res.NO_AWARDS;
+ }
+
+ Common::String msg = Common::String::format(Res.AWARDS_FOR,
+ ch->_name.c_str(), Res.CLASS_NAMES[ch->_class],
+ awards[topIndex].c_str(),
+ awards[topIndex + 1].c_str(),
+ awards[topIndex + 2].c_str(),
+ awards[topIndex + 3].c_str(),
+ awards[topIndex + 4].c_str(),
+ awards[topIndex + 5].c_str(),
+ awards[topIndex + 6].c_str(),
+ awards[topIndex + 7].c_str(),
+ awards[topIndex + 8].c_str()
+ );
+ windows[30].writeString(msg);
+ windows[24].update();
+
+ // Wait for keypress
+ do {
+ events.pollEventsAndWait();
+ checkEvents(_vm);
+ } while (!g_vm->shouldExit() && !_buttonValue);
+
+ if (_buttonValue == Common::KEYCODE_ESCAPE) {
+ break;
+ } else if (_buttonValue == Common::KEYCODE_u) {
+ topIndex = MAX(topIndex - 1, 0);
+ } else if (_buttonValue == Common::KEYCODE_d) {
+ if ((++topIndex + 9) > numAwards)
+ --topIndex;
+ }
+ }
+
+ // Close the window
+ if (win29Open) {
+ windows[30].close();
+ windows[29].close();
+ }
+
+ g_vm->_mode = oldMode;
+}
+
+void Awards::addButtons() {
+ _iconSprites.load("award.icn");
+ addButton(Common::Rect(216, 109, 240, 129), Common::KEYCODE_u, &_iconSprites);
+ addButton(Common::Rect(250, 109, 274, 129), Common::KEYCODE_d, &_iconSprites);
+ addButton(Common::Rect(284, 109, 308, 129), Common::KEYCODE_ESCAPE, &_iconSprites);
+}
+
+} // End of namespace Xeen