void Screen::Print() { w->ReadLock(); if ( updated || !player ) { w->Unlock(); return; } updated=true; switch ( player->UsingType() ) { case OPEN: PrintInv(rightWin, player->UsingBlock()->HasInventory()); break; default: PrintFront(rightWin); } switch ( player->UsingSelfType() ) { case OPEN: if ( player->PlayerInventory() ) { PrintInv(leftWin, player->PlayerInventory()); break; } //no break; default: PrintNormal(leftWin); } const short dur=player->HP(); const short breath=player->Breath(); const short satiation=player->Satiation(); werase(hudWin); ushort i; //quick inventory Inventory * const inv=player->GetP() ? player->GetP()->HasInventory() : 0; if ( inv ) { for (i=0; i<inv->Size(); ++i) { wstandend(hudWin); const int x=36+i*2; mvwaddch(hudWin, 0, x, 'a'+i); if ( inv->Number(i) ) { wcolor_set(hudWin, Color( inv->GetInvKind(i), inv->GetInvSub(i) ), NULL); mvwaddch(hudWin, 1, x, CharName( inv->GetInvKind(i), inv->GetInvSub(i) )); mvwprintw(hudWin, 2, x, "%hu", inv->Number(i)); } } } w->Unlock(); wstandend(leftWin); QString str; if ( -1!=dur ) { //HitPoints line str=QString("%1").arg(dur, -10, 10, QChar('.')); mvwaddstr(leftWin, SCREEN_SIZE+1, 1, "HP[..........]"); wcolor_set(leftWin, WHITE_RED, NULL); mvwaddstr(leftWin, SCREEN_SIZE+1, 4, qPrintable(str.left(10*dur/MAX_DURABILITY+1))); wstandend(leftWin); } if ( -1!=breath ) { //breath line str=QString("%1").arg(breath, -10, 10, QChar('.')); mvwaddstr(leftWin, SCREEN_SIZE+1, SCREEN_SIZE*2-13, "BR[..........]"); wcolor_set(leftWin, WHITE_BLUE, NULL); mvwaddstr(leftWin, SCREEN_SIZE+1, SCREEN_SIZE*2-13+3, qPrintable(str.left(10*breath/MAX_BREATH+1))); } //action mode (void)wmove(hudWin, 0, 0); wstandend(hudWin); waddstr(hudWin, "Action: "); switch ( actionMode ) { case USE: waddstr(hudWin, "Use in inventory"); break; case THROW: waddstr(hudWin, "Throw"); break; case OBTAIN: waddstr(hudWin, "Obtain"); break; case WIELD: waddstr(hudWin, "Wield"); break; case INSCRIBE: waddstr(hudWin, "Inscribe in inventory"); break; case EAT: waddstr(hudWin, "Eat"); break; case BUILD: waddstr(hudWin, "Build"); break; case CRAFT: waddstr(hudWin, "Craft"); break; case TAKEOFF: waddstr(hudWin, "Take off"); break; default: waddstr(hudWin, "Unknown"); fprintf(stderr, "Screen::Print: Unlisted actionMode: %d\n", actionMode); } if ( -1!=satiation ) { //satiation line (void)wmove(hudWin, 1, 0); if ( SECONDS_IN_DAY<satiation ) { wcolor_set(hudWin, BLUE_BLACK, NULL); waddstr(hudWin, "Gorged"); } else if ( 3*SECONDS_IN_DAY/4<satiation ) { wcolor_set(hudWin, GREEN_BLACK, NULL); waddstr(hudWin, "Full"); } else if (SECONDS_IN_DAY/4>satiation) { wcolor_set(hudWin, RED_BLACK, NULL); waddstr(hudWin, "Hungry"); } } //shifted focus wstandend(hudWin); if ( shiftFocus ) { mvwaddstr(hudWin, 0, 100, ( -1==shiftFocus ) ? "Focus shift down" : "Focus shift up"); } if ( player->GetCreativeMode() ) { mvwaddstr(leftWin, SCREEN_SIZE+1, 1, "Creative Mode"); //coordinates mvwprintw(hudWin, 1, 0, "xyz: %hu, %hu, %hu. XY: %ld, %ld", player->X(), player->Y(), player->Z(), player->GetLatitude(), player->GetLongitude()); wcolor_set(leftWin, BLACK_WHITE, NULL); switch ( player->Dir() ) { case NORTH: mvwaddstr(leftWin, SCREEN_SIZE+1, SCREEN_SIZE*2-8, "^ North ^"); break; case SOUTH: mvwaddstr(leftWin, SCREEN_SIZE+1, SCREEN_SIZE*2-8, "v South v"); break; case EAST: mvwaddstr(leftWin, SCREEN_SIZE+1, SCREEN_SIZE*2-8, "> East>"); break; case WEST: mvwaddstr(leftWin, SCREEN_SIZE+1, SCREEN_SIZE*2-8, "<West <"); break; } } else if ( player->GetP() && player->GetP()->IsFalling() ) { mvwaddstr(hudWin, 2, 0, "Falling!"); } wnoutrefresh(hudWin); wnoutrefresh(leftWin); doupdate(); }
void CInvStubPrnWin::OnButton2(int iEvent, unsigned char * pEventData, int iDataLen) { PrintInv(0); }