示例#1
0
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);
}
示例#2
0
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();
		}
	}
}