(partial merge of 97f0723a4c69580457a4e1ba4b0ff60ecd4e2621)
Also prep for color shifts in rendering + try to merge all rect_draw_some_item functions
This commit is contained in:
@@ -658,7 +658,7 @@ void put_text_bar(std::string str) {
|
||||
|
||||
void refresh_text_bar() {
|
||||
mainPtr.setActive(false);
|
||||
rect_draw_some_item(text_bar_gworld.getTexture(), rectangle(text_bar_gworld), mainPtr, win_to_rects[WINRECT_STATUS]);
|
||||
rect_draw_some_item(Texture(text_bar_gworld.getTexture()), rectangle(text_bar_gworld), mainPtr, win_to_rects[WINRECT_STATUS]);
|
||||
mainPtr.setActive();
|
||||
}
|
||||
|
||||
@@ -847,7 +847,7 @@ void draw_terrain(short mode) {
|
||||
place_trim((short) q,(short) r,where_draw,spec_terrain);
|
||||
// if((is_town() && univ.town.is_spot(where_draw.x,where_draw.y)) ||
|
||||
// (is_out() && univ.out.outdoors[univ.party.i_w_c.x][univ.party.i_w_c.y].is_special_spot(where_draw.x,where_draw.y)))
|
||||
// Draw_Some_Item(roads_gworld, calc_rect(6, 0), terrain_screen_gworld, loc(q,r), 1, 0);
|
||||
// Draw_Some_Item(roads_gworld, calc_rect(6, 0), terrain_screen_gworld, loc(q,r));
|
||||
// TODO: Move draw_sfx, draw_items, draw_fields, draw_spec_items, etc to here
|
||||
|
||||
if(is_town() || is_combat())
|
||||
@@ -899,7 +899,7 @@ void draw_terrain(short mode) {
|
||||
// Draw top half of forcecages (this list is populated by draw_fields)
|
||||
// TODO: Move into the above loop to eliminate global variable
|
||||
for(location fc_loc : forcecage_locs)
|
||||
Draw_Some_Item(*ResMgr::textures.get("fields"),calc_rect(2,0),terrain_screen_gworld,fc_loc,1,0);
|
||||
Draw_Some_Item(*ResMgr::textures.get("fields"),calc_rect(2,0),terrain_screen_gworld,fc_loc);
|
||||
// Draw any posted labels, then clear them out
|
||||
clip_rect(terrain_screen_gworld, {13, 13, 337, 265});
|
||||
for(text_label_t lbl : posted_labels)
|
||||
@@ -1068,7 +1068,7 @@ static void init_trim_mask(std::unique_ptr<sf::Texture>& mask, rectangle src_rec
|
||||
render.create(28, 36);
|
||||
render.clear(sf::Color::White);
|
||||
rect_draw_some_item(*ResMgr::textures.get("trim"), src_rect, render, dest_rect);
|
||||
render.display();
|
||||
//render.display(); checkme: understand why this leads to up/down picture
|
||||
mask.reset(new sf::Texture);
|
||||
mask->create(28, 36);
|
||||
mask->update(render.getTexture().copyToImage());
|
||||
@@ -1139,11 +1139,9 @@ void draw_trim(short q,short r,short which_trim,ter_num_t ground_ter) {
|
||||
init_trim_mask(walkway_masks[which], walkway_rects[which]);
|
||||
mask = walkway_masks[which].get();
|
||||
}
|
||||
|
||||
if (mask)
|
||||
rect_draw_some_item(from_gworld, from_rect, *mask, terrain_screen_gworld, to_rect);
|
||||
else
|
||||
rect_draw_some_item(from_gworld, from_rect, terrain_screen_gworld, to_rect);
|
||||
RenderState state;
|
||||
if (mask) state.set_mask(*mask);
|
||||
rect_draw_some_item(from_gworld, from_rect, terrain_screen_gworld, to_rect, state);
|
||||
}
|
||||
|
||||
|
||||
@@ -1473,7 +1471,7 @@ void draw_pointing_arrows() {
|
||||
|
||||
void redraw_terrain() {
|
||||
rectangle to_rect = win_to_rects[WINRECT_TERVIEW], from_rect(terrain_screen_gworld);
|
||||
rect_draw_some_item(terrain_screen_gworld.getTexture(), from_rect, mainPtr, to_rect);
|
||||
rect_draw_some_item(Texture(terrain_screen_gworld.getTexture()), from_rect, mainPtr, to_rect);
|
||||
apply_light_mask(true);
|
||||
|
||||
|
||||
@@ -1611,7 +1609,7 @@ void redraw_partial_terrain(rectangle redraw_rect) {
|
||||
// as rect_draw_some_item will shift redraw_rect before drawing, we need to compensate
|
||||
redraw_rect.offset(5,5);
|
||||
|
||||
rect_draw_some_item(terrain_screen_gworld.getTexture(),from_rect,mainPtr,redraw_rect);
|
||||
rect_draw_some_item(Texture(terrain_screen_gworld.getTexture()),from_rect,mainPtr,redraw_rect);
|
||||
|
||||
}
|
||||
|
||||
|
@@ -154,11 +154,11 @@ void draw_monsters() {
|
||||
if(combat_posing_monster == i + 100) need_pic += (2 * width * height);
|
||||
Texture src_gw;
|
||||
std::tie(src_gw,source_rect) = spec_scen_g.find_graphic(need_pic, isParty);
|
||||
Draw_Some_Item(src_gw, source_rect, terrain_screen_gworld, store_loc, 1, 0);
|
||||
Draw_Some_Item(src_gw, source_rect, terrain_screen_gworld, store_loc);
|
||||
} else {
|
||||
Texture src_gw;
|
||||
cPict::get_picture(cPictNum(monst.picture_num,PIC_MONST), src_gw, source_rect, (monst.direction < 4 ? 0 : 2) + (combat_posing_monster == i + 100 ? 1 : 0), k);
|
||||
Draw_Some_Item(src_gw, source_rect, terrain_screen_gworld, store_loc, 1, 0);
|
||||
Draw_Some_Item(src_gw, source_rect, terrain_screen_gworld, store_loc);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -182,7 +182,7 @@ void draw_combat_pc(cPlayer& who, location center, bool attacking) {
|
||||
rectangle source_rect;
|
||||
Texture from_gw;
|
||||
if (cPict::get_picture(who.get_picture_num(), from_gw, source_rect, (who.direction >= 4 ? 2 : 0) + (attacking ? 1 : 0)))
|
||||
Draw_Some_Item(from_gw, source_rect, terrain_screen_gworld, where_draw, 1, 0);
|
||||
Draw_Some_Item(from_gw, source_rect, terrain_screen_gworld, where_draw);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,7 +255,7 @@ void draw_outd_boats(location center) {
|
||||
if(point_onscreen(center, loc) && can_see_light(center, loc, sight_obscurity) < 5) {
|
||||
where_draw.x = loc.x - center.x + 4;
|
||||
where_draw.y = loc.y - center.y + 4;
|
||||
Draw_Some_Item(vehicle_gworld, calc_rect(0,0), terrain_screen_gworld, where_draw, 1, 0);
|
||||
Draw_Some_Item(vehicle_gworld, calc_rect(0,0), terrain_screen_gworld, where_draw);
|
||||
}
|
||||
}
|
||||
for(auto& horse : univ.party.horses) {
|
||||
@@ -271,7 +271,7 @@ void draw_outd_boats(location center) {
|
||||
if(point_onscreen(center, loc) && can_see_light(center, loc, sight_obscurity) < 5) {
|
||||
where_draw.x = loc.x - center.x + 4;
|
||||
where_draw.y = loc.y - center.y + 4;
|
||||
Draw_Some_Item(vehicle_gworld, calc_rect(0,1), terrain_screen_gworld, where_draw, 1, 0);
|
||||
Draw_Some_Item(vehicle_gworld, calc_rect(0,1), terrain_screen_gworld, where_draw);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -288,7 +288,7 @@ void draw_town_boat(location center) {
|
||||
if(point_onscreen(center, boat.loc) && can_see_light(center, boat.loc, sight_obscurity) < 5 && pt_in_light(center, boat.loc)) {
|
||||
where_draw.x = boat.loc.x - center.x + 4;
|
||||
where_draw.y = boat.loc.y - center.y + 4;
|
||||
Draw_Some_Item(vehicle_gworld, calc_rect(1,0), terrain_screen_gworld, where_draw, 1, 0);
|
||||
Draw_Some_Item(vehicle_gworld, calc_rect(1,0), terrain_screen_gworld, where_draw);
|
||||
}
|
||||
}
|
||||
for(auto const &horse : univ.party.horses) {
|
||||
@@ -298,7 +298,7 @@ void draw_town_boat(location center) {
|
||||
if(point_onscreen(center, horse.loc) && can_see_light(center, horse.loc, sight_obscurity) < 5 && pt_in_light(center, horse.loc)) {
|
||||
where_draw.x = horse.loc.x - center.x + 4;
|
||||
where_draw.y = horse.loc.y - center.y + 4;
|
||||
Draw_Some_Item(vehicle_gworld, calc_rect(1,1), terrain_screen_gworld, where_draw, 1, 0);
|
||||
Draw_Some_Item(vehicle_gworld, calc_rect(1,1), terrain_screen_gworld, where_draw);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -312,7 +312,7 @@ void draw_fields(location where){
|
||||
Texture const & fields_gworld = *ResMgr::textures.get("fields");
|
||||
if(is_out()){
|
||||
if(univ.out.is_spot(where.x,where.y))
|
||||
Draw_Some_Item(fields_gworld,calc_rect(4,0),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(4,0),terrain_screen_gworld,where_draw);
|
||||
return;
|
||||
}
|
||||
if (!univ.town->is_on_map(where))
|
||||
@@ -320,51 +320,51 @@ void draw_fields(location where){
|
||||
auto const fields=univ.town.fields[where.x][where.y];
|
||||
if ((fields&~(unsigned long)SPECIAL_EXPLORED)==0) return;
|
||||
if(fields & WALL_FORCE)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(0,1),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(0,1),terrain_screen_gworld,where_draw,0xFFFFFF7F);
|
||||
if(fields & WALL_FIRE)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(1,1),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(1,1),terrain_screen_gworld,where_draw);
|
||||
if(fields & FIELD_ANTIMAGIC)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(2,1),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(2,1),terrain_screen_gworld,where_draw);
|
||||
if(fields & CLOUD_STINK)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(3,1),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(3,1),terrain_screen_gworld,where_draw,0x7FFF7FFF);
|
||||
if(fields & WALL_ICE)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(4,1),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(4,1),terrain_screen_gworld,where_draw);
|
||||
if(fields & WALL_BLADES)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(5,1),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(5,1),terrain_screen_gworld,where_draw);
|
||||
if(fields & CLOUD_SLEEP)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(6,1),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(6,1),terrain_screen_gworld,where_draw);
|
||||
if(fields & OBJECT_BLOCK)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(3,0),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(3,0),terrain_screen_gworld,where_draw);
|
||||
if(!is_combat() && (fields & SPECIAL_SPOT))
|
||||
Draw_Some_Item(fields_gworld,calc_rect(4,0),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(4,0),terrain_screen_gworld,where_draw);
|
||||
if(fields & FIELD_WEB)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(5,0),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(5,0),terrain_screen_gworld,where_draw);
|
||||
if(fields & OBJECT_CRATE)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(6,0),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(6,0),terrain_screen_gworld,where_draw);
|
||||
if(fields & OBJECT_BARREL)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(7,0),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(7,0),terrain_screen_gworld,where_draw);
|
||||
if(fields & (BARRIER_FIRE | BARRIER_FORCE))
|
||||
Draw_Some_Item(*ResMgr::textures.get("teranim"),calc_rect(8+(anim_ticks%4),4),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(*ResMgr::textures.get("teranim"),calc_rect(8+(anim_ticks%4),4),terrain_screen_gworld,where_draw);
|
||||
if(fields & FIELD_QUICKFIRE)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(7,1),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(7,1),terrain_screen_gworld,where_draw);
|
||||
if(fields & SFX_SMALL_BLOOD)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(0,3),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(0,3),terrain_screen_gworld,where_draw);
|
||||
if(fields & SFX_MEDIUM_BLOOD)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(1,3),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(1,3),terrain_screen_gworld,where_draw);
|
||||
if(fields & SFX_LARGE_BLOOD)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(2,3),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(2,3),terrain_screen_gworld,where_draw);
|
||||
if(fields & SFX_SMALL_SLIME)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(3,3),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(3,3),terrain_screen_gworld,where_draw);
|
||||
if(fields & SFX_LARGE_SLIME)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(4,3),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(4,3),terrain_screen_gworld,where_draw);
|
||||
if(fields & SFX_ASH)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(5,3),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(5,3),terrain_screen_gworld,where_draw);
|
||||
if(fields & SFX_BONES)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(6,3),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(6,3),terrain_screen_gworld,where_draw);
|
||||
if(fields & SFX_RUBBLE)
|
||||
Draw_Some_Item(fields_gworld,calc_rect(7,3),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(7,3),terrain_screen_gworld,where_draw);
|
||||
if(fields & BARRIER_CAGE) {
|
||||
Draw_Some_Item(fields_gworld,calc_rect(1,0),terrain_screen_gworld,where_draw,1,0);
|
||||
Draw_Some_Item(fields_gworld,calc_rect(1,0),terrain_screen_gworld,where_draw);
|
||||
forcecage_locs.push_back(where_draw);
|
||||
}
|
||||
}
|
||||
@@ -398,17 +398,17 @@ void draw_party_symbol(location center) {
|
||||
else {
|
||||
Texture from_gw;
|
||||
cPict::get_picture(univ.party[i].get_picture_num(), from_gw, source_rect, (univ.party.direction >= 4 ? 2 : 0));
|
||||
Draw_Some_Item(from_gw, source_rect, terrain_screen_gworld, target, 1, 0);
|
||||
Draw_Some_Item(from_gw, source_rect, terrain_screen_gworld, target);
|
||||
}
|
||||
}
|
||||
else if(univ.party.in_boat >= 0) {
|
||||
if(univ.party.direction == DIR_N) i = 2;
|
||||
else if(univ.party.direction == DIR_S) i = 3;
|
||||
else i = univ.party.direction > DIR_S;
|
||||
Draw_Some_Item(*ResMgr::textures.get("vehicle"), calc_rect(i,0), terrain_screen_gworld, target, 1, 0);
|
||||
Draw_Some_Item(*ResMgr::textures.get("vehicle"), calc_rect(i,0), terrain_screen_gworld, target);
|
||||
}else {
|
||||
i = univ.party.direction > 3;
|
||||
Draw_Some_Item(*ResMgr::textures.get("vehicle"), calc_rect(i + 2, 1), terrain_screen_gworld, target, 1, 0);
|
||||
Draw_Some_Item(*ResMgr::textures.get("vehicle"), calc_rect(i + 2, 1), terrain_screen_gworld, target);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -283,7 +283,7 @@ void draw(bool need_refresh) {
|
||||
win_draw_string(windows, map_bar_rect,"(Hit Escape to close.)",eTextMode::WRAP,style);
|
||||
|
||||
if(canMap) {
|
||||
rect_draw_some_item(gworld.getTexture(),area_to_draw_from,windows,area_to_draw_on);
|
||||
rect_draw_some_item(Texture(gworld.getTexture()),area_to_draw_from,windows,area_to_draw_on);
|
||||
|
||||
// Now place PCs and monsters
|
||||
if(draw_pcs) {
|
||||
|
@@ -356,7 +356,7 @@ void do_missile_anim(short num_steps,location missile_origin,short sound_num) {
|
||||
to_rect.bottom -= 10; // Adjust for pointing buttons
|
||||
rectangle oldBounds = to_rect;
|
||||
to_rect.offset(current_terrain_ul);
|
||||
rect_draw_some_item(terrain_screen_gworld.getTexture(),oldBounds,mainPtr,to_rect);
|
||||
rect_draw_some_item(Texture(terrain_screen_gworld.getTexture()),oldBounds,mainPtr,to_rect);
|
||||
|
||||
mainPtr.setActive(false);
|
||||
|
||||
@@ -456,7 +456,7 @@ void do_missile_anim(short num_steps,location missile_origin,short sound_num) {
|
||||
to_rect.bottom -= 10; // Adjust for pointing buttons
|
||||
rectangle oldRect = to_rect;
|
||||
to_rect.offset(current_terrain_ul);
|
||||
rect_draw_some_item(terrain_screen_gworld.getTexture(),oldRect,mainPtr,to_rect);
|
||||
rect_draw_some_item(Texture(terrain_screen_gworld.getTexture()),oldRect,mainPtr,to_rect);
|
||||
}
|
||||
|
||||
short get_missile_direction(location origin_point,location the_point) {
|
||||
@@ -520,7 +520,7 @@ void do_explosion_anim(short /*sound_num*/,short special_draw, short snd) {
|
||||
to_rect.bottom -= 10; // Adjust for pointing buttons
|
||||
rectangle oldRect = to_rect;
|
||||
to_rect.offset(current_terrain_ul);
|
||||
rect_draw_some_item(terrain_screen_gworld.getTexture(),oldRect,mainPtr,to_rect);
|
||||
rect_draw_some_item(Texture(terrain_screen_gworld.getTexture()),oldRect,mainPtr,to_rect);
|
||||
}
|
||||
|
||||
TextStyle style;
|
||||
@@ -803,7 +803,7 @@ void draw_shop_graphics(bool pressed,rectangle clip_area_rect) {
|
||||
|
||||
void refresh_shopping() {
|
||||
rectangle from_rect(talk_gworld);
|
||||
rect_draw_some_item(talk_gworld.getTexture(),from_rect,mainPtr,talk_area_rect);
|
||||
rect_draw_some_item(Texture(talk_gworld.getTexture()),from_rect,mainPtr,talk_area_rect);
|
||||
}
|
||||
|
||||
static ePicType get_monst_pictype(mon_num_t monst) {
|
||||
@@ -832,7 +832,7 @@ static void place_talk_face() {
|
||||
void click_talk_rect(word_rect_t word) {
|
||||
rectangle talkRect(talk_gworld), wordRect(word.rect);
|
||||
mainPtr.setActive();
|
||||
rect_draw_some_item(talk_gworld.getTexture(),rectangle(talk_gworld),mainPtr,talk_area_rect);
|
||||
rect_draw_some_item(Texture(talk_gworld.getTexture()),rectangle(talk_gworld),mainPtr,talk_area_rect);
|
||||
wordRect.offset(talk_area_rect.topLeft());
|
||||
TextStyle style;
|
||||
style.font = FONT_DUNGEON;
|
||||
@@ -843,7 +843,7 @@ void click_talk_rect(word_rect_t word) {
|
||||
place_talk_face();
|
||||
mainPtr.display();
|
||||
play_sound(37, time_in_ticks(5));
|
||||
rect_draw_some_item(talk_gworld.getTexture(),rectangle(talk_gworld),mainPtr,talk_area_rect);
|
||||
rect_draw_some_item(Texture(talk_gworld.getTexture()),rectangle(talk_gworld),mainPtr,talk_area_rect);
|
||||
place_talk_face();
|
||||
}
|
||||
|
||||
@@ -1004,14 +1004,14 @@ void place_talk_str(std::string str_to_place,std::string str_to_place2,short col
|
||||
|
||||
// Finally place processed graphics
|
||||
mainPtr.setActive();
|
||||
rect_draw_some_item(talk_gworld.getTexture(),oldRect,mainPtr,talk_area_rect);
|
||||
rect_draw_some_item(Texture(talk_gworld.getTexture()),oldRect,mainPtr,talk_area_rect);
|
||||
// I have no idea what this check is for; I'm just preserving it in case it was important
|
||||
if(c_rect.right == 0) place_talk_face();
|
||||
}
|
||||
|
||||
void refresh_talking() {
|
||||
rectangle tempRect(talk_gworld);
|
||||
rect_draw_some_item(talk_gworld.getTexture(),tempRect,mainPtr,talk_area_rect);
|
||||
rect_draw_some_item(Texture(talk_gworld.getTexture()),tempRect,mainPtr,talk_area_rect);
|
||||
place_talk_face();
|
||||
}
|
||||
|
||||
|
@@ -251,7 +251,7 @@ void put_item_screen(eItemWinMode screen_num) {
|
||||
default: // on an items page
|
||||
pc = screen_num;
|
||||
sout.str("");;
|
||||
sout << univ.party[pc].name << " inventory:",
|
||||
sout << univ.party[pc].name << " inventory:";
|
||||
win_draw_string(item_stats_gworld,upper_frame_rect,sout.str(),eTextMode::WRAP,style);
|
||||
break;
|
||||
}
|
||||
@@ -660,9 +660,9 @@ void refresh_stat_areas(short mode) {
|
||||
|
||||
if(mode == 1) x = sf::BlendAdd;
|
||||
else x = sf::BlendNone;
|
||||
rect_draw_some_item(pc_stats_gworld.getTexture(), rectangle(pc_stats_gworld), mainPtr, win_to_rects[WINRECT_PCSTATS], x);
|
||||
rect_draw_some_item(item_stats_gworld.getTexture(), rectangle(item_stats_gworld), mainPtr, win_to_rects[WINRECT_INVEN], x);
|
||||
rect_draw_some_item(text_area_gworld.getTexture(), rectangle(text_area_gworld), mainPtr, win_to_rects[WINRECT_TRANSCRIPT], x);
|
||||
rect_draw_some_item(Texture(pc_stats_gworld.getTexture()), rectangle(pc_stats_gworld), mainPtr, win_to_rects[WINRECT_PCSTATS], x);
|
||||
rect_draw_some_item(Texture(item_stats_gworld.getTexture()), rectangle(item_stats_gworld), mainPtr, win_to_rects[WINRECT_INVEN], x);
|
||||
rect_draw_some_item(Texture(text_area_gworld.getTexture()), rectangle(text_area_gworld), mainPtr, win_to_rects[WINRECT_TRANSCRIPT], x);
|
||||
}
|
||||
|
||||
rectangle get_stat_effect_rect(int code) {
|
||||
@@ -1152,27 +1152,14 @@ void through_sending() {
|
||||
|
||||
/* Draw a bitmap in the world window. hor in 0 .. 8, vert in 0 .. 8,
|
||||
object is ptr. to bitmap to be drawn, and masking is for Copybits. */
|
||||
void Draw_Some_Item(const Texture& src_gworld, rectangle src_rect, sf::RenderTarget& targ_gworld,location target, char masked, short main_win) {
|
||||
rectangle destrec = {0,0,36,28};
|
||||
|
||||
void Draw_Some_Item(const Texture& src_gworld, rectangle src_rect, sf::RenderTarget& targ_gworld,location target, long modValue) {
|
||||
if((target.x < 0) || (target.y < 0) || (target.x > 8) || (target.y > 8))
|
||||
return;
|
||||
if((supressing_some_spaces) && (target != ok_space[0]) &&
|
||||
(target != ok_space[1]) && (target != ok_space[2]) && (target != ok_space[3]))
|
||||
return;
|
||||
|
||||
destrec = coord_to_rect(target.x,target.y);
|
||||
if(main_win == 1) destrec.offset(5,5);
|
||||
|
||||
if(main_win == 0) {
|
||||
if(masked == 1)
|
||||
rect_draw_some_item(src_gworld, src_rect, targ_gworld, destrec, sf::BlendAlpha);
|
||||
else rect_draw_some_item(src_gworld, src_rect, targ_gworld, destrec, sf::BlendNone);
|
||||
} else {
|
||||
if(masked == 1)
|
||||
rect_draw_some_item(src_gworld, src_rect, targ_gworld, destrec, sf::BlendAlpha);
|
||||
else rect_draw_some_item(src_gworld, src_rect, targ_gworld, destrec, sf::BlendNone);
|
||||
}
|
||||
rect_draw_some_item(src_gworld, src_rect, targ_gworld, coord_to_rect(target.x,target.y), RenderState(sf::BlendAlpha, modValue));
|
||||
}
|
||||
|
||||
std::list<text_label_t> posted_labels;
|
||||
|
@@ -39,7 +39,7 @@ void restore_mode();
|
||||
void through_sending();
|
||||
rectangle coord_to_rect(short i,short j);
|
||||
bool day_reached(unsigned short which_day, unsigned short which_event);
|
||||
void Draw_Some_Item(const Texture& src_gworld, rectangle src_rect, sf::RenderTarget& targ_gworld, location target, char masked, short main_win);
|
||||
void Draw_Some_Item(const Texture& src_gworld, rectangle src_rect, sf::RenderTarget& targ_gworld, location target, long modValue=0);
|
||||
rectangle get_stat_effect_rect(int which_effect);
|
||||
|
||||
struct text_label_t {
|
||||
|
@@ -194,5 +194,5 @@ void cToolbar::draw(sf::RenderTarget& targ) {
|
||||
}
|
||||
|
||||
// Add the cached toolbar over the background
|
||||
rect_draw_some_item(cache.getTexture(), rectangle(cache), targ, to, sf::BlendAdd);
|
||||
rect_draw_some_item(Texture(cache.getTexture()), rectangle(cache), targ, to, sf::BlendAdd);
|
||||
}
|
||||
|
@@ -16,7 +16,7 @@
|
||||
#include "render_shapes.hpp"
|
||||
#include "res_image.hpp"
|
||||
|
||||
sf::Shader maskShader;
|
||||
static sf::Shader maskShader;
|
||||
extern fs::path progDir;
|
||||
|
||||
void init_shaders() {
|
||||
@@ -67,18 +67,12 @@ void draw_splash(const Texture& splash, sf::RenderWindow& targ, rectangle dest_r
|
||||
targ.display();
|
||||
}
|
||||
|
||||
static void rect_draw_some_item(const sf::Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,sf::RenderStates mode);
|
||||
|
||||
static void rect_draw_some_item(const Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,sf::RenderStates mode);
|
||||
|
||||
void rect_draw_some_item(const Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,sf::BlendMode mode){
|
||||
rect_draw_some_item(src_gworld, src_rect, targ_gworld, targ_rect, sf::RenderStates(mode));
|
||||
}
|
||||
|
||||
void rect_draw_some_item(const Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,sf::RenderStates mode) {
|
||||
static void rect_draw_some_item(const Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,
|
||||
sf::RenderStates const &mode, unsigned long colorMod) {
|
||||
setActiveRenderTarget(targ_gworld);
|
||||
src_rect=src_rect.rescale(src_gworld.dimension, src_gworld->getSize());
|
||||
sf::Sprite tile(*src_gworld, src_rect);
|
||||
if(colorMod != 0) tile.setColor(sf::Color(colorMod));
|
||||
tile.setPosition(targ_rect.left, targ_rect.top);
|
||||
double xScale = targ_rect.width(), yScale = targ_rect.height();
|
||||
xScale /= src_rect.width();
|
||||
@@ -87,7 +81,13 @@ void rect_draw_some_item(const Texture& src_gworld,rectangle src_rect,sf::Render
|
||||
targ_gworld.draw(tile, mode);
|
||||
}
|
||||
|
||||
void rect_draw_some_item(const Texture& src_gworld,rectangle src_rect,const sf::Texture& mask_gworld,sf::RenderTarget& targ_gworld,rectangle targ_rect) {
|
||||
void rect_draw_some_item(const Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,
|
||||
RenderState const &mode) {
|
||||
if (mode.mask==nullptr) {
|
||||
rect_draw_some_item(src_gworld, src_rect, targ_gworld, targ_rect, sf::RenderStates(mode.blend_mode), mode.color_mod);
|
||||
return;
|
||||
}
|
||||
|
||||
rectangle real_src_rect=src_rect.rescale(src_gworld.dimension, src_gworld->getSize());
|
||||
static sf::RenderTexture src;
|
||||
static bool inited = false;
|
||||
@@ -97,27 +97,12 @@ void rect_draw_some_item(const Texture& src_gworld,rectangle src_rect,const sf::
|
||||
}
|
||||
rectangle dest_rect = real_src_rect;
|
||||
dest_rect.offset(-dest_rect.left,-dest_rect.top);
|
||||
rect_draw_some_item(src_gworld, src_rect, src, dest_rect);
|
||||
rect_draw_some_item(src_gworld, src_rect, src, dest_rect, sf::RenderStates(), 0);
|
||||
src.display();
|
||||
|
||||
maskShader.setParameter("texture", sf::Shader::CurrentTexture);
|
||||
maskShader.setParameter("mask", mask_gworld);
|
||||
rect_draw_some_item(src.getTexture(), dest_rect, targ_gworld, targ_rect, &maskShader);
|
||||
}
|
||||
|
||||
void rect_draw_some_item(const sf::Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,sf::RenderStates mode) {
|
||||
setActiveRenderTarget(targ_gworld);
|
||||
sf::Sprite tile(src_gworld, src_rect);
|
||||
tile.setPosition(targ_rect.left, targ_rect.top);
|
||||
double xScale = targ_rect.width(), yScale = targ_rect.height();
|
||||
xScale /= src_rect.width();
|
||||
yScale /= src_rect.height();
|
||||
tile.setScale(xScale, yScale);
|
||||
targ_gworld.draw(tile, sf::RenderStates(mode));
|
||||
}
|
||||
|
||||
void rect_draw_some_item(const sf::Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,sf::BlendMode mode){
|
||||
rect_draw_some_item(src_gworld, src_rect, targ_gworld, targ_rect, sf::RenderStates(mode));
|
||||
maskShader.setParameter("mask", *mode.mask);
|
||||
rect_draw_some_item(Texture(src.getTexture()), dest_rect, targ_gworld, targ_rect, &maskShader, mode.color_mod);
|
||||
}
|
||||
|
||||
void setActiveRenderTarget(sf::RenderTarget& where) {
|
||||
|
@@ -19,11 +19,26 @@
|
||||
#include "pictypes.hpp"
|
||||
|
||||
void init_shaders();
|
||||
void rect_draw_some_item(const sf::Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,sf::BlendMode mode = sf::BlendNone);
|
||||
|
||||
struct RenderState {
|
||||
RenderState() = default;
|
||||
RenderState(sf::BlendMode blendMode, unsigned long colorMod=0)
|
||||
: blend_mode(blendMode)
|
||||
, color_mod(colorMod) {
|
||||
}
|
||||
RenderState(RenderState const &)=default;
|
||||
RenderState &operator=(RenderState const &)=default;
|
||||
void set_mask(const sf::Texture& mask_gworld) {
|
||||
mask=&mask_gworld;
|
||||
}
|
||||
sf::BlendMode blend_mode = sf::BlendNone;
|
||||
unsigned long color_mod=0;
|
||||
sf::Texture const *mask=nullptr;
|
||||
};
|
||||
|
||||
struct Texture;
|
||||
void rect_draw_some_item(const Texture & src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,sf::BlendMode mode = sf::BlendNone);
|
||||
void rect_draw_some_item(const Texture& src_gworld,rectangle src_rect,const sf::Texture& mask_gworld,sf::RenderTarget& targ_gworld,rectangle targ_rect);
|
||||
void rect_draw_some_item(const Texture & src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,
|
||||
RenderState const &mode=RenderState());
|
||||
void draw_splash(const Texture & splash, sf::RenderWindow& targ, rectangle dest_rect);
|
||||
|
||||
void setActiveRenderTarget(sf::RenderTarget& where);
|
||||
|
Reference in New Issue
Block a user