void Menu::cleanPersonData() { for (Person& person : persons.list()) { person.reset(); } rebuildTable(); savePersonData(); }
void Menu::beforeStart(Context* prevContext) { SDL_ShowCursor(SDL_ENABLE); SDL_StartTextInput(); rebuildTable(); if (playMusic) { menuTrack.play(false); } }
void Menu::addPerson() { const std::string& personName = textbox->getText(); if (!personName.empty() && !persons.contains(personName)) { persons.add(Person(personName)); listbox[ALL_PLAYER_LIST]->addItem(personName); rebuildTable(); textbox->flush(); } }
void Menu::initialize() { appService.getConsole().printLine("\n===Menu initialization==="); menuBannerTexture = appService.getTextureManager().load(D6_TEXTURE_MENU_PATH, TextureFilter::LINEAR, true); appService.getConsole().printLine("...Starting GUI library"); gui.screenSize(video.getScreen().getClientWidth(), video.getScreen().getClientHeight(), (video.getScreen().getClientWidth() - 800) / 2, (video.getScreen().getClientHeight() - 600) / 2); listbox[0] = new Gui::ListBox(gui, true); listbox[0]->setPosition(10, 199, 94, 12, 16); listbox[ALL_PLAYER_LIST] = new Gui::ListBox(gui, true); listbox[ALL_PLAYER_LIST]->setPosition(10, 470, 20, 13, 18); listbox[ALL_PLAYER_LIST]->onDoubleClick([this](Gui::ListBox& listBox, Int32 index, const std::string& item) { addPlayer(index); }); listbox[CUR_PLAYERS_LIST] = new Gui::ListBox(gui, false); listbox[CUR_PLAYERS_LIST]->setPosition(200, 470, 20, D6_MAX_PLAYERS, 18); listbox[CUR_PLAYERS_LIST]->onDoubleClick([this](Gui::ListBox& listBox, Int32 index, const std::string& item) { removePlayer(index); }); listbox[3] = new Gui::ListBox(gui, true); listbox[3]->setPosition(654, 410, 13, 6, 16); listbox[4] = new Gui::ListBox(gui, true); listbox[4]->setPosition(520, 363, 13, 3, 16); listbox[5] = new Gui::ListBox(gui, false); listbox[5]->setPosition(654, 470, 15, 2, 16); listbox[5]->addItem("Fullscreen"); listbox[5]->addItem("Split screen"); listbox[6] = new Gui::ListBox(gui, true); listbox[6]->setPosition(520, 470, 13, 5, 16); loadPersonProfiles(D6_FILE_PROFILES); loadPersonData(D6_FILE_PHIST); button[0] = new Gui::Button(gui); button[0]->setPosition(200, 282, 80, 25); button[0]->setCaption(">>"); button[0]->onClick([this](Gui::Button&) { addPlayer(listbox[ALL_PLAYER_LIST]->selectedIndex()); }); button[1] = new Gui::Button(gui); button[1]->setPosition(200, 253, 80, 25); button[1]->setCaption("<<"); button[1]->onClick([this](Gui::Button&) { removePlayer(listbox[CUR_PLAYERS_LIST]->selectedIndex()); }); button[2] = new Gui::Button(gui); button[2]->setPosition(284, 282, 80, 25); button[2]->setCaption("Remove"); button[2]->onClick([this](Gui::Button&) { deletePerson(); rebuildTable(); }); button[3] = new Gui::Button(gui); button[3]->setPosition(284, 253, 80, 25); button[3]->setCaption("Add"); button[3]->onClick([this](Gui::Button&) { addPerson(); }); button[6] = new Gui::Button(gui); button[6]->setPosition(370, 282, 125, 25); button[6]->setCaption("Clear (F3)"); button[6]->onClick([this](Gui::Button&) { if (deleteQuestion()) { cleanPersonData(); } }); button[4] = new Gui::Button(gui); button[4]->setPosition(520, 299, 125, 73); button[4]->setCaption("Play (F1)"); button[4]->onClick([this](Gui::Button&) { play(); }); button[5] = new Gui::Button(gui); button[5]->setPosition(654, 299, 125, 73); button[5]->setCaption("Quit (ESC)"); button[5]->onClick([this](Gui::Button&) { close(); }); label[0] = new Gui::Label(gui); label[0]->setPosition(10, 219, 772, 18); label[0]->setCaption(" Name | Games | Wins | Shots | Accuracy | Kills | Penalties | Points | Alive | Time"); label[1] = new Gui::Label(gui); label[1]->setPosition(520, 383, 125, 18); label[1]->setCaption("Background"); label[2] = new Gui::Label(gui); label[2]->setPosition(654, 429, 125, 18); label[2]->setCaption("Level"); label[3] = new Gui::Label(gui); label[3]->setPosition(654, 489, 125, 18); label[3]->setCaption("Screen mode"); label[4] = new Gui::Label(gui); label[4]->setPosition(520, 489, 125, 18); label[4]->setCaption("Zoom"); label[5] = new Gui::Label(gui); label[5]->setPosition(10, 489, 181, 18); label[5]->setCaption("Persons"); label[6] = new Gui::Label(gui); label[6]->setPosition(200, 489, 165, 18); label[6]->setCaption("Players"); label[7] = new Gui::Label(gui); label[7]->setPosition(370, 489, 120, 18); label[7]->setCaption("Controller"); textbox = new Gui::Textbox(gui); textbox->setPosition(370, 252, 14, 10, D6_ALL_CHR); // Switchbox - volba ovladani for (Size i = 0; i < D6_MAX_PLAYERS; i++) { controlSwitch[i] = new Gui::Spinner(gui); controlSwitch[i]->setPosition(370, 468 - i * 18, 120, 0); // TODO: Might be deleted in future if the use case is fully covered with detect-all functionality Gui::Button* button = new Gui::Button(gui); button->setCaption("D"); button->setPosition(494, 466 - i * 18, 17, 17); button->onClick([this,i](Gui::Button&) { detectControls(i); }); } // Button to detect all user's controllers in a batch Gui::Button* button = new Gui::Button(gui); button->setCaption("D"); button->setPosition(490, 487, 24, 17); button->onClick([this](Gui::Button&){ Size curPlayersCount = listbox[CUR_PLAYERS_LIST]->size(); for (Size j = 0; j < curPlayersCount; j++) { detectControls(j); } }); initializeGameModes(); gameModeSwitch = new Gui::Spinner(gui); for(auto& gameMode : gameModes) { gameModeSwitch->addItem(gameMode->getName()); } gameModeSwitch->setPosition(10, 0, 330, 20); joyRescan(); backgroundCount = File::countFiles(D6_TEXTURE_BCG_PATH, D6_TEXTURE_EXTENSION); levelList.initialize(D6_FILE_LEVEL, D6_LEVEL_EXTENSION); listbox[3]->addItem("Random"); for (Size i = 0; i < levelList.getLength(); i++) { listbox[3]->addItem(levelList.getFileName(i).substr(0, levelList.getFileName(i).rfind("."))); } listbox[4]->addItem("Random"); for (Size i = 0; i < backgroundCount; i++) { listbox[4]->addItem(std::to_string(i + 1)); } for (Int32 i = 5; i < 21; i++) { listbox[6]->addItem(std::to_string(i)); } listbox[6]->selectItem(8).scrollToView(8); menuTrack = sound.loadModule("sound/undead.xm"); }
void *WMHashInsert(WMHashTable * table, const void *key, const void *data) { unsigned h; HashItem *item; int replacing = 0; h = HASH(table, key); /* look for the entry */ item = table->table[h]; if (table->callbacks.keyIsEqual) { while (item) { if ((*table->callbacks.keyIsEqual) (key, item->key)) { replacing = 1; break; } item = item->next; } } else { while (item) { if (key == item->key) { replacing = 1; break; } item = item->next; } } if (replacing) { const void *old; old = item->data; item->data = data; RELKEY(table, item->key); item->key = DUPKEY(table, key); return (void *)old; } else { HashItem *nitem; nitem = wmalloc(sizeof(HashItem)); nitem->key = DUPKEY(table, key); nitem->data = data; nitem->next = table->table[h]; table->table[h] = nitem; table->itemCount++; } /* OPTIMIZE: put this in an idle handler. */ if (table->itemCount > table->size) { #ifdef DEBUG0 printf("rebuilding hash table...\n"); #endif rebuildTable(table); #ifdef DEBUG0 printf("finished rebuild.\n"); #endif } return NULL; }
void HashTable::checkOverFlow() { if (LoadFactor > 0.6) rebuildTable(2 * hTsize, hash); }