Fixed up: Move file-static RenderWindow and RenderTexture instances inside functions to fix GL race condition on startup (#682)

This commit is contained in:
Nathan R
2025-03-06 18:31:18 -06:00
committed by Nat Quayle Nelson
parent cf736d1835
commit 598fd4836a
51 changed files with 719 additions and 712 deletions

View File

@@ -64,7 +64,6 @@ extern cScenario scenario;
extern std::shared_ptr<cScrollbar> right_sbar, pal_sbar;
extern cOutdoors* current_terrain;
extern location cur_out;
extern sf::RenderWindow mainPtr;
bool small_any_drawn = false;
extern bool change_made;
@@ -217,11 +216,11 @@ static bool handle_lb_action(location the_point) {
&& (left_button_status[i].action != LB_NO_ACTION)) {
draw_lb_slot(i,1);
play_sound(37);
mainPtr.display();
mainPtr().display();
// TODO: Proper button handling
sf::sleep(time_in_ticks(10));
draw_lb_slot(i,0);
mainPtr.display();
mainPtr().display();
if(overall_mode == MODE_INTRO_SCREEN || overall_mode == MODE_MAIN_SCREEN || overall_mode == MODE_EDIT_TYPES) {
switch(left_button_status[i].action) {
case LB_NO_ACTION:
@@ -321,12 +320,12 @@ static bool handle_rb_action(location the_point, bool option_hit) {
int j = right_button_status[i + right_top].i;
//flash_rect(left_buttons[i][0]);
draw_rb_slot(i + right_top,1);
mainPtr.display();
mainPtr().display();
// TODO: Proper button handling
play_sound(37);
sf::sleep(time_in_ticks(10));
draw_rb_slot(i + right_top,0);
mainPtr.display();
mainPtr().display();
change_made = true;
size_t size_before;
size_t pos_before = right_sbar->getPosition();
@@ -2367,7 +2366,7 @@ void set_up_start_screen() {
set_lb(NLS - 2,LB_TEXT,LB_NO_ACTION,"Created 1997, Free Open Source");
set_lb(NLS - 1,LB_TEXT,LB_NO_ACTION,version());
change_made = false;
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
}
void set_up_main_screen() {
@@ -2407,7 +2406,7 @@ void set_up_main_screen() {
shut_down_menus(4);
shut_down_menus(3);
redraw_screen();
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
}
void start_town_edit() {
@@ -2437,7 +2436,7 @@ void start_town_edit() {
current_ground = 0;
else if(town->terrain(i,j) == 2)
current_ground = 2;
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
}
void start_out_edit() {
@@ -2468,7 +2467,7 @@ void start_out_edit() {
current_ground = 0;
else if(current_terrain->terrain[i][j] == 2)
current_ground = 2;
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
redraw_screen();
}
@@ -2481,7 +2480,7 @@ void start_terrain_editing() {
place_location();
set_lb(NLS - 3,LB_TEXT,LB_NO_ACTION,"Alt-click to delete/clear",true);
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
}
void start_monster_editing(bool just_redo_text) {
@@ -2505,7 +2504,7 @@ void start_monster_editing(bool just_redo_text) {
set_rb(i - 1,RB_MONST, i, title);
}
set_lb(NLS - 3,LB_TEXT,LB_NO_ACTION,"Alt-click to delete",true);
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
redraw_screen();
}
@@ -2532,7 +2531,7 @@ void start_item_editing(bool just_redo_text) {
set_rb(i,RB_ITEM, i, title);
}
set_lb(NLS - 3,LB_TEXT,LB_NO_ACTION,"Alt-click to delete",true);
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
redraw_screen();
}
@@ -2559,7 +2558,7 @@ void start_special_item_editing(bool just_redo_text) {
set_rb(i,RB_SPEC_ITEM, i, title);
}
set_lb(NLS - 3,LB_TEXT,LB_NO_ACTION,"Alt-click to delete",true);
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
redraw_screen();
}
@@ -2584,7 +2583,7 @@ void start_quest_editing(bool just_redo_text) {
set_rb(i, RB_QUEST, i, title);
}
set_lb(NLS - 3,LB_TEXT,LB_NO_ACTION,"Alt-click to delete",true);
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
redraw_screen();
}
@@ -2609,7 +2608,7 @@ void start_shops_editing(bool just_redo_text) {
set_rb(i, RB_SHOP, i, title);
}
set_lb(NLS - 3,LB_TEXT,LB_NO_ACTION,"Alt-click to delete",true);
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
redraw_screen();
}
@@ -2679,7 +2678,7 @@ void start_string_editing(eStrMode mode,short just_redo_text) {
}
set_lb(NLS - 3,LB_TEXT,LB_NO_ACTION,"Alt-click to delete",true);
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
redraw_screen();
}
@@ -2728,7 +2727,7 @@ void start_special_editing(short mode,short just_redo_text) {
case 2: set_rb(num_specs, RB_TOWN_SPEC, num_specs, make_new); break;
}
set_lb(NLS - 3,LB_TEXT,LB_NO_ACTION,"Alt-click to delete",true);
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
redraw_screen();
}
@@ -2764,7 +2763,7 @@ void start_dialogue_editing(short restoring) {
set_rb(10 + n_nodes, RB_DIALOGUE, n_nodes, "Create New Node");
right_sbar->setMaximum((11 + n_nodes) - NRSONPAGE);
set_lb(NLS - 3,LB_TEXT,LB_NO_ACTION,"Alt-click node to delete",true);
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr)));
update_mouse_spot(translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr())));
redraw_screen();
}

View File

@@ -38,7 +38,6 @@ bool is_s_d();
void sort_specials();
extern cOutdoors* current_terrain;
extern sf::RenderWindow mainPtr;
extern sf::View mainView;
extern cDrawableManager drawable_mgr;
extern cTown* current_town;
@@ -366,8 +365,8 @@ void run_startup_g() {
sf::Time delay = time_in_ticks(120);
sf::Clock timer;
while(sound_going(95) || timer.getElapsedTime() < delay) {
draw_splash(pict_to_draw, mainPtr, dest_rect);
if(!pollEvent(mainPtr, event)) continue;
draw_splash(pict_to_draw, mainPtr(), dest_rect);
if(!pollEvent(mainPtr(), event)) continue;
if(event.type == sf::Event::GainedFocus || event.type == sf::Event::MouseMoved)
set_cursor(watch_curs);
if(event.type == sf::Event::KeyPressed || event.type == sf::Event::MouseButtonPressed)
@@ -389,13 +388,13 @@ void load_graphics(){
}
void redraw_screen() {
rectangle windRect(mainPtr);
rectangle windRect(mainPtr());
// Switch back to the default view while drawing the background tiles
// so that they are not upscaled
mainPtr.setView(mainPtr.getDefaultView());
tileImage(mainPtr,windRect,bg[20]);
mainPtr.setView(mainView);
mainPtr().setView(mainPtr().getDefaultView());
tileImage(mainPtr(),windRect,bg[20]);
mainPtr().setView(mainView);
draw_main_screen();
@@ -403,11 +402,11 @@ void redraw_screen() {
draw_terrain();
// DIRTY FIX to a problem that exist somewhere else. But where?
undo_clip(mainPtr);
undo_clip(mainPtr());
drawable_mgr.draw_all();
mainPtr.display();
mainPtr().display();
}
void draw_main_screen() {
@@ -422,9 +421,9 @@ void draw_main_screen() {
draw_rect.right = RIGHT_AREA_UL_X + RIGHT_AREA_WIDTH - 16;
draw_rect.bottom = RIGHT_AREA_UL_Y + RIGHT_AREA_HEIGHT;
frame_rect(mainPtr, draw_rect, sf::Color::Black);
frame_rect(mainPtr(), draw_rect, sf::Color::Black);
draw_rect.inset(1,1);
tileImage(mainPtr,draw_rect,bg[17]);
tileImage(mainPtr(),draw_rect,bg[17]);
draw_rb();
}
@@ -449,7 +448,7 @@ const int LEFT_BUTTON_SPACE = 2;
void draw_lb_slot (short which,short mode) {
rectangle text_rect,from_rect;
tileImage(mainPtr,left_buttons[which][0],bg[20]);
tileImage(mainPtr(),left_buttons[which][0],bg[20]);
if(left_button_status[which].mode == LB_CLEAR)
return;
@@ -461,7 +460,7 @@ void draw_lb_slot (short which,short mode) {
from_rect = blue_button_from;
if(mode > 0)
from_rect.offset(0,from_rect.height());
rect_draw_some_item(*ResMgr::graphics.get("edbuttons"),from_rect,mainPtr,left_buttons[which][1]);
rect_draw_some_item(*ResMgr::graphics.get("edbuttons"),from_rect,mainPtr(),left_buttons[which][1]);
}
if(left_button_status[which].mode == LB_INDENT)
text_rect.left += 16;
@@ -480,7 +479,7 @@ void draw_lb_slot (short which,short mode) {
// Measure the button's clickable width including the label
left_buttons[which][0].width() = button_width + LEFT_BUTTON_SPACE + string_length(left_button_status[which].label, style);
win_draw_string(mainPtr,text_rect,left_button_status[which].label,eTextMode::WRAP,style);
win_draw_string(mainPtr(),text_rect,left_button_status[which].label,eTextMode::WRAP,style);
}
void draw_rb() {
@@ -498,7 +497,7 @@ void draw_rb_slot (short which,short mode) {
if(which < pos || which >= pos + NRSONPAGE || which >= NRS)
return;
tileImage(mainPtr,right_buttons[which - pos],bg[17]);
tileImage(mainPtr(),right_buttons[which - pos],bg[17]);
if(right_button_status[which].action == RB_CLEAR)
return;
text_rect = right_buttons[which - pos];
@@ -507,7 +506,7 @@ void draw_rb_slot (short which,short mode) {
if(mode > 0)
style.colour = Colours::RED;
style.lineHeight = 12;
win_draw_string(mainPtr,text_rect,right_button_status[which].label,eTextMode::WRAP,style);
win_draw_string(mainPtr(),text_rect,right_button_status[which].label,eTextMode::WRAP,style);
}
void set_up_terrain_buttons(bool reset) {
@@ -540,7 +539,7 @@ void set_up_terrain_buttons(bool reset) {
switch(draw_mode){
case DRAW_TERRAIN:
if(i == scenario.ter_types.size()) {
rect_draw_some_item(editor_mixed, ter_plus_from, mainPtr, draw_rect);
rect_draw_some_item(editor_mixed, ter_plus_from, mainPtr(), draw_rect);
break;
}
ter_from = ter_from_base;
@@ -548,14 +547,14 @@ void set_up_terrain_buttons(bool reset) {
if(pic >= 1000) {
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, ter_from) = spec_scen_g.find_graphic(pic % 1000);
rect_draw_some_item(*source_gworld, ter_from, mainPtr, draw_rect);
rect_draw_some_item(*source_gworld, ter_from, mainPtr(), draw_rect);
}
else if(pic < 960) {
pic = pic % 50;
ter_from.offset(28 * (pic % 10), 36 * (pic / 10));
int which_sheet = scenario.ter_types[i].picture / 50;
rect_draw_some_item(*ResMgr::graphics.get("ter" + std::to_string(1 + which_sheet)),
ter_from, mainPtr, draw_rect);
ter_from, mainPtr(), draw_rect);
}
else {
pic = (pic - 560) % 50;
@@ -563,7 +562,7 @@ void set_up_terrain_buttons(bool reset) {
ter_from.right = ter_from.left + 28;
ter_from.top = 36 * (pic % 5);
ter_from.bottom = ter_from.top + 36;
rect_draw_some_item(*ResMgr::graphics.get("teranim"), ter_from, mainPtr, draw_rect);
rect_draw_some_item(*ResMgr::graphics.get("teranim"), ter_from, mainPtr(), draw_rect);
}
small_i = get_small_icon(i);
@@ -573,31 +572,31 @@ void set_up_terrain_buttons(bool reset) {
tiny_to.top = tiny_to.bottom - 7;
tiny_to.left = tiny_to.right - 7;
if(small_i >= 0 && small_i < 255)
rect_draw_some_item(editor_mixed, tiny_from, mainPtr, tiny_to);
rect_draw_some_item(editor_mixed, tiny_from, mainPtr(), tiny_to);
break;
case DRAW_MONST:
pic = scenario.scen_monsters[i].picture_num;
tiny_to = draw_rect;
frame_rect(mainPtr, tiny_to, sf::Color::Black);
frame_rect(mainPtr(), tiny_to, sf::Color::Black);
if(pic >= 4000) {
pic %= 1000;
tiny_to.width() = tiny_to.width() / 2;
tiny_to.height() = tiny_to.height() / 2;
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, ter_from) = spec_scen_g.find_graphic(pic);
rect_draw_some_item(*source_gworld, ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
pic++;
tiny_to.offset(tiny_to.width(), 0);
graf_pos_ref(source_gworld, ter_from) = spec_scen_g.find_graphic(pic);
rect_draw_some_item(*source_gworld, ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
pic++;
tiny_to.offset(-tiny_to.width(), tiny_to.height());
graf_pos_ref(source_gworld, ter_from) = spec_scen_g.find_graphic(pic);
rect_draw_some_item(*source_gworld, ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
pic++;
tiny_to.offset(tiny_to.width(), 0);
graf_pos_ref(source_gworld, ter_from) = spec_scen_g.find_graphic(pic);
rect_draw_some_item(*source_gworld, ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
} else if(pic >= 3000) {
pic %= 1000;
tiny_to.width() = tiny_to.width() / 2;
@@ -605,11 +604,11 @@ void set_up_terrain_buttons(bool reset) {
tiny_to.offset(tiny_to.width() / 2, 0);
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, ter_from) = spec_scen_g.find_graphic(pic);
rect_draw_some_item(*source_gworld, ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
pic++;
tiny_to.offset(0, tiny_to.height());
graf_pos_ref(source_gworld, ter_from) = spec_scen_g.find_graphic(pic);
rect_draw_some_item(*source_gworld, ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
} else if(pic >= 2000) {
pic %= 1000;
tiny_to.width() = tiny_to.width() / 2;
@@ -617,16 +616,16 @@ void set_up_terrain_buttons(bool reset) {
tiny_to.offset(0, tiny_to.height() / 2);
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, ter_from) = spec_scen_g.find_graphic(pic);
rect_draw_some_item(*source_gworld, ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
pic++;
tiny_to.offset(tiny_to.width(), 0);
graf_pos_ref(source_gworld, ter_from) = spec_scen_g.find_graphic(pic);
rect_draw_some_item(*source_gworld, ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
} else if(pic >= 1000) {
pic %= 1000;
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, ter_from) = spec_scen_g.find_graphic(pic);
rect_draw_some_item(*source_gworld, ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
} else {
auto pic_info = m_pic_index[pic];
pic = pic_info.i;
@@ -637,57 +636,57 @@ void set_up_terrain_buttons(bool reset) {
tiny_to.width() = tiny_to.width() / 2;
tiny_to.height() = tiny_to.height() / 2;
ter_from = calc_rect(2 * ((pic % 20) / 10), (pic % 20) % 10);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
pic++;
tiny_to.offset(tiny_to.width(), 0);
ter_from = calc_rect(2 * ((pic % 20) / 10), (pic % 20) % 10);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
pic++;
tiny_to.offset(-tiny_to.width(), tiny_to.height());
ter_from = calc_rect(2 * ((pic % 20) / 10), (pic % 20) % 10);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
pic++;
tiny_to.offset(tiny_to.width(), 0);
ter_from = calc_rect(2 * ((pic % 20) / 10), (pic % 20) % 10);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
} else if(pic_info.y == 2) {
tiny_to.width() = tiny_to.width() / 2;
tiny_to.height() = tiny_to.height() / 2;
tiny_to.offset(tiny_to.width() / 2, 0);
ter_from = calc_rect(2 * ((pic % 20) / 10), (pic % 20) % 10);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
pic++;
tiny_to.offset(0, tiny_to.height());
ter_from = calc_rect(2 * ((pic % 20) / 10), (pic % 20) % 10);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
} else if(pic_info.x == 2) {
tiny_to.width() = tiny_to.width() / 2;
tiny_to.height() = tiny_to.height() / 2;
tiny_to.offset(0, tiny_to.height() / 2);
ter_from = calc_rect(2 * ((pic % 20) / 10), (pic % 20) % 10);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
pic++;
tiny_to.offset(tiny_to.width(), 0);
ter_from = calc_rect(2 * ((pic % 20) / 10), (pic % 20) % 10);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
} else {
ter_from = calc_rect(2 * ((pic % 20) / 10), (pic % 20) % 10);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
}
}
break;
case DRAW_ITEM:
pic = scenario.scen_items[i].graphic_num;
tiny_to = draw_rect;
frame_rect(mainPtr, tiny_to, sf::Color::Black);
frame_rect(mainPtr(), tiny_to, sf::Color::Black);
if(pic >= 1000) {
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, ter_from) = spec_scen_g.find_graphic(pic % 1000);
rect_draw_some_item(*source_gworld, ter_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, ter_from, mainPtr(), tiny_to, sf::BlendAlpha);
} else {
tiny_from = {0,0,18,18};
tiny_from.offset((pic % 10) * 18,(pic / 10) * 18);
rect_draw_some_item(*ResMgr::graphics.get("tinyobj"), tiny_from, mainPtr, tiny_to, sf::BlendAlpha);
rect_draw_some_item(*ResMgr::graphics.get("tinyobj"), tiny_from, mainPtr(), tiny_to, sf::BlendAlpha);
}
break;
}
@@ -703,7 +702,7 @@ void set_up_terrain_buttons(bool reset) {
palette_from.offset(-RIGHT_AREA_UL_X, -RIGHT_AREA_UL_Y);
int n = cur_palette_buttons[j][i];
palette_from.offset((n%10) * 25, (n/10) * 17);
rect_draw_some_item(editor_mixed, palette_from, mainPtr, palette_to, sf::BlendAlpha);
rect_draw_some_item(editor_mixed, palette_from, mainPtr(), palette_to, sf::BlendAlpha);
}
palette_to.offset(0,17);
}
@@ -725,8 +724,8 @@ void draw_terrain(){
return;
if(cur_viewing_mode == 0) {
tileImage(mainPtr,terrain_rect,bg[17]);
frame_rect(mainPtr, terrain_rect, sf::Color::Black);
tileImage(mainPtr(),terrain_rect,bg[17]);
frame_rect(mainPtr(), terrain_rect, sf::Color::Black);
for(short q = 0; q < 9; q++)
for(short r = 0; r < 9; r++) {
where_draw.x = q;
@@ -770,9 +769,9 @@ void draw_terrain(){
sf::Texture& vehicle_gworld = *ResMgr::graphics.get("vehicle");
if(is_road(cen_x + q - 4,cen_y + r - 4))
rect_draw_some_item(fields_gworld, calc_rect(0, 2), mainPtr, destrec, sf::BlendAlpha);
rect_draw_some_item(fields_gworld, calc_rect(0, 2), mainPtr(), destrec, sf::BlendAlpha);
if(is_spot(cen_x + q - 4,cen_y + r - 4))
rect_draw_some_item(fields_gworld, calc_rect(4, 0), mainPtr, destrec, sf::BlendAlpha);
rect_draw_some_item(fields_gworld, calc_rect(4, 0), mainPtr(), destrec, sf::BlendAlpha);
which_pt.x = cen_x + q - 4;
which_pt.y =cen_y + r - 4;
@@ -780,11 +779,11 @@ void draw_terrain(){
for(short i = 0; i < scenario.boats.size(); i++) {
if(editing_town && scenario.boats[i].which_town == cur_town &&
scenario.boats[i].loc == which_pt)
rect_draw_some_item(vehicle_gworld,boat_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(vehicle_gworld,boat_rect,mainPtr(),destrec,sf::BlendAlpha);
if(!editing_town && scenario.boats[i].which_town == 200 &&
scenario.boats[i].sector == cur_out &&
scenario.boats[i].loc == which_pt)
rect_draw_some_item(vehicle_gworld,boat_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(vehicle_gworld,boat_rect,mainPtr(),destrec,sf::BlendAlpha);
}
for(short i = 0; i < scenario.horses.size(); i++) {
@@ -792,52 +791,52 @@ void draw_terrain(){
source_rect.offset(0,36);
if(editing_town && scenario.horses[i].which_town == cur_town &&
scenario.horses[i].loc == which_pt)
rect_draw_some_item(vehicle_gworld,source_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(vehicle_gworld,source_rect,mainPtr(),destrec,sf::BlendAlpha);
if(!editing_town && scenario.horses[i].which_town == 200 &&
scenario.horses[i].sector == cur_out &&
scenario.horses[i].loc == which_pt)
rect_draw_some_item(vehicle_gworld,source_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(vehicle_gworld,source_rect,mainPtr(),destrec,sf::BlendAlpha);
}
if(editing_town) {
if(is_field_type(cen_x + q - 4,cen_y + r - 4, FIELD_WEB)) {
from_rect = calc_rect(5,0);
rect_draw_some_item(fields_gworld,from_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(fields_gworld,from_rect,mainPtr(),destrec,sf::BlendAlpha);
}
if(is_field_type(cen_x + q - 4,cen_y + r - 4, OBJECT_CRATE)) {
from_rect = calc_rect(6,0);
rect_draw_some_item(fields_gworld,from_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(fields_gworld,from_rect,mainPtr(),destrec,sf::BlendAlpha);
}
if(is_field_type(cen_x + q - 4,cen_y + r - 4, OBJECT_BARREL)) {
from_rect = calc_rect(7,0);
rect_draw_some_item(fields_gworld,from_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(fields_gworld,from_rect,mainPtr(),destrec,sf::BlendAlpha);
}
if(is_field_type(cen_x + q - 4,cen_y + r - 4, BARRIER_FIRE)) {
from_rect = calc_rect(8,4);
rect_draw_some_item(*ResMgr::graphics.get("teranim"),from_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::graphics.get("teranim"),from_rect,mainPtr(),destrec,sf::BlendAlpha);
}
if(is_field_type(cen_x + q - 4,cen_y + r - 4, FIELD_QUICKFIRE)) {
from_rect = calc_rect(7,1);
rect_draw_some_item(fields_gworld,from_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(fields_gworld,from_rect,mainPtr(),destrec,sf::BlendAlpha);
}
if(is_field_type(cen_x + q - 4,cen_y + r - 4, BARRIER_FORCE)) {
from_rect = calc_rect(10,4);
rect_draw_some_item(*ResMgr::graphics.get("teranim"),from_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::graphics.get("teranim"),from_rect,mainPtr(),destrec,sf::BlendAlpha);
}
if(is_field_type(cen_x + q - 4,cen_y + r - 4, OBJECT_BLOCK)) {
from_rect = calc_rect(3,0);
rect_draw_some_item(fields_gworld,from_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(fields_gworld,from_rect,mainPtr(),destrec,sf::BlendAlpha);
}
if(is_field_type(cen_x + q - 4,cen_y + r - 4, BARRIER_CAGE)) {
from_rect = calc_rect(0,0);
rect_draw_some_item(fields_gworld,from_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(fields_gworld,from_rect,mainPtr(),destrec,sf::BlendAlpha);
}
for(short i = 0; i < 8; i++) {
eFieldType sfx = eFieldType(SFX_SMALL_BLOOD + i);
if(is_field_type(cen_x + q - 4,cen_y + r - 4,sfx)) {
from_rect = calc_rect(i,3);
rect_draw_some_item(fields_gworld,from_rect,mainPtr,destrec,sf::BlendAlpha);
rect_draw_some_item(fields_gworld,from_rect,mainPtr(),destrec,sf::BlendAlpha);
}
}
}
@@ -861,7 +860,7 @@ void draw_terrain(){
} else {
tiny_from.offset((icon % 30) * 7, (icon / 30) * 7);
}
rect_draw_some_item(editor_mixed, tiny_from, mainPtr, tiny_to);
rect_draw_some_item(editor_mixed, tiny_from, mainPtr(), tiny_to);
if(icon == -1) tiny_to.left += 14;
tiny_to.offset(0, -7);
// Now check to see if it's overflowing our space
@@ -909,9 +908,9 @@ void draw_terrain(){
}
}
if(need_hilite) {
fill_rect(mainPtr, destrec, hilite_colour);
fill_rect(mainPtr(), destrec, hilite_colour);
if(large_hilite && where_draw == mouse_spot)
fill_rect(mainPtr, destrec, hilite_colour);
fill_rect(mainPtr(), destrec, hilite_colour);
}
}
}
@@ -920,7 +919,7 @@ void draw_terrain(){
draw_items();
}
clip_rect(mainPtr,clipping_rect);
clip_rect(mainPtr(),clipping_rect);
// draw info rects
for(auto& area_desc : get_current_area()->area_desc)
@@ -931,7 +930,7 @@ void draw_terrain(){
draw_rect.bottom = 24 + 36 * (area_desc.bottom - cen_y + 4);
draw_rect.inset(-10, -13);
draw_rect.offset(TER_RECT_UL_X, TER_RECT_UL_Y);
frame_rect(mainPtr, draw_rect, Colours::RED);
frame_rect(mainPtr(), draw_rect, Colours::RED);
}
if(editing_town) {
// draw border rect
@@ -941,9 +940,9 @@ void draw_terrain(){
draw_rect.bottom = 25 + 36 * (town->in_town_rect.bottom - cen_y + 4);
draw_rect.inset(10, 13);
draw_rect.offset(TER_RECT_UL_X, TER_RECT_UL_Y);
frame_rect(mainPtr, draw_rect, sf::Color::White);
frame_rect(mainPtr(), draw_rect, sf::Color::White);
}
clip_rect(mainPtr, terrain_rect);
clip_rect(mainPtr(), terrain_rect);
small_any_drawn = false;
//if(cur_viewing_mode == 0)
@@ -951,8 +950,8 @@ void draw_terrain(){
}
else {
tileImage(mainPtr, terrain_rect,bg[17]);
frame_rect(mainPtr, terrain_rect, sf::Color::Black);
tileImage(mainPtr(), terrain_rect,bg[17]);
frame_rect(mainPtr(), terrain_rect, sf::Color::Black);
// Width available: 64 4x4 tiles, 42 6x6 tiles, or 21 12x12 tiles -- 256 pixels
// Height available: 81 4x4 tiles, 54 6x6 tiles, or 27 12x12 tiles -- 324 pixels
short size = mini_map_scales[cur_viewing_mode - 1];
@@ -1024,7 +1023,7 @@ void draw_monsts() {
destrec.top = destrec.bottom - (source_rect.bottom - source_rect.top);
destrec.offset(TER_RECT_UL_X,TER_RECT_UL_Y);
rect_draw_some_item(*from_gworld, source_rect, mainPtr, destrec, sf::BlendAlpha);
rect_draw_some_item(*from_gworld, source_rect, mainPtr(), destrec, sf::BlendAlpha);
}
}
}
@@ -1068,7 +1067,7 @@ void draw_items() {
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(pic_num - 1000);
dest_rect = calc_rect(where_draw.x,where_draw.y);
dest_rect.offset(8+TER_RECT_UL_X,8+TER_RECT_UL_Y);
rect_draw_some_item(*source_gworld, source_rect, mainPtr, dest_rect, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, source_rect, mainPtr(), dest_rect, sf::BlendAlpha);
}
else {
source_rect = get_item_template_rect(pic_num);
@@ -1081,7 +1080,7 @@ void draw_items() {
dest_rect.right -= 5;
}
rect_draw_some_item(*ResMgr::graphics.get((pic_num < 55) ? "objects" : "tinyobj"),
source_rect, mainPtr, dest_rect,sf::BlendAlpha);
source_rect, mainPtr(), dest_rect,sf::BlendAlpha);
}
}
}
@@ -1134,7 +1133,7 @@ void draw_one_terrain_spot (short i,short j,ter_num_t terrain_to_draw) {
destrec.bottom = destrec.top + BITMAP_HEIGHT;
destrec.offset(TER_RECT_UL_X,TER_RECT_UL_Y);
rect_draw_some_item(*source_gworld, source_rect, mainPtr, destrec);
rect_draw_some_item(*source_gworld, source_rect, mainPtr(), destrec);
}
void draw_one_tiny_terrain_spot (short i,short j,ter_num_t terrain_to_draw,short size,bool road) {
@@ -1162,7 +1161,7 @@ void draw_one_tiny_terrain_spot (short i,short j,ter_num_t terrain_to_draw,short
picture_wanted %= 50;
from_rect = calc_rect(picture_wanted % 10, picture_wanted / 10);
}
rect_draw_some_item(*source_gworld, from_rect, mainPtr, dest_rect);
rect_draw_some_item(*source_gworld, from_rect, mainPtr(), dest_rect);
} else {
if(picture_wanted >= 1000) {
std::shared_ptr<const sf::Texture> from_gw;
@@ -1171,16 +1170,16 @@ void draw_one_tiny_terrain_spot (short i,short j,ter_num_t terrain_to_draw,short
from_rect.bottom = from_rect.top + 12;
picture_wanted /= 1000; picture_wanted--;
from_rect.offset((picture_wanted / 3) * 12, (picture_wanted % 3) * 12);
rect_draw_some_item(*from_gw, from_rect, mainPtr, dest_rect);
rect_draw_some_item(*from_gw, from_rect, mainPtr(), dest_rect);
} else {
sf::Texture& small_ter_gworld = *ResMgr::graphics.get("termap");
if(picture_wanted >= 960) {
picture_wanted -= 960;
from_rect.offset(12 * 20, (picture_wanted - 960) * 12);
rect_draw_some_item(small_ter_gworld, from_rect, mainPtr, dest_rect);
rect_draw_some_item(small_ter_gworld, from_rect, mainPtr(), dest_rect);
} else {
from_rect.offset((picture_wanted % 20) * 12,(picture_wanted / 20) * 12);
rect_draw_some_item(small_ter_gworld, from_rect, mainPtr, dest_rect);
rect_draw_some_item(small_ter_gworld, from_rect, mainPtr(), dest_rect);
}
}
}
@@ -1188,7 +1187,7 @@ void draw_one_tiny_terrain_spot (short i,short j,ter_num_t terrain_to_draw,short
rectangle road_rect = dest_rect;
int border = (size - 4) / 2;
road_rect.inset(border,border);
rect_draw_some_item(*ResMgr::graphics.get("edbuttons"), {120, 231, 124, 235}, mainPtr, road_rect);
rect_draw_some_item(*ResMgr::graphics.get("edbuttons"), {120, 231, 124, 235}, mainPtr(), road_rect);
}
if(mouse_spot.x >= 0 && mouse_spot.y >= 0) {
location where_draw(i,j);
@@ -1206,9 +1205,9 @@ void draw_one_tiny_terrain_spot (short i,short j,ter_num_t terrain_to_draw,short
} else if(where_draw == mouse_spot)
need_hilite = true;
if(need_hilite) {
fill_rect(mainPtr, dest_rect, hilite_colour);
fill_rect(mainPtr(), dest_rect, hilite_colour);
if(large_hilite && where_draw == mouse_spot)
fill_rect(mainPtr, dest_rect, hilite_colour);
fill_rect(mainPtr(), dest_rect, hilite_colour);
}
}
}
@@ -1248,12 +1247,12 @@ void draw_frames() {
if((which_pt.x == town->wandering_locs[i].x) &&
(which_pt.y == town->wandering_locs[i].y)) {
frame_rect(mainPtr, draw_rect, Colours::RED);
frame_rect(mainPtr(), draw_rect, Colours::RED);
}
for(short i = 0; i < town->start_locs.size(); i++)
if((which_pt.x == town->start_locs[i].x) &&
(which_pt.y == town->start_locs[i].y)) {
frame_rect(mainPtr, draw_rect, Colours::PINK);
frame_rect(mainPtr(), draw_rect, Colours::PINK);
}
@@ -1268,7 +1267,7 @@ static void place_selected_terrain(ter_num_t ter, rectangle draw_rect) {
if(picture_wanted >= 1000) {
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted % 1000);
rect_draw_some_item(*source_gworld, source_rect,mainPtr,draw_rect);
rect_draw_some_item(*source_gworld, source_rect,mainPtr(),draw_rect);
}
else if(picture_wanted >= 960) {
picture_wanted -= 960;
@@ -1276,14 +1275,14 @@ static void place_selected_terrain(ter_num_t ter, rectangle draw_rect) {
source_rect.right = source_rect.left + 28;
source_rect.top = 36 * (picture_wanted % 5);
source_rect.bottom = source_rect.top + 36;
rect_draw_some_item(*ResMgr::graphics.get("teranim"),source_rect,mainPtr,draw_rect);
rect_draw_some_item(*ResMgr::graphics.get("teranim"),source_rect,mainPtr(),draw_rect);
}
else {
source_rect = get_template_rect(ter);
int which_sheet = picture_wanted / 50;
sf::Texture& terrain_gworld = *ResMgr::graphics.get("ter" + std::to_string(1 + which_sheet));
rect_draw_some_item(terrain_gworld,source_rect,
mainPtr,draw_rect);
mainPtr(),draw_rect);
}
short small_i = get_small_icon(ter);
rectangle tiny_to = draw_rect;
@@ -1292,7 +1291,7 @@ static void place_selected_terrain(ter_num_t ter, rectangle draw_rect) {
rectangle tiny_from = base_small_button_from;
tiny_from.offset(7 * (small_i % 30),7 * (small_i / 30));
if(small_i >= 0 && small_i < 255)
rect_draw_some_item(*ResMgr::graphics.get("edbuttons"),tiny_from,mainPtr,tiny_to);
rect_draw_some_item(*ResMgr::graphics.get("edbuttons"),tiny_from,mainPtr(),tiny_to);
}
void place_location() {
@@ -1301,9 +1300,9 @@ void place_location() {
rectangle text_rect = {0,0,12,100};
text_rect.offset(RIGHT_AREA_UL_X,RIGHT_AREA_UL_Y);
short picture_wanted;
tileImage(mainPtr, terrain_buttons_rect, bg[17]);
frame_rect(mainPtr, terrain_buttons_rect, sf::Color::Black);
location mouse = translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr));
tileImage(mainPtr(), terrain_buttons_rect, bg[17]);
frame_rect(mainPtr(), terrain_buttons_rect, sf::Color::Black);
location mouse = translate_mouse_coordinates(sf::Mouse::getPosition(mainPtr()));
location moveTo(5, terrain_rects[255].top + 18);
draw_rect = text_rect;
@@ -1345,25 +1344,25 @@ void place_location() {
}
TextStyle style;
style.lineHeight = 12;
win_draw_string(mainPtr, draw_rect, sout.str(), eTextMode::LEFT_TOP, style);
win_draw_string(mainPtr(), draw_rect, sout.str(), eTextMode::LEFT_TOP, style);
sout.str("");
moveTo = location(260 ,terrain_rects[255].top + 18);
draw_rect = text_rect;
draw_rect.offset(moveTo);
sout << current_terrain_type;
win_draw_string(mainPtr, draw_rect, sout.str(), eTextMode::LEFT_TOP, style);
win_draw_string(mainPtr(), draw_rect, sout.str(), eTextMode::LEFT_TOP, style);
sout.str("");
if(overall_mode < MODE_MAIN_SCREEN) {
moveTo = location(5,terrain_rects[255].bottom + 121);
draw_rect = text_rect;
draw_rect.offset(moveTo);
win_draw_string(mainPtr, draw_rect, current_string[0], eTextMode::LEFT_TOP, style);
win_draw_string(mainPtr(), draw_rect, current_string[0], eTextMode::LEFT_TOP, style);
moveTo = location(RIGHT_AREA_WIDTH / 2,terrain_rects[255].bottom + 121);
draw_rect = text_rect;
draw_rect.offset(moveTo);
win_draw_string(mainPtr, draw_rect, current_string[1], eTextMode::LEFT_TOP, style);
win_draw_string(mainPtr(), draw_rect, current_string[1], eTextMode::LEFT_TOP, style);
}
draw_rect.top = palette_buttons[0][0].top + terrain_rects[255].bottom + 5;
@@ -1384,19 +1383,19 @@ void place_location() {
to_rect.height() = to_rect.height() / 2;
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted);
rect_draw_some_item(*source_gworld, source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, source_rect, mainPtr(), to_rect, sf::BlendAlpha);
picture_wanted++;
to_rect.offset(to_rect.width(), 0);
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted);
rect_draw_some_item(*source_gworld, source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, source_rect, mainPtr(), to_rect, sf::BlendAlpha);
picture_wanted++;
to_rect.offset(-to_rect.width(), to_rect.height());
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted);
rect_draw_some_item(*source_gworld, source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, source_rect, mainPtr(), to_rect, sf::BlendAlpha);
picture_wanted++;
to_rect.offset(to_rect.width(), 0);
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted);
rect_draw_some_item(*source_gworld, source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, source_rect, mainPtr(), to_rect, sf::BlendAlpha);
} else if(picture_wanted >= 3000) {
picture_wanted %= 1000;
to_rect.width() = to_rect.width() / 2;
@@ -1404,11 +1403,11 @@ void place_location() {
to_rect.offset(to_rect.width() / 2, 0);
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted);
rect_draw_some_item(*source_gworld, source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, source_rect, mainPtr(), to_rect, sf::BlendAlpha);
picture_wanted++;
to_rect.offset(0, to_rect.height());
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted);
rect_draw_some_item(*source_gworld, source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, source_rect, mainPtr(), to_rect, sf::BlendAlpha);
} else if(picture_wanted >= 2000) {
picture_wanted %= 1000;
to_rect.width() = to_rect.width() / 2;
@@ -1416,16 +1415,16 @@ void place_location() {
to_rect.offset(0, to_rect.height() / 2);
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted);
rect_draw_some_item(*source_gworld, source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, source_rect, mainPtr(), to_rect, sf::BlendAlpha);
picture_wanted++;
to_rect.offset(to_rect.width(), 0);
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted);
rect_draw_some_item(*source_gworld, source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, source_rect, mainPtr(), to_rect, sf::BlendAlpha);
} else if(picture_wanted >= 1000) {
picture_wanted %= 1000;
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted);
rect_draw_some_item(*source_gworld, source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(*source_gworld, source_rect, mainPtr(), to_rect, sf::BlendAlpha);
} else {
auto pic_info = m_pic_index[picture_wanted];
picture_wanted = pic_info.i;
@@ -1436,42 +1435,42 @@ void place_location() {
to_rect.width() = to_rect.width() / 2;
to_rect.height() = to_rect.height() / 2;
source_rect = calc_rect(2 * ((picture_wanted % 20) / 10), (picture_wanted % 20) % 10);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr(), to_rect, sf::BlendAlpha);
picture_wanted++;
to_rect.offset(to_rect.width(), 0);
source_rect = calc_rect(2 * ((picture_wanted % 20) / 10), (picture_wanted % 20) % 10);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr(), to_rect, sf::BlendAlpha);
picture_wanted++;
to_rect.offset(-to_rect.width(), to_rect.height());
source_rect = calc_rect(2 * ((picture_wanted % 20) / 10), (picture_wanted % 20) % 10);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr(), to_rect, sf::BlendAlpha);
picture_wanted++;
to_rect.offset(to_rect.width(), 0);
source_rect = calc_rect(2 * ((picture_wanted % 20) / 10), (picture_wanted % 20) % 10);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr(), to_rect, sf::BlendAlpha);
} else if(pic_info.y == 2) {
to_rect.width() = to_rect.width() / 2;
to_rect.height() = to_rect.height() / 2;
to_rect.offset(to_rect.width() / 2, 0);
source_rect = calc_rect(2 * ((picture_wanted % 20) / 10), (picture_wanted % 20) % 10);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr(), to_rect, sf::BlendAlpha);
picture_wanted++;
to_rect.offset(0, to_rect.height());
source_rect = calc_rect(2 * ((picture_wanted % 20) / 10), (picture_wanted % 20) % 10);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr(), to_rect, sf::BlendAlpha);
} else if(pic_info.x == 2) {
to_rect.width() = to_rect.width() / 2;
to_rect.height() = to_rect.height() / 2;
to_rect.offset(0, to_rect.height() / 2);
source_rect = calc_rect(2 * ((picture_wanted % 20) / 10), (picture_wanted % 20) % 10);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr(), to_rect, sf::BlendAlpha);
picture_wanted++;
to_rect.offset(to_rect.width(), 0);
source_rect = calc_rect(2 * ((picture_wanted % 20) / 10), (picture_wanted % 20) % 10);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr(), to_rect, sf::BlendAlpha);
} else {
source_rect = calc_rect(2 * ((picture_wanted % 20) / 10), (picture_wanted % 20) % 10);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, mainPtr(), to_rect, sf::BlendAlpha);
}
}
} else if(overall_mode == MODE_PLACE_ITEM || overall_mode == MODE_PLACE_SAME_ITEM) {
@@ -1479,15 +1478,15 @@ void place_location() {
if(picture_wanted >= 1000) {
std::shared_ptr<const sf::Texture> source_gworld;
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted % 1000);
rect_draw_some_item(*source_gworld,source_rect,mainPtr,draw_rect,sf::BlendAlpha);
rect_draw_some_item(*source_gworld,source_rect,mainPtr(),draw_rect,sf::BlendAlpha);
} else if(picture_wanted < 55) {
source_rect = calc_rect(picture_wanted % 5,picture_wanted / 5);
rect_draw_some_item(*ResMgr::graphics.get("objects"),source_rect,mainPtr,draw_rect,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::graphics.get("objects"),source_rect,mainPtr(),draw_rect,sf::BlendAlpha);
} else {
draw_rect.inset(5, 9);
rectangle tiny_from = {0,0,18,18};
tiny_from.offset((picture_wanted % 10) * 18,(picture_wanted / 10) * 18);
rect_draw_some_item(*ResMgr::graphics.get("tinyobj"),tiny_from,mainPtr,draw_rect,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::graphics.get("tinyobj"),tiny_from,mainPtr(),draw_rect,sf::BlendAlpha);
}
} else if(overall_mode == MODE_TOGGLE_SPECIAL_DOT) {
draw_field = true;
@@ -1506,10 +1505,10 @@ void place_location() {
source_rect = calc_rect(7, 0);
} else if(overall_mode == MODE_PLACE_FIRE_BARRIER) {
source_rect = calc_rect(8, 4);
rect_draw_some_item(*ResMgr::graphics.get("teranim"),source_rect,mainPtr,draw_rect,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::graphics.get("teranim"),source_rect,mainPtr(),draw_rect,sf::BlendAlpha);
} else if(overall_mode == MODE_PLACE_FORCE_BARRIER) {
source_rect = calc_rect(8, 4);
rect_draw_some_item(*ResMgr::graphics.get("teranim"),source_rect,mainPtr,draw_rect,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::graphics.get("teranim"),source_rect,mainPtr(),draw_rect,sf::BlendAlpha);
} else if(overall_mode == MODE_PLACE_QUICKFIRE) {
draw_field = true;
source_rect = calc_rect(7, 1);
@@ -1522,7 +1521,7 @@ void place_location() {
}
if(draw_field) {
const sf::Texture& fields_gworld = *ResMgr::graphics.get("fields");
rect_draw_some_item(fields_gworld,source_rect,mainPtr,draw_rect,sf::BlendAlpha);
rect_draw_some_item(fields_gworld,source_rect,mainPtr(),draw_rect,sf::BlendAlpha);
}
draw_rect.offset(0,40);
place_selected_terrain(current_ground, draw_rect);
@@ -1616,5 +1615,10 @@ void record_display_strings(){}
// Translate mouse event coordinates based on the global view and viewport
sf::Vector2f translate_mouse_coordinates(sf::Vector2i const point) {
return mainPtr.mapPixelToCoords(point, mainView);
return mainPtr().mapPixelToCoords(point, mainView);
}
sf::RenderWindow& mainPtr() {
static sf::RenderWindow instance;
return instance;
}

View File

@@ -38,3 +38,4 @@ rectangle get_custom_rect (short which_rect);
void init_dialogs();
void record_display_strings();
sf::Vector2f translate_mouse_coordinates(sf::Vector2i const point);
sf::RenderWindow& mainPtr();

View File

@@ -52,7 +52,6 @@ short menuChoiceId=-1;
/* Globals */
bool All_Done = false;
bool changed_display_mode = false;
sf::RenderWindow mainPtr;
sf::View mainView;
cTown* town = nullptr;
bool mouse_button_held = false,editing_town = false;
@@ -215,7 +214,7 @@ int main(int argc, char* argv[]) {
}
static void init_sbar(std::shared_ptr<cScrollbar>& sbar, const std::string& name, rectangle rect, rectangle events_rect, int pgSz) {
static cParentless mainWin(mainPtr);
static cParentless mainWin(mainPtr());
sbar.reset(new cScrollbar(mainWin));
sbar->setBounds(rect);
sbar->set_wheel_event_rect(events_rect);
@@ -243,7 +242,7 @@ static void init_scrollbars() {
init_sbar(pal_sbar, "pal_sbar", pal_sbar_rect, pal_sbar_event_rect, 16);
}
sf::FloatRect compute_viewport(const sf::RenderWindow & mainPtr, float ui_scale) {
sf::FloatRect compute_viewport(const sf::RenderWindow& mainPtr, float ui_scale) {
// See compute_viewport() in boe.graphics.cpp
sf::FloatRect viewport;
@@ -256,7 +255,7 @@ sf::FloatRect compute_viewport(const sf::RenderWindow & mainPtr, float ui_scale)
return viewport;
}
void adjust_windows (sf::RenderWindow & mainPtr, sf::View & mainView) {
void adjust_windows (sf::RenderWindow& mainPtr, sf::View & mainView) {
// TODO: things might still be broken when upscaled.
// translate_mouse_coordinates has been applied in some places but more work might be needed.
@@ -320,7 +319,7 @@ static void process_args(int argc, char* argv[]) {
void init_scened(int argc, char* argv[]) {
init_directories(argv[0]);
sync_prefs();
adjust_windows(mainPtr, mainView);
adjust_windows(mainPtr(), mainView);
//init_menubar();
init_shaders();
init_tiling();
@@ -328,8 +327,8 @@ void init_scened(int argc, char* argv[]) {
#ifdef SFML_SYSTEM_MACOS
init_menubar(); // This is called twice because Windows and Mac have different ordering requirements
#endif
mainPtr.clear(sf::Color::Black);
mainPtr.display();
mainPtr().clear(sf::Color::Black);
mainPtr().display();
set_cursor(watch_curs);
game_rand.seed(time(nullptr));
@@ -363,7 +362,7 @@ void handle_events() {
while(!All_Done) {
if(changed_display_mode) {
changed_display_mode = false;
adjust_windows(mainPtr, mainView);
adjust_windows(mainPtr(), mainView);
}
#ifdef __APPLE__
@@ -372,7 +371,7 @@ void handle_events() {
menuChoiceId=-1;
}
#endif
while(pollEvent(mainPtr, currentEvent)) handle_one_event(currentEvent);
while(pollEvent(mainPtr(), currentEvent)) handle_one_event(currentEvent);
// Why do we have to set this to false after handling every event?
ae_loading = false;

View File

@@ -2,11 +2,12 @@
#include "scen.menu.hpp"
#include "scen.menus.hpp"
#include "scen.graphics.hpp"
#include <stdexcept>
OpenBoESceneditMenu::OpenBoESceneditMenu(sf::RenderWindow& window)
: tgui { window } {
OpenBoESceneditMenu::OpenBoESceneditMenu()
: tgui { mainPtr() } {
// Build a menubar and store it in tgui with a known name
this->tgui.add(this->build_menubar(), this->internal_menubar_widget_name);
}

View File

@@ -13,7 +13,7 @@
class OpenBoESceneditMenu : public iEventListener, public iDrawable {
public:
OpenBoESceneditMenu(sf::RenderWindow &);
OpenBoESceneditMenu();
virtual bool handle_event(const sf::Event&) override;
virtual void draw() override;

View File

@@ -1,5 +1,6 @@
#include "scen.global.hpp"
#include "scen.menus.hpp"
#include "scen.graphics.hpp"
#include <SFML/Graphics/RenderWindow.hpp>
#include <memory>
#include <unordered_map>
@@ -9,7 +10,6 @@
#include "tools/event_listener.hpp"
#include "tools/drawable_manager.hpp"
extern sf::RenderWindow mainPtr;
extern cUndoList undo_list;
extern std::unordered_map <std::string, std::shared_ptr <iEventListener>> event_listeners;
extern cDrawableManager drawable_mgr;
@@ -17,7 +17,7 @@ extern cDrawableManager drawable_mgr;
std::shared_ptr <OpenBoESceneditMenu> menu_ptr;
void init_menubar() {
menu_ptr.reset(new OpenBoESceneditMenu(mainPtr));
menu_ptr.reset(new OpenBoESceneditMenu());
event_listeners["menubar"] = std::dynamic_pointer_cast <iEventListener> (menu_ptr);
drawable_mgr.add_drawable(UI_LAYER_MENUBAR, "menubar", menu_ptr);

View File

@@ -23,7 +23,6 @@ enum {
HELP_MENU_POS = 6,
};
extern sf::RenderWindow mainPtr;
extern cScenario scenario;
extern cUndoList undo_list;
LONG_PTR mainProc;
@@ -54,7 +53,7 @@ void setMenuCommand(HMENU& menu, int i, eMenu cmd) {
}
void init_menubar() {
HWND winHandle = mainPtr.getSystemHandle();
HWND winHandle = mainPtr().getSystemHandle();
if(winHandle == NULL) return;
if(menuHandle == NULL)
menuHandle = LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MENU1));
@@ -185,7 +184,7 @@ void shut_down_menus(short mode) {
EnableMenuItem(out_menu, i, MF_GRAYED | MF_BYPOSITION);
}
}
DrawMenuBar(mainPtr.getSystemHandle());
DrawMenuBar(mainPtr().getSystemHandle());
}
void update_edit_menu() {
@@ -207,7 +206,7 @@ void update_edit_menu() {
ModifyMenuA(edit_menu, IDM_EDIT_REDO, MF_BYCOMMAND, IDM_EDIT_REDO, title.c_str());
EnableMenuItem(edit_menu, IDM_EDIT_REDO, MF_BYCOMMAND | MF_ENABLED);
}
DrawMenuBar(mainPtr.getSystemHandle());
DrawMenuBar(mainPtr().getSystemHandle());
}
#include "cursors.hpp"