void DrawPercentBar(PercentBar *bar, int x, int y, int curvalue, int maxvalue, int width) { if (bar->displayed_value != curvalue) DrawPercentage(x, y, SPR_HEALTHFILL, 1, bar->displayed_value, maxvalue, width); DrawPercentage(x, y, SPR_HEALTHFILL, 0, curvalue, maxvalue, width); }
bool CDriveItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width, int *focusLeft) const { if (subitem == COL_NAME) { DrawLabel(m_list, GetMyImageList(), pdc, rc, state, width, focusLeft); return true; } else if (subitem == COL_GRAPH) { if (!m_success) { return false; } if (width != NULL) { *width= 100; return true; } DrawSelection(m_list, pdc, rc, state); rc.DeflateRect(3, 5); DrawPercentage(pdc, rc, m_used, RGB(0,0,170)); return true; } else { return false; } }
bool CItem::DrawSubitem(int subitem, CDC *pdc, CRect rc, UINT state, int *width, int *focusLeft) const { if (subitem == COL_NAME) { return CTreeListItem::DrawSubitem(subitem, pdc, rc, state, width, focusLeft); } if (subitem != COL_SUBTREEPERCENTAGE) return false; bool showReadJobs = MustShowReadJobs(); if (showReadJobs && !GetOptions()->IsPacmanAnimation()) return false; if (showReadJobs && IsDone()) return false; if (width != NULL) { *width = GetSubtreePercentageWidth(); return true; } DrawSelection(GetTreeListControl(), pdc, rc, state); if (showReadJobs) { rc.DeflateRect(sizeDeflatePacman); DrawPacman(pdc, rc, GetTreeListControl()->GetItemSelectionBackgroundColor(this)); } else { rc.DeflateRect(2, 5); for (int i=0; i < GetIndent(); i++) rc.left += rc.Width() / 10; DrawPercentage(pdc, rc, GetFraction(), GetPercentageColor()); } return true; }
void TB_SaveSelect::DrawExtendedInfo() { Profile *p = &fProfiles[fCurSel]; int x, y, s; if (fPicXOffset < 0) { fPicXOffset += 8; set_clip_rect(MSG_X+4, 0, SCREEN_WIDTH, SCREEN_HEIGHT); } // player pic draw_sprite((MSG_X+8) + fPicXOffset, MSG_NORMAL_Y+8, SPR_SELECTOR_ARMS); x = (MSG_X + 12) + fPicXOffset; y = MSG_NORMAL_Y + 12; s = (p->equipmask & EQUIP_MIMIGA_MASK) ? SPR_MYCHAR_MIMIGA : SPR_MYCHAR; draw_sprite(x, y, s, 0, RIGHT); // player gun if (p->curWeapon != WPN_NONE && p->curWeapon != WPN_BLADE) { int spr, frame; GetSpriteForGun(p->curWeapon, 0, &spr, &frame); draw_sprite_at_dp(x + sprites[s].frame[0].dir[RIGHT].actionpoint.x, \ y + sprites[s].frame[0].dir[RIGHT].actionpoint.y, \ spr, frame, RIGHT); } clear_clip_rect(); // whimsical stars if (p->equipmask & EQUIP_WHIMSTAR) { x = MSG_X + 12; for(int i=0;i<3;i++) { static int frames[] = { 1, 0, 2 }; draw_sprite(x, y+20, SPR_WHIMSICAL_STAR, frames[i]); x += 10; } } // WEAPONS: x = MSG_X + 64; y = MSG_NORMAL_Y + 8; // weapon list for(int i=0;i<WPN_COUNT;i++) { if (p->weapons[i].hasWeapon) { draw_sprite(x, y, SPR_ARMSICONS, i); x += 20; } } // xp of current weapon if (p->curWeapon != WPN_NONE) { int xb = MSG_X + 64; int yb = MSG_NORMAL_Y + 26; int level = p->weapons[p->curWeapon].level; int curxp = p->weapons[p->curWeapon].xp; int maxxp = player->weapons[p->curWeapon].max_xp[level]; draw_sprite(xb, yb, SPR_XPLEVELICON); xb += 16; draw_sprite(xb, yb, SPR_WHITENUMBERS, level+1); xb += 8; draw_sprite(xb, yb, SPR_XPBAR); if ((curxp == maxxp) && level == 2) draw_sprite(xb, yb, SPR_XPBAR, 3); // MAX else DrawPercentage(xb, yb, SPR_XPBAR, 1, curxp, maxxp, sprites[SPR_XPBAR].w); } // ITEMS: x = (MSG_X + 64) - 10; y = MSG_NORMAL_Y + 40; // Booster // items list. I generally tried to put the ones that are temporary and indicate a // quantity of stage completion at the front so they'll be more likely to be visible. static int items[] = { ITEM_BOOSTER08, ITEM_BOOSTER20, ITEM_LIFE_POT, ITEM_PUPPY, ITEM_JELLYFISH_JUICE, ITEM_CHARCOAL, ITEM_GUM_BASE, ITEM_EXPLOSIVE, ITEM_SPRINKLER, ITEM_CONTROLLER, ITEM_MA_PIGNON, ITEM_LITTLE_MAN, -1 }; for(int i=0;items[i] != -1;i++) { if (CheckInventoryList(items[i], p->inventory, p->ninventory) != -1) { draw_sprite(x, y, SPR_ITEMIMAGE, items[i]); x += 28; if (x + sprites[SPR_ITEMIMAGE].w > (MSG_X + MSG_W) - 8) break; } } // health DrawHealth((MSG_X+MSG_W) - 4, MSG_NORMAL_Y+8, p); }
void DrawStatusBar(void) { int level, curxp, maxxp; int w, x; bool maxed_out; //debug("%08x", game.bossbar.object); //debug("%s", game.bossbar.defeated ? "true" : "false"); // handle animations etc RunStatusBar(); // draw boss bar if (game.bossbar.object && !game.bossbar.defeated) { #define BOSSBAR_W 198 // BOSS_X = 32 at normal resolution #define BOSS_X ((SCREEN_WIDTH / 2) - (BOSSBAR_W / 2) - 29) #define BOSS_Y (SCREEN_HEIGHT-20) draw_sprite(BOSS_X, BOSS_Y, SPR_TEXTBOX, 0, 0); draw_sprite(BOSS_X, BOSS_Y+8, SPR_TEXTBOX, 2, 0); draw_sprite(BOSS_X+8, BOSS_Y+4, SPR_BOSSHPICON, 0, 0); // e.g. bosses w/ multiple forms (Ballos) if (game.bossbar.object->hp > game.bossbar.starting_hp) game.bossbar.starting_hp = game.bossbar.object->hp; RunPercentBar(&game.bossbar.bar, game.bossbar.object->hp); DrawPercentBar(&game.bossbar.bar, BOSS_X+40, BOSS_Y+5, game.bossbar.object->hp, game.bossbar.starting_hp, BOSSBAR_W); } if (game.frozen || player->inputs_locked) return; if (fade.getstate() != FS_NO_FADE) return; if (player->hp) { if (!player->hurt_flash_state) { if (!game.debug.god) { // -- draw the health bar ----------------------------- draw_sprite(HEALTH_X, HEALTH_Y, SPR_HEALTHBAR, 0, 0); DrawPercentBar(&PHealthBar, HEALTHFILL_X, HEALTHFILL_Y, player->hp, player->maxHealth, HEALTHFILL_MAXLEN); // draw the health in numbers DrawNumberRAlign(HEALTH_X+24, HEALTH_Y, SPR_WHITENUMBERS, PHealthBar.displayed_value); } // -- draw the XP bar --------------------------------- level = player->weapons[player->curWeapon].level; curxp = player->weapons[player->curWeapon].xp; maxxp = player->weapons[player->curWeapon].max_xp[level]; if (player->curWeapon == WPN_NONE) { curxp = 0; maxxp = 1; } // draw XP bar and fill it draw_sprite(XPBAR_X+slide.lv_offset, XPBAR_Y, SPR_XPBAR, FRAME_XP_BAR, 0); maxed_out = ((curxp == maxxp) && level == 2); if (!maxed_out) DrawPercentage(XPBAR_X+slide.lv_offset, XPBAR_Y, SPR_XPBAR, FRAME_XP_FILL, curxp, maxxp, sprites[SPR_XPBAR].w); // draw the white flashing if we just got more XP // the time-left and flash-state are in separate variables-- // otherwise the Spur will not flash XP bar if (statusbar.xpflashcount) { if (++statusbar.xpflashstate & 2) { draw_sprite(XPBAR_X+slide.lv_offset, XPBAR_Y, SPR_XPBAR, FRAME_XP_FLASH, 0); } statusbar.xpflashcount--; } else statusbar.xpflashstate = 0; // draw "MAX" if (maxed_out) draw_sprite(XPBAR_X+slide.lv_offset, XPBAR_Y, SPR_XPBAR, FRAME_XP_MAX, 0); // Level Number DrawWeaponLevel(HEALTH_X + slide.lv_offset, XPBAR_Y, player->curWeapon); } // -- draw the weapon bar ----------------------------- // draw current weapon if (player->curWeapon != WPN_NONE) draw_sprite(CURWEAPON_X + slide.wpn_offset, WEAPONBAR_Y, SPR_ARMSICONS, slide.firstWeapon, 0); // draw ammo, note we draw ammo of firstweapon NOT current weapon, for slide effect DrawWeaponAmmo((AMMO_X + slide.wpn_offset + slide.ammo_offset), AMMO_Y, slide.firstWeapon); // draw other weapons w = slide.firstWeapon; x = STATUS_X + 64 + slide.wpn_offset + 1; for(;;) { if (++w >= WPN_COUNT) w = 0; if (w==slide.firstWeapon) break; if (player->weapons[w].hasWeapon) { draw_sprite(x, WEAPONBAR_Y, SPR_ARMSICONS, w, RIGHT); x += 16; } } DrawAirLeft((SCREEN_WIDTH/2) - (5*8), ((SCREEN_HEIGHT)/2)-16); } }