Beispiel #1
0
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);
				}
			}
		}
	}
}
Beispiel #2
0
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);
				}
			}
		}
	}
}