mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-22 01:39:57 +00:00
TOLTECS: More work on the menu; started the savegame page and implemented editing of the savegame description
This commit is contained in:
parent
28c74ff3b4
commit
d80cc85347
@ -42,9 +42,11 @@ namespace Toltecs {
|
||||
|
||||
MenuSystem::MenuSystem(ToltecsEngine *vm) : _vm(vm) {
|
||||
_currMenuID = kMenuIdNone;
|
||||
//_newMenuID = kMenuIdLoad;
|
||||
_newMenuID = kMenuIdMain;
|
||||
//_newMenuID = kMenuIdLoad;
|
||||
_newMenuID = kMenuIdSave;
|
||||
_currItemID = kItemIdNone;
|
||||
_editingDescription = false;
|
||||
_cfgText = true;
|
||||
_cfgVoices = true;
|
||||
_cfgMasterVolume = 10;
|
||||
@ -105,6 +107,7 @@ void MenuSystem::handleEvents() {
|
||||
while (eventMan->pollEvent(event)) {
|
||||
switch (event.type) {
|
||||
case Common::EVENT_KEYDOWN:
|
||||
handleKeyDown(event.kbd);
|
||||
break;
|
||||
case Common::EVENT_QUIT:
|
||||
// TODO: quitGame();
|
||||
@ -144,17 +147,44 @@ void MenuSystem::drawItem(ItemID itemID, bool active) {
|
||||
}
|
||||
|
||||
void MenuSystem::handleMouseMove(int x, int y) {
|
||||
ItemID newItemID = findItemAt(x, y);
|
||||
if (_currItemID != newItemID) {
|
||||
leaveItem(_currItemID);
|
||||
_currItemID = newItemID;
|
||||
enterItem(newItemID);
|
||||
if (!_editingDescription) {
|
||||
ItemID newItemID = findItemAt(x, y);
|
||||
if (_currItemID != newItemID) {
|
||||
leaveItem(_currItemID);
|
||||
_currItemID = newItemID;
|
||||
enterItem(newItemID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MenuSystem::handleMouseClick(int x, int y) {
|
||||
ItemID id = findItemAt(x, y);
|
||||
clickItem(id);
|
||||
if (!_editingDescription) {
|
||||
ItemID id = findItemAt(x, y);
|
||||
clickItem(id);
|
||||
}
|
||||
}
|
||||
|
||||
void MenuSystem::handleKeyDown(const Common::KeyState& kbd) {
|
||||
if (_editingDescription) {
|
||||
if (kbd.keycode >= Common::KEYCODE_SPACE && kbd.keycode <= Common::KEYCODE_z) {
|
||||
debug("ascii = %c", kbd.ascii);
|
||||
_editingDescriptionItem->caption += kbd.ascii;
|
||||
restoreRect(_editingDescriptionItem->rect.left, _editingDescriptionItem->rect.top,
|
||||
_editingDescriptionItem->rect.width() + 1, _editingDescriptionItem->rect.height() - 2);
|
||||
setItemCaption(_editingDescriptionItem, (const byte*)_editingDescriptionItem->caption.c_str());
|
||||
drawItem(_editingDescriptionID, true);
|
||||
} else if (kbd.keycode == Common::KEYCODE_BACKSPACE) {
|
||||
debug("backspace");
|
||||
_editingDescriptionItem->caption.deleteLastChar();
|
||||
restoreRect(_editingDescriptionItem->rect.left, _editingDescriptionItem->rect.top,
|
||||
_editingDescriptionItem->rect.width() + 1, _editingDescriptionItem->rect.height() - 2);
|
||||
setItemCaption(_editingDescriptionItem, (const byte*)_editingDescriptionItem->caption.c_str());
|
||||
drawItem(_editingDescriptionID, true);
|
||||
} else if (kbd.keycode == Common::KEYCODE_RETURN) {
|
||||
debug("return");
|
||||
_editingDescription = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ItemID MenuSystem::findItemAt(int x, int y) {
|
||||
@ -216,6 +246,22 @@ void MenuSystem::initMenu(MenuID menuID) {
|
||||
initSavegames();
|
||||
setSavegameCaptions();
|
||||
break;
|
||||
case kMenuIdSave:
|
||||
drawString(0, 74, 320, 1, 229, (byte*)"Save game");
|
||||
addClickTextItem(kItemIdSavegameUp, 0, 155, 545, 1, (const byte*)"^", 255, 253);
|
||||
addClickTextItem(kItemIdSavegameDown, 0, 195, 545, 1, (const byte*)"\\", 255, 253);
|
||||
addClickTextItem(kItemIdCancel, 0, 275, 320, 0, (const byte*)"CANCEL", 255, 253);
|
||||
addClickTextItem(kItemIdSavegame1, 0, 115 + 20 * 0, 300, 0, (const byte*)"SAVEGAME 1", 231, 234);
|
||||
addClickTextItem(kItemIdSavegame2, 0, 115 + 20 * 1, 300, 0, (const byte*)"SAVEGAME 2", 231, 234);
|
||||
addClickTextItem(kItemIdSavegame3, 0, 115 + 20 * 2, 300, 0, (const byte*)"SAVEGAME 3", 231, 234);
|
||||
addClickTextItem(kItemIdSavegame4, 0, 115 + 20 * 3, 300, 0, (const byte*)"SAVEGAME 4", 231, 234);
|
||||
addClickTextItem(kItemIdSavegame5, 0, 115 + 20 * 4, 300, 0, (const byte*)"SAVEGAME 5", 231, 234);
|
||||
addClickTextItem(kItemIdSavegame6, 0, 115 + 20 * 5, 300, 0, (const byte*)"SAVEGAME 6", 231, 234);
|
||||
addClickTextItem(kItemIdSavegame7, 0, 115 + 20 * 6, 300, 0, (const byte*)"SAVEGAME 7", 231, 234);
|
||||
initSavegames();
|
||||
_savegames.push_back(SavegameItem("", Common::String::printf("GAME %03d", _savegames.size() + 1)));
|
||||
setSavegameCaptions();
|
||||
break;
|
||||
case kMenuIdVolumes:
|
||||
drawString(0, 74, 320, 1, 229, (byte*)"Adjust volume");
|
||||
drawString(0, 130, 200, 0, 244, (byte*)"Master");
|
||||
@ -264,10 +310,9 @@ void MenuSystem::clickItem(ItemID id) {
|
||||
switch (id) {
|
||||
// Main menu
|
||||
case kItemIdSave:
|
||||
debug("kItemIdSave");
|
||||
_newMenuID = kMenuIdSave;
|
||||
break;
|
||||
case kItemIdLoad:
|
||||
debug("kItemIdLoad");
|
||||
_newMenuID = kMenuIdLoad;
|
||||
break;
|
||||
case kItemIdToggleText:
|
||||
@ -410,7 +455,7 @@ void MenuSystem::initSavegames() {
|
||||
}
|
||||
|
||||
void MenuSystem::setSavegameCaptions() {
|
||||
int index = _savegameListTopIndex;
|
||||
uint index = _savegameListTopIndex;
|
||||
setItemCaption(getItem(kItemIdSavegame1), index < _savegames.size() ? (const byte*)_savegames[index++]._description.c_str() : (const byte*)"");
|
||||
setItemCaption(getItem(kItemIdSavegame2), index < _savegames.size() ? (const byte*)_savegames[index++]._description.c_str() : (const byte*)"");
|
||||
setItemCaption(getItem(kItemIdSavegame3), index < _savegames.size() ? (const byte*)_savegames[index++]._description.c_str() : (const byte*)"");
|
||||
@ -445,10 +490,14 @@ void MenuSystem::clickSavegameItem(ItemID id) {
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
debug("filename = [%s]; description = [%s]", savegameItem->_filename.c_str(), savegameItem->_description.c_str());
|
||||
|
||||
} else {
|
||||
_editingDescription = true;
|
||||
_editingDescriptionItem = getItem(id);
|
||||
_editingDescriptionID = id;
|
||||
_editingDescriptionItem->activeColor = 230; // TODO: Correct color
|
||||
_editingDescriptionItem->defaultColor = 230;
|
||||
drawItem(_editingDescriptionID, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -137,6 +137,9 @@ protected:
|
||||
ItemID _currItemID;
|
||||
int _top;
|
||||
int _savegameListTopIndex;
|
||||
bool _editingDescription;
|
||||
ItemID _editingDescriptionID;
|
||||
Item *_editingDescriptionItem;
|
||||
|
||||
Common::Array<Item> _items;
|
||||
Common::Array<SavegameItem> _savegames;
|
||||
@ -149,6 +152,7 @@ protected:
|
||||
void drawItem(ItemID itemID, bool active);
|
||||
void handleMouseMove(int x, int y);
|
||||
void handleMouseClick(int x, int y);
|
||||
void handleKeyDown(const Common::KeyState& kbd);
|
||||
|
||||
ItemID findItemAt(int x, int y);
|
||||
Item *getItem(ItemID id);
|
||||
|
Loading…
Reference in New Issue
Block a user