void bloodSplatter(int x, int y, float intensity) { drawCharBackEx(getLevelConsole(), x, y, TCOD_color_RGB(200, 15, 15), TCOD_BKGND_ALPHA(intensity)); }
void Gui::render(){ //clear the off-screen consoles con->setDefaultBackground(TCODColor::black); con->clear(); sidebar->setDefaultBackground(TCODColor::black); sidebar->clear(); sidebar->setDefaultForeground(TCODColor(100,180,250)); sidebar->printFrame(0,0,MSG_X,engine.screenHeight - con->getHeight(), true, TCOD_BKGND_ALPHA(50),"CHARACTER INFO"); if (engine.player->destructible->shield) { //draw the shield bar, if it is there renderBar(1,5,BAR_WIDTH,"SHIELD",engine.player->destructible->shield, engine.player->destructible->maxShield, TCODColor::green,TCODColor::darkerGreen); } else { //draw the health bar renderBar(1,5,BAR_WIDTH,"HP",engine.player->destructible->hp, engine.player->destructible->maxHp, TCODColor::lightRed,TCODColor::darkerRed); } //draw the palyer's mana bar, if they have one if (engine.player->caster) { renderBar(1,7,BAR_WIDTH,"MANA",engine.player->caster->mana, engine.player->caster->maxMana, TCODColor::lightBlue,TCODColor::darkerBlue); } //draw the XP bar char xpTxt[128]; sprintf(xpTxt,"XP(%d)",engine.player->xpLevel); renderBar(1,9,BAR_WIDTH,xpTxt,engine.player->destructible->xp, ((PlayerAi*)engine.player->ai)->getNextLevelXp(engine.player),TCODColor::lightViolet,TCODColor::darkerViolet); //draw the last target's hp bar if ((engine.player->attacker->lastTarget != NULL)&&(engine.player->attacker->lastTarget!=engine.player)&&(!engine.player->attacker->lastTarget->destructible->isDead())) { if (engine.player->attacker->lastTarget->destructible->shield){ renderBar(1,13,BAR_WIDTH, "target's Shield",engine.player->attacker->lastTarget->destructible->shield, engine.player->attacker->lastTarget->destructible->maxShield,TCODColor::green, TCODColor::darkerGreen); } else { renderBar(1,13,BAR_WIDTH, "target's HP",engine.player->attacker->lastTarget->destructible->hp, engine.player->attacker->lastTarget->destructible->maxHp,TCODColor::lightRed, TCODColor::darkerRed); } } //draw the message log int y=0; float colorCoef = 0.4f; for (Message **it = log.begin(); it != log.end(); it++){ Message *message = *it; con->setDefaultForeground(message->col * colorCoef); con->print(0,y,message->text); y++; if (colorCoef < 1.0f) { colorCoef+=0.3f; } } //dungeon level sidebar->setDefaultForeground(TCODColor::white); sidebar->print(3,11,"Dungeon level %d", engine.level); //character name sidebar->print(3,3,"Name: %s",engine.player->getName(true)); if (engine.player->caster && engine.player->caster->hasCantus()) { sidebar->setDefaultForeground(engine.player->caster->cantusColor()); sidebar->print(1,17,"Current Cantus: %s",engine.player->caster->getCantus()); sidebar->print(1,19,"%d",engine.player->caster->cantusValue); } //blit the GUI consoles on the root console TCODConsole::blit(con,0,0,engine.screenWidth,PANEL_HEIGHT, TCODConsole::root,0,engine.screenHeight-PANEL_HEIGHT); TCODConsole::blit(sidebar,0,0,MSG_X,engine.screenHeight-PANEL_HEIGHT, TCODConsole::root,0,0); }
void drawLights() { int x, y, x1, y1, highest, distMod, changed = 1; light *ptr = LIGHTS; TCOD_console_t lightConsole = getLightConsole(); lightMap = malloc(sizeof(double[255][255])); for (y = 0; y <= WINDOW_HEIGHT; y++) { for (x = 0; x <= WINDOW_WIDTH; x++) { lightMap[x][y] = 0; } } while (ptr != NULL) { _drawLight(ptr); ptr = ptr->next; } while (changed) { changed = 0; for (y = 0; y <= WINDOW_HEIGHT; y++) { for (x = 0; x <= WINDOW_WIDTH; x++) { if (!isPositionWalkable(x, y)) { continue; } highest = -1; if (lightMap[x][y]) { continue; } for (y1 = -1; y1 <= 1; y1++) { for (x1 = -1; x1 <= 1; x1++) { if (!isPositionWalkable(x + x1, y + y1)) { continue; } distMod = lightMap[x + x1][y + y1]; if (lightMap[x + x1][y + y1] > highest) { highest = lightMap[x + x1][y + y1]; } //drawCharBackEx(lightConsole, x + x1, y + y1, TCOD_color_RGB(250 - distMod, 200 - distMod, 0), TCOD_BKGND_ALPHA(1.f)); } } if (highest > 14) { highest -= 14; if (highest < 0) { continue; } lightMap[x][y] = highest; changed = 1; } } } } for (y = 0; y <= WINDOW_HEIGHT; y++) { for (x = 0; x <= WINDOW_WIDTH; x++) { if (lightMap[x][y]) { distMod = lightMap[x][y]; drawCharBackEx(lightConsole, x, y, TCOD_color_RGB(65, 65, 65), TCOD_BKGND_ALPHA(distMod / 64.f)); TCOD_map_set_properties(LIGHT_MAP, x, y, 1, 1); } } } }
Menu::MenuItemCode Menu::pick(DisplayMode mode) { //the image stuff is supposed to be here //no image off the website, so ignore the image stuff for now int selectedItem = 0; int menux,menuy; if (mode == PAUSE) { menux = engine.screenWidth/2 - PAUSE_MENU_WIDTH/2; menuy = engine.screenHeight/2 - PAUSE_MENU_HEIGHT/2; TCODConsole::root->setDefaultForeground(TCODColor(200,180,50)); TCODConsole::root->printFrame(menux,menuy,PAUSE_MENU_WIDTH,PAUSE_MENU_HEIGHT,true, TCOD_BKGND_ALPHA(70),"PAUSE"); menux += 2; menuy += 3; } else { //static TCODImage img("harold.png"); //img.blit2x(TCODConsole::root,0,0); menux = 65; TCODConsole::root->setDefaultForeground(TCODColor::black); TCODConsole::root->print(18,2,"HAROLD THE SORCEROR"); menuy = TCODConsole::root->getHeight()/3; TCODConsole::root->setDefaultBackground(TCODColor::black); } while(!TCODConsole::isWindowClosed()) { int currentItem = 0; for (MenuItem **it = items.begin(); it != items.end(); it++) { if (currentItem == selectedItem) { TCODConsole::root->setDefaultForeground(TCODColor::lighterOrange); } else { TCODConsole::root->setDefaultForeground(TCODColor::blue); } TCODConsole::root->print(menux,menuy+currentItem*3,(*it)->label); currentItem++; } TCODConsole::flush(); //check key presess TCOD_key_t key; TCODSystem::checkForEvent(TCOD_EVENT_KEY_PRESS,&key,NULL); switch(key.vk) { case TCODK_UP: selectedItem--; if (selectedItem < 0) { selectedItem = items.size()-1; } break; case TCODK_DOWN: selectedItem = (selectedItem + 1) % items.size(); break; case TCODK_ENTER: return items.get(selectedItem)->code; case TCODK_ESCAPE: if (mode == PAUSE) { return RESUME; } break; default: break; } } return NONE; }