comments on copy_graphic()
This commit is contained in:
@@ -62,6 +62,7 @@ size_t cCustomGraphics::count(bool party) {
|
|||||||
|
|
||||||
void cCustomGraphics::copy_graphic(pic_num_t dest, pic_num_t src, size_t numSlots) {
|
void cCustomGraphics::copy_graphic(pic_num_t dest, pic_num_t src, size_t numSlots) {
|
||||||
if(numSlots < 1) return;
|
if(numSlots < 1) return;
|
||||||
|
// If the party doesn't have an export sheet, create one.
|
||||||
if(!party_sheet) {
|
if(!party_sheet) {
|
||||||
sf::Image empty;
|
sf::Image empty;
|
||||||
empty.create(280, 180, sf::Color::Transparent);
|
empty.create(280, 180, sf::Color::Transparent);
|
||||||
@@ -88,16 +89,23 @@ void cCustomGraphics::copy_graphic(pic_num_t dest, pic_num_t src, size_t numSlot
|
|||||||
sf::RenderTexture temp;
|
sf::RenderTexture temp;
|
||||||
rectangle from_rect, to_rect;
|
rectangle from_rect, to_rect;
|
||||||
for(size_t i = 0; i < numSlots; i++) {
|
for(size_t i = 0; i < numSlots; i++) {
|
||||||
|
// Find the custom graphic sheet and source rectangle from the scenario
|
||||||
graf_pos_ref(from_sheet, from_rect) = find_graphic(src + i);
|
graf_pos_ref(from_sheet, from_rect) = find_graphic(src + i);
|
||||||
|
// Find an export sheet and destination rectangle in the party's stored graphics
|
||||||
graf_pos_ref(to_sheet, to_rect) = find_graphic(dest + i, true);
|
graf_pos_ref(to_sheet, to_rect) = find_graphic(dest + i, true);
|
||||||
if(to_sheet != last_src) {
|
if(to_sheet != last_src) {
|
||||||
|
// Moved to the next sheet, commit the previous one
|
||||||
if(last_src) last_src.reset(new sf::Texture(temp.getTexture()));
|
if(last_src) last_src.reset(new sf::Texture(temp.getTexture()));
|
||||||
last_src = to_sheet;
|
last_src = to_sheet;
|
||||||
|
// Make a temporary render texture
|
||||||
temp.create(to_sheet->getSize().x, to_sheet->getSize().y);
|
temp.create(to_sheet->getSize().x, to_sheet->getSize().y);
|
||||||
|
// Draw the existing stored graphics onto the temporary texture
|
||||||
rect_draw_some_item(*to_sheet, rectangle(*to_sheet), temp, rectangle(*to_sheet));
|
rect_draw_some_item(*to_sheet, rectangle(*to_sheet), temp, rectangle(*to_sheet));
|
||||||
}
|
}
|
||||||
|
// Draw the graphic that needs to be stored onto the temporary texture
|
||||||
rect_draw_some_item(*from_sheet, from_rect, temp, to_rect);
|
rect_draw_some_item(*from_sheet, from_rect, temp, to_rect);
|
||||||
}
|
}
|
||||||
|
// Commit the temporary texture to the export sheet
|
||||||
last_src.reset(new sf::Texture(temp.getTexture()));
|
last_src.reset(new sf::Texture(temp.getTexture()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user