void Window_ShopParty::Refresh() { contents->Clear(); BitmapRef system = Cache::System(); if (item_id <= 0 || item_id > static_cast<int>(Data::items.size())) return; const std::vector<Game_Actor*>& actors = Main_Data::game_party->GetActors(); for (size_t i = 0; i < actors.size() && i < 4; i++) { Game_Actor *actor = actors[i]; int phase = (cycle / anim_rate) % 4; if (phase == 3) { phase = 1; } bool usable = actor->IsEquippable(item_id); BitmapRef bm = bitmaps[i][usable ? phase : 1][usable ? 1 : 0]; if (bm) { contents->Blit(i * 32, 0, *bm, bm->GetRect(), 255); } // (Shop) items are guaranteed to be valid const auto* new_item = ReaderUtil::GetElement(Data::items, item_id); bool equippable = usable && IsEquipment(new_item); if (equippable) { // check if item is equipped by each member bool is_equipped = false; for (int j = 1; j <= 5; ++j) { const RPG::Item* item = actor->GetEquipment(j); if (item) { is_equipped |= (item->ID == item_id); } } if (is_equipped) contents->Blit(i * 32 + 20, 24, *system, Rect(128 + 8 * phase, 24, 8, 8), 255); else { int cmp = CmpEquip(actor, new_item); if (cmp > 0) { contents->Blit(i * 32 + 20, 24, *system, Rect(128 + 8 * phase, 0, 8, 8), 255); } else if (cmp < 0) { contents->Blit(i * 32 + 20, 24, *system, Rect(128 + 8 * phase, 16, 8, 8), 255); } else { contents->Blit(i * 32 + 20, 24, *system, Rect(128 + 8 * phase, 8, 8, 8), 255); } } } } }
void Window_ShopParty::Refresh() { contents->Clear(); BitmapRef system = Cache::System(); if (item_id <= 0 || item_id > Data::items.size()) return; const std::vector<Game_Actor*>& actors = Main_Data::game_party->GetActors(); for (size_t i = 0; i < actors.size() && i < 4; i++) { Game_Actor *actor = actors[i]; int phase = (cycle / anim_rate) % 4; if (phase == 3) { phase = 1; } bool equippable = actor->IsEquippable(item_id); BitmapRef bm = bitmaps[i][equippable ? phase : 1][equippable ? 1 : 0]; if (bm) { contents->Blit(i * 32, 0, *bm, bm->GetRect(), 255); } if (equippable) { //check if item is equipped by each member bool is_equipped = false; for (int j = 0; j < 5; ++j) { const RPG::Item* item = actor->GetEquipment(j); if (item) { is_equipped |= (item->ID == item_id); } } if (is_equipped) contents->Blit(i * 32 + 20, 24, *system, Rect(128 + 8 * phase, 24, 8, 8), 255); else { RPG::Item* new_item = &Data::items[item_id - 1]; int item_type = new_item->type; RPG::Item* current_item = NULL; switch (item_type) { //get the current equipped item case RPG::Item::Type_weapon: if (actor->GetWeaponId() > 0) current_item = &Data::items[actor->GetWeaponId() - 1]; else current_item = &Data::items[0]; break; case RPG::Item::Type_helmet: if (actor->GetHelmetId() > 0) current_item = &Data::items[actor->GetHelmetId() - 1]; else current_item = &Data::items[0]; break; case RPG::Item::Type_shield: if (actor->GetShieldId() > 0) current_item = &Data::items[actor->GetShieldId() - 1]; else current_item = &Data::items[0]; break; case RPG::Item::Type_armor: if (actor->GetArmorId() > 0) current_item = &Data::items[actor->GetArmorId() - 1]; else current_item = &Data::items[0]; break; case RPG::Item::Type_accessory: if (actor->GetAccessoryId() > 0) current_item = &Data::items[actor->GetAccessoryId() -1]; else current_item = &Data::items[0]; break; } if (current_item != NULL) { int diff_atk = new_item->atk_points1 - current_item->atk_points1; int diff_def = new_item->def_points1 - current_item->def_points1; int diff_spi = new_item->spi_points1 - current_item->spi_points1; int diff_agi = new_item->agi_points1 - current_item->agi_points1; if (diff_atk > 0 || diff_def > 0 || diff_spi > 0 || diff_agi > 0) contents->Blit(i * 32 + 20, 24, *system, Rect(128 + 8 * phase, 0, 8, 8), 255); else if (diff_atk < 0 || diff_def < 0 || diff_spi < 0 || diff_agi < 0) contents->Blit(i * 32 + 20, 24, *system, Rect(128 + 8 * phase, 16, 8, 8), 255); else contents->Blit(i * 32 + 20, 24, *system, Rect(128 + 8 * phase, 8, 8, 8), 255); } } } } }