diff --git a/src/dialogxml/dialogs/dialog.cpp b/src/dialogxml/dialogs/dialog.cpp index 8418873e9..8468a4cad 100644 --- a/src/dialogxml/dialogs/dialog.cpp +++ b/src/dialogxml/dialogs/dialog.cpp @@ -39,9 +39,7 @@ using namespace std; using namespace ticpp; // TODO: Would be nice if I could avoid depending on mainPtr -extern sf::RenderWindow mainPtr; -extern sf::Texture bg_gworld; const short cDialog::BG_DARK = 5, cDialog::BG_LIGHT = 16; short cDialog::defaultBackground = cDialog::BG_DARK; cDialog* cDialog::topWindow = nullptr; @@ -496,7 +494,7 @@ bool cDialog::sendInput(cKey key) { void cDialog::run(std::function onopen){ cDialog* formerTop = topWindow; // TODO: The introduction of the static topWindow means I may be able to use this instead of parent->win; do I still need parent? - sf::RenderWindow* parentWin = &(parent ? parent->win : mainPtr); + sf::RenderWindow* parentWin = &(parent ? parent->win : mainPtr()); auto parentPos = parentWin->getPosition(); auto parentSz = parentWin->getSize(); cursor_type former_curs = Cursor::current; @@ -530,7 +528,7 @@ void cDialog::run(std::function onopen){ winLastY = parentPos.y + (int(parentSz.y) - winRect.height()) / 2; win.setPosition({winLastX, winLastY}); draw(); - makeFrontWindow(parent ? parent-> win : mainPtr); + makeFrontWindow(parent ? parent-> win : mainPtr()); makeFrontWindow(win); // This is a loose modal session, as it doesn't prevent you from clicking away, // but it does prevent editing other dialogs, and it also keeps this window on top diff --git a/src/dialogxml/widgets/button.cpp b/src/dialogxml/widgets/button.cpp index 8bbdfe63b..4d242096d 100644 --- a/src/dialogxml/widgets/button.cpp +++ b/src/dialogxml/widgets/button.cpp @@ -16,8 +16,6 @@ #include "fileio/resmgr/res_image.hpp" -extern sf::Texture bg_gworld; - cButton::cButton(iComponent& parent) : cControl(CTRL_BTN,parent), wrapLabel(false), diff --git a/src/dialogxml/widgets/message.cpp b/src/dialogxml/widgets/message.cpp index 5f0484351..0695447c8 100644 --- a/src/dialogxml/widgets/message.cpp +++ b/src/dialogxml/widgets/message.cpp @@ -11,8 +11,6 @@ #include "dialogxml/dialogs/dialog.hpp" #include -extern sf::Texture bg_gworld; - bool cTextMsg::manageFormat(eFormat prop, bool set, boost::any* val) { switch(prop) { case TXT_FRAME: diff --git a/src/dialogxml/widgets/pict.cpp b/src/dialogxml/widgets/pict.cpp index e017a8189..05062cd7a 100644 --- a/src/dialogxml/widgets/pict.cpp +++ b/src/dialogxml/widgets/pict.cpp @@ -21,7 +21,6 @@ #include "dialogxml/dialogs/strdlog.hpp" #include "fileio/resmgr/res_image.hpp" -extern sf::Texture bg_gworld; extern cCustomGraphics spec_scen_g; const pic_num_t cPict::BLANK = -1; diff --git a/src/game/boe.actions.cpp b/src/game/boe.actions.cpp index 140a46798..a39c54a41 100644 --- a/src/game/boe.actions.cpp +++ b/src/game/boe.actions.cpp @@ -89,7 +89,6 @@ extern bool party_in_memory; extern sf::View mainView; // game info globals -extern sf::RenderWindow mainPtr; extern short which_item_page[6]; extern short store_spell_target,pc_casting; extern eSpell store_mage, store_priest; @@ -107,7 +106,6 @@ extern short combat_active_pc; extern eStatMode stat_screen_mode; extern bool map_visible; -extern sf::RenderWindow mini_map; extern std::shared_ptr text_sbar,item_sbar,shop_sbar; extern short shop_identify_cost, shop_recharge_amount; @@ -476,7 +474,7 @@ void handle_rest(bool& need_redraw, bool& need_reprint) { i = 200; add_string_to_buf(" Monsters nearby."); } - while(pollEvent(mainPtr, dummy_evt)); + while(pollEvent(mainPtr(), dummy_evt)); redraw_screen(REFRESH_NONE); i++; } @@ -1128,7 +1126,7 @@ static void handle_town_wait(bool& need_redraw, bool& need_reprint) { i = 200; add_string_to_buf(" Monster sighted!"); } - while(pollEvent(mainPtr, dummy_evt)); + while(pollEvent(mainPtr(), dummy_evt)); redraw_screen(REFRESH_NONE); } put_pc_screen(); @@ -1392,7 +1390,7 @@ bool handle_action(const sf::Event& event, cFramerateLimiter& fps_limiter) { location point_in_area; location the_point(event.mouseButton.x, event.mouseButton.y); - the_point = mainPtr.mapPixelToCoords(the_point, mainView); + the_point = mainPtr().mapPixelToCoords(the_point, mainView); end_scenario = false; // MARK: First, figure out where party is @@ -1420,7 +1418,7 @@ bool handle_action(const sf::Event& event, cFramerateLimiter& fps_limiter) { // Otherwise they're in a terrain view mode location cur_loc = is_out() ? univ.party.out_loc : center; - auto button_hit = UI::toolbar.button_hit(mainPtr, the_point, fps_limiter); + auto button_hit = UI::toolbar.button_hit(mainPtr(), the_point, fps_limiter); // MARK: Then, handle a button being hit. switch(button_hit) { @@ -2332,9 +2330,9 @@ void close_map(bool record) { if(record && recording){ record_action("close_map", ""); } - mini_map.setVisible(false); + mini_map().setVisible(false); map_visible = false; - mainPtr.setActive(); + mainPtr().setActive(); } void cancel_item_target(bool& did_something, bool& need_redraw, bool& need_reprint) { @@ -2647,7 +2645,7 @@ bool handle_keystroke(const sf::Event& event, cFramerateLimiter& fps_limiter){ pass_point = talk_words[i].rect.topLeft(); pass_point.x += talk_area_rect.left+9; pass_point.y += talk_area_rect.top+9; - pass_point = mainPtr.mapCoordsToPixel(pass_point, mainView); + pass_point = mainPtr().mapCoordsToPixel(pass_point, mainView); pass_event.mouseButton.x = pass_point.x; pass_event.mouseButton.y = pass_point.y; are_done = handle_action(pass_event, fps_limiter); @@ -2664,7 +2662,7 @@ bool handle_keystroke(const sf::Event& event, cFramerateLimiter& fps_limiter){ // related to talk_area_rect pass_point.x += talk_area_rect.left+9; pass_point.y += talk_area_rect.top+9; - pass_point = mainPtr.mapCoordsToPixel(pass_point, mainView); + pass_point = mainPtr().mapCoordsToPixel(pass_point, mainView); pass_event.mouseButton.x = pass_point.x; pass_event.mouseButton.y = pass_point.y; are_done = handle_action(pass_event, fps_limiter); @@ -2678,7 +2676,7 @@ bool handle_keystroke(const sf::Event& event, cFramerateLimiter& fps_limiter){ else { if(!handle_screen_shift(screen_shift_delta[i], need_redraw)){ // Directional keys simulate directional click - pass_point = mainPtr.mapCoordsToPixel(terrain_click[i], mainView); + pass_point = mainPtr().mapCoordsToPixel(terrain_click[i], mainView); pass_event.mouseButton.x = pass_point.x; pass_event.mouseButton.y = pass_point.y; are_done = handle_action(pass_event, fps_limiter); @@ -2884,11 +2882,11 @@ bool handle_keystroke(const sf::Event& event, cFramerateLimiter& fps_limiter){ bool handle_scroll(const sf::Event& event) { rectangle world_screen = win_to_rects[WINRECT_TERVIEW]; world_screen.inset(13, 13); - fill_rect(mainPtr, world_screen, sf::Color::Magenta); + fill_rect(mainPtr(), world_screen, sf::Color::Magenta); // TODO: centralize this translation somewhere location pos(event.mouseWheel.x, event.mouseWheel.y); - pos = mainPtr.mapPixelToCoords(pos, mainView); + pos = mainPtr().mapPixelToCoords(pos, mainView); int amount = event.mouseWheel.delta; if(scrollableModes.count(overall_mode) && pos.in(world_screen)) { @@ -2937,7 +2935,7 @@ void post_load() { set_stat_window(ITEM_WIN_PC1); put_pc_screen(); draw_terrain(); - UI::toolbar.draw(mainPtr); + UI::toolbar.draw(mainPtr()); draw_text_bar(); print_buf(); @@ -3981,7 +3979,7 @@ bool check_for_interrupt(std::string confirm_dialog){ pop_next_action(); interrupt = true; } - else if(pollEvent(mainPtr, evt) && evt.type == sf::Event::KeyPressed) { + else if(pollEvent(mainPtr(), evt) && evt.type == sf::Event::KeyPressed) { // TODO: I wonder if there are other events we should handle here? Resize maybe? #ifdef __APPLE__ if(evt.key.code == kb::Period && evt.key.system) diff --git a/src/game/boe.combat.cpp b/src/game/boe.combat.cpp index 9a7993924..312afb996 100644 --- a/src/game/boe.combat.cpp +++ b/src/game/boe.combat.cpp @@ -35,7 +35,6 @@ extern location center; extern short combat_active_pc; extern bool monsters_going,spell_forced; extern bool flushingInput; -extern sf::RenderWindow mainPtr; extern eSpell store_mage, store_priest; extern short store_mage_lev, store_priest_lev,store_item_spell_level; extern short store_spell_target,pc_casting,current_spell_range; @@ -267,7 +266,7 @@ void start_outdoor_combat(cOutdoors::cWandering encounter,location where,short n print_buf(); play_sound(23); - mainPtr.setActive(); + mainPtr().setActive(); which_combat_type = 0; overall_mode = MODE_COMBAT; @@ -357,7 +356,7 @@ void start_outdoor_combat(cOutdoors::cWandering encounter,location where,short n set_pc_moves(); pick_next_pc(); center = univ.current_pc().combat_pos; - UI::toolbar.draw(mainPtr); + UI::toolbar.draw(mainPtr()); put_pc_screen(); set_stat_window_for_pc(univ.cur_pc); @@ -4715,7 +4714,7 @@ void end_combat() { if(univ.current_pc().main_status != eMainStatus::ALIVE) univ.cur_pc = first_active_pc(); put_item_screen(stat_window); - UI::toolbar.draw(mainPtr); + UI::toolbar.draw(mainPtr()); } diff --git a/src/game/boe.dlgutil.cpp b/src/game/boe.dlgutil.cpp index 20ccefa80..d2d8ff276 100644 --- a/src/game/boe.dlgutil.cpp +++ b/src/game/boe.dlgutil.cpp @@ -45,7 +45,6 @@ extern eItemWinMode stat_window; extern eGameMode overall_mode; extern bool changed_display_mode; -extern sf::RenderWindow mainPtr; extern rectangle d_rects[80]; extern short d_rect_index[80]; extern eStatMode stat_screen_mode; @@ -55,9 +54,7 @@ extern location center; extern std::shared_ptr text_sbar,item_sbar,shop_sbar; extern std::shared_ptr done_btn, help_btn; extern bool map_visible; -extern sf::RenderWindow mini_map; extern cUniverse univ; -extern sf::Texture pc_gworld; extern std::map skill_max; extern void give_help_and_record(short help1, short help2, bool help_forced = false); @@ -70,7 +67,6 @@ extern bool party_in_memory; eGameMode store_pre_talk_mode; short store_personality,store_personality_graphic,shop_identify_cost,shop_recharge_amount,shop_recharge_limit; std::string save_talk_str1, save_talk_str2; -sf::RenderTexture talk_gworld; bool talk_end_forced; rectangle talk_area_rect = {7,19,422,298}, word_place_rect = {44,7,372,257},talk_help_rect = {7,268,23,286}; std::string title_string; @@ -140,7 +136,7 @@ bool start_shop_mode(short which,short cost_adj,std::string store_name, bool can } area_rect = talk_area_rect; - talk_gworld.create(area_rect.width(), area_rect.height()); + talk_gworld().create(area_rect.width(), area_rect.height()); store_pre_shop_mode = overall_mode; overall_mode = MODE_SHOPPING; @@ -262,7 +258,7 @@ bool handle_shop_event(location p, cFramerateLimiter& fps_limiter) { return true; } } - return p.in(rectangle(talk_gworld)); + return p.in(rectangle(talk_gworld())); } void handle_sale(int i) { @@ -637,7 +633,7 @@ void start_talk_mode(short m_num,short personality,mon_num_t monst_type,short st store_m_num = m_num; store_talk_face_pic = store_face_pic; //// area_rect = talk_area_rect; - talk_gworld.create(area_rect.width(), area_rect.height()); + talk_gworld().create(area_rect.width(), area_rect.height()); help_btn->show(); // This would be the place to show the text box, if I add it. @@ -1157,7 +1153,7 @@ bool handle_talk_event(location p, cFramerateLimiter& fps_limiter) { break; } handle_talk_node(which_talk_entry); - return clicked_word || p.in(rectangle(talk_gworld)); + return clicked_word || p.in(rectangle(talk_gworld())); } //town_num; // Will be 0 - 200 for town, 200 - 290 for outdoors diff --git a/src/game/boe.fileio.cpp b/src/game/boe.fileio.cpp index 08d53db75..9ffe61d82 100644 --- a/src/game/boe.fileio.cpp +++ b/src/game/boe.fileio.cpp @@ -30,9 +30,7 @@ extern eGameMode overall_mode; extern bool party_in_memory; extern location center; extern long register_flag; -extern sf::RenderWindow mainPtr; extern bool map_visible; -extern sf::RenderWindow mini_map; extern short which_combat_type; extern short cur_town_talk_loaded; extern cUniverse univ; diff --git a/src/game/boe.graphics.cpp b/src/game/boe.graphics.cpp index 01353fceb..24996c2b0 100644 --- a/src/game/boe.graphics.cpp +++ b/src/game/boe.graphics.cpp @@ -45,7 +45,6 @@ #include "tools/gitrev.hpp" #endif -extern sf::RenderWindow mainPtr; extern eItemWinMode stat_window; extern eGameMode overall_mode; extern short current_spell_range; @@ -63,7 +62,6 @@ extern short num_targets_left; extern location spell_targets[8]; extern std::shared_ptr text_sbar,item_sbar,shop_sbar; extern std::shared_ptr done_btn, help_btn; -extern sf::Texture bg_gworld; extern const rectangle sbar_rect,item_sbar_rect,shop_sbar_rect; extern rectangle startup_top; extern rectangle talk_area_rect, word_place_rect; @@ -74,7 +72,6 @@ extern short fast_bang; extern tessel_ref_t bg[]; extern cUniverse univ; extern cCustomGraphics spec_scen_g; -extern sf::RenderWindow mini_map; bool map_visible = false; extern std::string save_talk_str1, save_talk_str2; extern cDrawableManager drawable_mgr; @@ -102,12 +99,52 @@ char light_area[13][13]; char unexplored_area[13][13]; // Declare the graphics -sf::RenderTexture pc_stats_gworld; -sf::RenderTexture item_stats_gworld; -sf::RenderTexture text_area_gworld; -sf::RenderTexture terrain_screen_gworld; -sf::RenderTexture text_bar_gworld; -sf::RenderTexture map_gworld; +sf::RenderTexture& pc_stats_gworld() +{ + static sf::RenderTexture instance; + return instance; +} +sf::RenderTexture& item_stats_gworld() +{ + static sf::RenderTexture instance; + return instance; +} +sf::RenderTexture& text_area_gworld() +{ + static sf::RenderTexture instance; + return instance; +} +sf::RenderTexture& terrain_screen_gworld() +{ + static sf::RenderTexture instance; + return instance; +} +sf::RenderTexture& text_bar_gworld() +{ + static sf::RenderTexture instance; + return instance; +} +sf::RenderTexture& map_gworld() +{ + static sf::RenderTexture instance; + return instance; +} +sf::RenderTexture& talk_gworld() +{ + static sf::RenderTexture instance; + return instance; +} + +sf::RenderWindow& mainPtr() +{ + static sf::RenderWindow instance; + return instance; +} +sf::RenderWindow& mini_map() +{ + static sf::RenderWindow instance; + return instance; +} bool has_run_anim = false,currently_loading_graphics = false; @@ -153,30 +190,31 @@ void adjust_window_mode() { int winHeight = height; winHeight += os_specific_y_offset(); - mainPtr.create(sf::VideoMode(width, winHeight, 32), "Blades of Exile", sf::Style::Titlebar | sf::Style::Close, winSettings); + mainPtr().create(sf::VideoMode(width, winHeight, 32), "Blades of Exile", sf::Style::Titlebar | sf::Style::Close, winSettings); // Center the small window on the desktop - mainPtr.setPosition({static_cast((desktop.width - width) / 2), static_cast((desktop.height - height) / 2)}); + mainPtr().setPosition({static_cast((desktop.width - width) / 2), static_cast((desktop.height - height) / 2)}); } else { - mainPtr.create(desktop, "Blades of Exile", sf::Style::None, winSettings); - mainPtr.setPosition({0,0}); + mainPtr().create(desktop, "Blades of Exile", sf::Style::None, winSettings); + mainPtr().setPosition({0,0}); } // Initialize the view mainView.setSize(width, height); mainView.setCenter(width / 2, height / 2); - sf::FloatRect mainPort = compute_viewport(mainPtr, mode, ui_scale, width, height); + sf::RenderWindow& p = mainPtr(); + sf::FloatRect mainPort = compute_viewport(p, mode, ui_scale, width, height); mainView.setViewport(mainPort); #ifndef __APPLE__ // This overrides Dock icon on OSX, which isn't what we want at all const ImageRsrc& icon = ResMgr::graphics.get("icon", true); - mainPtr.setIcon(icon->getSize().x, icon->getSize().y, icon->copyToImage().getPixelsPtr()); + mainPtr().setIcon(icon->getSize().x, icon->getSize().y, icon->copyToImage().getPixelsPtr()); #endif #ifdef SFML_SYSTEM_WINDOWS - // On windows, the file dialogs are constructed with mainPtr as a parent, - // so they need to be reconstructed after mainPtr is. + // On windows, the file dialogs are constructed with mainPtr() as a parent, + // so they need to be reconstructed after mainPtr() is. init_fileio(); #endif init_menubar(); @@ -247,10 +285,10 @@ void init_startup() { void draw_startup(short but_type) { sf::Texture& startup_gworld = *ResMgr::graphics.get("startup", true); - rect_draw_some_item(startup_gworld,startup_from[0],mainPtr,startup_top); + rect_draw_some_item(startup_gworld,startup_from[0],mainPtr(),startup_top); for(auto btn : startup_button.keys()) { - rect_draw_some_item(startup_gworld,startup_from[1],mainPtr,startup_button[btn]); + rect_draw_some_item(startup_gworld,startup_from[1],mainPtr(),startup_button[btn]); draw_start_button(btn,but_type); } draw_startup_anim(false); @@ -267,9 +305,9 @@ void draw_startup_anim(bool advance) { anim_from.offset(-1,-4 + startup_anim_pos); auto scroll_sprite = *ResMgr::graphics.get("startanim",true); if(advance) startup_anim_pos = (startup_anim_pos + 1) % scroll_sprite.getSize().y; - rect_draw_some_item(*ResMgr::graphics.get("startbut",true),anim_size,mainPtr,startup_button[STARTBTN_SCROLL]); + rect_draw_some_item(*ResMgr::graphics.get("startbut",true),anim_size,mainPtr(),startup_button[STARTBTN_SCROLL]); anim_to.offset(startup_button[STARTBTN_SCROLL].left, startup_button[STARTBTN_SCROLL].top); - rect_draw_some_item(scroll_sprite,anim_from,mainPtr,anim_to,sf::BlendAlpha); + rect_draw_some_item(scroll_sprite,anim_from,mainPtr(),anim_to,sf::BlendAlpha); } void draw_startup_stats() { @@ -287,7 +325,7 @@ void draw_startup_stats() { if(!party_in_memory) { style.pointSize = 20; to_rect.offset(193,40); - win_draw_string(mainPtr,to_rect,"No Party in Memory",eTextMode::WRAP,style); + win_draw_string(mainPtr(),to_rect,"No Party in Memory",eTextMode::WRAP,style); } else { frame_rect = startup_top; frame_rect.inset(50,50); @@ -295,10 +333,10 @@ void draw_startup_stats() { frame_rect.left += 18; frame_rect.offset(-9,10); // TODO: Maybe I should rename that variable - ::frame_rect(mainPtr, frame_rect, sf::Color::White); + ::frame_rect(mainPtr(), frame_rect, sf::Color::White); to_rect.offset(221,37); - win_draw_string(mainPtr,to_rect,"Your party:",eTextMode::WRAP,style); + win_draw_string(mainPtr(),to_rect,"Your party:",eTextMode::WRAP,style); style.pointSize = 12; style.font = FONT_BOLD; for(short i = 0; i < 6; i++) { @@ -315,7 +353,7 @@ void draw_startup_stats() { if(pic >= 1000) { std::shared_ptr gw; graf_pos_ref(gw, from_rect) = spec_scen_g.find_graphic(pic % 1000, pic >= 10000); - rect_draw_some_item(*gw,from_rect,mainPtr,to_rect,sf::BlendAlpha); + rect_draw_some_item(*gw,from_rect,mainPtr(),to_rect,sf::BlendAlpha); } else if(pic >= 100) { pic -= 100; // Note that we assume it's a 1x1 graphic. @@ -323,16 +361,16 @@ void draw_startup_stats() { from_rect = get_monster_template_rect(pic, 0, 0); int which_sheet = m_pic_index[pic].i / 20; sf::Texture& monst_gworld = *ResMgr::graphics.get("monst" + std::to_string(1 + which_sheet)); - rect_draw_some_item(monst_gworld,from_rect,mainPtr,to_rect,sf::BlendAlpha); + rect_draw_some_item(monst_gworld,from_rect,mainPtr(),to_rect,sf::BlendAlpha); } else { from_rect = calc_rect(2 * (pic / 8), pic % 8); sf::Texture& pc_gworld = *ResMgr::graphics.get("pcs"); - rect_draw_some_item(pc_gworld,from_rect,mainPtr,to_rect,sf::BlendAlpha); + rect_draw_some_item(pc_gworld,from_rect,mainPtr(),to_rect,sf::BlendAlpha); } style.pointSize = 14; pc_rect.offset(35,0); - win_draw_string(mainPtr,pc_rect,univ.party[i].name,eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_rect,univ.party[i].name,eTextMode::WRAP,style); to_rect.offset(pc_rect.left + 8,pc_rect.top + 8); } @@ -364,7 +402,7 @@ void draw_startup_stats() { case eRace::BIRD: status += " Bird"; break; default: status += " *ERROR INVALID RACE*"; break; } - win_draw_string(mainPtr,pc_rect,status,eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_rect,status,eTextMode::WRAP,style); pc_rect.offset(0,13); status = "Health " + std::to_string(univ.party[i].max_health); status += ", Spell pts. " + std::to_string(univ.party[i].max_sp); @@ -386,7 +424,7 @@ void draw_startup_stats() { break; } if(!status.empty()) - win_draw_string(mainPtr,pc_rect,status,eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_rect,status,eTextMode::WRAP,style); } } @@ -405,14 +443,14 @@ void draw_startup_stats() { pc_rect.top = pc_rect.bottom - 30; pc_rect.left = pc_rect.right - string_length(copyright, style) - 32; // Windows replaced it with "That is not dead which can eternally lie..." - I don't think that's quite appropriate though. - win_draw_string(mainPtr, pc_rect, copyright, eTextMode::WRAP, style); + win_draw_string(mainPtr(), pc_rect, copyright, eTextMode::WRAP, style); if(univ.debug_mode){ pc_rect = startup_top; pc_rect.offset(5,5); pc_rect.top = pc_rect.bottom - 30; pc_rect.left = pc_rect.left + 32; - win_draw_string(mainPtr, pc_rect, "Debug Mode: On", eTextMode::WRAP, style); + win_draw_string(mainPtr(), pc_rect, "Debug Mode: On", eTextMode::WRAP, style); } } @@ -434,7 +472,7 @@ void draw_start_button(eStartButton which_position,short which_button) { to_rect.left += 4; to_rect.top += 4; to_rect.right = to_rect.left + 40; to_rect.bottom = to_rect.top + 40; - rect_draw_some_item(*ResMgr::graphics.get("startup",true),from_rect,mainPtr,to_rect); + rect_draw_some_item(*ResMgr::graphics.get("startup",true),from_rect,mainPtr(),to_rect); TextStyle style; style.font = FONT_DUNGEON; @@ -448,7 +486,7 @@ void draw_start_button(eStartButton which_position,short which_button) { base_color.b += (48 * which_button); style.colour = base_color; style.lineHeight = 18; - win_draw_string(mainPtr,to_rect,button_labels[which_position],eTextMode::CENTRE,style); + win_draw_string(mainPtr(),to_rect,button_labels[which_position],eTextMode::CENTRE,style); } void arrow_button_click(rectangle button_rect) { @@ -457,14 +495,14 @@ void arrow_button_click(rectangle button_rect) { // is recorded afterward record_action("arrow_button_click", boost::lexical_cast(button_rect)); } - mainPtr.setActive(); - clip_rect(mainPtr, button_rect); + mainPtr().setActive(); + clip_rect(mainPtr(), button_rect); // TODO: Mini-event loop so that the click doesn't happen until releasing the mouse button refresh_stat_areas(1); - mainPtr.display(); + mainPtr().display(); play_sound(37, time_in_ticks(5)); - undo_clip(mainPtr); + undo_clip(mainPtr()); refresh_stat_areas(0); } @@ -500,11 +538,11 @@ static void loadImageToRenderTexture(sf::RenderTexture& tex, std::string imgName void load_main_screen() { // Preload the main game interface images ResMgr::graphics.get("invenbtns"); - loadImageToRenderTexture(terrain_screen_gworld, "terscreen"); - loadImageToRenderTexture(pc_stats_gworld, "statarea"); - loadImageToRenderTexture(item_stats_gworld, "inventory"); - loadImageToRenderTexture(text_area_gworld, "transcript"); - loadImageToRenderTexture(text_bar_gworld, "textbar"); + loadImageToRenderTexture(terrain_screen_gworld(), "terscreen"); + loadImageToRenderTexture(pc_stats_gworld(), "statarea"); + loadImageToRenderTexture(item_stats_gworld(), "inventory"); + loadImageToRenderTexture(text_area_gworld(), "transcript"); + loadImageToRenderTexture(text_bar_gworld(), "textbar"); ResMgr::graphics.get("buttons"); } @@ -518,9 +556,9 @@ void redraw_screen(int refresh) { } // Temporarily switch to the original view to fill in the background - mainPtr.setView(mainPtr.getDefaultView()); + mainPtr().setView(mainPtr().getDefaultView()); put_background(); - mainPtr.setView(mainView); + mainPtr().setView(mainView); switch(overall_mode) { case MODE_STARTUP: draw_startup(0); @@ -539,7 +577,7 @@ void redraw_screen(int refresh) { if(refresh & REFRESH_BAR) draw_text_bar(); refresh_text_bar(); - UI::toolbar.draw(mainPtr); + UI::toolbar.draw(mainPtr()); break; } if(overall_mode == MODE_COMBAT) @@ -548,7 +586,7 @@ void redraw_screen(int refresh) { draw_targets(center); if(overall_mode != MODE_STARTUP) { if(!is_out()) - draw_targeting_line(sf::Mouse::getPosition(mainPtr)); + draw_targeting_line(sf::Mouse::getPosition(mainPtr())); refresh_stat_areas(0); } done_btn->draw(); @@ -556,7 +594,7 @@ void redraw_screen(int refresh) { drawable_mgr.draw_all(); - mainPtr.display(); + mainPtr().display(); } void put_background() { @@ -589,7 +627,7 @@ void put_background() { bg_pict = bg[univ.out->bg_town]; else bg_pict = bg[univ.scenario.bg_town]; } - tileImage(mainPtr, rectangle(mainPtr), bg_pict); + tileImage(mainPtr(), rectangle(mainPtr()), bg_pict); } std::pair text_bar_text() { @@ -685,24 +723,24 @@ void draw_text_bar(std::pair text) { } void put_text_bar(std::string str, std::string right_str) { - text_bar_gworld.setActive(false); + text_bar_gworld().setActive(false); auto& bar_gw = *ResMgr::graphics.get("textbar"); - rect_draw_some_item(bar_gw, rectangle(bar_gw), text_bar_gworld, rectangle(bar_gw)); - clear_scale_aware_text(text_bar_gworld); + rect_draw_some_item(bar_gw, rectangle(bar_gw), text_bar_gworld(), rectangle(bar_gw)); + clear_scale_aware_text(text_bar_gworld()); TextStyle style; style.colour = sf::Color::White; style.font = FONT_BOLD; style.pointSize = 12; style.lineHeight = 12; - rectangle to_rect = rectangle(text_bar_gworld); + rectangle to_rect = rectangle(text_bar_gworld()); to_rect.top += 7; to_rect.left += 5; to_rect.right -= 5; - win_draw_string(text_bar_gworld, to_rect, str, eTextMode::LEFT_TOP, style); + win_draw_string(text_bar_gworld(), to_rect, str, eTextMode::LEFT_TOP, style); // the recast hint will replace status icons: if(!right_str.empty()){ // Style has to be wrap to get right-alignment - win_draw_string(text_bar_gworld, to_rect, right_str, eTextMode::WRAP, style, true); + win_draw_string(text_bar_gworld(), to_rect, right_str, eTextMode::WRAP, style, true); }else if(!monsters_going) { sf::Texture& status_gworld = *ResMgr::graphics.get("staticons"); to_rect.top -= 2; @@ -712,20 +750,20 @@ void put_text_bar(std::string str, std::string right_str) { for(auto next : univ.party.status) { const auto& statInfo = *next.first; if(next.second > 0) { - rect_draw_some_item(status_gworld, get_stat_effect_rect(statInfo.icon), text_bar_gworld, to_rect, sf::BlendAlpha); + rect_draw_some_item(status_gworld, get_stat_effect_rect(statInfo.icon), text_bar_gworld(), to_rect, sf::BlendAlpha); to_rect.offset(-15, 0); } } } - text_bar_gworld.setActive(); - text_bar_gworld.display(); + text_bar_gworld().setActive(); + text_bar_gworld().display(); } void refresh_text_bar() { - mainPtr.setActive(false); - rect_draw_some_item(text_bar_gworld, rectangle(text_bar_gworld), mainPtr, win_to_rects[WINRECT_STATUS]); - mainPtr.setActive(); + mainPtr().setActive(false); + rect_draw_some_item(text_bar_gworld(), rectangle(text_bar_gworld()), mainPtr(), win_to_rects[WINRECT_STATUS]); + mainPtr().setActive(); } // this is used for determinign whether to round off walkway corners @@ -773,7 +811,7 @@ void draw_terrain(short mode) { mode = 0; } - mainPtr.setActive(); + mainPtr().setActive(); int max_dim_x, max_dim_y; if(is_out()){ @@ -970,19 +1008,19 @@ 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::graphics.get("fields"),calc_rect(2,0),terrain_screen_gworld,fc_loc,1,0); + Draw_Some_Item(*ResMgr::graphics.get("fields"),calc_rect(2,0),terrain_screen_gworld(),fc_loc,1,0); // Draw any posted labels, then clear them out - clip_rect(terrain_screen_gworld, {13, 13, 337, 265}); + clip_rect(terrain_screen_gworld(), {13, 13, 337, 265}); for(text_label_t lbl : posted_labels) draw_text_label(lbl); - undo_clip(terrain_screen_gworld); + undo_clip(terrain_screen_gworld()); posted_labels.clear(); // Now do the light mask thing apply_light_mask(false); apply_unseen_mask(); - terrain_screen_gworld.display(); + terrain_screen_gworld().display(); if(mode == 0) { redraw_terrain(); @@ -1213,7 +1251,7 @@ void draw_trim(short q,short r,short which_trim,ter_num_t ground_ter) { } to_rect = coord_to_rect(q,r); - rect_draw_some_item(*from_gworld, from_rect, *mask, terrain_screen_gworld, to_rect); + rect_draw_some_item(*from_gworld, from_rect, *mask, terrain_screen_gworld(), to_rect); } @@ -1282,32 +1320,32 @@ void place_road(short q,short r,location where,bool here) { if(here){ to_rect = road_dest_rects[6]; to_rect.offset(13 + q * 28,13 + r * 36); - rect_draw_some_item(roads_gworld, road_rects[4], terrain_screen_gworld, to_rect); + rect_draw_some_item(roads_gworld, road_rects[4], terrain_screen_gworld(), to_rect); if((where.y == 0) || extend_road_terrain(where.x, where.y - 1)) { to_rect = road_dest_rects[0]; to_rect.offset(13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[1], terrain_screen_gworld, to_rect); + rect_draw_some_item (roads_gworld, road_rects[1], terrain_screen_gworld(), to_rect); } if(((is_out()) && (where.x == 96)) || (!(is_out()) && (where.x == univ.town->max_dim - 1)) || extend_road_terrain(where.x + 1, where.y)) { to_rect = road_dest_rects[1]; to_rect.offset(13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[0], terrain_screen_gworld, to_rect); + rect_draw_some_item (roads_gworld, road_rects[0], terrain_screen_gworld(), to_rect); } if(((is_out()) && (where.y == 96)) || (!(is_out()) && (where.y == univ.town->max_dim - 1)) || extend_road_terrain(where.x, where.y + 1)) { to_rect = road_dest_rects[2]; to_rect.offset(13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[1], terrain_screen_gworld, to_rect); + rect_draw_some_item (roads_gworld, road_rects[1], terrain_screen_gworld(), to_rect); } if((where.x == 0) || extend_road_terrain(where.x - 1, where.y)) { to_rect = road_dest_rects[3]; to_rect.offset(13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[0], terrain_screen_gworld, to_rect); + rect_draw_some_item (roads_gworld, road_rects[0], terrain_screen_gworld(), to_rect); } }else{ // TODO: I suspect this branch is now irrelevant. @@ -1363,12 +1401,12 @@ void place_road(short q,short r,location where,bool here) { if(horz){ to_rect = road_dest_rects[5]; to_rect.offset(13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[2], terrain_screen_gworld, to_rect); + rect_draw_some_item (roads_gworld, road_rects[2], terrain_screen_gworld(), to_rect); } if(vert){ to_rect = road_dest_rects[4]; to_rect.offset(13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[3], terrain_screen_gworld, to_rect); + rect_draw_some_item (roads_gworld, road_rects[3], terrain_screen_gworld(), to_rect); } } } @@ -1385,7 +1423,7 @@ void draw_rest_screen() { } } draw_party_symbol(center); - terrain_screen_gworld.display(); + terrain_screen_gworld().display(); overall_mode = store_mode ; } @@ -1457,7 +1495,7 @@ void boom_space(location where,short mode,short type,short damage,short sound) { dest_rect.offset(win_to_rects[WINRECT_TERVIEW].topLeft()); source_rect.offset(-store_rect.left + 28 * type,-store_rect.top); - rect_draw_some_item(*ResMgr::graphics.get("booms"),source_rect,mainPtr,dest_rect,sf::BlendAlpha); + rect_draw_some_item(*ResMgr::graphics.get("booms"),source_rect,mainPtr(),dest_rect,sf::BlendAlpha); if(damage > 0 && dest_rect.right - dest_rect.left >= 28 && dest_rect.bottom - dest_rect.top >= 36) { TextStyle style; @@ -1468,15 +1506,15 @@ void boom_space(location where,short mode,short type,short damage,short sound) { std::string dam_str = std::to_string(damage); style.colour = sf::Color::White; text_rect.offset(-1,-1); - win_draw_string(mainPtr,text_rect,dam_str,eTextMode::CENTRE,style); + win_draw_string(mainPtr(),text_rect,dam_str,eTextMode::CENTRE,style); text_rect.offset(2,2); - win_draw_string(mainPtr,text_rect,dam_str,eTextMode::CENTRE,style); + win_draw_string(mainPtr(),text_rect,dam_str,eTextMode::CENTRE,style); style.colour = sf::Color::Black; text_rect.offset(-1,-1); - win_draw_string(mainPtr,text_rect,dam_str,eTextMode::CENTRE,style); + win_draw_string(mainPtr(),text_rect,dam_str,eTextMode::CENTRE,style); } item_sbar->draw(); - mainPtr.display(); + mainPtr().display(); bool skip_boom_delay = get_bool_pref("SkipBoomDelay"); play_sound((skip_boom_delay?-1:1)*sound_to_play); if((sound == 6) && (fast_bang == 0) && (!skip_boom_delay)) @@ -1523,7 +1561,7 @@ static void draw_one_pointing_arrow(int dir, int pos) { to_rect.width() = to_rect.height() = 8; - rect_draw_some_item(*ResMgr::graphics.get("invenbtns"), from_rect, mainPtr, to_rect, sf::BlendAlpha); + rect_draw_some_item(*ResMgr::graphics.get("invenbtns"), from_rect, mainPtr(), to_rect, sf::BlendAlpha); } void draw_pointing_arrows() { @@ -1545,8 +1583,8 @@ 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); + 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); apply_light_mask(true); @@ -1568,7 +1606,7 @@ void draw_targets(location center) { rectangle dest_rect = coord_to_rect(spell_targets[i].x - center.x + 4,spell_targets[i].y - center.y + 4); dest_rect.inset(8,12); dest_rect.offset(win_to_rects[WINRECT_TERVIEW].topLeft()); - rect_draw_some_item(src_gworld,src_rect,mainPtr,dest_rect,sf::BlendAlpha); + rect_draw_some_item(src_gworld,src_rect,mainPtr(),dest_rect,sf::BlendAlpha); } } @@ -1589,7 +1627,7 @@ void frame_space(location where,short mode,short width,short height) { to_frame.right = 41 + where_put.x * 28 + 28 * (width - 1); to_frame.offset(win_to_rects[WINRECT_TERVIEW].topLeft()); - frame_roundrect(mainPtr, to_frame, 8, (mode == 0) ? Colours::RED : Colours::GREEN); + frame_roundrect(mainPtr(), to_frame, 8, (mode == 0) ? Colours::RED : Colours::GREEN); } @@ -1597,7 +1635,7 @@ void erase_spot(short i,short j) { rectangle to_erase; to_erase = coord_to_rect(i,j); - fill_rect(mainPtr, to_erase, sf::Color::Black); + fill_rect(mainPtr(), to_erase, sf::Color::Black); } @@ -1608,7 +1646,7 @@ void draw_targeting_line(location where_curs) { rectangle on_screen_terrain_area = win_to_rects[WINRECT_TERVIEW]; on_screen_terrain_area.inset(13, 13); - where_curs = mainPtr.mapPixelToCoords(where_curs, mainView); + where_curs = mainPtr().mapPixelToCoords(where_curs, mainView); if(overall_mode >= MODE_COMBAT) from_loc = univ.current_pc().combat_pos; @@ -1628,9 +1666,9 @@ void draw_targeting_line(location where_curs) { if((can_see_light(from_loc,which_space,sight_obscurity) < 5) && (dist(from_loc,which_space) <= current_spell_range)) { - mainPtr.setActive(false); - clip_rect(mainPtr, on_screen_terrain_area); - draw_line(mainPtr, where_curs, location(xBound, yBound), 2, {128,128,128}, sf::BlendAdd); + mainPtr().setActive(false); + clip_rect(mainPtr(), on_screen_terrain_area); + draw_line(mainPtr(), where_curs, location(xBound, yBound), 2, {128,128,128}, sf::BlendAdd); redraw_rect.left = min(where_curs.x,xBound) - 4; redraw_rect.right = max(where_curs.x,xBound) + 4; redraw_rect.top = min(where_curs.y,yBound) - 4; @@ -1649,7 +1687,7 @@ void draw_targeting_line(location where_curs) { target_rect.right = target_rect.left + 28; target_rect.top = 13 + 36 * j + 7; target_rect.bottom = target_rect.top + 36; - frame_rect(mainPtr, target_rect, sf::Color::White); + frame_rect(mainPtr(), target_rect, sf::Color::White); target_rect.inset(-5,-5); redraw_rect2 = rectunion(target_rect,redraw_rect2); @@ -1662,15 +1700,15 @@ void draw_targeting_line(location where_curs) { const char chr[2] = {static_cast(num_targets_left + '0')}; int x = ((target_rect.left + target_rect.right) / 2) - 3; int y = (target_rect.top + target_rect.bottom) / 2; - win_draw_string(mainPtr, rectangle(y, x, y + 12, x + 12), chr, eTextMode::CENTRE, style); + win_draw_string(mainPtr(), rectangle(y, x, y + 12, x + 12), chr, eTextMode::CENTRE, style); } } } redraw_rect2.inset(-5,-5); - mainPtr.setActive(); - undo_clip(mainPtr); + mainPtr().setActive(); + undo_clip(mainPtr()); } } } @@ -1684,7 +1722,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(terrain_screen_gworld().getTexture(),from_rect,mainPtr(),redraw_rect); } diff --git a/src/game/boe.graphics.hpp b/src/game/boe.graphics.hpp index 49c2b7381..769a7ef33 100644 --- a/src/game/boe.graphics.hpp +++ b/src/game/boe.graphics.hpp @@ -17,6 +17,15 @@ enum { REFRESH_ALL = 0x3f }; +sf::RenderWindow& mainPtr(); +sf::RenderWindow& mini_map(); +sf::RenderTexture& pc_stats_gworld(); +sf::RenderTexture& item_stats_gworld(); +sf::RenderTexture& text_area_gworld(); +sf::RenderTexture& terrain_screen_gworld(); +sf::RenderTexture& text_bar_gworld(); +sf::RenderTexture& map_gworld(); +sf::RenderTexture& talk_gworld(); void adjust_window_mode(); void init_startup(); void reload_startup(); diff --git a/src/game/boe.graphutil.cpp b/src/game/boe.graphutil.cpp index 94a5ac50b..c213a7d53 100644 --- a/src/game/boe.graphutil.cpp +++ b/src/game/boe.graphutil.cpp @@ -21,7 +21,6 @@ #include "dialogxml/dialogs/strdlog.hpp" #include "fileio/resmgr/res_image.hpp" -extern sf::RenderWindow mainPtr; extern rectangle windRect; extern short stat_window; extern bool cartoon_happening; @@ -29,10 +28,8 @@ extern eGameMode overall_mode; extern short current_spell_range; extern cUniverse univ; extern effect_pat_type current_pat; -extern sf::RenderWindow mini_map; extern short combat_posing_monster , current_working_monster ; // 0-5 PC 100 + x - monster x -extern sf::RenderTexture terrain_screen_gworld; extern std::queue special_queue; extern location center; @@ -71,7 +68,7 @@ void draw_one_terrain_spot (short i,short j,short terrain_to_draw) { where_draw = calc_rect(i,j); where_draw.offset(13,13); if(terrain_to_draw == -1) { - fill_rect(terrain_screen_gworld, where_draw, sf::Color::Black); + fill_rect(terrain_screen_gworld(), where_draw, sf::Color::Black); return; } @@ -101,7 +98,7 @@ void draw_one_terrain_spot (short i,short j,short terrain_to_draw) { source_rect = calc_rect(terrain_to_draw % 10, terrain_to_draw / 10); } - rect_draw_some_item(*source_gworld, source_rect, terrain_screen_gworld, where_draw); + rect_draw_some_item(*source_gworld, source_rect, terrain_screen_gworld(), where_draw); } void draw_monsters() { @@ -140,7 +137,7 @@ void draw_monsters() { ((enc.direction < 4) ? 0 : (width * height)) + k); to_rect = monst_rects[(width - 1) * 2 + height - 1][k]; to_rect.offset(13 + 28 * where_draw.x,13 + 36 * where_draw.y); - rect_draw_some_item(*src_gw, source_rect, terrain_screen_gworld,to_rect, sf::BlendAlpha); + rect_draw_some_item(*src_gw, source_rect, terrain_screen_gworld(),to_rect, sf::BlendAlpha); } } if(picture_wanted < 1000) { @@ -150,7 +147,7 @@ void draw_monsters() { to_rect.offset(13 + 28 * where_draw.x,13 + 36 * where_draw.y); int which_sheet = m_pic_index[picture_wanted].i / 20; sf::Texture& monst_gworld = *ResMgr::graphics.get("monst" + std::to_string(1 + which_sheet)); - rect_draw_some_item(monst_gworld, source_rect, terrain_screen_gworld,to_rect, sf::BlendAlpha); + rect_draw_some_item(monst_gworld, source_rect, terrain_screen_gworld(),to_rect, sf::BlendAlpha); } } } else enc.exists = false; @@ -183,7 +180,7 @@ void draw_monsters() { if(monst.direction >= 4) need_pic += width * height; if(combat_posing_monster == i + 100) need_pic += (2 * width * height); graf_pos_ref(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, 1, 0); } else { pic_num_t this_monst = monst.picture_num; int pic_mode = (monst.direction) < 4 ? 0 : 1; @@ -191,7 +188,7 @@ void draw_monsters() { source_rect = get_monster_template_rect(this_monst, pic_mode, k); int which_sheet = (m_pic_index[this_monst].i+k) / 20; sf::Texture& monst_gworld = *ResMgr::graphics.get("monst" + std::to_string(1 + which_sheet)); - Draw_Some_Item(monst_gworld, source_rect, terrain_screen_gworld, store_loc, 1, 0); + Draw_Some_Item(monst_gworld, source_rect, terrain_screen_gworld(), store_loc, 1, 0); } } } @@ -244,7 +241,7 @@ void draw_combat_pc(cPlayer& who, location center, bool attacking) { from_gw = &ResMgr::graphics.get("pcs"); } - 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, 1, 0); } } @@ -260,7 +257,7 @@ void frame_active_pc(location center) { active_pc_rect.right = 46 + where_draw.x * 28; active_pc_rect.offset(14,2); - frame_roundrect(mainPtr, active_pc_rect, 8, Colours::PINK); + frame_roundrect(mainPtr(), active_pc_rect, 8, Colours::PINK); } void draw_pcs(location center) { @@ -296,7 +293,7 @@ void draw_items(location where){ }else{ graf_pos_ref(src_gw, from_rect) = calc_item_rect(univ.town.items[i].graphic_num, to_rect); } - rect_draw_some_item(*src_gw, from_rect, terrain_screen_gworld, to_rect, sf::BlendAlpha); + rect_draw_some_item(*src_gw, from_rect, terrain_screen_gworld(), to_rect, sf::BlendAlpha); } } } @@ -317,7 +314,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, 1, 0); } } for(auto& horse : univ.party.horses) { @@ -331,7 +328,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, 1, 0); } } } @@ -348,7 +345,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, 1, 0); } } for(auto& horse : univ.party.horses) { @@ -358,7 +355,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, 1, 0); } } } @@ -372,55 +369,55 @@ void draw_fields(location where){ sf::Texture& fields_gworld = *ResMgr::graphics.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,1,0); return; } if(univ.town.is_force_wall(where.x,where.y)) - 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,1,0); if(univ.town.is_fire_wall(where.x,where.y)) - 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,1,0); if(univ.town.is_antimagic(where.x,where.y)) - 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,1,0); if(univ.town.is_scloud(where.x,where.y)) - 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,1,0); if(univ.town.is_ice_wall(where.x,where.y)) - 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,1,0); if(univ.town.is_blade_wall(where.x,where.y)) - 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,1,0); if(univ.town.is_sleep_cloud(where.x,where.y)) - 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,1,0); if(univ.town.is_block(where.x,where.y)) - 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,1,0); if(univ.town.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,1,0); if(univ.town.is_web(where.x,where.y)) - 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,1,0); if(univ.town.is_crate(where.x,where.y)) - 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,1,0); if(univ.town.is_barrel(where.x,where.y)) - 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,1,0); if(univ.town.is_fire_barr(where.x,where.y) || univ.town.is_force_barr(where.x,where.y)) - Draw_Some_Item(*ResMgr::graphics.get("teranim"),calc_rect(8+(anim_ticks%4),4),terrain_screen_gworld,where_draw,1,0); + Draw_Some_Item(*ResMgr::graphics.get("teranim"),calc_rect(8+(anim_ticks%4),4),terrain_screen_gworld(),where_draw,1,0); if(univ.town.is_quickfire(where.x,where.y)) - 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,1,0); if(univ.town.is_sm_blood(where.x,where.y)) - 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,1,0); if(univ.town.is_med_blood(where.x,where.y)) - 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,1,0); if(univ.town.is_lg_blood(where.x,where.y)) - 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,1,0); if(univ.town.is_sm_slime(where.x,where.y)) - 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,1,0); if(univ.town.is_lg_slime(where.x,where.y)) - 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,1,0); if(univ.town.is_ash(where.x,where.y)) - 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,1,0); if(univ.town.is_bones(where.x,where.y)) - 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,1,0); if(univ.town.is_rubble(where.x,where.y)) - 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,1,0); if(univ.town.is_force_cage(where.x,where.y)) { - 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,1,0); forcecage_locs.push_back(where_draw); } } @@ -478,16 +475,16 @@ void draw_party_symbol(location center) { // now wedge in bed graphic if(is_town() && univ.scenario.ter_types[ter].special == eTerSpec::BED) draw_one_terrain_spot((short) target.x,(short) target.y,10000 + univ.scenario.ter_types[ter].flag1); - else Draw_Some_Item(*from_gw, source_rect, terrain_screen_gworld, target, 1, 0); + else Draw_Some_Item(*from_gw, source_rect, terrain_screen_gworld(), target, 1, 0); } 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::graphics.get("vehicle"), calc_rect(i,0), terrain_screen_gworld, target, 1, 0); + Draw_Some_Item(*ResMgr::graphics.get("vehicle"), calc_rect(i,0), terrain_screen_gworld(), target, 1, 0); }else { i = univ.party.direction > 3; - Draw_Some_Item(*ResMgr::graphics.get("vehicle"), calc_rect(i + 2, 1), terrain_screen_gworld, target, 1, 0); + Draw_Some_Item(*ResMgr::graphics.get("vehicle"), calc_rect(i + 2, 1), terrain_screen_gworld(), target, 1, 0); } } diff --git a/src/game/boe.infodlg.cpp b/src/game/boe.infodlg.cpp index 0ac75e0a7..bb732ca74 100644 --- a/src/game/boe.infodlg.cpp +++ b/src/game/boe.infodlg.cpp @@ -37,7 +37,6 @@ extern std::map skill_cost; extern std::map skill_max; extern std::map skill_g_cost; extern short cur_town_talk_loaded; -extern sf::RenderWindow mainPtr; extern short on_monst_menu[256]; bool full_roster = false; diff --git a/src/game/boe.items.cpp b/src/game/boe.items.cpp index d9eba053e..f826f3c36 100644 --- a/src/game/boe.items.cpp +++ b/src/game/boe.items.cpp @@ -32,15 +32,11 @@ extern short which_combat_type; extern eGameMode overall_mode; extern eItemWinMode stat_window; -extern sf::RenderWindow mainPtr; extern bool boom_anim_active; extern rectangle d_rects[80]; extern short d_rect_index[80]; extern bool map_visible; -extern sf::RenderWindow mini_map; -extern sf::Texture pc_gworld; -extern sf::RenderTexture map_gworld; extern cUniverse univ; extern void draw_map(bool need_refresh); @@ -667,20 +663,20 @@ short get_num_of_items(short max_num) { void init_mini_map() { double map_scale = get_ui_scale_map(); if (map_scale < 0.1) map_scale = 1.0; - if (mini_map.isOpen()) mini_map.close(); - mini_map.create(sf::VideoMode(map_scale*296,map_scale*277), "Map", sf::Style::Titlebar | sf::Style::Close); - mini_map.setPosition(sf::Vector2i(52,62)); + if (mini_map().isOpen()) mini_map().close(); + mini_map().create(sf::VideoMode(map_scale*296,map_scale*277), "Map", sf::Style::Titlebar | sf::Style::Close); + mini_map().setPosition(sf::Vector2i(52,62)); sf::View view; view.reset(sf::FloatRect(0, 0, map_scale*296,map_scale*277)); view.setViewport(sf::FloatRect(0, 0, map_scale, map_scale)); - mini_map.setView(view); - mini_map.setVisible(false); + mini_map().setView(view); + mini_map().setVisible(false); map_visible=false; - setWindowFloating(mini_map, true); - makeFrontWindow(mainPtr); + setWindowFloating(mini_map(), true); + makeFrontWindow(mainPtr()); // Create and initialize map gworld - if(!map_gworld.create(384, 384)) { + if(!map_gworld().create(384, 384)) { play_sound(2); throw std::string("Failed to initialized automap!"); } else { diff --git a/src/game/boe.main.cpp b/src/game/boe.main.cpp index af28cff01..748f74165 100644 --- a/src/game/boe.main.cpp +++ b/src/game/boe.main.cpp @@ -50,7 +50,6 @@ using clara::ParserResult; using clara::ParseResultType; bool All_Done = false; -sf::RenderWindow mainPtr; short had_text_freeze = 0,num_fonts; bool first_startup_update = true; bool first_sound_played = false,spell_forced = false; @@ -154,7 +153,6 @@ eItemWinMode stat_window = ITEM_WIN_PC1; bool monsters_going = false,boom_anim_active = false; bool finished_init = false; -sf::RenderWindow mini_map; short which_item_page[6] = {0,0,0,0,0,0}; // Remembers which of the 2 item pages pc looked at short current_ground = 0; eStatMode stat_screen_mode; @@ -245,7 +243,7 @@ int main(int argc, char* argv[]) { } static void init_sbar(std::shared_ptr& sbar, const std::string& name, rectangle rect, rectangle events_rect, int max, int pgSz, int start = 0) { - static cParentless mainWin(mainPtr); + static cParentless mainWin(mainPtr()); sbar.reset(new cScrollbar(mainWin)); sbar->setName(name); sbar->setBounds(rect); @@ -284,8 +282,9 @@ static void init_scrollbars() { } static void init_btn(std::shared_ptr& btn, eBtnType type, location loc) { - static cParentless mainWin(mainPtr); + static cParentless mainWin(mainPtr()); btn.reset(new cButton(mainWin)); + btn->setBtnType(type); btn->relocate(loc); btn->hide(); @@ -1020,8 +1019,8 @@ void init_boe(int argc, char* argv[]) { adjust_window_mode(); init_ui(); // If we don't do this now it'll flash white to start with - mainPtr.clear(sf::Color::Black); - mainPtr.display(); + mainPtr().clear(sf::Color::Black); + mainPtr().display(); set_cursor(watch_curs); init_buf(); @@ -1135,9 +1134,9 @@ static void fire_delayed_key(Key code) { return; } if(diagonal){ - mainPtr.setKeyRepeatEnabled(false); + mainPtr().setKeyRepeatEnabled(false); }else{ - mainPtr.setKeyRepeatEnabled(true); + mainPtr().setKeyRepeatEnabled(true); } if(dir != -1){ @@ -1148,7 +1147,7 @@ static void fire_delayed_key(Key code) { } }else{ sf::Event pass_event = {sf::Event::MouseButtonPressed}; - location pass_point = mainPtr.mapCoordsToPixel(terrain_click[dir], mainView); + location pass_point = mainPtr().mapCoordsToPixel(terrain_click[dir], mainView); pass_event.mouseButton.x = pass_point.x; pass_event.mouseButton.y = pass_point.y; queue_fake_event(pass_event); @@ -1223,12 +1222,12 @@ void handle_events() { fake_event_queue.pop_front(); handle_one_event(next_event, fps_limiter); } - while(pollEvent(mainPtr, currentEvent)) handle_one_event(currentEvent, fps_limiter); + while(pollEvent(mainPtr(), currentEvent)) handle_one_event(currentEvent, fps_limiter); // It would be nice to have minimap inside the main game window (we have lots of screen space in fullscreen mode). // Alternatively, minimap could live on its own thread. // But for now we just handle events from both windows on this thread. - while(map_visible && pollEvent(mini_map, currentEvent)) handle_one_minimap_event(currentEvent); + while(map_visible && pollEvent(mini_map(), currentEvent)) handle_one_minimap_event(currentEvent); } if(changed_display_mode) { @@ -1298,7 +1297,7 @@ void handle_one_event(const sf::Event& event, cFramerateLimiter& fps_limiter) { if (!noDelayKeyModes.count(overall_mode) && delayed_keys.find(event.key.code) != delayed_keys.end()){ handle_delayed_key(event.key.code); } else if(!(event.key.*systemKey)) { - mainPtr.setKeyRepeatEnabled(true); + mainPtr().setKeyRepeatEnabled(true); handle_keystroke(event, fps_limiter); } break; @@ -1314,7 +1313,7 @@ void handle_one_event(const sf::Event& event, cFramerateLimiter& fps_limiter) { break; case sf::Event::GainedFocus: - makeFrontWindow(mainPtr); + makeFrontWindow(mainPtr()); change_cursor({event.mouseMove.x, event.mouseMove.y}); return; @@ -1344,7 +1343,7 @@ void handle_one_minimap_event(const sf::Event& event) { if(event.type == sf::Event::Closed) { close_map(true); } else if(event.type == sf::Event::GainedFocus) { - makeFrontWindow(mainPtr); + makeFrontWindow(mainPtr()); } else if(event.type == sf::Event::KeyPressed) { switch(event.key.code){ case sf::Keyboard::Escape: @@ -1603,7 +1602,7 @@ void change_cursor(location where_curs) { rectangle world_screen = win_to_rects[WINRECT_TERVIEW]; world_screen.inset(13, 13); - where_curs = mainPtr.mapPixelToCoords(where_curs, mainView); + where_curs = mainPtr().mapPixelToCoords(where_curs, mainView); if(!world_screen.contains(where_curs)) cursor_needed = sword_curs; diff --git a/src/game/boe.menus.linux.cpp b/src/game/boe.menus.linux.cpp index d50048353..c0dc393a7 100644 --- a/src/game/boe.menus.linux.cpp +++ b/src/game/boe.menus.linux.cpp @@ -12,7 +12,6 @@ #include "tools/event_listener.hpp" #include "tools/drawable_manager.hpp" -extern sf::RenderWindow mainPtr; extern cUniverse univ; extern bool party_in_memory; extern eGameMode overall_mode; @@ -22,7 +21,7 @@ extern cDrawableManager drawable_mgr; std::shared_ptr menu_ptr; void init_menubar() { - menu_ptr.reset(new OpenBoEMenu(mainPtr, univ)); + menu_ptr.reset(new OpenBoEMenu(mainPtr(), univ)); event_listeners["menubar"] = std::dynamic_pointer_cast(menu_ptr); drawable_mgr.add_drawable(UI_LAYER_MENUBAR, "menubar", menu_ptr); diff --git a/src/game/boe.menus.win.cpp b/src/game/boe.menus.win.cpp index bf40e6e55..eea229e52 100644 --- a/src/game/boe.menus.win.cpp +++ b/src/game/boe.menus.win.cpp @@ -36,7 +36,6 @@ extern short on_monst_menu[256]; extern bool party_in_memory; extern cUniverse univ; extern eGameMode overall_mode; -extern sf::RenderWindow mainPtr; LONG_PTR mainProc; HMENU menuHandle = NULL; accel_table_t accel; @@ -65,7 +64,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(IDC_BLADESOFEXILE)); @@ -74,7 +73,7 @@ void init_menubar() { mainProc = SetWindowLongPtr(winHandle, GWLP_WNDPROC, reinterpret_cast(&menuProc)); SetMenu(winHandle, menuHandle); - mainPtr.setActive(); + mainPtr().setActive(); // And now initialize the mapping from Windows menu commands to eMenu constants static bool inited = false; @@ -156,7 +155,7 @@ void adjust_monst_menu() { AppendMenuA(monst_menu, MF_STRING | MF_ENABLED, 1000 + i, monst_name.c_str()); } } - DrawMenuBar(mainPtr.getSystemHandle()); + DrawMenuBar(mainPtr().getSystemHandle()); } void init_spell_menus() { @@ -267,19 +266,19 @@ void menu_activate() { EnableMenuItem(file_menu, IDM_FILE_SAVE, MF_ENABLED | MF_BYCOMMAND); EnableMenuItem(file_menu, IDM_FILE_SAVE_AS, MF_ENABLED | MF_BYCOMMAND); } - DrawMenuBar(mainPtr.getSystemHandle()); + DrawMenuBar(mainPtr().getSystemHandle()); } void hideMenuBar() { if(menuHandle == NULL) return; - SetMenu(mainPtr.getSystemHandle(), NULL); - DrawMenuBar(mainPtr.getSystemHandle()); + SetMenu(mainPtr().getSystemHandle(), NULL); + DrawMenuBar(mainPtr().getSystemHandle()); } void showMenuBar() { if(menuHandle == NULL) return; - SetMenu(mainPtr.getSystemHandle(), menuHandle); - DrawMenuBar(mainPtr.getSystemHandle()); + SetMenu(mainPtr().getSystemHandle(), menuHandle); + DrawMenuBar(mainPtr().getSystemHandle()); } #include "cursors.hpp" diff --git a/src/game/boe.newgraph.cpp b/src/game/boe.newgraph.cpp index 04b5d210c..058d26036 100644 --- a/src/game/boe.newgraph.cpp +++ b/src/game/boe.newgraph.cpp @@ -57,11 +57,9 @@ short monsters_faces[190] = { extern rectangle windRect; extern long anim_ticks; extern tessel_ref_t bg[]; -extern sf::RenderWindow mainPtr; extern short which_combat_type; extern eGameMode overall_mode; extern bool boom_anim_active; -extern sf::RenderTexture terrain_screen_gworld; extern rectangle sbar_rect,item_sbar_rect,shop_sbar_rect; extern std::shared_ptr text_sbar,item_sbar,shop_sbar; extern std::shared_ptr done_btn, help_btn; @@ -80,7 +78,6 @@ extern enum_map(eGuiArea, rectangle) win_to_rects; // Talk vars extern eGameMode store_pre_talk_mode; extern short store_personality,store_personality_graphic; -extern sf::RenderTexture talk_gworld; extern bool talk_end_forced; extern std::string old_str1,old_str2,one_back1,one_back2; extern rectangle talk_area_rect, word_place_rect; @@ -121,7 +118,7 @@ rectangle explode_place_rect[30]; char last_light_mask[13][13]; terrain_screen_rects_t terrain_screen_rects() { - rectangle from = rectangle(terrain_screen_gworld); + rectangle from = rectangle(terrain_screen_gworld()); location current_terrain_ul = win_to_rects[WINRECT_TERVIEW].topLeft(); rectangle to = from; @@ -162,7 +159,7 @@ void apply_unseen_mask() { to_rect = base_rect; to_rect.offset(-28 + i * 28,-36 + 36 * j); to_rect &= big_to; - tileImage(terrain_screen_gworld, to_rect, bw_pats[3], sf::BlendAlpha); + tileImage(terrain_screen_gworld(), to_rect, bw_pats[3], sf::BlendAlpha); } } @@ -182,9 +179,9 @@ void apply_light_mask(bool onWindow) { return; if(onWindow) { - mainPtr.setActive(false); - fill_region(mainPtr, dark_mask_region, sf::Color::Black); - mainPtr.setActive(); + mainPtr().setActive(false); + fill_region(mainPtr(), dark_mask_region, sf::Color::Black); + mainPtr().setActive(); return; } @@ -395,9 +392,9 @@ void do_missile_anim(short num_steps,location missile_origin,short sound_num) { // make terrain_template contain current terrain all nicely draw_terrain(1); auto ter_rects = terrain_screen_rects(); - rect_draw_some_item(terrain_screen_gworld.getTexture(),ter_rects.from,mainPtr,ter_rects.to); + rect_draw_some_item(terrain_screen_gworld().getTexture(),ter_rects.from,mainPtr(),ter_rects.to); - mainPtr.setActive(false); + mainPtr().setActive(false); // init missile paths screen_ul.x = center.x - 4; screen_ul.y = center.y - 4; @@ -478,7 +475,7 @@ void do_missile_anim(short num_steps,location missile_origin,short sound_num) { from_rect = missile_origin_rect[i]; if(store_missiles[i].missile_type >= 7) from_rect.offset(18 * (t % 8),0); - rect_draw_some_item(missiles_gworld,from_rect, mainPtr,temp_rect,ter_rects.in_frame,sf::BlendAlpha); + rect_draw_some_item(missiles_gworld,from_rect, mainPtr(),temp_rect,ter_rects.in_frame,sf::BlendAlpha); } else { // Custom missile graphics // TODO: Test this! @@ -497,12 +494,12 @@ void do_missile_anim(short num_steps,location missile_origin,short sound_num) { from_rect.height() = 18; if(step >= 4) from_rect.offset(0,18); - rect_draw_some_item(*from_gw,from_rect, mainPtr,temp_rect,ter_rects.in_frame,sf::BlendAlpha); + rect_draw_some_item(*from_gw,from_rect, mainPtr(),temp_rect,ter_rects.in_frame,sf::BlendAlpha); } } refresh_text_bar(); - mainPtr.setActive(); - mainPtr.display(); + mainPtr().setActive(); + mainPtr().display(); sf::sleep(sf::milliseconds(2 + 5 * get_int_pref("GameSpeed"))); } @@ -510,7 +507,7 @@ void do_missile_anim(short num_steps,location missile_origin,short sound_num) { for(short i = 0; i < 30; i++) store_missiles[i].missile_type = -1; - rect_draw_some_item(terrain_screen_gworld.getTexture(),ter_rects.from,mainPtr,ter_rects.to); + rect_draw_some_item(terrain_screen_gworld().getTexture(),ter_rects.from,mainPtr(),ter_rects.to); } short get_missile_direction(location origin_point,location the_point) { @@ -571,14 +568,14 @@ void do_explosion_anim(short /*sound_num*/,short special_draw, short snd) { draw_terrain(1); if(special_draw != 2) { auto ter_rects = terrain_screen_rects(); - rect_draw_some_item(terrain_screen_gworld.getTexture(),ter_rects.from,mainPtr,ter_rects.to); + rect_draw_some_item(terrain_screen_gworld().getTexture(),ter_rects.from,mainPtr(),ter_rects.to); } TextStyle style; style.font = FONT_BOLD; style.pointSize = 10; style.lineHeight = 10; - mainPtr.setActive(false); + mainPtr().setActive(false); // init missile paths screen_ul.x = center.x - 4; screen_ul.y = center.y - 4; @@ -619,11 +616,11 @@ void do_explosion_anim(short /*sound_num*/,short special_draw, short snd) { if(cur_boom_type >= 1000) { std::shared_ptr src_gworld; graf_pos_ref(src_gworld, from_rect) = spec_scen_g.find_graphic(cur_boom_type - 1000 + t); - rect_draw_some_item(*src_gworld, from_rect, mainPtr, explode_place_rect[i], ter_rects.in_frame, sf::BlendAlpha); + rect_draw_some_item(*src_gworld, from_rect, mainPtr(), explode_place_rect[i], ter_rects.in_frame, sf::BlendAlpha); } else { from_rect = base_rect; from_rect.offset(28 * (t + store_booms[i].offset),36 * (1 + store_booms[i].boom_type)); - rect_draw_some_item(boom_gworld,from_rect,mainPtr,explode_place_rect[i], ter_rects.in_frame, sf::BlendAlpha); + rect_draw_some_item(boom_gworld,from_rect,mainPtr(),explode_place_rect[i], ter_rects.in_frame, sf::BlendAlpha); } if(store_booms[i].val_to_place > 0 && (explode_place_rect[i] & ter_rects.in_frame) == explode_place_rect[i]) { @@ -633,19 +630,19 @@ void do_explosion_anim(short /*sound_num*/,short special_draw, short snd) { std::string dam_str = std::to_string(store_booms[i].val_to_place); style.colour = Colours::WHITE; text_rect.offset(-1,-1); - win_draw_string(mainPtr,text_rect,dam_str,eTextMode::CENTRE,style); + win_draw_string(mainPtr(),text_rect,dam_str,eTextMode::CENTRE,style); text_rect.offset(2,2); - win_draw_string(mainPtr,text_rect,dam_str,eTextMode::CENTRE,style); + win_draw_string(mainPtr(),text_rect,dam_str,eTextMode::CENTRE,style); style.colour = Colours::BLACK; text_rect.offset(-1,-1); - win_draw_string(mainPtr,text_rect,dam_str,eTextMode::CENTRE,style); - mainPtr.setActive(); + win_draw_string(mainPtr(),text_rect,dam_str,eTextMode::CENTRE,style); + mainPtr().setActive(); } } } //if(((PSD[SDF_GAME_SPEED] == 1) && (t % 3 == 0)) || ((PSD[SDF_GAME_SPEED] == 2) && (t % 2 == 0))) - mainPtr.setActive(); - mainPtr.display(); + mainPtr().setActive(); + mainPtr().display(); sf::sleep(time_in_ticks(2 * (1 + get_int_pref("GameSpeed")))); } @@ -662,7 +659,7 @@ void click_shop_rect(rectangle area_rect, bool item_help) { } draw_shop_graphics(!item_help,item_help,area_rect); - mainPtr.display(); + mainPtr().display(); play_sound(37, time_in_ticks(5)); draw_shop_graphics(false,false,area_rect); @@ -707,20 +704,20 @@ void draw_shop_graphics(bool item_pressed, bool item_help_pressed, rectangle cli style.font = FONT_DUNGEON; style.pointSize = 18; - area_rect = rectangle(talk_gworld); - talk_gworld.setActive(false); + area_rect = rectangle(talk_gworld()); + talk_gworld().setActive(false); // Only re-render on top of the item that is clicked: if(item_pressed || item_help_pressed) { clip_area_rect.offset(-area_rect.left, -area_rect.top); - clip_rect(talk_gworld, clip_area_rect); + clip_rect(talk_gworld(), clip_area_rect); } else { - clear_scale_aware_text(talk_gworld); - frame_rect(talk_gworld, area_rect, Colours::BLACK); + clear_scale_aware_text(talk_gworld()); + frame_rect(talk_gworld(), area_rect, Colours::BLACK); area_rect.inset(1,1); - tileImage(talk_gworld, area_rect,bg[12]); + tileImage(talk_gworld(), area_rect,bg[12]); - frame_rect(talk_gworld, shop_frame, Colours::BLACK); + frame_rect(talk_gworld(), shop_frame, Colours::BLACK); } // Place store icon: @@ -736,7 +733,7 @@ void draw_shop_graphics(bool item_pressed, bool item_help_pressed, rectangle cli from_rect.offset(32 * (i % 10),32 * (i / 10)); from_gw = &ResMgr::graphics.get("talkportraits"); } - rect_draw_some_item(*from_gw, from_rect, talk_gworld, face_rect); + rect_draw_some_item(*from_gw, from_rect, talk_gworld(), face_rect); } @@ -745,10 +742,10 @@ void draw_shop_graphics(bool item_pressed, bool item_help_pressed, rectangle cli style.lineHeight = 18; dest_rect = title_rect; dest_rect.offset(1,1); - win_draw_string(talk_gworld,dest_rect,active_shop.getName(),eTextMode::LEFT_TOP,style); + win_draw_string(talk_gworld(),dest_rect,active_shop.getName(),eTextMode::LEFT_TOP,style); dest_rect.offset(-1,-1); style.colour = Colours::TITLE_BLUE; - win_draw_string(talk_gworld,dest_rect,active_shop.getName(),eTextMode::LEFT_TOP,style); + win_draw_string(talk_gworld(),dest_rect,active_shop.getName(),eTextMode::LEFT_TOP,style); style.font = FONT_BOLD; style.pointSize = 12; @@ -778,7 +775,7 @@ void draw_shop_graphics(bool item_pressed, bool item_help_pressed, rectangle cli title << "Shopping for " << univ.current_pc().name << '.'; break; } - win_draw_string(talk_gworld,shopper_name,title.str(),eTextMode::LEFT_TOP,style); + win_draw_string(talk_gworld(),shopper_name,title.str(),eTextMode::LEFT_TOP,style); if(item_pressed) style.colour = Colours::TITLE_BLUE; @@ -828,29 +825,29 @@ void draw_shop_graphics(bool item_pressed, bool item_help_pressed, rectangle cli // Now draw item graf_pos_ref(from_gw, from_rect) = calc_item_rect(base_item.graphic_num,to_rect); - rect_draw_some_item(*from_gw, from_rect, talk_gworld, to_rect, sf::BlendAlpha); + rect_draw_some_item(*from_gw, from_rect, talk_gworld(), to_rect, sf::BlendAlpha); // Draw item key style.pointSize = 10; style.lineHeight = 10; std::string key(1, (char)('a' + i)); - win_draw_string(talk_gworld,shopping_rects[i][SHOPRECT_KEY],key, eTextMode::WRAP,style); + win_draw_string(talk_gworld(),shopping_rects[i][SHOPRECT_KEY],key, eTextMode::WRAP,style); // Now draw item text style.pointSize = 12; style.lineHeight = 12; - win_draw_string(talk_gworld,shopping_rects[i][SHOPRECT_ITEM_NAME],cur_name,eTextMode::WRAP,style); + win_draw_string(talk_gworld(),shopping_rects[i][SHOPRECT_ITEM_NAME],cur_name,eTextMode::WRAP,style); cur_name = std::to_string(cur_cost); rectangle cost_rect = shopping_rects[i][SHOPRECT_ITEM_COST]; cost_rect.left = cost_rect.right - string_length(cur_name, style) - 10; - win_draw_string(talk_gworld,cost_rect,cur_name,eTextMode::WRAP,style); + win_draw_string(talk_gworld(),cost_rect,cur_name,eTextMode::WRAP,style); cost_rect.left = cost_rect.right - 7; cost_rect.top += 3; cost_rect.height() = 7; - rect_draw_some_item(invenbtn_gworld, {0, 29, 7, 36}, talk_gworld, cost_rect, sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld, {0, 29, 7, 36}, talk_gworld(), cost_rect, sf::BlendAlpha); style.pointSize = 10; - win_draw_string(talk_gworld,shopping_rects[i][SHOPRECT_ITEM_EXTRA],cur_info_str,eTextMode::WRAP,style); - rect_draw_some_item(invenbtn_gworld,item_info_from,talk_gworld,shopping_rects[i][SHOPRECT_ITEM_HELP],item_help_pressed ? sf::BlendNone : sf::BlendAlpha); + win_draw_string(talk_gworld(),shopping_rects[i][SHOPRECT_ITEM_EXTRA],cur_info_str,eTextMode::WRAP,style); + rect_draw_some_item(invenbtn_gworld,item_info_from,talk_gworld(),shopping_rects[i][SHOPRECT_ITEM_HELP],item_help_pressed ? sf::BlendNone : sf::BlendAlpha); } // Finally, cost info and help strs @@ -858,14 +855,14 @@ void draw_shop_graphics(bool item_pressed, bool item_help_pressed, rectangle cli title << "Prices here are " << cost_strs[active_shop.getCostAdjust()] << '.'; style.pointSize = 10; style.lineHeight = 12; - win_draw_string(talk_gworld,bottom_help_rects[0],title.str(),eTextMode::WRAP,style); - win_draw_string(talk_gworld,bottom_help_rects[1],"Click on item name (or type 'a'-'h') to buy.",eTextMode::WRAP,style); - win_draw_string(talk_gworld,bottom_help_rects[2],"Hit done button (or Esc.) to quit.",eTextMode::WRAP,style); - win_draw_string(talk_gworld,bottom_help_rects[3],"'I' button brings up description.",eTextMode::WRAP,style); + win_draw_string(talk_gworld(),bottom_help_rects[0],title.str(),eTextMode::WRAP,style); + win_draw_string(talk_gworld(),bottom_help_rects[1],"Click on item name (or type 'a'-'h') to buy.",eTextMode::WRAP,style); + win_draw_string(talk_gworld(),bottom_help_rects[2],"Hit done button (or Esc.) to quit.",eTextMode::WRAP,style); + win_draw_string(talk_gworld(),bottom_help_rects[3],"'I' button brings up description.",eTextMode::WRAP,style); - undo_clip(talk_gworld); - talk_gworld.setActive(); - talk_gworld.display(); + undo_clip(talk_gworld()); + talk_gworld().setActive(); + talk_gworld().display(); refresh_shopping(); if(shop_sbar->getMaximum() > 0) @@ -878,27 +875,27 @@ void draw_shop_graphics(bool item_pressed, bool item_help_pressed, rectangle cli } void refresh_shopping() { - rectangle from_rect(talk_gworld); + rectangle from_rect(talk_gworld()); rectangle to_rect = from_rect; to_rect.offset(talk_gword_offset_x, talk_gword_offset_y); - rect_draw_some_item(talk_gworld,from_rect,mainPtr,to_rect); + rect_draw_some_item(talk_gworld(),from_rect,mainPtr(),to_rect); } static void place_talk_face() { rectangle face_rect = {6,6,38,38}; face_rect.offset(talk_area_rect.topLeft()); - mainPtr.setActive(); + mainPtr().setActive(); short face_to_draw = univ.scenario.scen_monsters[store_monst_type].default_facial_pic; if(store_talk_face_pic >= -1) face_to_draw = store_talk_face_pic; if(store_talk_face_pic >= 1000) { - cPict::drawAt(mainPtr, face_rect, store_talk_face_pic, PIC_CUSTOM_TALK, false); + cPict::drawAt(mainPtr(), face_rect, store_talk_face_pic, PIC_CUSTOM_TALK, false); } else { if(face_to_draw == NO_PIC) { short i = get_monst_picnum(store_monst_type); - cPict::drawAt(mainPtr, face_rect, i, get_monst_pictype(store_monst_type), false); - } else cPict::drawAt(mainPtr, face_rect, face_to_draw, PIC_TALK, false); + cPict::drawAt(mainPtr(), face_rect, i, get_monst_pictype(store_monst_type), false); + } else cPict::drawAt(mainPtr(), face_rect, face_to_draw, PIC_TALK, false); } } @@ -907,9 +904,9 @@ void click_talk_rect(word_rect_t word) { record_click_talk_rect(word, word.on == PRESET_WORD_ON); } - rectangle talkRect(talk_gworld), wordRect(word.rect); - mainPtr.setActive(); - rect_draw_some_item(talk_gworld,talkRect,mainPtr,talk_area_rect); + rectangle talkRect(talk_gworld()), wordRect(word.rect); + mainPtr().setActive(); + rect_draw_some_item(talk_gworld(),talkRect,mainPtr(),talk_area_rect); wordRect.offset(talk_area_rect.topLeft()); wordRect.width() += 10; // Arbitrary extra space fixes #481 and shouldn't cause any problems TextStyle style; @@ -917,12 +914,12 @@ void click_talk_rect(word_rect_t word) { style.pointSize = 18; style.lineHeight = 18; style.colour = word.on; - win_draw_string(mainPtr, wordRect, word.word, eTextMode::WRAP, style); + win_draw_string(mainPtr(), wordRect, word.word, eTextMode::WRAP, style); place_talk_face(); help_btn->draw(); - mainPtr.display(); + mainPtr().display(); play_sound(37, time_in_ticks(5)); - rect_draw_some_item(talk_gworld,talkRect,mainPtr,talk_area_rect); + rect_draw_some_item(talk_gworld(),talkRect,mainPtr(),talk_area_rect); place_talk_face(); } @@ -933,33 +930,33 @@ void place_talk_str(std::string str_to_place,std::string str_to_place2,short col rectangle title_rect = {19,48,42,260}; rectangle dest_rect,help_from = {46,60,59,76}; - talk_gworld.setActive(false); + talk_gworld().setActive(false); TextStyle style; style.font = FONT_DUNGEON; style.pointSize = TALK_WORD_SIZE; if(c_rect.right > 0) { - mainPtr.setActive(false); + mainPtr().setActive(false); c_rect.offset(talk_area_rect.topLeft()); - clip_rect(mainPtr, c_rect); + clip_rect(mainPtr(), c_rect); } - area_rect = rectangle(talk_gworld); - clear_scale_aware_text(talk_gworld); - frame_rect(talk_gworld, area_rect, sf::Color::Black); + area_rect = rectangle(talk_gworld()); + clear_scale_aware_text(talk_gworld()); + frame_rect(talk_gworld(), area_rect, sf::Color::Black); area_rect.inset(1,1); - tileImage(talk_gworld, area_rect,bg[12]); + tileImage(talk_gworld(), area_rect,bg[12]); // Place name oftalkee style.colour = Colours::SHADOW; style.lineHeight = 18; dest_rect = title_rect; dest_rect.offset(1,1); - win_draw_string(talk_gworld,dest_rect,title_string,eTextMode::LEFT_TOP,style); + win_draw_string(talk_gworld(),dest_rect,title_string,eTextMode::LEFT_TOP,style); dest_rect.offset(-1,-1); style.colour = Colours::TITLE_BLUE; - win_draw_string(talk_gworld,dest_rect,title_string,eTextMode::LEFT_TOP,style); + win_draw_string(talk_gworld(),dest_rect,title_string,eTextMode::LEFT_TOP,style); // Place buttons at bottom. if(color == 0) @@ -968,7 +965,7 @@ void place_talk_str(std::string str_to_place,std::string str_to_place2,short col style.colour = PRESET_WORD_ON; for(short i = 0; i < 9; i++) { if(!talk_end_forced || i == 6 || i == 5) - win_draw_string(talk_gworld,talk_words[i].rect,talk_words[i].word,eTextMode::LEFT_TOP,style); + win_draw_string(talk_gworld(),talk_words[i].rect,talk_words[i].word,eTextMode::LEFT_TOP,style); } style.colour = Colours::NAVY; @@ -992,7 +989,7 @@ void place_talk_str(std::string str_to_place,std::string str_to_place2,short col } } - std::vector word_rects = draw_string_hilite(talk_gworld, word_place_rect, str, style, hilites, color ? CUSTOM_WORD_ON : CUSTOM_WORD_OFF); + std::vector word_rects = draw_string_hilite(talk_gworld(), word_place_rect, str, style, hilites, color ? CUSTOM_WORD_ON : CUSTOM_WORD_OFF); if(!talk_end_forced) { // Now build the list of word rects @@ -1007,21 +1004,21 @@ void place_talk_str(std::string str_to_place,std::string str_to_place2,short col } } - talk_gworld.setActive(); - rectangle oldRect(talk_gworld); - undo_clip(talk_gworld); - talk_gworld.display(); + talk_gworld().setActive(); + rectangle oldRect(talk_gworld()); + undo_clip(talk_gworld()); + talk_gworld().display(); // Finally place processed graphics - mainPtr.setActive(); - rect_draw_some_item(talk_gworld,oldRect,mainPtr,talk_area_rect); + mainPtr().setActive(); + rect_draw_some_item(talk_gworld(),oldRect,mainPtr(),talk_area_rect); // I have no idea what this check is for; I'm jsut 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,tempRect,mainPtr,talk_area_rect); + rectangle tempRect(talk_gworld()); + rect_draw_some_item(talk_gworld(),tempRect,mainPtr(),talk_area_rect); place_talk_face(); } diff --git a/src/game/boe.party.cpp b/src/game/boe.party.cpp index 00ef92de5..777c880de 100644 --- a/src/game/boe.party.cpp +++ b/src/game/boe.party.cpp @@ -70,7 +70,6 @@ extern eItemWinMode stat_window; extern eGameMode overall_mode; extern fs::path progDir; extern location center; -extern sf::RenderWindow mainPtr; extern bool spell_forced,boom_anim_active; extern eSpell store_mage, store_priest; extern short store_mage_lev, store_priest_lev; @@ -86,7 +85,6 @@ extern std::map boom_gr; extern short current_ground; extern location golem_m_locs[16]; extern cUniverse univ; -extern sf::Texture pc_gworld; extern std::queue special_queue; // Variables for spell selection diff --git a/src/game/boe.specials.cpp b/src/game/boe.specials.cpp index 8c9c12888..e8a061dda 100644 --- a/src/game/boe.specials.cpp +++ b/src/game/boe.specials.cpp @@ -35,7 +35,6 @@ #include #include "winutil.hpp" -extern sf::RenderWindow mainPtr; extern eGameMode overall_mode; extern eItemWinMode stat_window; extern short which_combat_type; @@ -47,7 +46,6 @@ extern cOutdoors::cWandering store_wandering_special; extern eSpell spell_being_cast, town_spell; extern eSpecCtxType spec_target_type; extern short spell_caster, spec_target_fail, spec_target_options; -extern sf::RenderWindow mini_map; extern short fast_bang; extern bool end_scenario; extern cUniverse univ; @@ -2030,7 +2028,7 @@ void run_special(eSpecCtx which_mode, eSpecCtxType which_type, spec_num_t start_ if(replaying && has_next_action("step_through_continue")){ pop_next_action(); break; - }else if(pollEvent(mainPtr, evt) && (evt.type == sf::Event::KeyPressed || evt.type == sf::Event::MouseButtonPressed)){ + }else if(pollEvent(mainPtr(), evt) && (evt.type == sf::Event::KeyPressed || evt.type == sf::Event::MouseButtonPressed)){ if(recording){ record_action("step_through_continue", ""); } diff --git a/src/game/boe.startup.cpp b/src/game/boe.startup.cpp index 8e554c4c9..0d650aad3 100644 --- a/src/game/boe.startup.cpp +++ b/src/game/boe.startup.cpp @@ -32,7 +32,6 @@ using std::vector; extern bool party_in_memory; extern long register_flag; -extern sf::RenderWindow mainPtr; extern cUniverse univ; extern eGameMode overall_mode; extern sf::View mainView; @@ -56,7 +55,7 @@ void handle_startup_button_click(eStartButton btn, eKeyMod mods) { draw_startup(0); } draw_start_button(btn,5); - mainPtr.display(); + mainPtr().display(); play_sound(37, time_in_ticks(5)); draw_start_button(btn,0); switch(btn) { @@ -120,7 +119,7 @@ void handle_startup_button_click(eStartButton btn, eKeyMod mods) { // TODO: Always returns false, so make it void bool handle_startup_press(location the_point) { - the_point = mainPtr.mapPixelToCoords(the_point, mainView); + the_point = mainPtr().mapPixelToCoords(the_point, mainView); for(auto btn : startup_button.keys()) { if(btn == eStartButton::STARTBTN_SCROLL) continue; @@ -133,7 +132,7 @@ bool handle_startup_press(location the_point) { static void handle_splash_events(cFramerateLimiter& fps_limiter) { sf::Event event; - while(pollEvent(mainPtr, event)) { + while(pollEvent(mainPtr(), event)) { if(event.type == sf::Event::GainedFocus || event.type == sf::Event::MouseMoved) set_cursor(sword_curs); } @@ -141,7 +140,7 @@ static void handle_splash_events(cFramerateLimiter& fps_limiter) { } static rectangle view_rect() { - sf::Vector2f size = mainPtr.getView().getSize(); + sf::Vector2f size = mainPtr().getView().getSize(); return rectangle(0, 0, size.y, size.x); } @@ -164,7 +163,7 @@ void show_logo(cFramerateLimiter& fps_limiter) { play_sound(-95); while(sound_going(95)) { - draw_splash(pict_to_draw, mainPtr, logo_from); + draw_splash(pict_to_draw, mainPtr(), logo_from); handle_splash_events(fps_limiter); } if(!get_int_pref("ShowStartupSplash", true)) { @@ -190,7 +189,7 @@ void plop_fancy_startup(cFramerateLimiter& fps_limiter) { sf::Clock timer; while(timer.getElapsedTime() < delay) { - draw_splash(pict_to_draw, mainPtr, intro_from); + draw_splash(pict_to_draw, mainPtr(), intro_from); handle_splash_events(fps_limiter); } } diff --git a/src/game/boe.text.cpp b/src/game/boe.text.cpp index 28bf657bb..14f70848d 100644 --- a/src/game/boe.text.cpp +++ b/src/game/boe.text.cpp @@ -6,6 +6,7 @@ const int TEXT_BUF_LEN = 70; #include #include "boe.global.hpp" +#include "boe.graphics.hpp" #include "boe.graphutil.hpp" #include "universe/universe.hpp" #include "boe.text.hpp" @@ -54,7 +55,6 @@ extern eStatMode stat_screen_mode; extern short which_combat_type; extern eGameMode overall_mode; extern eItemWinMode stat_window; -extern sf::RenderWindow mainPtr; extern rectangle more_info_button; extern short which_item_page[6]; extern std::shared_ptr text_sbar,item_sbar; @@ -66,8 +66,6 @@ extern location dest_locs[40] ; extern location center; extern cCustomGraphics spec_scen_g; -extern sf::RenderTexture pc_stats_gworld, item_stats_gworld, text_area_gworld; -extern sf::RenderTexture terrain_screen_gworld; // game globals extern enum_map(eItemButton, rectangle) item_buttons[8]; @@ -96,32 +94,32 @@ void put_pc_screen() { rectangle bottom_bar_rect = {99,0,116,271}; rectangle info_from = {0,1,12,13}, switch_from = {0, 13, 12, 25}; - pc_stats_gworld.setActive(false); - clear_scale_aware_text(pc_stats_gworld); + pc_stats_gworld().setActive(false); + clear_scale_aware_text(pc_stats_gworld()); // First clean up gworld with pretty patterns sf::Texture& orig = *ResMgr::graphics.get("statarea"); - rect_draw_some_item(orig, rectangle(orig), pc_stats_gworld, rectangle(pc_stats_gworld)); - tileImage(pc_stats_gworld, erase_rect,bg[6]); + rect_draw_some_item(orig, rectangle(orig), pc_stats_gworld(), rectangle(pc_stats_gworld())); + tileImage(pc_stats_gworld(), erase_rect,bg[6]); TextStyle style; style.font = FONT_BOLD; style.pointSize = 10; style.colour = Colours::YELLOW; style.lineHeight = 10; - win_draw_string(pc_stats_gworld,food_rect[1],"Food:",eTextMode::WRAP,style); - win_draw_string(pc_stats_gworld,gold_rect[1],"Gold:",eTextMode::WRAP,style); - win_draw_string(pc_stats_gworld,day_rect[1],"Day:",eTextMode::WRAP,style); - win_draw_string(pc_stats_gworld,title_rects[0],"Party stats:",eTextMode::WRAP,style); - win_draw_string(pc_stats_gworld,title_rects[1],"HP:",eTextMode::WRAP,style); - win_draw_string(pc_stats_gworld,title_rects[2],"SP:",eTextMode::WRAP,style); + win_draw_string(pc_stats_gworld(),food_rect[1],"Food:",eTextMode::WRAP,style); + win_draw_string(pc_stats_gworld(),gold_rect[1],"Gold:",eTextMode::WRAP,style); + win_draw_string(pc_stats_gworld(),day_rect[1],"Day:",eTextMode::WRAP,style); + win_draw_string(pc_stats_gworld(),title_rects[0],"Party stats:",eTextMode::WRAP,style); + win_draw_string(pc_stats_gworld(),title_rects[1],"HP:",eTextMode::WRAP,style); + win_draw_string(pc_stats_gworld(),title_rects[2],"SP:",eTextMode::WRAP,style); style.colour = Colours::WHITE; style.pointSize = 12; // Put food, gold, day - win_draw_string(pc_stats_gworld,food_rect[0],std::to_string(univ.party.food),eTextMode::WRAP,style); - win_draw_string(pc_stats_gworld,gold_rect[0],std::to_string(univ.party.gold),eTextMode::WRAP,style); - win_draw_string(pc_stats_gworld,day_rect[0],std::to_string(univ.party.calc_day()),eTextMode::WRAP,style); + win_draw_string(pc_stats_gworld(),food_rect[0],std::to_string(univ.party.food),eTextMode::WRAP,style); + win_draw_string(pc_stats_gworld(),gold_rect[0],std::to_string(univ.party.gold),eTextMode::WRAP,style); + win_draw_string(pc_stats_gworld(),day_rect[0],std::to_string(univ.party.calc_day()),eTextMode::WRAP,style); style.colour = Colours::BLACK; sf::Texture& invenbtn_gworld = *ResMgr::graphics.get("invenbtns"); @@ -136,7 +134,7 @@ void put_pc_screen() { std::ostringstream sout; sout << i + 1 << ". " << univ.party[i].name; - win_draw_string(pc_stats_gworld,pc_buttons[i][PCBTN_NAME],sout.str(),eTextMode::WRAP,style); + win_draw_string(pc_stats_gworld(),pc_buttons[i][PCBTN_NAME],sout.str(),eTextMode::WRAP,style); style.italic = false; style.colour = Colours::BLACK; @@ -150,13 +148,13 @@ void put_pc_screen() { else if(univ.party[i].cur_health > univ.party[i].max_health) style.colour = Colours::ORANGE; else style.colour = Colours::RED; - win_draw_string( pc_stats_gworld,pc_buttons[i][PCBTN_HP],std::to_string(univ.party[i].cur_health),eTextMode::WRAP,style); + win_draw_string( pc_stats_gworld(),pc_buttons[i][PCBTN_HP],std::to_string(univ.party[i].cur_health),eTextMode::WRAP,style); if(univ.party[i].cur_sp == univ.party[i].max_sp) style.colour = Colours::BLUE; else if(univ.party[i].cur_sp > univ.party[i].max_sp) style.colour = Colours::TEAL; else style.colour = Colours::PINK; - win_draw_string( pc_stats_gworld,pc_buttons[i][PCBTN_SP],std::to_string(univ.party[i].cur_sp),eTextMode::WRAP,style); + win_draw_string( pc_stats_gworld(),pc_buttons[i][PCBTN_SP],std::to_string(univ.party[i].cur_sp),eTextMode::WRAP,style); draw_pc_effects(i); break; case eMainStatus::DEAD: @@ -182,12 +180,12 @@ void put_pc_screen() { break; } if(univ.party[i].main_status != eMainStatus::ALIVE) - win_draw_string( pc_stats_gworld,to_draw_rect,sout.str(),eTextMode::WRAP,style); + win_draw_string( pc_stats_gworld(),to_draw_rect,sout.str(),eTextMode::WRAP,style); style.colour = Colours::BLACK; // Now put trade and info buttons - rect_draw_some_item(invenbtn_gworld,info_from,pc_stats_gworld,pc_buttons[i][PCBTN_INFO],sf::BlendAlpha); - rect_draw_some_item(invenbtn_gworld,switch_from,pc_stats_gworld,pc_buttons[i][PCBTN_TRADE],sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld,info_from,pc_stats_gworld(),pc_buttons[i][PCBTN_INFO],sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld,switch_from,pc_stats_gworld(),pc_buttons[i][PCBTN_TRADE],sf::BlendAlpha); } else { for(auto& flag : pc_area_button_active[i]) @@ -197,10 +195,10 @@ void put_pc_screen() { rectangle help_from_rect = {46,60,59,76}; to_draw_rect = {101,251,114,267}; - rect_draw_some_item(invenbtn_gworld, help_from_rect, pc_stats_gworld, to_draw_rect, sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld, help_from_rect, pc_stats_gworld(), to_draw_rect, sf::BlendAlpha); - pc_stats_gworld.setActive(); - pc_stats_gworld.display(); + pc_stats_gworld().setActive(); + pc_stats_gworld().display(); // Sometimes this gets called when character is slain. when that happens, if items for // that PC are up, switch item page. @@ -219,13 +217,13 @@ void put_item_screen(eItemWinMode screen_num) { rectangle erase_rect = {17,2,122,255},dest_rect; rectangle upper_frame_rect = {3,3,15,268}; - item_stats_gworld.setActive(false); - clear_scale_aware_text(item_stats_gworld); + item_stats_gworld().setActive(false); + clear_scale_aware_text(item_stats_gworld()); // First clean up gworld with pretty patterns sf::Texture& orig = *ResMgr::graphics.get("inventory"); - rect_draw_some_item(orig, rectangle(orig), item_stats_gworld, rectangle(item_stats_gworld)); - tileImage(item_stats_gworld, erase_rect,bg[6]); + rect_draw_some_item(orig, rectangle(orig), item_stats_gworld(), rectangle(item_stats_gworld())); + tileImage(item_stats_gworld(), erase_rect,bg[6]); // Draw buttons at bottom item_offset = item_sbar->getPosition(); @@ -240,28 +238,28 @@ void put_item_screen(eItemWinMode screen_num) { style.colour = Colours::YELLOW; switch(screen_num) { case ITEM_WIN_SPECIAL: - win_draw_string(item_stats_gworld,upper_frame_rect,"Special items:",eTextMode::WRAP,style); + win_draw_string(item_stats_gworld(),upper_frame_rect,"Special items:",eTextMode::WRAP,style); break; case ITEM_WIN_QUESTS: - win_draw_string(item_stats_gworld,upper_frame_rect,"Quests/Jobs:",eTextMode::WRAP,style); + win_draw_string(item_stats_gworld(),upper_frame_rect,"Quests/Jobs:",eTextMode::WRAP,style); break; default: // on an items page pc = screen_num; sout.str(""); sout << univ.party[pc].name << " inventory:"; - win_draw_string(item_stats_gworld,upper_frame_rect,sout.str(),eTextMode::WRAP,style); + win_draw_string(item_stats_gworld(),upper_frame_rect,sout.str(),eTextMode::WRAP,style); break; } - clip_rect(item_stats_gworld, erase_rect); + clip_rect(item_stats_gworld(), erase_rect); switch(screen_num) { case ITEM_WIN_SPECIAL: style.colour = Colours::BLACK; for(short i = 0; i < 8; i++) { i_num = i + item_offset; if(i_num < spec_item_array.size()) { - win_draw_string(item_stats_gworld,item_buttons[i][ITEMBTN_NAME],univ.scenario.special_items[spec_item_array[i_num]].name,eTextMode::WRAP,style); + win_draw_string(item_stats_gworld(),item_buttons[i][ITEMBTN_NAME],univ.scenario.special_items[spec_item_array[i_num]].name,eTextMode::WRAP,style); place_item_button(i,ITEMBTN_INFO); if((univ.scenario.special_items[spec_item_array[i_num]].flags % 10 == 1) @@ -282,14 +280,14 @@ void put_item_screen(eItemWinMode screen_num) { if(spec_item_array[i_num] / 10000 == 2) style.colour = Colours::RED; - win_draw_string(item_stats_gworld,item_buttons[i][ITEMBTN_NAME],univ.scenario.quests[which_quest].name,eTextMode::WRAP,style); + win_draw_string(item_stats_gworld(),item_buttons[i][ITEMBTN_NAME],univ.scenario.quests[which_quest].name,eTextMode::WRAP,style); if(spec_item_array[i_num] / 10000 == 1) { location from, to; from = to = item_buttons[i][ITEMBTN_NAME].centre(); from.x = item_buttons[i][ITEMBTN_NAME].left; to.x = from.x + string_length(univ.scenario.quests[which_quest].name, style); - draw_line(item_stats_gworld, from, to, 1, Colours::GREEN); + draw_line(item_stats_gworld(), from, to, 1, Colours::GREEN); } place_item_button(i,ITEMBTN_INFO); @@ -304,7 +302,7 @@ void put_item_screen(eItemWinMode screen_num) { i_num = i + item_offset; sout.str(""); sout << i_num + 1 << '.'; - win_draw_string(item_stats_gworld,item_buttons[i][ITEMBTN_NAME],sout.str(),eTextMode::WRAP,style); + win_draw_string(item_stats_gworld(),item_buttons[i][ITEMBTN_NAME],sout.str(),eTextMode::WRAP,style); dest_rect = item_buttons[i][ITEMBTN_NAME]; dest_rect.left += 36; @@ -333,7 +331,7 @@ void put_item_screen(eItemWinMode screen_num) { sout << '(' << int(item.charges) << ')'; } dest_rect.left -= 2; - win_draw_string(item_stats_gworld,dest_rect,sout.str(),eTextMode::WRAP,style); + win_draw_string(item_stats_gworld(),dest_rect,sout.str(),eTextMode::WRAP,style); style.italic = false; style.colour = Colours::BLACK; @@ -360,11 +358,11 @@ void put_item_screen(eItemWinMode screen_num) { } // end of for(short i = 0; i < 8; i++) break; } - undo_clip(item_stats_gworld); + undo_clip(item_stats_gworld()); place_item_bottom_buttons(); - item_stats_gworld.setActive(); - item_stats_gworld.display(); + item_stats_gworld().setActive(); + item_stats_gworld().display(); } void place_buy_button(short position,short pc_num,short item_num) { @@ -434,13 +432,13 @@ void place_buy_button(short position,short pc_num,short item_num) { store_selling_values[position] = val_to_place; dest_rect = item_buttons[position][ITEMBTN_SPEC]; dest_rect.right = dest_rect.left + 30; - rect_draw_some_item(invenbtn_gworld, source_rect, item_stats_gworld, dest_rect, sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld, source_rect, item_stats_gworld(), dest_rect, sf::BlendAlpha); TextStyle style; if(val_to_place >= 10000) style.font = FONT_PLAIN; style.lineHeight = 10; dest_rect.offset(dest_rect.width() + 5,0); - win_draw_string(item_stats_gworld,dest_rect,std::to_string(val_to_place),eTextMode::LEFT_TOP,style); + win_draw_string(item_stats_gworld(),dest_rect,std::to_string(val_to_place),eTextMode::LEFT_TOP,style); } } @@ -453,12 +451,12 @@ void place_item_graphic(short which_slot,short graphic) { std::shared_ptr src_gw; if(graphic >= 10000) { graf_pos_ref(src_gw, from_rect) = spec_scen_g.find_graphic(graphic - 10000, true); - rect_draw_some_item(*src_gw, from_rect, item_stats_gworld, to_rect,sf::BlendAlpha); + rect_draw_some_item(*src_gw, from_rect, item_stats_gworld(), to_rect,sf::BlendAlpha); } else if(graphic >= 1000) { graf_pos_ref(src_gw, from_rect) = spec_scen_g.find_graphic(graphic - 1000); - rect_draw_some_item(*src_gw, from_rect, item_stats_gworld, to_rect,sf::BlendAlpha); + rect_draw_some_item(*src_gw, from_rect, item_stats_gworld(), to_rect,sf::BlendAlpha); } - else rect_draw_some_item(*ResMgr::graphics.get("tinyobj"), from_rect, item_stats_gworld, to_rect, sf::BlendAlpha); + else rect_draw_some_item(*ResMgr::graphics.get("tinyobj"), from_rect, item_stats_gworld(), to_rect, sf::BlendAlpha); } // name, use, give, drop, info, sell/id @@ -471,7 +469,7 @@ void place_item_button(short which_slot,eItemButton button_type, eItemButton but sf::Texture& invenbtn_gworld = *ResMgr::graphics.get("invenbtns"); item_area_button_active[which_slot][button_type] = true; - rect_draw_some_item(invenbtn_gworld, item_buttons_from[button_type - 2], item_stats_gworld, item_buttons[which_slot][button_pos], sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld, item_buttons_from[button_type - 2], item_stats_gworld(), item_buttons[which_slot][button_pos], sf::BlendAlpha); } void place_item_bottom_buttons() { @@ -489,7 +487,7 @@ void place_item_bottom_buttons() { if(univ.party[i].main_status == eMainStatus::ALIVE) { item_bottom_button_active[i] = true; to_rect = item_screen_button_rects[i]; - rect_draw_some_item(invenbtn_gworld, but_from_rect, item_stats_gworld, to_rect, sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld, but_from_rect, item_stats_gworld(), to_rect, sf::BlendAlpha); pic_num_t pic = univ.party[i].which_graphic; std::shared_ptr from_gw; if(pic >= 1000) { @@ -509,22 +507,22 @@ void place_item_bottom_buttons() { from_gw = &ResMgr::graphics.get("pcs"); } to_rect.inset(2,2); - rect_draw_some_item(*from_gw, pc_from_rect, item_stats_gworld, to_rect, sf::BlendAlpha); + rect_draw_some_item(*from_gw, pc_from_rect, item_stats_gworld(), to_rect, sf::BlendAlpha); std::string numeral = std::to_string(i + 1); short width = string_length(numeral, style); // Offset "6" down two pixels to make it line up, because it has an ascender in this font // Offset "1" - "4" down as well because they're not shorter and it looks a bit better to_rect.offset(-width - 5, i != 4 ? 2 : 0); - win_draw_string(item_stats_gworld, to_rect, numeral, eTextMode::LEFT_TOP, style); + win_draw_string(item_stats_gworld(), to_rect, numeral, eTextMode::LEFT_TOP, style); } else item_bottom_button_active[i] = false; } to_rect = item_screen_button_rects[6]; - rect_draw_some_item(invenbtn_gworld, spec_from_rect, item_stats_gworld, to_rect, sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld, spec_from_rect, item_stats_gworld(), to_rect, sf::BlendAlpha); to_rect = item_screen_button_rects[7]; - rect_draw_some_item(invenbtn_gworld, job_from_rect, item_stats_gworld, to_rect, sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld, job_from_rect, item_stats_gworld(), to_rect, sf::BlendAlpha); to_rect = item_screen_button_rects[8]; - rect_draw_some_item(invenbtn_gworld, help_from_rect, item_stats_gworld, to_rect, sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld, help_from_rect, item_stats_gworld(), to_rect, sf::BlendAlpha); } void set_stat_window_for_pc(int pc, bool record) { @@ -597,9 +595,9 @@ void refresh_stat_areas(short mode) { if(mode == 1) x = sf::BlendAdd; else x = sf::BlendNone; - rect_draw_some_item(pc_stats_gworld, rectangle(pc_stats_gworld), mainPtr, win_to_rects[WINRECT_PCSTATS], x); - rect_draw_some_item(item_stats_gworld, rectangle(item_stats_gworld), mainPtr, win_to_rects[WINRECT_INVEN], x); - rect_draw_some_item(text_area_gworld, rectangle(text_area_gworld), mainPtr, win_to_rects[WINRECT_TRANSCRIPT], x); + rect_draw_some_item(pc_stats_gworld(), rectangle(pc_stats_gworld()), mainPtr(), win_to_rects[WINRECT_PCSTATS], x); + rect_draw_some_item(item_stats_gworld(), rectangle(item_stats_gworld()), mainPtr(), win_to_rects[WINRECT_INVEN], x); + rect_draw_some_item(text_area_gworld(), rectangle(text_area_gworld()), mainPtr(), win_to_rects[WINRECT_TRANSCRIPT], x); } rectangle get_stat_effect_rect(int code) { @@ -635,7 +633,7 @@ void draw_pc_effects(short pc) { else if(next.second > 0) placedIcon = statInfo.icon; else if(next.second < 0) placedIcon = statInfo.negIcon; if(placedIcon >= 0) { - rect_draw_some_item(status_gworld, get_stat_effect_rect(placedIcon), pc_stats_gworld, dest_rect, sf::BlendAlpha); + rect_draw_some_item(status_gworld, get_stat_effect_rect(placedIcon), pc_stats_gworld(), dest_rect, sf::BlendAlpha); dest_rect.offset(13, 0); } if(dest_rect.right >= right_limit) break; @@ -966,7 +964,7 @@ void add_string_to_buf(std::string str, unsigned short indent) { inited = true; buf_style.font = FONT_PLAIN; buf_style.pointSize = 12; - width = text_area_gworld.getSize().x - 5; + width = text_area_gworld().getSize().x - 5; } if(overall_mode == MODE_STARTUP) return; @@ -1076,11 +1074,11 @@ void print_buf () { long start_print_point; rectangle store_text_rect,dest_rect,erase_rect = {2,2,136,255}; - text_area_gworld.setActive(false); - clear_scale_aware_text(text_area_gworld); + text_area_gworld().setActive(false); + clear_scale_aware_text(text_area_gworld()); // First clean up gworld with pretty patterns - tileImage(text_area_gworld, erase_rect,bg[6]); + tileImage(text_area_gworld(), erase_rect,bg[6]); ctrl_val = 58 - text_sbar->getPosition(); start_print_point = buf_pointer - LINES_IN_TEXT_WIN - ctrl_val; @@ -1094,7 +1092,7 @@ void print_buf () { sf::Text text(text_buffer[line_to_print].line, *ResMgr::fonts.get("plain"), 12); text.setColor(Colours::BLACK); text.setPosition(moveTo); - draw_scale_aware_text(text_area_gworld, text); + draw_scale_aware_text(text_area_gworld(), text); num_lines_printed++; line_to_print++; if(line_to_print== TEXT_BUF_LEN) { @@ -1107,8 +1105,8 @@ void print_buf () { } - text_area_gworld.setActive(); - text_area_gworld.display(); + text_area_gworld().setActive(); + text_area_gworld().display(); } void restart_printing() { @@ -1186,13 +1184,13 @@ void draw_text_label(const text_label_t& label) { back_rect.inset(-7,-7); back_rect.offset(0,-2); for(int i = 0; i <= 3; i++) { - fill_roundrect(terrain_screen_gworld, back_rect, 7, back_clr); + fill_roundrect(terrain_screen_gworld(), back_rect, 7, back_clr); back_rect.inset(2,2); back_clr.a *= 1.5; } //text_rect.offset(0, -text_rect.height() + 1); text_rect.offset(0, -5); - win_draw_string(terrain_screen_gworld, text_rect, label.str, eTextMode::LEFT_TOP, style); + win_draw_string(terrain_screen_gworld(), text_rect, label.str, eTextMode::LEFT_TOP, style); } // TODO: Replace uses of this function with direct use of calc_rect diff --git a/src/game/boe.town.cpp b/src/game/boe.town.cpp index 138b4b10b..5e9565b20 100644 --- a/src/game/boe.town.cpp +++ b/src/game/boe.town.cpp @@ -37,14 +37,12 @@ extern short store_spell_target,which_combat_type,combat_active_pc; extern eGameMode overall_mode; extern eItemWinMode stat_window; extern location center; -extern sf::RenderWindow mainPtr; extern short store_current_pc,current_ground; extern eGameMode store_pre_shop_mode,store_pre_talk_mode; extern std::queue special_queue; extern bool prime_time(); extern bool map_visible; -extern sf::RenderWindow mini_map; extern location hor_vert_place[14]; extern location diag_place[14]; @@ -52,7 +50,6 @@ extern location golem_m_locs[16]; extern cUniverse univ; extern cCustomGraphics spec_scen_g; bool need_map_full_refresh = true,forcing_map_button_redraw = false; -extern sf::RenderTexture map_gworld; // In the 0..65535 range, this colour was {65535,65535,52428} sf::Color parchment = {255,255,205}; @@ -690,7 +687,7 @@ void start_town_combat(eDirection direction) { set_pc_moves(); pick_next_pc(); center = univ.current_pc().combat_pos; - UI::toolbar.draw(mainPtr); + UI::toolbar.draw(mainPtr()); put_pc_screen(); set_stat_window_for_pc(univ.cur_pc); give_help(48,49); @@ -1275,14 +1272,14 @@ bool does_location_have_special(cOutdoors& sector, location loc, eTerSpec specia // TODO: I don't think we need this void clear_map() { - rectangle map_world_rect(map_gworld); + rectangle map_world_rect(map_gworld()); // if(!map_visible) { // return; // } -// draw_map(mini_map,11); +// draw_map(mini_map(),11); - fill_rect(map_gworld, map_world_rect, sf::Color::Black); + fill_rect(map_gworld(), map_world_rect, sf::Color::Black); draw_map(true); } @@ -1371,14 +1368,14 @@ void draw_map(bool need_refresh) { canMap = false; } else if(need_refresh) { - // CHECKME: unsure, but on osx, if mainPtr.setActive() is not called, + // CHECKME: unsure, but on osx, if mainPtr().setActive() is not called, // the following code does not update the gworld texture if we are // called just after closing a dialog - mainPtr.setActive(); + mainPtr().setActive(); - map_gworld.setActive(); + map_gworld().setActive(); - fill_rect(map_gworld, map_world_rect, sf::Color::Black); + fill_rect(map_gworld(), map_world_rect, sf::Color::Black); // Now, if shopping or talking, just don't touch anything. if((overall_mode == MODE_SHOPPING) || (overall_mode == MODE_TALKING)) @@ -1422,26 +1419,26 @@ void draw_map(bool need_refresh) { if(drawLargeIcon) { pic = pic % 1000; graf_pos_ref(src_gw, custom_from) = spec_scen_g.find_graphic(pic); - rect_draw_some_item(*src_gw,custom_from,map_gworld,draw_rect); + rect_draw_some_item(*src_gw,custom_from,map_gworld(),draw_rect); } else { graf_pos_ref(src_gw, custom_from) = spec_scen_g.find_graphic(pic % 1000); custom_from.right = custom_from.left + 12; custom_from.bottom = custom_from.top + 12; pic /= 1000; pic--; custom_from.offset((pic / 3) * 12, (pic % 3) * 12); - rect_draw_some_item(*src_gw, custom_from, map_gworld, draw_rect); + rect_draw_some_item(*src_gw, custom_from, map_gworld(), draw_rect); } } } else if(drawLargeIcon) { if(pic >= 960) { custom_from = calc_rect(4 * ((pic - 960) / 5),(pic - 960) % 5); - rect_draw_some_item(*ResMgr::graphics.get("teranim"), custom_from, map_gworld, draw_rect); + rect_draw_some_item(*ResMgr::graphics.get("teranim"), custom_from, map_gworld(), draw_rect); } else { int which_sheet = pic / 50; auto src_gw = &ResMgr::graphics.get("ter" + std::to_string(1 + which_sheet)); pic %= 50; custom_from = calc_rect(pic % 10, pic / 10); - rect_draw_some_item(*src_gw, custom_from, map_gworld, draw_rect); + rect_draw_some_item(*src_gw, custom_from, map_gworld(), draw_rect); } } else { if(univ.scenario.ter_types[what_ter].picture < 960) @@ -1449,43 +1446,44 @@ void draw_map(bool need_refresh) { 12 * (univ.scenario.ter_types[what_ter].picture / 20)); else ter_temp_from.offset(12 * 20, 12 * (univ.scenario.ter_types[what_ter].picture - 960)); - rect_draw_some_item(small_ter_gworld,ter_temp_from,map_gworld,draw_rect); + rect_draw_some_item(small_ter_gworld,ter_temp_from,map_gworld(),draw_rect); } if(is_out() ? univ.out->roads[where.x][where.y] : univ.town.is_road(where.x,where.y)) { draw_rect.inset(1,1); - rect_draw_some_item(*ResMgr::graphics.get("trim"),{8,112,12,116},map_gworld,draw_rect); + rect_draw_some_item(*ResMgr::graphics.get("trim"),{8,112,12,116},map_gworld(),draw_rect); } } } - map_gworld.display(); + map_gworld().display(); // this stops flickering if the display time is too long glFlush(); } - mini_map.setActive(false); + mini_map().setActive(false); // Now place terrain map gworld TextStyle style; style.font = FONT_BOLD; style.pointSize = 10;; - the_rect = rectangle(mini_map); - tileImage(mini_map, the_rect,bg[4]); - cParentless mapWin(mini_map); + the_rect = rectangle(mini_map()); + tileImage(mini_map(), the_rect, bg[4]); + cParentless mapWin(mini_map()); cPict theGraphic(mapWin); + theGraphic.setBounds(dlogpicrect); theGraphic.setPict(21, PIC_DLOG); theGraphic.setFormat(TXT_FRAME, FRM_NONE); theGraphic.draw(); style.colour = sf::Color::White; style.lineHeight = 12; - win_draw_string(mini_map, map_title_rect,title_string,eTextMode::WRAP,style); - win_draw_string(mini_map, map_bar_rect,"(Hit Escape to close.)",eTextMode::WRAP,style); + win_draw_string(mini_map(), map_title_rect,title_string,eTextMode::WRAP,style); + win_draw_string(mini_map(), map_bar_rect,"(Hit Escape to close.)",eTextMode::WRAP,style); if(canMap) { - rect_draw_some_item(map_gworld.getTexture(),area_to_draw_from,mini_map,area_to_draw_on); + rect_draw_some_item(map_gworld().getTexture(),area_to_draw_from,mini_map(),area_to_draw_on); // Now place PCs and monsters if(draw_pcs) { @@ -1502,8 +1500,8 @@ void draw_map(bool need_refresh) { draw_rect.right = draw_rect.left + 6; draw_rect.bottom = draw_rect.top + 6; - fill_rect(mini_map, draw_rect, Colours::GREEN); - frame_circle(mini_map, draw_rect, Colours::BLUE); + fill_rect(mini_map(), draw_rect, Colours::GREEN); + frame_circle(mini_map(), draw_rect, Colours::BLUE); } } if((overall_mode != MODE_SHOPPING) && (overall_mode != MODE_TALKING)) { @@ -1513,18 +1511,18 @@ void draw_map(bool need_refresh) { draw_rect.top = area_to_draw_on.top + 6 * (where.y - view_rect.top); draw_rect.right = draw_rect.left + 6; draw_rect.bottom = draw_rect.top + 6; - fill_rect(mini_map, draw_rect, Colours::RED); - frame_circle(mini_map, draw_rect, sf::Color::Black); + fill_rect(mini_map(), draw_rect, Colours::RED); + frame_circle(mini_map(), draw_rect, sf::Color::Black); } } } - mini_map.setActive(false); - mini_map.display(); + mini_map().setActive(false); + mini_map().display(); // Now exit gracefully - mainPtr.setActive(); + mainPtr().setActive(); } @@ -1562,10 +1560,10 @@ void display_map() { rectangle the_rect; rectangle dlogpicrect = {6,6,42,42}; - mini_map.setVisible(true); + mini_map().setVisible(true); map_visible = true; draw_map(true); - makeFrontWindow(mainPtr); + makeFrontWindow(mainPtr()); set_cursor(sword_curs); } diff --git a/src/game/boe.townspec.cpp b/src/game/boe.townspec.cpp index fd1d3ae95..b114c4f41 100644 --- a/src/game/boe.townspec.cpp +++ b/src/game/boe.townspec.cpp @@ -22,7 +22,6 @@ extern eGameMode overall_mode; extern eItemWinMode stat_window; extern location center; -extern sf::RenderWindow mainPtr; extern cUniverse univ; char answer[256]; diff --git a/src/game/boe.ui.cpp b/src/game/boe.ui.cpp index d99d4f8d5..7aadeff0a 100644 --- a/src/game/boe.ui.cpp +++ b/src/game/boe.ui.cpp @@ -21,8 +21,17 @@ #include "winutil.hpp" namespace UI { + sf::RenderTexture& toolbar_gworld() + { + static sf::RenderTexture instance; + return instance; + } cToolbar toolbar; } +sf::RenderTexture& cToolbar::cache() +{ + return UI::toolbar_gworld(); +} // The location of each UI area enum_map(eGuiArea, rectangle) win_to_rects = { @@ -154,8 +163,8 @@ void cToolbar::draw_buttons() { if(!inited) { inited = true; // TODO: Possibly this should be based on total_rect instead of hard-coded? - cache.create(266,38); - cache.clear(sf::Color::Black); + cache().create(266, 38); + cache().clear(sf::Color::Black); } sf::Texture& buttons_gworld = *ResMgr::graphics.get("buttons"); for(const auto& btn : toolbar) { @@ -165,13 +174,13 @@ void cToolbar::draw_buttons() { if(btn.type != BTN_LG) icon_rect.bottom /= 2; // buttons.png consists of 1 row of 38x38 buttons, two rows of 32x32 icons, and one row of 32x16 icons. icon_rect.offset(32 * slot.x, 38 + 32 * slot.y); - rect_draw_some_item(buttons_gworld, btn_src_rects[btn.type], cache, to_rect); + rect_draw_some_item(buttons_gworld, btn_src_rects[btn.type], cache(), to_rect); to_rect.inset(3,3); // Insetting the small rect overcompensates, so correct for that. if(btn.type != BTN_LG) to_rect.bottom += 3; - rect_draw_some_item(buttons_gworld, icon_rect, cache, to_rect, sf::BlendAlpha); + rect_draw_some_item(buttons_gworld, icon_rect, cache(), to_rect, sf::BlendAlpha); } - cache.display(); + cache().display(); } void cToolbar::draw(sf::RenderTarget& targ) { @@ -190,5 +199,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(cache().getTexture(), rectangle(cache()), targ, to, sf::BlendAdd); } diff --git a/src/game/boe.ui.hpp b/src/game/boe.ui.hpp index 694d2b4fe..21aba363d 100644 --- a/src/game/boe.ui.hpp +++ b/src/game/boe.ui.hpp @@ -31,7 +31,6 @@ class cToolbar { rectangle bounds; }; - sf::RenderTexture cache; std::vector toolbar; rectangle total_rect; enum eMode {UNKNOWN, OUTDOORS, TOWN, COMBAT}; @@ -41,6 +40,7 @@ class cToolbar { void draw_buttons(); void init(); public: + sf::RenderTexture& cache(); void draw(sf::RenderTarget& targ); eToolbarButton button_hit(sf::RenderWindow& win, location click, cFramerateLimiter& fps_limiter); }; diff --git a/src/pcedit/pc.action.cpp b/src/pcedit/pc.action.cpp index f4ea23c0e..aecf65b0e 100644 --- a/src/pcedit/pc.action.cpp +++ b/src/pcedit/pc.action.cpp @@ -15,8 +15,6 @@ #include extern cUniverse univ; -extern sf::RenderWindow mainPtr; -extern sf::Texture pc_gworld; short which_pc_displayed,store_pc_trait_mode,store_which_to_edit; extern short current_active_pc; diff --git a/src/pcedit/pc.editors.cpp b/src/pcedit/pc.editors.cpp index 33c2732e2..9121054eb 100644 --- a/src/pcedit/pc.editors.cpp +++ b/src/pcedit/pc.editors.cpp @@ -37,7 +37,6 @@ extern cUniverse univ; extern short store_flags[3]; extern short current_active_pc; -extern sf::RenderWindow mainPtr; extern rectangle d_rects[80]; extern short d_rect_index[80]; @@ -46,7 +45,6 @@ bool choice_active[6]; extern short which_pc_displayed; cPlayer *store_pc; -sf::Texture button_num_gworld; extern std::map skill_cost; extern std::map skill_max; diff --git a/src/pcedit/pc.graphics.cpp b/src/pcedit/pc.graphics.cpp index 21e0ec312..7c6bb4fb7 100644 --- a/src/pcedit/pc.graphics.cpp +++ b/src/pcedit/pc.graphics.cpp @@ -21,7 +21,6 @@ extern cUniverse univ; -extern sf::RenderWindow mainPtr; extern sf::View mainView; extern bool party_in_scen,scen_items_loaded; @@ -210,7 +209,7 @@ void redraw_screen() { drawMenuBar(); - mainPtr.display(); + mainPtr().display(); } static void frame_dlog_rect(sf::RenderWindow& target, rectangle rect) { @@ -236,20 +235,20 @@ void draw_main_screen() { // fill whole window with background texture // Switch back to the default view while drawing the background tiles // so that they are not upscaled - rectangle windRect { mainPtr }; - mainPtr.setView(mainPtr.getDefaultView()); - tileImage(mainPtr,windRect,bg[12]); - mainPtr.setView(mainView); + rectangle windRect { mainPtr() }; + mainPtr().setView(mainPtr().getDefaultView()); + tileImage(mainPtr(),windRect,bg[12]); + mainPtr().setView(mainView); sf::Texture& icon_gworld = *ResMgr::graphics.get("icon"); dest_rec = source_rect = rectangle(icon_gworld); dest_rec.offset(23, 16); - rect_draw_some_item(icon_gworld,source_rect,mainPtr,dest_rec); + rect_draw_some_item(icon_gworld,source_rect,mainPtr(),dest_rec); sf::Texture& title_gworld = *ResMgr::graphics.get("pcedtitle"); dest_rec = source_rect = rectangle(title_gworld); dest_rec.offset(66, 0); - rect_draw_some_item(title_gworld,source_rect,mainPtr,dest_rec,sf::BlendAlpha); + rect_draw_some_item(title_gworld,source_rect,mainPtr(),dest_rec,sf::BlendAlpha); TextStyle style; style.lineHeight = 10; @@ -260,12 +259,12 @@ void draw_main_screen() { dest_rect.bottom = dest_rect.top + 12; style.pointSize = 12; style.underline = true; - win_draw_string(mainPtr,dest_rect,"Characters",eTextMode::WRAP,style); + win_draw_string(mainPtr(),dest_rect,"Characters",eTextMode::WRAP,style); style.underline = false; style.pointSize = 10; } - frame_dlog_rect(mainPtr,pc_info_rect); // draw the frame + frame_dlog_rect(mainPtr(),pc_info_rect); // draw the frame style.colour = sf::Color::Black; dest_rect = pc_area_buttons[5][0]; @@ -273,21 +272,21 @@ void draw_main_screen() { dest_rect.left += 60; dest_rect.offset(0,21); if(!univ.file.empty()) - win_draw_string(mainPtr,dest_rect,"Click on character to edit it.",eTextMode::WRAP,style); + win_draw_string(mainPtr(),dest_rect,"Click on character to edit it.",eTextMode::WRAP,style); else - win_draw_string(mainPtr,dest_rect,"Select Open from File menu.",eTextMode::WRAP,style); + win_draw_string(mainPtr(),dest_rect,"Select Open from File menu.",eTextMode::WRAP,style); if(!univ.file.empty() && party_in_scen && !scen_items_loaded){ dest_rect.offset(200,0); - win_draw_string(mainPtr,dest_rect,"Warning: Scenario item data could not be loaded.",eTextMode::WRAP,style); + win_draw_string(mainPtr(),dest_rect,"Warning: Scenario item data could not be loaded.",eTextMode::WRAP,style); dest_rect.offset(-200,0); } dest_rect.offset(0,14); if(!univ.file.empty()) - win_draw_string(mainPtr,dest_rect,"Press 'I' button to identify item, and 'D' button to drop item.",eTextMode::WRAP,style); + win_draw_string(mainPtr(),dest_rect,"Press 'I' button to identify item, and 'D' button to drop item.",eTextMode::WRAP,style); style.pointSize = 12; dest_rect.offset(0,16); if(!univ.file.empty()) - win_draw_string(mainPtr,dest_rect,"Back up save file before editing it!",eTextMode::WRAP,style); + win_draw_string(mainPtr(),dest_rect,"Back up save file before editing it!",eTextMode::WRAP,style); style.pointSize = 10; style.font = FONT_PLAIN; std::ostringstream sout; @@ -299,9 +298,9 @@ void draw_main_screen() { #endif std::string copyright = sout.str(); //dest_rect.offset(270,0); - dest_rect.right = mainPtr.getSize().x - 5; + dest_rect.right = mainPtr().getSize().x - 5; dest_rect.left = dest_rect.right - string_length(copyright, style) - 5; - win_draw_string(mainPtr,dest_rect,copyright,eTextMode::WRAP,style); + win_draw_string(mainPtr(),dest_rect,copyright,eTextMode::WRAP,style); reg_rect = whole_win_rect; @@ -335,13 +334,13 @@ void draw_items() { TextStyle style; style.pointSize = 12; - win_draw_string(mainPtr,dest_rect,univ.party[current_active_pc].name + "'s Items:",eTextMode::LEFT_TOP,style); + win_draw_string(mainPtr(),dest_rect,univ.party[current_active_pc].name + "'s Items:",eTextMode::LEFT_TOP,style); if(univ.party[current_active_pc].main_status != eMainStatus::ALIVE){ - frame_dlog_rect(mainPtr,pc_info_rect); // re draw entire frame - frame_dlog_rect(mainPtr,info_area_rect); // draw the frame - frame_dlog_rect(mainPtr,pc_race_rect); // draw the frame - frame_dlog_rect(mainPtr,name_rect); // draw the frame + frame_dlog_rect(mainPtr(),pc_info_rect); // re draw entire frame + frame_dlog_rect(mainPtr(),info_area_rect); // draw the frame + frame_dlog_rect(mainPtr(),pc_race_rect); // draw the frame + frame_dlog_rect(mainPtr(),name_rect); // draw the frame return; // If PC is dead, it has no items } sf::Texture& invenbtn_gworld = *ResMgr::graphics.get("invenbtns"); @@ -358,16 +357,16 @@ void draw_items() { TextStyle style; style.lineHeight = 10; - win_draw_string(mainPtr,item_string_rects[i][0],to_draw,eTextMode::LEFT_TOP,style); + win_draw_string(mainPtr(),item_string_rects[i][0],to_draw,eTextMode::LEFT_TOP,style); // Draw id/drop buttons - rect_draw_some_item(invenbtn_gworld,d_from,mainPtr,item_string_rects[i][1],sf::BlendAlpha); - rect_draw_some_item(invenbtn_gworld,i_from,mainPtr,item_string_rects[i][2],sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld,d_from,mainPtr(),item_string_rects[i][1],sf::BlendAlpha); + rect_draw_some_item(invenbtn_gworld,i_from,mainPtr(),item_string_rects[i][2],sf::BlendAlpha); } - frame_dlog_rect(mainPtr,pc_info_rect); // re draw entire frame - frame_dlog_rect(mainPtr,name_rect); // draw the frame - frame_dlog_rect(mainPtr,pc_race_rect); // draw the frame - frame_dlog_rect(mainPtr,info_area_rect); // draw the frame + frame_dlog_rect(mainPtr(),pc_info_rect); // re draw entire frame + frame_dlog_rect(mainPtr(),name_rect); // draw the frame + frame_dlog_rect(mainPtr(),pc_race_rect); // draw the frame + frame_dlog_rect(mainPtr(),info_area_rect); // draw the frame } @@ -383,24 +382,24 @@ void display_party() { no_party_rect=pc_info_rect; no_party_rect.top+=5; no_party_rect.left+=5; - win_draw_string(mainPtr,no_party_rect,"No party loaded.",eTextMode::WRAP,style); + win_draw_string(mainPtr(),no_party_rect,"No party loaded.",eTextMode::WRAP,style); } else { sf::Texture& buttons_gworld = *ResMgr::graphics.get("pcedbuttons"); from_rect = pc_info_rect; from_rect.top = from_rect.bottom - 11; if(!party_in_scen) - win_draw_string(mainPtr,from_rect,"Party not in a scenario.",eTextMode::WRAP,style); + win_draw_string(mainPtr(),from_rect,"Party not in a scenario.",eTextMode::WRAP,style); else - win_draw_string(mainPtr,from_rect,"Party is in a scenario (day " + std::to_string(1 + univ.party.age / 3700) + ").",eTextMode::WRAP,style); + win_draw_string(mainPtr(),from_rect,"Party is in a scenario (day " + std::to_string(1 + univ.party.age / 3700) + ").",eTextMode::WRAP,style); for(short i = 0; i < 6; i++) { if(i == current_active_pc) // active pc is drawn in blue - fill_rect(mainPtr, pc_area_buttons[i][0], Colours::BLUE); - else fill_rect(mainPtr, pc_area_buttons[i][0], sf::Color::Black); + fill_rect(mainPtr(), pc_area_buttons[i][0], Colours::BLUE); + else fill_rect(mainPtr(), pc_area_buttons[i][0], sf::Color::Black); from_rect = (current_pressed_button == i) ? ed_buttons_from[1] : ed_buttons_from[0]; - rect_draw_some_item(buttons_gworld,from_rect,mainPtr,pc_area_buttons[i][0], sf::BlendAdd); + rect_draw_some_item(buttons_gworld,from_rect,mainPtr(),pc_area_buttons[i][0], sf::BlendAdd); if(univ.party[i].main_status != eMainStatus::ABSENT) { // PC exists? // draw PC graphic @@ -422,7 +421,7 @@ void display_party() { from_rect = calc_rect(2 * (pic / 8), pic % 8); from_gw = &ResMgr::graphics.get("pcs"); } - rect_draw_some_item(*from_gw,from_rect,mainPtr,pc_area_buttons[i][1],sf::BlendAlpha); + rect_draw_some_item(*from_gw,from_rect,mainPtr(),pc_area_buttons[i][1],sf::BlendAlpha); // draw name style.pointSize = 9; @@ -432,7 +431,7 @@ void display_party() { } style.colour = sf::Color::White; - win_draw_string(mainPtr,pc_area_buttons[i][2],univ.party[i].name,eTextMode::CENTRE,style); + win_draw_string(mainPtr(),pc_area_buttons[i][2],univ.party[i].name,eTextMode::CENTRE,style); style.font = FONT_BOLD; style.pointSize = 10; @@ -440,7 +439,7 @@ void display_party() { if( (univ.party[i].name.length()) > 12) style.pointSize = 8; style.colour = sf::Color::Black; - win_draw_string(mainPtr,name_rect,univ.party[i].name,eTextMode::CENTRE,style); + win_draw_string(mainPtr(),name_rect,univ.party[i].name,eTextMode::CENTRE,style); style.pointSize = 10; } @@ -452,14 +451,14 @@ void display_party() { std::string race_str = "Unknown"; if(univ.party[i].race != eRace::UNKNOWN) race_str = get_str("traits", int(univ.party[i].race) * 2 + 35); - win_draw_string(mainPtr,pc_race_rect,race_str,eTextMode::CENTRE,style); + win_draw_string(mainPtr(),pc_race_rect,race_str,eTextMode::CENTRE,style); // Draw in skills - win_draw_string(mainPtr,skill_rect,"Skills:",eTextMode::WRAP,style); + win_draw_string(mainPtr(),skill_rect,"Skills:",eTextMode::WRAP,style); std::ostringstream to_draw; to_draw << "Hp: " << univ.party[i].cur_health << '/' << univ.party[i].max_health; to_draw << " Sp: " << univ.party[i].cur_sp << '/' << univ.party[i].max_sp; - win_draw_string(mainPtr,hp_sp_rect,to_draw.str(),eTextMode::WRAP,style); + win_draw_string(mainPtr(),hp_sp_rect,to_draw.str(),eTextMode::WRAP,style); style.pointSize = 9; @@ -472,10 +471,10 @@ void display_party() { if(k < 10) temp_rect.left += 4; else temp_rect.left -= 2; - win_draw_string(mainPtr,pc_skills_rect[k],get_str("skills",string_num),eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_skills_rect[k],get_str("skills",string_num),eTextMode::WRAP,style); eSkill skill = eSkill(k); - win_draw_string(mainPtr,temp_rect,std::to_string(univ.party[i].skills[skill]),eTextMode::WRAP,style); + win_draw_string(mainPtr(),temp_rect,std::to_string(univ.party[i].skills[skill]),eTextMode::WRAP,style); string_num+=2; } style.lineHeight = 10; @@ -484,7 +483,7 @@ void display_party() { // Write in pc Status style.pointSize = 10; style.font = FONT_BOLD; - win_draw_string(mainPtr,status_rect,"Status:",eTextMode::WRAP,style); + win_draw_string(mainPtr(),status_rect,"Status:",eTextMode::WRAP,style); style.pointSize = 9; style.font = FONT_PLAIN; @@ -492,102 +491,102 @@ void display_party() { if(univ.party[i].status[eStatus::POISONED_WEAPON] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Poisoned Weap.",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Poisoned Weap.",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::BLESS_CURSE] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Blessed",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Blessed",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::BLESS_CURSE] < 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Cursed",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Cursed",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::POISON] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Poisoned",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Poisoned",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::HASTE_SLOW] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Hasted",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Hasted",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::HASTE_SLOW] < 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Slowed",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Slowed",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::INVULNERABLE] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Invulnerable",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Invulnerable",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::MAGIC_RESISTANCE] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Magic Resistant",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Magic Resistant",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::MAGIC_RESISTANCE] < 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Magic Vulnerable",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Magic Vulnerable",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::WEBS] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Webbed",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Webbed",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::DISEASE] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Diseased",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Diseased",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::INVISIBLE] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Sanctuary",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Sanctuary",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::DUMB] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Dumbfounded",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Dumbfounded",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::DUMB] < 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Enlightened",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Enlightened",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::MARTYRS_SHIELD] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Martyr's Shield",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Martyr's Shield",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::ASLEEP] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Asleep",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Asleep",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::ASLEEP] < 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Hyperactive",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Hyperactive",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::PARALYZED] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Paralyzed",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Paralyzed",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::ACID] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Acid",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Acid",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].status[eStatus::FORCECAGE] > 0) if(cur_rect <= 14) { - win_draw_string(mainPtr,pc_status_rect[cur_rect],"Forcecage",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_status_rect[cur_rect],"Forcecage",eTextMode::WRAP,style); cur_rect++; } style.lineHeight = 10; @@ -596,9 +595,9 @@ void display_party() { // Write in Traits style.pointSize = 10; style.font = FONT_BOLD; - win_draw_string(mainPtr,traits_rect,"Traits:",eTextMode::WRAP,style); + win_draw_string(mainPtr(),traits_rect,"Traits:",eTextMode::WRAP,style); //for(short k = 0 ; k < 16; k++) - //frame_dlog_rect(GetWindowPort(mainPtr),pc_traits_rect[k],0); + //frame_dlog_rect(GetWindowPort(mainPtr()),pc_traits_rect[k],0); style.pointSize = 9; style.font = FONT_PLAIN; style.lineHeight = 9; @@ -606,88 +605,88 @@ void display_party() { cur_rect=0; if(univ.party[i].traits[eTrait::TOUGHNESS]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Toughness",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Toughness",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::MAGICALLY_APT]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Magically Apt",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Magically Apt",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::AMBIDEXTROUS]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Ambidextrous",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Ambidextrous",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::NIMBLE]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Nimble Fingers",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Nimble Fingers",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::CAVE_LORE]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Cave Lore",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Cave Lore",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::WOODSMAN]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Woodsman",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Woodsman",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::GOOD_CONST]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Good Constitution",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Good Constitution",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::HIGHLY_ALERT]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Highly Alert",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Highly Alert",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::STRENGTH]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Exceptional Str.",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Exceptional Str.",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::RECUPERATION]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Recuperation",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Recuperation",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::SLUGGISH]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Sluggish",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Sluggish",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::MAGICALLY_INEPT]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Magically Inept",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Magically Inept",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::FRAIL]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Frail",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Frail",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::CHRONIC_DISEASE]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Chronic Disease",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Chronic Disease",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::BAD_BACK]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Bad Back",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Bad Back",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::PACIFIST]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Pacifist",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Pacifist",eTextMode::WRAP,style); cur_rect++; } if(univ.party[i].traits[eTrait::ANAMA]) if(cur_rect <= 16) { - win_draw_string(mainPtr,pc_traits_rect[cur_rect],"Anama Member",eTextMode::WRAP,style); + win_draw_string(mainPtr(),pc_traits_rect[cur_rect],"Anama Member",eTextMode::WRAP,style); cur_rect++; } style.lineHeight = 10; @@ -697,7 +696,7 @@ void display_party() { style.colour = sf::Color::White; style.pointSize = 9; style.font = FONT_PLAIN; - win_draw_string(mainPtr,pc_area_buttons[i][3],"Alive ",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),pc_area_buttons[i][3],"Alive ",eTextMode::CENTRE,style); style.font = FONT_BOLD; style.pointSize = 10; break; @@ -705,7 +704,7 @@ void display_party() { style.colour = sf::Color::White; style.pointSize = 9; style.font = FONT_PLAIN; - win_draw_string(mainPtr,pc_area_buttons[i][3],"Dead ",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),pc_area_buttons[i][3],"Dead ",eTextMode::CENTRE,style); style.font = FONT_BOLD; style.pointSize = 10; break; @@ -713,7 +712,7 @@ void display_party() { style.colour = sf::Color::White; style.pointSize = 9; style.font = FONT_PLAIN; - win_draw_string(mainPtr,pc_area_buttons[i][3],"Dust ",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),pc_area_buttons[i][3],"Dust ",eTextMode::CENTRE,style); style.font = FONT_BOLD; style.pointSize = 10; break; @@ -721,7 +720,7 @@ void display_party() { style.colour = sf::Color::White; style.pointSize = 9; style.font = FONT_PLAIN; - win_draw_string(mainPtr,pc_area_buttons[i][3],"Stone ",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),pc_area_buttons[i][3],"Stone ",eTextMode::CENTRE,style); style.font = FONT_BOLD; style.pointSize = 10; break; @@ -729,7 +728,7 @@ void display_party() { style.colour = sf::Color::White; style.pointSize = 9; style.font = FONT_PLAIN; - win_draw_string(mainPtr,pc_area_buttons[i][3],"Fled ",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),pc_area_buttons[i][3],"Fled ",eTextMode::CENTRE,style); style.font = FONT_BOLD; style.pointSize = 10; break; @@ -737,7 +736,7 @@ void display_party() { style.colour = sf::Color::White; style.pointSize = 9; style.font = FONT_PLAIN; - win_draw_string(mainPtr,pc_area_buttons[i][3],"Surface ",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),pc_area_buttons[i][3],"Surface ",eTextMode::CENTRE,style); style.font = FONT_BOLD; style.pointSize = 10; break; @@ -745,7 +744,7 @@ void display_party() { style.colour = sf::Color::White; style.pointSize = 9; style.font = FONT_PLAIN; - win_draw_string(mainPtr,pc_area_buttons[i][3],"Absent ",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),pc_area_buttons[i][3],"Absent ",eTextMode::CENTRE,style); style.font = FONT_BOLD; style.pointSize = 10; break; @@ -757,38 +756,38 @@ void display_party() { style.lineHeight = 16; for(short i = 0; i < 5; i++) { from_rect = (current_pressed_button == i + 10) ? ed_buttons_from[1] : ed_buttons_from[0]; - rect_draw_some_item(buttons_gworld,from_rect,mainPtr,edit_rect[i]); + rect_draw_some_item(buttons_gworld,from_rect,mainPtr(),edit_rect[i]); style.colour = sf::Color::White; rectangle dest_rect = edit_rect[i]; switch(i) { case 0: dest_rect.top += dest_rect.height() / 2 - style.lineHeight; - win_draw_string(mainPtr,dest_rect,"Mage",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),dest_rect,"Mage",eTextMode::CENTRE,style); break; case 1: dest_rect.top += dest_rect.height() / 2 - style.lineHeight; - win_draw_string(mainPtr,dest_rect,"Priest",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),dest_rect,"Priest",eTextMode::CENTRE,style); break; case 2: dest_rect.top += dest_rect.height() / 2 - style.lineHeight / 2; - win_draw_string(mainPtr,dest_rect,"Traits",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),dest_rect,"Traits",eTextMode::CENTRE,style); break; case 3: dest_rect.top += dest_rect.height() / 2 - style.lineHeight / 2; - win_draw_string(mainPtr,dest_rect,"Skills",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),dest_rect,"Skills",eTextMode::CENTRE,style); break; case 4: dest_rect.top += dest_rect.height() / 2 - style.lineHeight / 2; - win_draw_string(mainPtr,dest_rect,"XP",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),dest_rect,"XP",eTextMode::CENTRE,style); break; default: break; } dest_rect.top -= style.lineHeight; - win_draw_string(mainPtr,dest_rect,"Edit",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),dest_rect,"Edit",eTextMode::CENTRE,style); if(i < 2) { dest_rect.top += style.lineHeight * 2; - win_draw_string(mainPtr,dest_rect,"Spells",eTextMode::CENTRE,style); + win_draw_string(mainPtr(),dest_rect,"Spells",eTextMode::CENTRE,style); } } style.colour = sf::Color::Black; @@ -797,16 +796,22 @@ void display_party() { dest_rect.offset(0,-14); std::ostringstream to_draw; to_draw << " Gold: " << std::setw(0) << univ.party.gold; - win_draw_string(mainPtr,dest_rect,to_draw.str(),eTextMode::WRAP,style); + win_draw_string(mainPtr(),dest_rect,to_draw.str(),eTextMode::WRAP,style); dest_rect = pc_race_rect; dest_rect.offset(0,-14); to_draw.str(""); to_draw << " Food: " << univ.party.food; - win_draw_string(mainPtr,dest_rect,to_draw.str(),eTextMode::WRAP,style); + win_draw_string(mainPtr(),dest_rect,to_draw.str(),eTextMode::WRAP,style); } } // 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; } diff --git a/src/pcedit/pc.graphics.hpp b/src/pcedit/pc.graphics.hpp index e9994d844..85d844dfb 100644 --- a/src/pcedit/pc.graphics.hpp +++ b/src/pcedit/pc.graphics.hpp @@ -5,3 +5,4 @@ void Set_up_win (); void redraw_screen(); void do_button_action(short which_pc,short which_button); sf::Vector2f translate_mouse_coordinates(sf::Vector2i const point); +sf::RenderWindow& mainPtr(); diff --git a/src/pcedit/pc.main.cpp b/src/pcedit/pc.main.cpp index 9a897f3ed..105f196de 100644 --- a/src/pcedit/pc.main.cpp +++ b/src/pcedit/pc.main.cpp @@ -56,7 +56,6 @@ short current_active_pc = 0; /* Mac stuff globals */ bool All_Done = false; bool changed_display_mode = false; -sf::RenderWindow mainPtr; sf::View mainView; bool party_in_scen = false; bool scen_items_loaded = false; @@ -118,7 +117,7 @@ int main(int argc, char* argv[]) { try { init_directories(argv[0]); sync_prefs(); - adjust_window(mainPtr, mainView); + adjust_window(mainPtr(), mainView); //init_menubar(); init_fileio(); init_main_buttons(); @@ -207,7 +206,7 @@ void handle_events() { while(!All_Done) { if(changed_display_mode) { changed_display_mode = false; - adjust_window(mainPtr, mainView); + adjust_window(mainPtr(), mainView); } #ifdef __APPLE__ @@ -216,7 +215,7 @@ void handle_events() { menuChoiceId=-1; } #endif - while(pollEvent(mainPtr, currentEvent)) handle_one_event(currentEvent); + while(pollEvent(mainPtr(), currentEvent)) handle_one_event(currentEvent); redraw_everything(); diff --git a/src/pcedit/pc.menu.cpp b/src/pcedit/pc.menu.cpp index 83d894c94..a843b764e 100644 --- a/src/pcedit/pc.menu.cpp +++ b/src/pcedit/pc.menu.cpp @@ -4,7 +4,7 @@ #include "pc.menus.hpp" OpenBoEPCEditMenu::OpenBoEPCEditMenu(sf::RenderWindow& window) - : mainPtr { window } + : mainPtr() { window } , tgui { window } { // Build a menubar and store it in tgui with a known name @@ -15,7 +15,7 @@ tgui::MenuBar::Ptr OpenBoEPCEditMenu::build_menubar() const { auto menubar = tgui::MenuBar::create(); // XXX TODO FIXME can we get this constant magic number from somewhere? - menubar->setSize(this->mainPtr.getSize().x, 20); + menubar->setSize(this->mainPtr().getSize().x, 20); this->add_menu_placeholders(menubar); this->add_persistent_menu_items(menubar); diff --git a/src/pcedit/pc.menu.hpp b/src/pcedit/pc.menu.hpp index ae25a46a3..872d38575 100644 --- a/src/pcedit/pc.menu.hpp +++ b/src/pcedit/pc.menu.hpp @@ -20,7 +20,6 @@ class OpenBoEPCEditMenu { using MenuHierarchy = std::vector; tgui::Gui tgui; - sf::RenderWindow& mainPtr; const tgui::String internal_menubar_widget_name { "openboe-pcedit-menu" }; tgui::MenuBar::Ptr build_menubar() const; diff --git a/src/pcedit/pc.menus.linux.cpp b/src/pcedit/pc.menus.linux.cpp index 7df09fad1..139b0dff7 100644 --- a/src/pcedit/pc.menus.linux.cpp +++ b/src/pcedit/pc.menus.linux.cpp @@ -6,14 +6,13 @@ #include "pc.menus.hpp" #include "pc.menu.hpp" -extern sf::RenderWindow mainPtr; extern bool party_in_scen; extern cUniverse univ; std::shared_ptr menu_ptr; void init_menubar() { - menu_ptr.reset(new OpenBoEPCEditMenu(mainPtr)); + menu_ptr.reset(new OpenBoEPCEditMenu(mainPtr())); } void menu_activate() { diff --git a/src/pcedit/pc.menus.win.cpp b/src/pcedit/pc.menus.win.cpp index b1cf5eb4d..ff6e48830 100644 --- a/src/pcedit/pc.menus.win.cpp +++ b/src/pcedit/pc.menus.win.cpp @@ -19,7 +19,6 @@ enum { HELP_MENU_POS = 3, }; -extern sf::RenderWindow mainPtr; extern cUniverse univ; extern bool scen_items_loaded, party_in_scen; LONG_PTR mainProc; @@ -50,7 +49,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)); @@ -116,7 +115,7 @@ void menu_activate() { for(int i = 1; i < GetMenuItemCount(file_menu) - 1; i++) EnableMenuItem(file_menu, i, MF_BYPOSITION | MF_ENABLED); } - DrawMenuBar(mainPtr.getSystemHandle()); + DrawMenuBar(mainPtr().getSystemHandle()); } #include "cursors.hpp" diff --git a/src/scenedit/scen.actions.cpp b/src/scenedit/scen.actions.cpp index 753cd7e00..928270a81 100644 --- a/src/scenedit/scen.actions.cpp +++ b/src/scenedit/scen.actions.cpp @@ -64,7 +64,6 @@ extern cScenario scenario; extern std::shared_ptr 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(); } diff --git a/src/scenedit/scen.graphics.cpp b/src/scenedit/scen.graphics.cpp index ab6453beb..1607efd65 100644 --- a/src/scenedit/scen.graphics.cpp +++ b/src/scenedit/scen.graphics.cpp @@ -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 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 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 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 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 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 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 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 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 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 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 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 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 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,11 @@ 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; } diff --git a/src/scenedit/scen.main.cpp b/src/scenedit/scen.main.cpp index 8e61f116e..c7ecb1be2 100644 --- a/src/scenedit/scen.main.cpp +++ b/src/scenedit/scen.main.cpp @@ -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& 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; diff --git a/src/scenedit/scen.menus.linux.cpp b/src/scenedit/scen.menus.linux.cpp index 8b09c189e..c398bb86a 100644 --- a/src/scenedit/scen.menus.linux.cpp +++ b/src/scenedit/scen.menus.linux.cpp @@ -9,7 +9,6 @@ #include "tools/event_listener.hpp" #include "tools/drawable_manager.hpp" -extern sf::RenderWindow mainPtr; extern cUndoList undo_list; extern std::unordered_map > event_listeners; extern cDrawableManager drawable_mgr; @@ -17,7 +16,7 @@ extern cDrawableManager drawable_mgr; std::shared_ptr menu_ptr; void init_menubar() { - menu_ptr.reset(new OpenBoESceneditMenu(mainPtr)); + menu_ptr.reset(new OpenBoESceneditMenu(mainPtr())); event_listeners["menubar"] = std::dynamic_pointer_cast (menu_ptr); drawable_mgr.add_drawable(UI_LAYER_MENUBAR, "menubar", menu_ptr); diff --git a/src/scenedit/scen.menus.win.cpp b/src/scenedit/scen.menus.win.cpp index f1384d26e..81ba483f7 100644 --- a/src/scenedit/scen.menus.win.cpp +++ b/src/scenedit/scen.menus.win.cpp @@ -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" diff --git a/src/tools/cursors.linux.cpp b/src/tools/cursors.linux.cpp index 051ee771e..50dd6548f 100644 --- a/src/tools/cursors.linux.cpp +++ b/src/tools/cursors.linux.cpp @@ -14,7 +14,6 @@ namespace x11 { x11::Cursor ibeam; // = XCreateFontCursor(NULL, XC_xterm); // extern cursor_type current_cursor; -extern sf::RenderWindow mainPtr; Cursor::Cursor(fs::path imgPath, float hotSpotX, float hotSpotY) : ptr(nullptr) { diff --git a/src/tools/cursors.win.cpp b/src/tools/cursors.win.cpp index a70420172..2c8e29558 100644 --- a/src/tools/cursors.win.cpp +++ b/src/tools/cursors.win.cpp @@ -5,7 +5,6 @@ #include #include "res_cursor.hpp" -extern sf::RenderWindow mainPtr; // This function adapted from static void GetMaskBitmaps(const sf::Image& srcImage, HBITMAP& hAndMaskBitmap, HBITMAP& hXorMaskBitmap) { diff --git a/src/tools/winutil.hpp b/src/tools/winutil.hpp index c0dffa020..9bc6a1eec 100644 --- a/src/tools/winutil.hpp +++ b/src/tools/winutil.hpp @@ -12,12 +12,15 @@ #include #include #include +#include #include #include #include "prefs.hpp" #include "mathutil.hpp" +sf::RenderWindow& mainPtr(); + char keyToChar(sf::Keyboard::Key key, bool isShift); void makeFrontWindow(sf::Window& win); diff --git a/src/tools/winutil.linux.cpp b/src/tools/winutil.linux.cpp index 433334a72..bd5d44c45 100644 --- a/src/tools/winutil.linux.cpp +++ b/src/tools/winutil.linux.cpp @@ -13,7 +13,6 @@ #include "dialogxml/dialogs/dialog.hpp" -extern sf::RenderWindow mainPtr; extern void showError(std::string str1, std::string str2, cDialog* parent = nullptr); extern void play_sound(snd_num_t which, sf::Time delay = sf::Time()); diff --git a/src/tools/winutil.mac.mm b/src/tools/winutil.mac.mm index a8469e7af..a90a96547 100644 --- a/src/tools/winutil.mac.mm +++ b/src/tools/winutil.mac.mm @@ -213,7 +213,6 @@ void adjust_window_for_menubar(int, unsigned int, unsigned int) { NSSavePanel* dlg_put_scen; NSSavePanel* dlg_put_game; NSSavePanel* dlg_put_rsrc; -extern sf::RenderWindow mainPtr; void init_fileio(){ dlg_get_scen = [NSOpenPanel openPanel]; @@ -256,7 +255,7 @@ void init_fileio(){ fs::path nav_get_scenario() { bool gotFile = [dlg_get_scen runModal] != NSFileHandlingPanelCancelButton; - makeFrontWindow(mainPtr); + makeFrontWindow(mainPtr()); if(gotFile) { return fs::path([[[dlg_get_scen URL] path] fileSystemRepresentation]); } @@ -270,7 +269,7 @@ void init_fileio(){ [dlg_put_scen setDirectoryURL:[NSURL fileURLWithPath:[NSString stringWithUTF8String: def.parent_path().c_str()]]]; } bool gotFile = [dlg_put_scen runModal] != NSFileHandlingPanelCancelButton; - makeFrontWindow(mainPtr); + makeFrontWindow(mainPtr()); if(gotFile) return fs::path([[[dlg_put_scen URL] path] fileSystemRepresentation]); return ""; @@ -278,7 +277,7 @@ void init_fileio(){ fs::path nav_get_party() { bool gotFile = [dlg_get_game runModal] != NSFileHandlingPanelCancelButton; - makeFrontWindow(mainPtr); + makeFrontWindow(mainPtr()); if(gotFile) return fs::path([[[dlg_get_game URL] path] fileSystemRepresentation]); return ""; @@ -291,7 +290,7 @@ void init_fileio(){ [dlg_put_game setDirectoryURL:[NSURL fileURLWithPath:[NSString stringWithUTF8String: def.parent_path().c_str()]]]; } bool gotFile = [dlg_put_game runModal] != NSFileHandlingPanelCancelButton; - makeFrontWindow(mainPtr); + makeFrontWindow(mainPtr()); if(gotFile) return fs::path([[[dlg_put_game URL] path] fileSystemRepresentation]); return ""; diff --git a/src/tools/winutil.win.cpp b/src/tools/winutil.win.cpp index cdebc3b4d..d3a1139ee 100644 --- a/src/tools/winutil.win.cpp +++ b/src/tools/winutil.win.cpp @@ -7,7 +7,6 @@ #include #include -extern sf::RenderWindow mainPtr; OPENFILENAMEA getParty, getScen, getRsrc, putParty, putScen, putRsrc; // TODO: I'm sure there's a better way to do this (maybe one that's keyboard layout agnostic) @@ -163,7 +162,7 @@ void init_fileio() { memset(&base_dlg, 0, sizeof(OPENFILENAMEA)); // Common values base_dlg.lStructSize = sizeof(OPENFILENAMEA); - base_dlg.hwndOwner = mainPtr.getSystemHandle(); + base_dlg.hwndOwner = mainPtr().getSystemHandle(); base_dlg.nFilterIndex = 1; base_dlg.Flags = OFN_DONTADDTORECENT | OFN_ENABLESIZING | OFN_EXPLORER | OFN_HIDEREADONLY | OFN_NOCHANGEDIR; getParty = getScen = getRsrc = putParty = putScen = putRsrc = base_dlg; @@ -296,7 +295,7 @@ fs::path nav_put_rsrc(std::initializer_list extensions, fs::path de void set_clipboard(std::string text) { if(text.empty()) return; - if(!OpenClipboard(mainPtr.getSystemHandle())) return; + if(!OpenClipboard(mainPtr().getSystemHandle())) return; HGLOBAL hData = (char*) GlobalAlloc(GMEM_MOVEABLE, text.length() + 1); char* data = (char*)GlobalLock(hData); std::copy(text.c_str(), text.c_str() + text.length(), data); @@ -351,7 +350,7 @@ void set_clipboard_img(sf::Image& img) { info->bV5BlueMask = 0x00ff0000; info->bV5AlphaMask = 0xff000000; std::copy_n(img.getPixelsPtr(), pxSize, reinterpret_cast(info + 1)); - if(!OpenClipboard(mainPtr.getSystemHandle())) { + if(!OpenClipboard(mainPtr().getSystemHandle())) { printErr("Error opening clipboard"); GlobalFree(data); return; @@ -450,7 +449,7 @@ ModalSession::~ModalSession() { int getMenubarHeight() { MENUBARINFO info; info.cbSize = sizeof(MENUBARINFO); - if(GetMenuBarInfo(mainPtr.getSystemHandle(), OBJID_MENU, 0, &info)) { + if(GetMenuBarInfo(mainPtr().getSystemHandle(), OBJID_MENU, 0, &info)) { return info.rcBar.bottom - info.rcBar.top; } else { return GetSystemMetrics(SM_CYMENU); @@ -473,5 +472,5 @@ void adjust_window_for_menubar(int mode, unsigned int width, unsigned int height } height += getMenubarHeight(); - mainPtr.setSize({ width, height }); + mainPtr().setSize({ width, height }); } diff --git a/test/catch.cpp b/test/catch.cpp index d8445d30e..a0d1033a8 100644 --- a/test/catch.cpp +++ b/test/catch.cpp @@ -6,7 +6,12 @@ // After this are some globals that are referenced from common code but not defined, and not used in the test cases #include "gfx/gfxsheets.hpp" #include "universe/universe.hpp" -sf::RenderWindow mainPtr; + +sf::RenderWindow& mainPtr() +{ + static sf::RenderWindow instance; + return instance; +} std::string scenario_temp_dir_name = "test_scenario"; cCustomGraphics spec_scen_g; cUniverse univ;