MM: MM1: Adding buttons to manage character view

This commit is contained in:
Paul Gilbert 2023-03-05 20:58:01 -08:00
parent e77592e9c4
commit 9f4e22d0f5
4 changed files with 73 additions and 50 deletions

View File

@ -478,6 +478,10 @@ enhdialogs:
item: "\x01""37Item"
quick: "\x01""37Quick"
exchange: "\x01""37Exch"
portrait: "Portrait"
rename: "Rename"
delete: "Delete"
are_you_sure: "Are you sure? (Y/N)"
conditions:
good: "Good"
character_select:
@ -507,6 +511,7 @@ enhdialogs:
no_gold: "No gold, no food!"
misc:
exit: "Exit"
go_back: "Go back"
quickref:
title: "Quick Reference Chart"
headers:

View File

@ -32,6 +32,7 @@ namespace MM1 {
#define INVENTORY_COUNT 6
#define MAX_LEVEL 200
#define NUM_PORTRAITS 12
enum CharacterClass {
KNIGHT = 1, PALADIN = 2, ARCHER = 3, CLERIC = 4,

View File

@ -27,70 +27,82 @@ namespace MM {
namespace MM1 {
namespace ViewsEnh {
CharacterManage::CharacterManage() : CharacterBase("CharacterManage") {
addButton(&_escSprite, Common::Point(20, 172), 0, Common::KEYCODE_p, true);
addButton(&_escSprite, Common::Point(90, 172), 0, Common::KEYCODE_r, true);
addButton(&_escSprite, Common::Point(160, 172), 0, Common::KEYCODE_d, true);
addButton(&_escSprite, Common::Point(230, 172), 0, KEYBIND_ESCAPE, true);
}
bool CharacterManage::msgFocus(const FocusMessage &msg) {
CharacterBase::msgFocus(msg);
_changed = false;
return true;
}
bool CharacterManage::msgUnfocus(const UnfocusMessage &msg) {
if (_changed)
g_globals->_roster.save();
CharacterBase::msgUnfocus(msg);
return true;
}
void CharacterManage::draw() {
assert(g_globals->_currCharacter);
CharacterBase::draw();
/*
setReduced(false);
switch (_state) {
case DISPLAY:
writeString(6, 21, STRING["dialogs.view_character.rename"]);
writeString(6, 22, STRING["dialogs.view_character.delete"]);
escToGoBack();
CharacterBase::draw();
setReduced(true);
writeString(35, 174, STRING["enhdialogs.character.portrait"]);
writeString(105, 174, STRING["enhdialogs.character.rename"]);
writeString(175, 174, STRING["enhdialogs.character.delete"]);
writeString(245, 174, STRING["enhdialogs.misc.go_back"]);
break;
case RENAME:
writeString(6, 21, STRING["dialogs.view_character.name"]);
writeString(_newName);
writeChar('_');
break;
case DELETE:
writeString(6, 21, STRING["dialogs.view_character.are_you_sure"]);
break;
}
*/
}
bool CharacterManage::msgKeypress(const KeypressMessage &msg) {
Character &c = *g_globals->_currCharacter;
switch (_state) {
case DISPLAY:
if ((msg.flags & Common::KBD_CTRL) && msg.keycode == Common::KEYCODE_n) {
_state = RENAME;
_newName = "";
redraw();
} else if ((msg.flags & Common::KBD_CTRL) && msg.keycode == Common::KEYCODE_d) {
_state = DELETE;
switch (msg.keycode) {
case Common::KEYCODE_p:
c._portrait = (c._portrait + 1) % NUM_PORTRAITS;
c.loadFaceSprites();
redraw();
break;
case Common::KEYCODE_r:
warning("TODO: Rename character");
break;
case Common::KEYCODE_d:
break;
}
break;
case RENAME:
if (msg.ascii >= 32 && msg.ascii <= 127) {
_newName += toupper(msg.ascii);
redraw();
}
if (msg.keycode == Common::KEYCODE_RETURN || _newName.size() == 15) {
strncpy(g_globals->_currCharacter->_name, _newName.c_str(), 16);
_state = DISPLAY;
redraw();
} else if (msg.keycode == Common::KEYCODE_BACKSPACE &&
!_newName.empty()) {
_newName.deleteLastChar();
redraw();
}
break;
case DELETE:
if (msg.keycode == Common::KEYCODE_y) {
// Removes the character and returns to View All Characters
g_globals->_roster.remove(g_globals->_currCharacter);
close();
} else {
// Any other keypress returns to display mode
redraw();
switch (msg.keycode) {
case Common::KEYCODE_y:
msgAction(ActionMessage(KEYBIND_SELECT));
break;
case Common::KEYCODE_n:
msgAction(ActionMessage(KEYBIND_ESCAPE));
break;
default:
break;
}
_state = DISPLAY;
break;
}
@ -98,25 +110,27 @@ bool CharacterManage::msgKeypress(const KeypressMessage &msg) {
}
bool CharacterManage::msgAction(const ActionMessage &msg) {
Character &c = *g_globals->_currCharacter;
if (msg._action == KEYBIND_ESCAPE) {
if (_state != DISPLAY) {
redraw();
} else {
switch (_state) {
case DISPLAY:
close();
break;
default:
_state = DISPLAY;
break;
}
_state = DISPLAY;
return true;
} else if (msg._action >= KEYBIND_VIEW_PARTY1 &&
msg._action <= KEYBIND_VIEW_PARTY6 &&
_state == DISPLAY) {
g_globals->_currCharacter = &g_globals->_party[
msg._action - KEYBIND_VIEW_PARTY1];
addView();
} else if (msg._action == KEYBIND_SELECT && _state == RENAME) {
Common::strcpy_s(c._name, _newName.c_str());
c._name[15] = '\0';
_state = DISPLAY;
return true;
}
return false;
return CharacterBase::msgAction(msg);
}
} // namespace ViewsEnh

View File

@ -36,10 +36,13 @@ class CharacterManage : public CharacterBase {
enum ViewState { DISPLAY = 0, RENAME = 1, DELETE = 2 };
ViewState _state = DISPLAY;
Common::String _newName;
bool _changed = false;
public:
CharacterManage() : CharacterBase("CharacterManage") {}
CharacterManage();
virtual ~CharacterManage() {}
bool msgFocus(const FocusMessage &msg) override;
bool msgUnfocus(const UnfocusMessage &msg) override;
void draw() override;
bool msgKeypress(const KeypressMessage &msg) override;
bool msgAction(const ActionMessage &msg) override;