void Hero::showStatus() { if (!m_menuWindow) { m_menuWindow = WindowSharedPtr(new Window()); m_menuWindow->setPosition(2, 1, 0); m_menuWindow->setHorizontalAlign(Window::HorizontalAlign::LEFT); m_menuWindow->setVerticalAlign(Window::VerticalAlign::BOTTOM); m_menuWindow->setMaxWidth(50); } Window* w = m_menuWindow.get(); w->setTitle("Status"); w->clear(); w->print(Colors::ORANGE(), "NAME:"); w->print(Colors::WHITE(), getName()); w->print(Colors::ORANGE(), " HP:"); w->print(Colors::WHITE(), std::to_string(getHp())); w->print(Colors::ORANGE(), " GOLD:"); w->print(Colors::WHITE(), std::to_string(getGold())); w->print(Colors::ORANGE(), "\n"); w->print(Colors::ORANGE(), "LEVEL:"); w->print(Colors::WHITE(), std::to_string(getLevel())); w->print(Colors::ORANGE(), " XP:"); w->print(Colors::WHITE(), std::to_string(getXp())); w->print(Colors::ORANGE(), " NEXT:"); w->print(Colors::WHITE(), std::to_string(getNextLevelXp())); w->print(Colors::ORANGE(), "\n"); w->print(Colors::ORANGE(), "\n"); w->print(Colors::ORANGE(), "e: "); w->print(Colors::ORANGE(), "equip"); w->print(Colors::ORANGE(), " d: "); w->print(Colors::ORANGE(), "drop"); WindowManager::get().popup(m_menuWindow, 0.1); }
void PlayerAi::update(Actor *owner){ if (owner->destructible &&owner->destructible->isDead() ) { return; } int levelUpXp = getNextLevelXp(owner); if (owner->destructible->xp >= levelUpXp) { owner->xpLevel++; owner->destructible->xp -= levelUpXp; engine.gui->message(TCODColor::yellow,"You feel a strange rush as the enemy falls to the floor!"); engine.gui->render(); TCODConsole::root->flush(); engine.gui->menu.clear(); engine.gui->menu.addItem(Menu::CONSTITUTION,"+20 HP"); engine.gui->menu.addItem(Menu::STRENGTH,"+1 Attack"); engine.gui->menu.addItem(Menu::AGILITY,"+1 Defense"); Menu::MenuItemCode menuItem = Menu::RESUME; while (menuItem == Menu::RESUME) { menuItem = engine.gui->menu.pick(Menu::PAUSE); } switch (menuItem) { case Menu::CONSTITUTION : owner->destructible->maxHp+= 20; owner->destructible->hp += 20; break; case Menu::STRENGTH : owner->attacker->basePower += 1; owner->attacker->totalPower += 1; break; case Menu::AGILITY : owner->destructible->baseDR += 1; owner->destructible->totalDR += 1; break; default: break; } } int dx = 0, dy = 0; switch (engine.lastKey.vk) { case TCODK_KP5: engine.gameStatus = Engine::NEW_TURN; break; case TCODK_UP: case TCODK_KP8: dy = -1; break; case TCODK_KP7: dy = -1; dx = -1; break; case TCODK_KP9: dy = -1; dx = 1; break; case TCODK_KP1: dy = 1; dx = -1; break; case TCODK_KP3: dy = 1; dx = 1; break; case TCODK_DOWN: case TCODK_KP2: dy = 1; break; case TCODK_LEFT: case TCODK_KP4: dx =-1; break; case TCODK_RIGHT: case TCODK_KP6: dx = 1; break; case TCODK_CHAR: handleActionKey(owner, engine.lastKey.c, (engine.lastKey.rctrl || engine.lastKey.lctrl), (engine.lastKey.ralt || engine.lastKey.lalt)); break; default: break; } // std::cout << "got here"<< std::endl; if ( dx != 0 || dy != 0){ engine.gameStatus = Engine::NEW_TURN; if (moveOrAttack(owner,owner->x+dx,owner->y+dy)){ engine.map->computeFov(); } } }