Change image resource type from sf::Image to sf::Texture

This includes an added optimization to the resource manager - it now uses unordered (hash) maps instead of ordered (tree) maps to keep track of loaded resources and paths, for the average constant lookup time.
This commit is contained in:
2015-10-05 23:57:42 -04:00
parent 17095e1760
commit 7f00d0c775
30 changed files with 261 additions and 406 deletions

BIN
rsrc/graphics/blank.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

View File

@@ -19,7 +19,7 @@ extern void finish_load_party();
extern void end_startup();
extern void post_load();
extern bool ae_loading, startup_loaded, All_Done, party_in_memory, finished_init;
extern bool ae_loading, All_Done, party_in_memory, finished_init;
extern eGameMode overall_mode;
extern cUniverse univ;
@@ -60,7 +60,7 @@ void set_up_apple_events(int, char*[]) {
ae_loading = true;
overall_mode = MODE_STARTUP;
} else finish_load_party();
if(overall_mode != MODE_STARTUP && startup_loaded)
if(overall_mode != MODE_STARTUP)
end_startup();
if(overall_mode != MODE_STARTUP)
post_load();

View File

@@ -1325,17 +1325,9 @@ static bool edit_party_event_filter(cDialog& me, std::string item_hit, eKeyMod)
return true;
}
extern bool pc_gworld_loaded;
void edit_party() {
bool munch_pc_graphic = false;
make_cursor_sword();
if(!pc_gworld_loaded) {
munch_pc_graphic = true;
pc_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("pcs"));
}
cDialog pcDialog("edit-party");
std::vector<std::string> buttons = {"done", "help"};
for(int i = 1; i <= 6; i++) {

View File

@@ -59,9 +59,6 @@ extern fs::path progDir;
cCustomGraphics spec_scen_g;
extern bool pc_gworld_loaded;
extern sf::Texture pc_gworld;
void finish_load_party(){
bool town_restore = univ.town.num < 200;
bool in_scen = univ.party.scen_name.length() > 0;
@@ -77,10 +74,6 @@ void finish_load_party(){
reload_startup();
draw_startup(0);
}
if(!pc_gworld_loaded) {
pc_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("pcs"));
pc_gworld_loaded = true;
}
overall_mode = MODE_STARTUP;
return;
}

View File

@@ -35,7 +35,7 @@ extern short stat_window;
extern bool give_delays;
extern eGameMode overall_mode;
extern short current_spell_range;
extern bool anim_onscreen,play_sounds,frills_on,startup_loaded,party_in_memory;
extern bool anim_onscreen,play_sounds,frills_on,party_in_memory;
extern bool flushingInput;
extern bool cartoon_happening, fog_lifted;
extern short anim_step;
@@ -90,36 +90,12 @@ char light_area[13][13];
char unexplored_area[13][13];
// Declare the graphics
sf::Texture status_gworld;
sf::Texture invenbtn_gworld;
sf::Texture vehicle_gworld;
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::Texture orig_text_bar_gworld, orig_item_stats_gworld, orig_pc_stats_gworld;
sf::Texture buttons_gworld;
sf::Texture items_gworld;
sf::Texture tiny_obj_gworld;
sf::Texture fields_gworld;
sf::Texture boom_gworld;
sf::Texture roads_gworld;
sf::RenderTexture map_gworld;
sf::Texture small_ter_gworld;
sf::Texture missiles_gworld;
sf::Texture dlogpics_gworld;
sf::Texture anim_gworld;
sf::Texture talkfaces_gworld;
sf::Texture pc_gworld;
sf::Texture monst_gworld[NUM_MONST_SHEETS];
sf::Texture terrain_gworld[NUM_TER_SHEETS];
// Startup graphics, will die when play starts
// TODO: The way this is done now, they won't; fix this
sf::Texture startup_gworld;
sf::Texture startup_button_orig;
sf::Texture anim_mess;
bool has_run_anim = false,currently_loading_graphics = false;
@@ -195,10 +171,10 @@ void adjust_window_mode() {
}
void init_startup() {
startup_loaded = true;
startup_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("startup"));
startup_button_orig.loadFromImage(*ResMgr::get<ImageRsrc>("startbut"));
anim_mess.loadFromImage(*ResMgr::get<ImageRsrc>("startanim"));
// Preload the main startup images
ResMgr::get<ImageRsrc>("startup");
ResMgr::get<ImageRsrc>("startbut");
ResMgr::get<ImageRsrc>("startanim");
}
void draw_startup(short but_type) {
@@ -207,9 +183,7 @@ void draw_startup(short but_type) {
r4 = {-1000,579,1000,2500};
short i;
if(!startup_loaded)
return;
sf::Texture& startup_gworld = *ResMgr::get<ImageRsrc>("startup");
to_rect = startup_from[0];
to_rect.offset(-13,5);
rect_draw_some_item(startup_gworld,startup_from[0],to_rect,ul);
@@ -233,9 +207,9 @@ void draw_startup_anim(bool advance) {
anim_from = anim_to;
anim_from.offset(-1,-4 + startup_anim_pos);
if(advance) startup_anim_pos = (startup_anim_pos + 1) % 542;
rect_draw_some_item(startup_button_orig,anim_size,startup_button[5],ul);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("startbut"),anim_size,startup_button[5],ul);
anim_to.offset(startup_button[5].left, startup_button[5].top);
rect_draw_some_item(anim_mess,anim_from,anim_to,ul,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("startanim"),anim_from,anim_to,ul,sf::BlendAlpha);
}
void draw_startup_stats() {
@@ -286,9 +260,12 @@ void draw_startup_stats() {
// Note that we assume it's a 1x1 graphic.
// PCs can't be larger than that, but we leave it to the scenario designer to avoid assigning larger graphics.
from_rect = get_monster_template_rect(pic, 0, 0);
rect_draw_some_item(monst_gworld[m_pic_index[pic].i / 20],from_rect,to_rect,ul,sf::BlendAlpha);
int which_sheet = m_pic_index[pic].i / 20;
sf::Texture& monst_gworld = *ResMgr::get<ImageRsrc>("monst" + std::to_string(1 + which_sheet));
rect_draw_some_item(monst_gworld,from_rect,to_rect,ul,sf::BlendAlpha);
} else {
from_rect = calc_rect(2 * (pic / 8), pic % 8);
sf::Texture& pc_gworld = *ResMgr::get<ImageRsrc>("pcs");
rect_draw_some_item(pc_gworld,from_rect,to_rect,ul,sf::BlendAlpha);
}
@@ -387,7 +364,7 @@ void draw_start_button(short 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(startup_gworld,from_rect,to_rect,ul);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("startup"),from_rect,to_rect,ul);
TextStyle style;
style.font = FONT_DUNGEON;
@@ -434,16 +411,11 @@ void arrow_button_click(rectangle button_rect) {
void reload_startup() {
if(startup_loaded)
return;
mini_map.setVisible(false);
map_visible = false;
mainPtr.setActive();
init_startup();
startup_loaded = true;
text_sbar->hide();
item_sbar->hide();
shop_sbar->hide();
@@ -452,14 +424,6 @@ void reload_startup() {
}
void end_startup() {
if(!startup_loaded)
return;
startup_gworld.create(1,1);
startup_button_orig.create(1,1);
anim_mess.create(1,1);
startup_loaded = false;
load_main_screen();
text_sbar->show();
@@ -467,8 +431,7 @@ void end_startup() {
}
static void loadImageToRenderTexture(sf::RenderTexture& tex, std::string imgName) {
sf::Texture temp_gworld;
temp_gworld.loadFromImage(*ResMgr::get<ImageRsrc>(imgName));
sf::Texture& temp_gworld = *ResMgr::get<ImageRsrc>(imgName);
rectangle texrect(temp_gworld);
tex.create(texrect.width(), texrect.height());
rect_draw_some_item(temp_gworld, texrect, tex, texrect, sf::BlendNone);
@@ -497,19 +460,14 @@ void Set_up_win () {
}
void load_main_screen() {
if(invenbtn_gworld.getSize().x > 0)
return;
invenbtn_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("invenbtns"));
// Preload the main game interface images
ResMgr::get<ImageRsrc>("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");
orig_pc_stats_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("statarea"));
orig_item_stats_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("inventory"));
orig_text_bar_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("textbar"));
buttons_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("buttons"));
ResMgr::get<ImageRsrc>("buttons");
}
void redraw_screen(int refresh) {
@@ -616,6 +574,7 @@ void draw_buttons(short mode) {
button_gw.create(266,38);
}
sf::Texture& buttons_gworld = *ResMgr::get<ImageRsrc>("buttons");
dest_rec = lg_rect;
bool bottom_half = false;
@@ -711,7 +670,7 @@ void draw_text_bar() {
void put_text_bar(std::string str) {
text_bar_gworld.setActive();
rect_draw_some_item(orig_text_bar_gworld, win_from_rects[4], text_bar_gworld, win_from_rects[4]);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("textbar"), win_from_rects[4], text_bar_gworld, win_from_rects[4]);
TextStyle style;
style.colour = sf::Color::White;
style.font = FONT_BOLD;
@@ -723,6 +682,7 @@ void put_text_bar(std::string str) {
win_draw_string(text_bar_gworld, to_rect, str, eTextMode::LEFT_TOP, style);
if(!monsters_going) {
sf::Texture& status_gworld = *ResMgr::get<ImageRsrc>("staticons");
to_rect.top -= 2;
to_rect.left = to_rect.right - 15;
to_rect.width() = 12;
@@ -990,7 +950,7 @@ void draw_terrain(short mode) {
// Draw top half of forcecages (this list is populated by draw_fields)
// TODO: Move into the above loop to eliminate global variable
for(location fc_loc : forcecage_locs)
Draw_Some_Item(fields_gworld,calc_rect(2,0),terrain_screen_gworld,fc_loc,1,0);
Draw_Some_Item(*ResMgr::get<ImageRsrc>("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});
for(text_label_t lbl : posted_labels)
@@ -1157,7 +1117,7 @@ static void init_trim_mask(std::unique_ptr<sf::Texture>& mask, rectangle src_rec
std::tie(dest_rect.top, dest_rect.bottom) = std::make_tuple(36 - dest_rect.top, 36 - dest_rect.bottom);
render.create(28, 36);
render.clear(sf::Color::White);
rect_draw_some_item(roads_gworld, src_rect, render, dest_rect);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("trim"), src_rect, render, dest_rect);
render.display();
mask.reset(new sf::Texture);
mask->create(28, 36);
@@ -1218,11 +1178,12 @@ void draw_trim(short q,short r,short which_trim,ter_num_t ground_ter) {
unsigned short pic = univ.scenario.ter_types[ground_ter].picture;
if(pic < 960){
from_gworld = &terrain_gworld[pic / 50];
int which_sheet = pic / 50;
from_gworld = ResMgr::get<ImageRsrc>("ter" + std::to_string(1 + which_sheet)).get();
pic %= 50;
from_rect.offset(28 * (pic % 10), 36 * (pic / 10));
}else if(pic < 1000){
from_gworld = &anim_gworld;
from_gworld = ResMgr::get<ImageRsrc>("teranim").get();
pic -= 960;
from_rect.offset(112 * (pic / 5),36 * (pic % 5));
}else{
@@ -1304,6 +1265,8 @@ void place_road(short q,short r,location where,bool here) {
{16,12,20,16}, // central spot
};
sf::Texture& roads_gworld = *ResMgr::get<ImageRsrc>("trim");
if(here){
to_rect = road_dest_rects[6];
to_rect.offset(13 + q * 28,13 + r * 36);
@@ -1479,7 +1442,7 @@ void boom_space(location where,short mode,short type,short damage,short sound) {
dest_rect.offset(win_to_rects[0].left,win_to_rects[0].top);
source_rect.offset(-store_rect.left + 28 * type,-store_rect.top);
rect_draw_some_item(boom_gworld,source_rect,dest_rect,ul,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("booms"),source_rect,dest_rect,ul,sf::BlendAlpha);
if(damage > 0 && dest_rect.right - dest_rect.left >= 28 && dest_rect.bottom - dest_rect.top >= 36) {
TextStyle style;
@@ -1558,10 +1521,11 @@ void draw_targets(location center) {
if(!univ.party.is_alive())
return;
sf::Texture& src_gworld = *ResMgr::get<ImageRsrc>("trim");
for(i = 0; i < 8; i++)
if((spell_targets[i].x != 120) && (point_onscreen(center,spell_targets[i]))) {
dest_rect = coord_to_rect(spell_targets[i].x - center.x + 4,spell_targets[i].y - center.y + 4);
rect_draw_some_item(roads_gworld,calc_rect(6,0),dest_rect,ul,sf::BlendAlpha);
rect_draw_some_item(src_gworld,calc_rect(6,0),dest_rect,ul,sf::BlendAlpha);
}
}

View File

@@ -18,6 +18,7 @@
#include "graphtool.hpp"
#include "mathutil.hpp"
#include "strdlog.hpp"
#include "restypes.hpp"
extern sf::RenderWindow mainPtr;
extern rectangle windRect;
@@ -26,15 +27,13 @@ extern bool give_delays;
extern bool cartoon_happening;
extern eGameMode overall_mode;
extern short current_spell_range;
extern bool anim_onscreen,play_sounds,frills_on,startup_loaded;
extern bool anim_onscreen,play_sounds,frills_on;
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 sf::Texture items_gworld,tiny_obj_gworld,pc_gworld,monst_gworld[NUM_MONST_SHEETS];
extern sf::Texture fields_gworld,anim_gworld,vehicle_gworld,terrain_gworld[NUM_TER_SHEETS];
extern std::queue<pending_special_type> special_queue;
extern location ul;
@@ -82,7 +81,8 @@ void draw_one_terrain_spot (short i,short j,short terrain_to_draw) {
if(terrain_to_draw >= 10000) { // force using a specific graphic
terrain_to_draw -= 10000;
source_gworld = &terrain_gworld[terrain_to_draw / 50];
int which_sheet = terrain_to_draw / 50;
source_gworld = ResMgr::get<ImageRsrc>("ter" + std::to_string(1 + which_sheet)).get();
terrain_to_draw %= 50;
source_rect = calc_rect(terrain_to_draw % 10, terrain_to_draw / 10);
anim_type = -1;
@@ -95,14 +95,15 @@ void draw_one_terrain_spot (short i,short j,short terrain_to_draw) {
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(univ.scenario.ter_types[terrain_to_draw].picture - 1000);
}
else if(univ.scenario.ter_types[terrain_to_draw].picture >= 960) { // animated
source_gworld = &anim_gworld;
source_gworld = ResMgr::get<ImageRsrc>("teranim").get();
terrain_to_draw = univ.scenario.ter_types[terrain_to_draw].picture;
source_rect = calc_rect(4 * ((terrain_to_draw - 960) / 5) + (anim_ticks % 4),(terrain_to_draw - 960) % 5);
anim_type = 0;
}
else {
terrain_to_draw = univ.scenario.ter_types[terrain_to_draw].picture;
source_gworld = &terrain_gworld[terrain_to_draw / 50];
int which_sheet = terrain_to_draw / 50;
source_gworld = ResMgr::get<ImageRsrc>("ter" + std::to_string(1 + which_sheet)).get();
terrain_to_draw %= 50;
source_rect = calc_rect(terrain_to_draw % 10, terrain_to_draw / 10);
anim_type = -1;
@@ -121,7 +122,6 @@ void draw_monsters() {
short width,height;
rectangle source_rect,to_rect;
location where_draw,store_loc;
short picture_wanted;
ter_num_t ter;
rectangle monst_rects[4][4] = {
{{0,0,36,28}},
@@ -140,6 +140,7 @@ void draw_monsters() {
for(j = 0; univ.party.out_c[i].what_monst.monst[j] == 0 && j < 7; j++);
short picture_wanted;
if(j == 7) univ.party.out_c[i].exists = false; // begin watch out
else {
picture_wanted = get_monst_picnum(univ.party.out_c[i].what_monst.monst[j]);
@@ -162,7 +163,9 @@ void draw_monsters() {
source_rect = get_monster_template_rect(picture_wanted,(univ.party.out_c[i].direction < 4) ? 0 : 1,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(monst_gworld[m_pic_index[picture_wanted].i/20], source_rect, terrain_screen_gworld,to_rect, sf::BlendAlpha);
int which_sheet = m_pic_index[picture_wanted].i / 20;
sf::Texture& monst_gworld = *ResMgr::get<ImageRsrc>("monst" + std::to_string(1 + which_sheet));
rect_draw_some_item(monst_gworld, source_rect, terrain_screen_gworld,to_rect, sf::BlendAlpha);
}
}
}
@@ -201,7 +204,9 @@ void draw_monsters() {
int pic_mode = (univ.town.monst[i].direction) < 4 ? 0 : 1;
pic_mode += (combat_posing_monster == i + 100) ? 10 : 0;
source_rect = get_monster_template_rect(this_monst, pic_mode, k);
Draw_Some_Item(monst_gworld[m_pic_index[this_monst].i/20], source_rect, terrain_screen_gworld, store_loc, 1, 0);
int which_sheet = m_pic_index[this_monst].i / 20;
sf::Texture& monst_gworld = *ResMgr::get<ImageRsrc>("monst" + std::to_string(1 + which_sheet));
Draw_Some_Item(monst_gworld, source_rect, terrain_screen_gworld, store_loc, 1, 0);
}
}
}
@@ -262,14 +267,15 @@ void draw_pcs(location center,short mode) {
if(combat_posing_monster == i)
mode += 10;
source_rect = get_monster_template_rect(need_pic, mode, 0);
from_gw = &monst_gworld[m_pic_index[need_pic].i / 20];
int which_sheet = m_pic_index[need_pic].i / 20;
from_gw = ResMgr::get<ImageRsrc>("monst" + std::to_string(1 + which_sheet)).get();
} else {
source_rect = calc_rect(2 * (pic / 8), pic % 8);
if(univ.party[i].direction >= 4)
source_rect.offset(28,0);
if(combat_posing_monster == i)
source_rect.offset(0,288);
from_gw = &pc_gworld;
from_gw = ResMgr::get<ImageRsrc>("pcs").get();
}
if(mode == 0) {
@@ -299,25 +305,16 @@ void draw_items(location where){
if(univ.town.items[i].variety != eItemType::NO_ITEM && univ.town.items[i].item_loc == where) {
if(univ.town.items[i].contained) continue;
if(party_can_see(where) >= 6) continue;
sf::Texture* src_gw;
to_rect = coord_to_rect(where_draw.x,where_draw.y);
if(univ.town.items[i].graphic_num >= 10000){
sf::Texture* src_gw;
graf_pos_ref(src_gw, from_rect) = spec_scen_g.find_graphic(univ.town.items[i].graphic_num - 10000, true);
to_rect = coord_to_rect(where_draw.x,where_draw.y);
rect_draw_some_item(*src_gw,from_rect,terrain_screen_gworld,to_rect,sf::BlendAlpha);
}else if(univ.town.items[i].graphic_num >= 1000){
sf::Texture* src_gw;
graf_pos_ref(src_gw, from_rect) = spec_scen_g.find_graphic(univ.town.items[i].graphic_num - 1000);
to_rect = coord_to_rect(where_draw.x,where_draw.y);
rect_draw_some_item(*src_gw,from_rect,terrain_screen_gworld,to_rect,sf::BlendAlpha);
}else{
from_rect = get_item_template_rect(univ.town.items[i].graphic_num);
to_rect = coord_to_rect(where_draw.x,where_draw.y);
if(univ.town.items[i].graphic_num >= 55) {
to_rect.inset(5,9);
rect_draw_some_item(tiny_obj_gworld, from_rect, terrain_screen_gworld, to_rect,sf::BlendAlpha);
}else
rect_draw_some_item(items_gworld, from_rect, terrain_screen_gworld, to_rect,sf::BlendAlpha);
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);
}
}
}
@@ -326,6 +323,7 @@ void draw_outd_boats(location center) {
location where_draw;
rectangle source_rect;
short i;
sf::Texture& vehicle_gworld = *ResMgr::get<ImageRsrc>("vehicle");
for(i = 0; i < univ.party.boats.size(); i++)
if((point_onscreen(center, univ.party.boats[i].loc)) && (univ.party.boats[i].exists) &&
@@ -349,6 +347,7 @@ void draw_town_boat(location center) {
location where_draw;
rectangle source_rect;
short i;
sf::Texture& vehicle_gworld = *ResMgr::get<ImageRsrc>("vehicle");
for(i = 0; i < univ.party.boats.size(); i++)
if((univ.party.boats[i].which_town == univ.town.num) &&
@@ -376,6 +375,7 @@ void draw_fields(location where){
if(!point_onscreen(center,where)) return;
if(party_can_see(where) >= 6) return;
location where_draw(4 + where.x - center.x, 4 + where.y - center.y);
sf::Texture& fields_gworld = *ResMgr::get<ImageRsrc>("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);
@@ -406,7 +406,7 @@ void draw_fields(location where){
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);
if(univ.town.is_fire_barr(where.x,where.y) || univ.town.is_force_barr(where.x,where.y))
Draw_Some_Item(anim_gworld,calc_rect(8 + (anim_ticks % 4),4),terrain_screen_gworld,where_draw,1,0);
Draw_Some_Item(*ResMgr::get<ImageRsrc>("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);
if(univ.town.is_sm_blood(where.x,where.y))
@@ -465,12 +465,13 @@ void draw_party_symbol(location center) {
if(univ.party.direction >= 4)
mode++;
source_rect = get_monster_template_rect(need_pic, mode, 0);
from_gw = &monst_gworld[m_pic_index[need_pic].i / 20];
int which_sheet = m_pic_index[need_pic].i / 20;
from_gw = ResMgr::get<ImageRsrc>("monst" + std::to_string(1 + which_sheet)).get();
} else {
source_rect = calc_rect(2 * (pic / 8), pic % 8);
if(univ.party.direction >= 4)
source_rect.offset(28,0);
from_gw = &pc_gworld;
from_gw = ResMgr::get<ImageRsrc>("pcs").get();
}
ter_num_t ter = 0;
if(is_out())
@@ -486,10 +487,10 @@ void draw_party_symbol(location center) {
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(vehicle_gworld, calc_rect(i,0), terrain_screen_gworld, target, 1, 0);
Draw_Some_Item(*ResMgr::get<ImageRsrc>("vehicle"), calc_rect(i,0), terrain_screen_gworld, target, 1, 0);
}else {
i = univ.party.direction > 3;
Draw_Some_Item(vehicle_gworld, calc_rect(i + 2, 1), terrain_screen_gworld, target, 1, 0);
Draw_Some_Item(*ResMgr::get<ImageRsrc>("vehicle"), calc_rect(i + 2, 1), terrain_screen_gworld, target, 1, 0);
}
}
@@ -507,27 +508,6 @@ rectangle get_monster_template_rect (pic_num_t picture_wanted,short mode,short w
return calc_rect(2 * (picture_wanted / 10) + adj, picture_wanted % 10);
}
// Returns rect for drawing an item, if num < 25, rect is in big item template,
// otherwise in small item template
rectangle get_item_template_rect (short type_wanted) {
rectangle store_rect;
if(type_wanted < 45) {
store_rect.top = (type_wanted / 5) * BITMAP_HEIGHT;
store_rect.bottom = store_rect.top + BITMAP_HEIGHT;
store_rect.left = (type_wanted % 5) * BITMAP_WIDTH;
store_rect.right = store_rect.left + BITMAP_WIDTH;
}
else {
store_rect.top = (type_wanted / 10) * 18;
store_rect.bottom = store_rect.top + 18;
store_rect.left = (type_wanted % 10) * 18;
store_rect.right = store_rect.left + 18;
}
return store_rect;
}
// Is this a fluid that gets shore plopped down on it?
bool is_fluid(ter_num_t ter_type) {
// if(((ter_type >= 71) && (ter_type <= 76)) || (ter_type == 90))

View File

@@ -5,6 +5,7 @@
#include "pict.hpp"
#include "location.hpp"
#include "simpletypes.hpp"
#include "graphtool.hpp"
void draw_one_terrain_spot (short i,short j,short terrain_to_draw);
void draw_monsters();
@@ -14,7 +15,6 @@ void draw_outd_boats(location center);
void draw_town_boat(location center) ;
void draw_party_symbol(location center);
rectangle get_monster_template_rect (pic_num_t type_wanted,short mode,short which_part) ;
rectangle get_item_template_rect (short type_wanted);
bool is_fluid(ter_num_t ter_type);
bool is_shore(ter_num_t ter_type);
bool is_wall(ter_num_t ter_type);
@@ -22,6 +22,7 @@ bool is_ground(ter_num_t ter_type);
char get_fluid_trim(location where,ter_num_t ter_type);
void check_if_monst_seen(unsigned short m_num, location monst_loc);
void play_ambient_sound();
graf_pos calc_item_rect(int num,rectangle& to_rect);
void draw_items(location where);
void draw_fields(location where);

View File

@@ -530,9 +530,6 @@ static bool display_item_event_filter(cDialog& me, std::string id, size_t& first
return true;
}
// TODO: Move this to a more appropriate place
bool pc_gworld_loaded = false;
// Returns true if a theft committed
//pc_num; // < 6 - this pc only 6 - any pc
//short mode; // 0 - adjacent 1 - all in sight
@@ -574,9 +571,6 @@ bool show_get_items(std::string titleText, std::vector<cItem*>& itemRefs, short
using namespace std::placeholders;
size_t first_item = 0;
if(!pc_gworld_loaded)
pc_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("pcs"));
cDialog itemDialog("get-items");
auto handler = std::bind(display_item_event_filter, _1, _2, std::ref(first_item), std::ref(pc_getting), std::ref(itemRefs), overload);
itemDialog.attachClickHandlers(handler, {"done", "up", "down"});

View File

@@ -40,7 +40,7 @@ sf::RenderWindow mainPtr;
short had_text_freeze = 0,num_fonts;
bool skip_boom_delay = false;
bool first_startup_update = true;
bool diff_depth_ok = false,first_sound_played = false,spell_forced = false,startup_loaded = false;
bool diff_depth_ok = false,first_sound_played = false,spell_forced = false;
bool party_in_memory = false;
std::shared_ptr<cScrollbar> text_sbar, item_sbar, shop_sbar;
std::shared_ptr<cButton> done_btn, help_btn;

View File

@@ -318,7 +318,7 @@ LRESULT CALLBACK menuProc(HWND handle, UINT message, WPARAM wParam, LPARAM lPara
#include "boe.actions.hpp"
#include "boe.fileio.hpp"
extern bool ae_loading, finished_init, startup_loaded;
extern bool ae_loading, finished_init;
void set_up_apple_events(int argc, char* argv[]) {
if(argc > 1) {
if(!load_party(argv[1], univ))
@@ -328,7 +328,7 @@ void set_up_apple_events(int argc, char* argv[]) {
ae_loading = true;
overall_mode = MODE_STARTUP;
} else finish_load_party();
if(overall_mode != MODE_STARTUP && startup_loaded)
if(overall_mode != MODE_STARTUP)
end_startup();
if(overall_mode != MODE_STARTUP)
post_load();

View File

@@ -23,6 +23,7 @@
#include "shop.hpp"
#include "spell.hpp"
#include "button.hpp"
#include "restypes.hpp"
short monsters_faces[190] = {
0,1,2,3,4,5,6,7,8,9,
@@ -52,10 +53,7 @@ extern sf::RenderWindow mainPtr;
extern short which_combat_type;
extern eGameMode overall_mode;
extern bool play_sounds,boom_anim_active;
extern sf::Texture fields_gworld,boom_gworld,missiles_gworld,invenbtn_gworld;
extern sf::Texture tiny_obj_gworld, items_gworld, talkfaces_gworld;
extern sf::RenderTexture terrain_screen_gworld;
extern sf::Texture bg_gworld;
extern rectangle sbar_rect,item_sbar_rect,shop_sbar_rect;
extern std::shared_ptr<cScrollbar> text_sbar,item_sbar,shop_sbar;
extern std::shared_ptr<cButton> done_btn, help_btn;
@@ -412,7 +410,7 @@ void do_missile_anim(short num_steps,location missile_origin,short sound_num) {
play_sound(-1 * sound_num);
sf::Texture& missiles_gworld = *ResMgr::get<ImageRsrc>("missiles");
// Now, at last, launch missile
for(t = 0; t < num_steps; t++) {
draw_terrain();
@@ -581,6 +579,7 @@ void do_explosion_anim(short /*sound_num*/,short special_draw, short snd) {
play_sound(-1 * snd_num);
}
sf::Texture& boom_gworld = *ResMgr::get<ImageRsrc>("booms");
// Now, at last, do explosion
for(t = (special_draw == 2) ? 6 : 0; t < ((special_draw == 1) ? 6 : 11); t++) { // t goes up to 10 to make sure screen gets cleaned up
draw_terrain();
@@ -638,13 +637,14 @@ void click_shop_rect(rectangle area_rect) {
}
static graf_pos calc_item_rect(int num,rectangle& to_rect) {
graf_pos calc_item_rect(int num,rectangle& to_rect) {
rectangle from_rect = {0,0,18,18};
sf::Texture *from_gw = &tiny_obj_gworld;
sf::Texture *from_gw;
if(num < 55) {
from_gw = &items_gworld;
from_gw = ResMgr::get<ImageRsrc>("objects").get();
from_rect = calc_rect(num % 5, num / 5);
}else{
from_gw = ResMgr::get<ImageRsrc>("tinyobj").get();
to_rect.inset(5,9);
from_rect.offset(18 * (num % 10), 18 * (num / 10));
}
@@ -702,7 +702,7 @@ void draw_shop_graphics(bool pressed,rectangle clip_area_rect) {
i = active_shop.getFace();
rectangle from_rect = {0,0,32,32};
from_rect.offset(32 * (i % 10),32 * (i / 10));
rect_draw_some_item(talkfaces_gworld, from_rect, talk_gworld, face_rect);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("talkportraits"), from_rect, talk_gworld, face_rect);
}
@@ -750,6 +750,7 @@ void draw_shop_graphics(bool pressed,rectangle clip_area_rect) {
style.colour = c[4];
else style.colour = sf::Color::Black;
sf::Texture& invenbtn_gworld = *ResMgr::get<ImageRsrc>("invenbtns");
// Place all the items
for(i = 0; i < 8; i++) {
current_pos = i + shop_sbar->getPosition();

View File

@@ -63,3 +63,4 @@ void click_talk_rect(word_rect_t word);
void place_talk_str(std::string str_to_place,std::string str_to_place2,short color,rectangle c_rect);
short scan_for_response(const char *str);
void refresh_talking();
graf_pos calc_item_rect(int num,rectangle& to_rect);

View File

@@ -2299,20 +2299,13 @@ eAlchemy alch_choice(short pc_num) {
return chooseAlchemy.getResult<eAlchemy>();
}
extern bool pc_gworld_loaded;
// mode ... 0 - create 1 - created
bool pick_pc_graphic(short pc_num,short mode,cDialog* parent) {
bool munch_pc_graphic = false;
store_graphic_pc_num = pc_num;
store_graphic_mode = mode;
make_cursor_sword();
if(!pc_gworld_loaded) {
munch_pc_graphic = true;
pc_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("pcs"));
}
cPictChoice pcPic(0,35,PIC_PC,parent);
// Customize it for this special case of choosing a PC graphic
dynamic_cast<cPict&>(pcPic->getControl("mainpic")).setPict(7);

View File

@@ -142,8 +142,6 @@ void handle_splash_events() {
}
void show_logo() {
sf::Texture pict_to_draw;
rectangle whole_window,from_rect;
rectangle logo_from = {0,0,350,350};
@@ -152,7 +150,7 @@ void show_logo() {
whole_window = rectangle(mainPtr);
logo_from.offset((whole_window.right - logo_from.right) / 2,(whole_window.bottom - logo_from.bottom) / 2);
pict_to_draw.loadFromImage(*ResMgr::get<ImageRsrc>("spidlogo"));
sf::Texture& pict_to_draw = *ResMgr::get<ImageRsrc>("spidlogo");
from_rect = rectangle(pict_to_draw);
play_sound(-95);
@@ -170,13 +168,12 @@ void show_logo() {
}
void plop_fancy_startup() {
sf::Texture pict_to_draw;
rectangle whole_window,from_rect;
rectangle intro_from = {0,0,480,640};
whole_window = rectangle(mainPtr);
sf::Time delay = time_in_ticks(220);
intro_from.offset((whole_window.right - intro_from.right) / 2,(whole_window.bottom - intro_from.bottom) / 2);
pict_to_draw.loadFromImage(*ResMgr::get<ImageRsrc>("startsplash"));
sf::Texture& pict_to_draw = *ResMgr::get<ImageRsrc>("startsplash");
play_sound(-22);
sf::Clock timer;

View File

@@ -53,9 +53,7 @@ extern location source_locs[6];
extern location dest_locs[40] ;
extern location center;
extern sf::Texture tiny_obj_gworld,invenbtn_gworld,status_gworld,orig_item_stats_gworld,orig_pc_stats_gworld;
extern cCustomGraphics spec_scen_g;
extern sf::Texture pc_gworld, monst_gworld[NUM_MONST_SHEETS];
extern sf::RenderTexture pc_stats_gworld, item_stats_gworld, text_area_gworld;
extern sf::RenderTexture terrain_screen_gworld;
@@ -80,7 +78,6 @@ extern short store_selling_values[8];
extern short combat_posing_monster, current_working_monster; // 0-5 PC 100 + x - monster x
extern bool supressing_some_spaces;
extern location ok_space[4];
extern sf::Texture bg_gworld;
extern std::map<eStatus, std::pair<short, short>> statIcons;
// Draws the pc area in upper right
@@ -97,7 +94,8 @@ void put_pc_screen() {
pc_stats_gworld.setActive();
// First clean up gworld with pretty patterns
rect_draw_some_item(orig_pc_stats_gworld, rectangle(orig_pc_stats_gworld), pc_stats_gworld, rectangle(pc_stats_gworld));
sf::Texture& orig = *ResMgr::get<ImageRsrc>("statarea");
rect_draw_some_item(orig, rectangle(orig), pc_stats_gworld, rectangle(pc_stats_gworld));
tileImage(pc_stats_gworld, erase_rect,bg[6]);
TextStyle style;
@@ -120,6 +118,7 @@ void put_pc_screen() {
win_draw_string(pc_stats_gworld,day_rect[0],std::to_string(univ.party.calc_day()),eTextMode::WRAP,style);
style.colour = sf::Color::Black;
sf::Texture& invenbtn_gworld = *ResMgr::get<ImageRsrc>("invenbtns");
for(i = 0; i < 6; i++) {
if(univ.party[i].main_status != eMainStatus::ABSENT) {
for(j = 0; j < 5; j++)
@@ -230,7 +229,8 @@ void put_item_screen(short screen_num) {
item_stats_gworld.setActive();
// First clean up gworld with pretty patterns
rect_draw_some_item(orig_item_stats_gworld, rectangle(orig_item_stats_gworld), item_stats_gworld, rectangle(item_stats_gworld));
sf::Texture& orig = *ResMgr::get<ImageRsrc>("inventory");
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
@@ -431,6 +431,7 @@ void place_buy_button(short position,short pc_num,short item_num) {
return;
}
if(item_area_button_active[position][5]) {
sf::Texture& invenbtn_gworld = *ResMgr::get<ImageRsrc>("invenbtns");
store_selling_values[position] = val_to_place;
dest_rect = item_buttons[position][5];
dest_rect.right = dest_rect.left + 30;
@@ -467,9 +468,10 @@ void place_item_button(short which_button_to_put,short which_slot,short which_bu
graf_pos_ref(src_gw, from_rect) = spec_scen_g.find_graphic(extra_val - 1000);
rect_draw_some_item(*src_gw, from_rect, item_stats_gworld, to_rect,sf::BlendAlpha);
}
else rect_draw_some_item(tiny_obj_gworld, from_rect, item_stats_gworld, to_rect, sf::BlendAlpha);
else rect_draw_some_item(*ResMgr::get<ImageRsrc>("tinyobj"), from_rect, item_stats_gworld, to_rect, sf::BlendAlpha);
return;
}
sf::Texture& invenbtn_gworld = *ResMgr::get<ImageRsrc>("invenbtns");
if(which_button_to_put < 4) { // this means put a regular item button
item_area_button_active[which_slot][which_button_position] = true;
rect_draw_some_item(invenbtn_gworld, item_buttons_from[which_button_to_put], item_stats_gworld, item_buttons[which_slot][which_button_position], sf::BlendAlpha);
@@ -508,6 +510,7 @@ void place_item_bottom_buttons() {
style.font = FONT_BOLD;
style.colour = sf::Color::Yellow;
sf::Texture& invenbtn_gworld = *ResMgr::get<ImageRsrc>("invenbtns");
for(i = 0; i < 6; i++) {
if(univ.party[i].main_status == eMainStatus::ALIVE) {
item_bottom_button_active[i] = true;
@@ -525,10 +528,11 @@ void place_item_bottom_buttons() {
pic_num_t need_pic = pic - 100;
int mode = 0;
pc_from_rect = get_monster_template_rect(need_pic, mode, 0);
from_gw = &monst_gworld[m_pic_index[need_pic].i / 20];
int which_sheet = m_pic_index[need_pic].i / 20;
from_gw = ResMgr::get<ImageRsrc>("monst" + std::to_string(1 + which_sheet)).get();
} else {
pc_from_rect = calc_rect(2 * (pic / 8), pic % 8);
from_gw = &pc_gworld;
from_gw = ResMgr::get<ImageRsrc>("pcs").get();
}
to_rect.inset(2,2);
rect_draw_some_item(*from_gw, pc_from_rect, item_stats_gworld, to_rect, sf::BlendAlpha);
@@ -661,6 +665,7 @@ void draw_pc_effects(short pc) {
return;
univ.party[pc].status[eStatus::HASTE_SLOW]; // This just makes sure it exists in the map, without changing its value if it does
sf::Texture& status_gworld = *ResMgr::get<ImageRsrc>("staticons");
for(auto next : univ.party[pc].status) {
short placedIcon = -1;
if(next.first == eStatus::POISON && next.second > 4) placedIcon = 1;

View File

@@ -27,6 +27,7 @@
#include "strdlog.hpp"
#include "fileio.hpp"
#include "winutil.hpp"
#include "restypes.hpp"
extern short stat_window,store_spell_target,which_combat_type,current_pc,combat_active_pc;
extern eGameMode overall_mode;
@@ -43,12 +44,9 @@ extern location hor_vert_place[14];
extern location diag_place[14];
extern location golem_m_locs[16];
extern cUniverse univ;
extern sf::Texture anim_gworld;
extern sf::Texture terrain_gworld[NUM_TER_SHEETS];
extern cCustomGraphics spec_scen_g;
bool need_map_full_refresh = true,forcing_map_button_redraw = false;
extern sf::RenderTexture map_gworld;
extern sf::Texture small_ter_gworld;
// In the 0..65535 range, this colour was {65535,65535,52428}
sf::Color parchment = {255,255,205};
@@ -1422,6 +1420,7 @@ void draw_map(bool need_refresh) {
else out_mode = false;
// TODO: It could be possible to draw the entire map here and then only refresh if a spot actually changes terrain type
sf::Texture& small_ter_gworld = *ResMgr::get<ImageRsrc>("termap");
for(where.x = redraw_rect.left; where.x < redraw_rect.right; where.x++)
for(where.y = redraw_rect.top; where.y < redraw_rect.bottom; where.y++) {
draw_rect = orig_draw_rect;
@@ -1464,9 +1463,10 @@ void draw_map(bool need_refresh) {
} else if(drawLargeIcon) {
if(pic >= 960) {
custom_from = calc_rect(4 * ((pic - 960) / 5),(pic - 960) % 5);
rect_draw_some_item(anim_gworld, custom_from, map_gworld, draw_rect);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("teranim"), custom_from, map_gworld, draw_rect);
} else {
sf::Texture* src_gw = &terrain_gworld[pic / 50];
int which_sheet = pic / 50;
sf::Texture* src_gw = ResMgr::get<ImageRsrc>("ter" + std::to_string(1 + which_sheet)).get();
pic %= 50;
custom_from = calc_rect(pic % 10, pic / 10);
rect_draw_some_item(*src_gw, custom_from, map_gworld, draw_rect);
@@ -1481,9 +1481,8 @@ void draw_map(bool need_refresh) {
}
if(is_out() ? univ.out->roads[where.x][where.y] : univ.town.is_road(where.x,where.y)) {
extern sf::Texture roads_gworld;
draw_rect.inset(1,1);
rect_draw_some_item(roads_gworld,{8,112,12,116},map_gworld,draw_rect);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("trim"),{8,112,12,116},map_gworld,draw_rect);
}
}
}

View File

@@ -70,7 +70,7 @@ void cButton::draw(){
to_rect.right = to_rect.left + 14;
to_rect.bottom = to_rect.top + 10;
}
rect_draw_some_item(buttons[btnGW[type]],from_rect,*inWindow,to_rect,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::get<ImageRsrc>(buttons[btnGW[type]]),from_rect,*inWindow,to_rect,sf::BlendAlpha);
style.colour = sf::Color::Black;
style.lineHeight = 8;
eTextMode textMode = eTextMode::CENTRE;
@@ -265,21 +265,18 @@ size_t cButton::btnGW[14] = {
5, // BTN_LED
};
sf::Texture cButton::buttons[7];
rectangle cButton::btnRects[13][2];
std::string cButton::buttons[7] {
"dlogbtnsm",
"dlogbtnmed",
"dlogbtnlg",
"dlogbtntall",
"dlogbtnhelp",
"dlogbtnled",
"dlgbtnred",
};
void cButton::init(){
static const char*const buttonFiles[7] = {
"dlogbtnsm",
"dlogbtnmed",
"dlogbtnlg",
"dlogbtntall",
"dlogbtnhelp",
"dlogbtnled",
"dlgbtnred"
};
for(int i = 0; i < 7; i++)
buttons[i].loadFromImage(*ResMgr::get<ImageRsrc>(buttonFiles[i]));
btnRects[BTN_SM][0] = {0,0,23,23};
btnRects[BTN_REG][0] = {0,0,23,63};
btnRects[BTN_LEFT][0] = {23,0,46,63};
@@ -379,7 +376,7 @@ void cLed::draw(){
to_rect = frame;
to_rect.right = to_rect.left + 14;
to_rect.bottom = to_rect.top + 10;
rect_draw_some_item(buttons[btnGW[BTN_LED]],from_rect,*inWindow,to_rect);
rect_draw_some_item(*ResMgr::get<ImageRsrc>(buttons[btnGW[BTN_LED]]),from_rect,*inWindow,to_rect);
style.colour = textClr;
to_rect.right = frame.right;
to_rect.left = frame.left + 18; // Possibly could be 20

View File

@@ -98,8 +98,8 @@ protected:
sf::Color textClr;
/// The index in buttons of the texture for each button type.
static size_t btnGW[14];
/// The textures that hold the graphics for the buttons.
static sf::Texture buttons[7];
/// The names of the textures that hold the graphics for the buttons.
static std::string buttons[7];
};
/// A LED button that can be either on or off.

View File

@@ -633,16 +633,12 @@ std::shared_ptr<sf::Texture> cPict::getSheet(eSheetType type, size_t n) {
case NUM_SHEET_TYPES:
break;
case SHEET_TER:
if(n >= NUM_TER_SHEETS)
return nullptr;
sout << "ter" << n + 1;
break;
case SHEET_TER_ANIM:
sout << "teranim";
break;
case SHEET_MONST:
if(n >= NUM_MONST_SHEETS)
return nullptr;
sout << "monst" << n + 1;
break;
case SHEET_DLOG:
@@ -715,9 +711,7 @@ std::shared_ptr<sf::Texture> cPict::getSheet(eSheetType type, size_t n) {
sout << "sheet" << n;
}
}
std::shared_ptr<sf::Texture> sheet(new sf::Texture);
sheet->loadFromImage(*ResMgr::get<ImageRsrc>(sout.str()));
return sheet;
return ResMgr::get<ImageRsrc>(sout.str());
}
void cPict::draw(){

View File

@@ -11,15 +11,16 @@
#include "graphtool.hpp"
#include "mathutil.hpp"
sf::Texture cScrollbar::scroll_gw[NUM_STYLES];
std::string cScrollbar::scroll_textures[NUM_STYLES] = {
"dlogscrollwh",
"dlogscrollled",
};
cScrollbar::cScrollbar(cDialog& parent) : cControl(CTRL_SCROLL, parent), pos(0), max(0), pgsz(10) {}
cScrollbar::cScrollbar(sf::RenderWindow& parent) : cControl(CTRL_SCROLL, parent), pos(0), max(0), pgsz(10) {}
void cScrollbar::init() {
scroll_gw[0].loadFromImage(*ResMgr::get<ImageRsrc>("dlogscrollwh"));
scroll_gw[1].loadFromImage(*ResMgr::get<ImageRsrc>("dlogscrollled"));
}
bool cScrollbar::isClickable(){
@@ -199,7 +200,8 @@ void cScrollbar::draw_horizontal() {
draw_rect.width() = btn_size;
if(depressed && pressedPart == PART_UP)
from_rect = up_rect[style][HORZ_PRESSED];
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
sf::Texture scroll_gw = *ResMgr::get<ImageRsrc>(scroll_textures[style]);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
if(pos > 0) {
from_rect = bar_rect[style][HORZ];
int left = draw_rect.right, width = pos * (bar_width - btn_size) / max;
@@ -208,7 +210,7 @@ void cScrollbar::draw_horizontal() {
draw_rect.left = left;
while(draw_rect.left - left < width) {
draw_rect.right = draw_rect.left + btn_size;
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
draw_rect.left = draw_rect.right;
}
draw_rect.right = left + width;
@@ -219,7 +221,7 @@ void cScrollbar::draw_horizontal() {
from_rect = thumb_rect[style][HORZ];
if(depressed && pressedPart == PART_THUMB)
from_rect = thumb_rect[style][HORZ_PRESSED];
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
}
if(pos < max || max == 0) {
from_rect = bar_rect[style][HORZ];
@@ -235,12 +237,12 @@ void cScrollbar::draw_horizontal() {
clip_rec.left = left;
clip_rec.right = draw_rect.right;
clip_rect(*inWindow, clip_rec);
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
undo_clip(*inWindow);
draw_rect.left += btn_size;
while(draw_rect.left < right) {
draw_rect.right = draw_rect.left + btn_size;
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
draw_rect.left = draw_rect.right;
}
draw_rect.right = right;
@@ -250,7 +252,7 @@ void cScrollbar::draw_horizontal() {
from_rect = down_rect[style][HORZ];
if(depressed && pressedPart == PART_DOWN)
from_rect = down_rect[style][HORZ_PRESSED];
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
}
void cScrollbar::draw_vertical() {
@@ -261,7 +263,8 @@ void cScrollbar::draw_vertical() {
draw_rect.height() = btn_size;
if(depressed && pressedPart == PART_UP)
from_rect = up_rect[style][VERT_PRESSED];
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
sf::Texture scroll_gw = *ResMgr::get<ImageRsrc>(scroll_textures[style]);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
if(pos > 0) {
from_rect = bar_rect[style][VERT];
int top = draw_rect.bottom, height = pos * (bar_height - btn_size) / max;
@@ -270,7 +273,7 @@ void cScrollbar::draw_vertical() {
draw_rect.top = top;
while(draw_rect.top - top < height) {
draw_rect.bottom = draw_rect.top + btn_size;
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
draw_rect.top = draw_rect.bottom;
}
draw_rect.bottom = top + height;
@@ -281,7 +284,7 @@ void cScrollbar::draw_vertical() {
from_rect = thumb_rect[style][VERT];
if(depressed && pressedPart == PART_THUMB)
from_rect = thumb_rect[style][VERT_PRESSED];
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
}
if(pos < max || max == 0) {
from_rect = bar_rect[style][VERT];
@@ -297,12 +300,12 @@ void cScrollbar::draw_vertical() {
clip_rec.top = top;
clip_rec.bottom = draw_rect.bottom;
clip_rect(*inWindow, clip_rec);
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
undo_clip(*inWindow);
draw_rect.top += btn_size;
while(draw_rect.top < bottom) {
draw_rect.bottom = draw_rect.top + btn_size;
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
draw_rect.top = draw_rect.bottom;
}
draw_rect.bottom = bottom;
@@ -312,7 +315,7 @@ void cScrollbar::draw_vertical() {
from_rect = down_rect[style][VERT];
if(depressed && pressedPart == PART_DOWN)
from_rect = down_rect[style][VERT_PRESSED];
rect_draw_some_item(scroll_gw[style], from_rect, *inWindow, draw_rect);
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
}
void cScrollbar::draw() {

View File

@@ -44,7 +44,7 @@ class cScrollbar : public cControl {
} pressedPart;
eScrollStyle style = SCROLL_WHITE;
bool vert = true;
static sf::Texture scroll_gw[NUM_STYLES];
static std::string scroll_textures[NUM_STYLES];
static const rectangle up_rect[NUM_STYLES][4], down_rect[NUM_STYLES][4], bar_rect[NUM_STYLES][4], thumb_rect[NUM_STYLES][4];
void draw_vertical(), draw_horizontal();
public:

View File

@@ -19,11 +19,8 @@ extern bool play_sounds,party_in_scen,scen_items_loaded;
extern fs::path file_in_mem;
extern short store_flags[3];
extern sf::Texture button_num_gworld,bg_gworld;
extern short current_active_pc;
sf::Texture title_gworld,icon_gworld,pc_gworld,dlogpics_gworld;
sf::Texture buttons_gworld,invenbtn_gworld,status_gworld;
rectangle whole_win_rect = {0,0,440,590};
extern rectangle pc_area_buttons[6][4] ; // 0 - whole 1 - pic 2 - name 3 - stat strs 4,5 - later
extern rectangle item_string_rects[24][4]; // 0 - name 1 - drop 2 - id 3 -
@@ -49,10 +46,7 @@ short store_page_on,store_num_i;
rectangle ed_buttons_from[2] = {{0,0,57,57},{0,57,57,114}};
short current_pressed_button = -1;
cCustomGraphics spec_scen_g; // not actually needed; just here to silence compiler because it's referenced in fileio.h
// (actually, it WILL be needed eventually; the same is true about most of the rest of these.)
sf::Texture items_gworld,tiny_obj_gworld,fields_gworld,roads_gworld,boom_gworld,missiles_gworld;
sf::Texture monst_gworld[NUM_MONST_SHEETS],terrain_gworld[NUM_TER_SHEETS],anim_gworld,talkfaces_gworld;
sf::Texture vehicle_gworld, small_ter_gworld;
// (actually, it WILL be needed eventually)
void init_main_buttons() {
@@ -191,24 +185,20 @@ void init_main_buttons() {
}
void Set_up_win () {
title_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("pcedtitle"));
icon_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("icon"));
invenbtn_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("invenbtns"));
status_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("staticons"));
dlogpics_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("dlogpics"));
buttons_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("pcedbuttons"));
pc_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("pcs"));
for(int i = 0; i < NUM_MONST_SHEETS; i++) {
std::string id = "monst" + std::to_string(i + 1);
monst_gworld[i].loadFromImage(*ResMgr::get<ImageRsrc>(id));
}
// Preload the main PC editor interface images
ResMgr::get<ImageRsrc>("pcedtitle");
ResMgr::get<ImageRsrc>("icon");
ResMgr::get<ImageRsrc>("invenbtns");
ResMgr::get<ImageRsrc>("staticons");
ResMgr::get<ImageRsrc>("dlogpics");
ResMgr::get<ImageRsrc>("pcedbuttons");
ResMgr::get<ImageRsrc>("pcs");
}
static void draw_main_screen();
static void display_party();
static void draw_items();
void redraw_screen() {
draw_main_screen();
display_party();
@@ -238,10 +228,12 @@ void draw_main_screen() {
tileImage(mainPtr,whole_win_rect,bg[12]); // fill whole window with background texture
sf::Texture& icon_gworld = *ResMgr::get<ImageRsrc>("icon");
dest_rec = source_rect = rectangle(icon_gworld);
dest_rec.offset(23, 16);
rect_draw_some_item(icon_gworld,source_rect,mainPtr,dest_rec);
sf::Texture& title_gworld = *ResMgr::get<ImageRsrc>("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);
@@ -340,6 +332,7 @@ void draw_items() {
frame_dlog_rect(mainPtr,name_rect); // draw the frame
return; // If PC is dead, it has no items
}
sf::Texture& invenbtn_gworld = *ResMgr::get<ImageRsrc>("invenbtns");
for(i = 0; i < 24; i++) // Loop through items and draw each
if(univ.party[current_active_pc].items[i].variety != eItemType::NO_ITEM) { // i.e. does item exist
std::string to_draw = std::to_string(i + 1) + ". ";
@@ -381,6 +374,7 @@ void display_party() {
win_draw_string(mainPtr,no_party_rect,"No party loaded.",eTextMode::WRAP,style);
}
else {
sf::Texture& buttons_gworld = *ResMgr::get<ImageRsrc>("pcedbuttons");
from_rect = pc_info_rect;
from_rect.top = from_rect.bottom - 11;
if(!party_in_scen)
@@ -410,10 +404,11 @@ void display_party() {
pic_num_t need_pic = pic - 100;
pic_num_t picture_wanted = m_pic_index[need_pic].i % 20;
from_rect = calc_rect(2 * (picture_wanted / 10), picture_wanted % 10);
from_gw = &monst_gworld[m_pic_index[need_pic].i / 20];
int which_sheet = m_pic_index[need_pic].i / 20;
from_gw = ResMgr::get<ImageRsrc>("monst" + std::to_string(1 + which_sheet)).get();
} else {
from_rect = calc_rect(2 * (pic / 8), pic % 8);
from_gw = &pc_gworld;
from_gw = ResMgr::get<ImageRsrc>("pcs").get();
}
rect_draw_some_item(*from_gw,from_rect,mainPtr,pc_area_buttons[i][1],sf::BlendAlpha);

View File

@@ -59,26 +59,9 @@ extern ter_num_t current_ground;
short num_ir[3] = {12,10,4};
sf::Texture monst_gworld[NUM_MONST_SHEETS];
sf::Texture terrain_gworld[NUM_TER_SHEETS];
sf::Texture editor_mixed;
sf::RenderTexture terrain_buttons_gworld;
sf::Texture anim_gworld;
sf::Texture fields_gworld;
sf::Texture dialog_gworld;
sf::Texture items_gworld;
sf::Texture tiny_obj_gworld;
sf::Texture small_ter_gworld;
sf::Texture boom_gworld;
cCustomGraphics spec_scen_g;
sf::Texture vehicle_gworld;
sf::RenderTexture ter_draw_gworld;
sf::Texture dlogpics_gworld;
sf::Texture talkfaces_gworld;
sf::Texture roads_gworld;
sf::Texture missiles_gworld;
sf::Texture status_gworld;
sf::Texture pc_gworld;
const sf::Color hilite_colour = {0xff, 0x00, 0x80, 0x40};
// begin new stuff
@@ -375,8 +358,7 @@ void Set_up_win () {
void run_startup_g() {
sf::Event event;
sf::Texture pict_to_draw;
pict_to_draw.loadFromImage(*ResMgr::get<ImageRsrc>("edsplash"));
sf::Texture& pict_to_draw = *ResMgr::get<ImageRsrc>("edsplash");
rectangle dest_rect = rectangle(pict_to_draw);
play_sound(-95);
@@ -394,31 +376,13 @@ void run_startup_g() {
}
void load_graphics(){
int i;
for(i = 0; i < NUM_MONST_SHEETS; i++){
std::ostringstream sout;
sout << "monst" << i + 1;
monst_gworld[i].loadFromImage(*ResMgr::get<ImageRsrc>(sout.str()));
}
for(i = 0; i < NUM_TER_SHEETS; i++){
std::ostringstream sout;
sout << "ter" << i + 1;
terrain_gworld[i].loadFromImage(*ResMgr::get<ImageRsrc>(sout.str()));
}
editor_mixed.loadFromImage(*ResMgr::get<ImageRsrc>("edbuttons"));
anim_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("teranim"));
fields_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("fields"));
roads_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("trim"));
talkfaces_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("talkportraits"));
items_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("objects"));
tiny_obj_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("tinyobj"));
dlogpics_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("dlogpics"));
small_ter_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("termap"));
vehicle_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("vehicle"));
missiles_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("missiles"));
status_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("staticons"));
pc_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("pcs"));
// Preload the main editor interface graphics
ResMgr::get<ImageRsrc>("edbuttons");
ResMgr::get<ImageRsrc>("teranim");
ResMgr::get<ImageRsrc>("fields");
ResMgr::get<ImageRsrc>("objects");
ResMgr::get<ImageRsrc>("tinyobj");
ResMgr::get<ImageRsrc>("termap");
}
void load_main_screen() {
@@ -493,7 +457,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(editor_mixed,from_rect,left_buttons[which][1],location{0,0});
rect_draw_some_item(*ResMgr::get<ImageRsrc>("edbuttons"),from_rect,left_buttons[which][1],location{0,0});
}
if(left_button_status[which].mode == LB_INDENT)
text_rect.left += 16;
@@ -560,6 +524,7 @@ void set_up_terrain_buttons(bool reset) {
int end = min(first + 256, max);
// first make terrain buttons
sf::Texture& editor_mixed = *ResMgr::get<ImageRsrc>("edbuttons");
for(i = first; i < end; i++) {
switch(draw_mode){
case DRAW_TERRAIN:
@@ -578,7 +543,8 @@ void set_up_terrain_buttons(bool reset) {
else if(pic < 960) {
pic = pic % 50;
ter_from.offset(28 * (pic % 10), 36 * (pic / 10));
rect_draw_some_item(terrain_gworld[scenario.ter_types[i].picture/50],
int which_sheet = scenario.ter_types[i].picture / 50;
rect_draw_some_item(*ResMgr::get<ImageRsrc>("ter" + std::to_string(1 + which_sheet)),
ter_from,terrain_buttons_gworld,terrain_rects[i - first]);
}
else {
@@ -587,7 +553,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(anim_gworld,
rect_draw_some_item(*ResMgr::get<ImageRsrc>("teranim"),
ter_from,terrain_buttons_gworld,terrain_rects[i - first]);
}
@@ -655,46 +621,49 @@ void set_up_terrain_buttons(bool reset) {
} else {
auto pic_info = m_pic_index[pic];
pic = pic_info.i;
auto monst_gworld = [](pic_num_t sheet_num) {
return *ResMgr::get<ImageRsrc>("monst" + std::to_string(1 + sheet_num));
};
if(pic_info.x == 2 && pic_info.y == 2) {
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, terrain_buttons_gworld, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, terrain_buttons_gworld, 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, terrain_buttons_gworld, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, terrain_buttons_gworld, 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, terrain_buttons_gworld, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, terrain_buttons_gworld, 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, terrain_buttons_gworld, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, terrain_buttons_gworld, 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, terrain_buttons_gworld, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, terrain_buttons_gworld, 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, terrain_buttons_gworld, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, terrain_buttons_gworld, 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, terrain_buttons_gworld, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, terrain_buttons_gworld, 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, terrain_buttons_gworld, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, terrain_buttons_gworld, 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, terrain_buttons_gworld, tiny_to, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(pic / 20), ter_from, terrain_buttons_gworld, tiny_to, sf::BlendAlpha);
}
}
break;
@@ -709,7 +678,7 @@ void set_up_terrain_buttons(bool reset) {
} else {
tiny_from = {0,0,18,18};
tiny_from.offset((pic % 10) * 18,(pic / 10) * 18);
rect_draw_some_item(tiny_obj_gworld,tiny_from,terrain_buttons_gworld,tiny_to,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("tinyobj"),tiny_from,terrain_buttons_gworld,tiny_to,sf::BlendAlpha);
}
break;
}
@@ -805,6 +774,9 @@ void draw_terrain(){
destrec.top = 8 + BITMAP_HEIGHT * where_draw.y;
destrec.bottom = destrec.top + BITMAP_HEIGHT;
sf::Texture& fields_gworld = *ResMgr::get<ImageRsrc>("fields");
sf::Texture& vehicle_gworld = *ResMgr::get<ImageRsrc>("vehicle");
if(is_road(cen_x + q - 4,cen_y + r - 4))
rect_draw_some_item(fields_gworld, calc_rect(0, 2), ter_draw_gworld, destrec, sf::BlendAlpha);
if(is_spot(cen_x + q - 4,cen_y + r - 4))
@@ -861,7 +833,7 @@ void draw_terrain(){
}
if(is_field_type(cen_x + q - 4,cen_y + r - 4, BARRIER_FIRE)) {
from_rect = calc_rect(8,4);
rect_draw_some_item(anim_gworld,from_rect,ter_draw_gworld,destrec,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("teranim"),from_rect,ter_draw_gworld,destrec,sf::BlendAlpha);
}
if(is_field_type(cen_x + q - 4,cen_y + r - 4, FIELD_QUICKFIRE)) {
from_rect = calc_rect(7,1);
@@ -869,7 +841,7 @@ void draw_terrain(){
}
if(is_field_type(cen_x + q - 4,cen_y + r - 4, BARRIER_FORCE)) {
from_rect = calc_rect(10,4);
rect_draw_some_item(anim_gworld,from_rect,ter_draw_gworld,destrec,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("teranim"),from_rect,ter_draw_gworld,destrec,sf::BlendAlpha);
}
if(is_field_type(cen_x + q - 4,cen_y + r - 4, OBJECT_BLOCK)) {
from_rect = calc_rect(3,0);
@@ -897,6 +869,7 @@ void draw_terrain(){
if(!icons.empty()) {
bool has_start = icons[0] == -1;
rectangle tiny_from_base = {120, 0, 127, 7};
sf::Texture& editor_mixed = *ResMgr::get<ImageRsrc>("edbuttons");
for(short icon : icons) {
rectangle tiny_from = tiny_from_base;
if(icon == -1) {
@@ -1061,7 +1034,8 @@ void draw_monsts() {
}
else if(scenario.scen_monsters[town->creatures[i].number].picture_num < 1000) {
m_start_pic = m_pic_index[scenario.scen_monsters[town->creatures[i].number].picture_num].i + k;
from_gworld = &monst_gworld[m_start_pic / 20];
int which_sheet = m_start_pic / 20;
from_gworld = ResMgr::get<ImageRsrc>("monst" + std::to_string(1 + which_sheet)).get();
m_start_pic = m_start_pic % 20;
source_rect = calc_rect(2 * (m_start_pic / 10), m_start_pic % 10);
store_loc.x += k % width;
@@ -1087,8 +1061,7 @@ void draw_monsts() {
// Returns rect for drawing an item, if num < 25, rect is in big item template,
// otherwise in small item template
// TODO: I have another function that does the same thing but also returns the texture containing the item along with the rectangle
rectangle get_item_template_rect (short type_wanted) {
static rectangle get_item_template_rect (short type_wanted) {
rectangle store_rect;
if(type_wanted < 45) {
@@ -1138,7 +1111,7 @@ void draw_items() {
dest_rect.left += 5;
dest_rect.right -= 5;
}
rect_draw_some_item((pic_num < 55) ? items_gworld : tiny_obj_gworld,
rect_draw_some_item(*ResMgr::get<ImageRsrc>((pic_num < 55) ? "objects" : "tinyobj"),
source_rect, ter_draw_gworld, dest_rect,sf::BlendAlpha);
}
}
@@ -1173,7 +1146,7 @@ void draw_one_terrain_spot (short i,short j,ter_num_t terrain_to_draw) {
graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(picture_wanted % 1000);
}
else if(picture_wanted >= 960) {
source_gworld = &anim_gworld;
source_gworld = ResMgr::get<ImageRsrc>("teranim").get();
picture_wanted -= 960;
source_rect.left = 112 * (picture_wanted / 5);
source_rect.right = source_rect.left + 28;
@@ -1182,7 +1155,8 @@ void draw_one_terrain_spot (short i,short j,ter_num_t terrain_to_draw) {
}
else {
source_rect = get_template_rect(terrain_to_draw);
source_gworld = &terrain_gworld[picture_wanted / 50];
int which_sheet = picture_wanted / 50;
source_gworld = ResMgr::get<ImageRsrc>("ter" + std::to_string(1 + which_sheet)).get();
}
rectangle destrec;
@@ -1211,10 +1185,11 @@ void draw_one_tiny_terrain_spot (short i,short j,ter_num_t terrain_to_draw,short
if(picture_wanted >= 1000) {
graf_pos_ref(source_gworld, from_rect) = spec_scen_g.find_graphic(picture_wanted % 1000);
} else if(picture_wanted >= 960) {
source_gworld = &anim_gworld;
source_gworld = ResMgr::get<ImageRsrc>("teranim").get();
from_rect = calc_rect(4 * ((picture_wanted - 960) / 5),(picture_wanted - 960) % 5);
} else {
source_gworld = &terrain_gworld[picture_wanted / 50];
int which_sheet = picture_wanted / 50;
source_gworld = ResMgr::get<ImageRsrc>("ter" + std::to_string(1 + which_sheet)).get();
picture_wanted %= 50;
from_rect = calc_rect(picture_wanted % 10, picture_wanted / 10);
}
@@ -1228,20 +1203,23 @@ void draw_one_tiny_terrain_spot (short i,short j,ter_num_t terrain_to_draw,short
picture_wanted /= 1000; picture_wanted--;
from_rect.offset((picture_wanted / 3) * 12, (picture_wanted % 3) * 12);
rect_draw_some_item(*from_gw, from_rect, ter_draw_gworld, dest_rect);
} else 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, ter_draw_gworld, dest_rect);
} else {
from_rect.offset((picture_wanted % 20) * 12,(picture_wanted / 20) * 12);
rect_draw_some_item(small_ter_gworld, from_rect, ter_draw_gworld, dest_rect);
sf::Texture& small_ter_gworld = *ResMgr::get<ImageRsrc>("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, ter_draw_gworld, dest_rect);
} else {
from_rect.offset((picture_wanted % 20) * 12,(picture_wanted / 20) * 12);
rect_draw_some_item(small_ter_gworld, from_rect, ter_draw_gworld, dest_rect);
}
}
}
if(road) {
rectangle road_rect = dest_rect;
int border = (size - 4) / 2;
road_rect.inset(border,border);
rect_draw_some_item(editor_mixed, {120, 231, 124, 235}, ter_draw_gworld, road_rect);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("edbuttons"), {120, 231, 124, 235}, ter_draw_gworld, road_rect);
}
if(mouse_spot.x >= 0 && mouse_spot.y >= 0) {
location where_draw(i,j);
@@ -1330,11 +1308,13 @@ 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(anim_gworld,source_rect,terrain_buttons_gworld,draw_rect);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("teranim"),source_rect,terrain_buttons_gworld,draw_rect);
}
else {
source_rect = get_template_rect(ter);
rect_draw_some_item(terrain_gworld[picture_wanted / 50],source_rect,
int which_sheet = picture_wanted / 50;
sf::Texture& terrain_gworld = *ResMgr::get<ImageRsrc>("ter" + std::to_string(1 + which_sheet));
rect_draw_some_item(terrain_gworld,source_rect,
terrain_buttons_gworld,draw_rect);
}
short small_i = get_small_icon(ter);
@@ -1344,7 +1324,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(editor_mixed,tiny_from,terrain_buttons_gworld,tiny_to);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("edbuttons"),tiny_from,terrain_buttons_gworld,tiny_to);
}
void place_location() {
@@ -1405,6 +1385,7 @@ void place_location() {
if(overall_mode < MODE_MAIN_SCREEN) {
place_selected_terrain(current_terrain_type, draw_rect);
extern short mode_count;
bool draw_field = false;
if(overall_mode == MODE_PLACE_CREATURE || overall_mode == MODE_PLACE_SAME_CREATURE) {
rectangle to_rect = draw_rect;
picture_wanted = scenario.scen_monsters[mode_count].picture_num;
@@ -1459,46 +1440,49 @@ void place_location() {
} else {
auto pic_info = m_pic_index[picture_wanted];
picture_wanted = pic_info.i;
auto monst_gworld = [](pic_num_t sheet_num) {
return *ResMgr::get<ImageRsrc>("monst" + std::to_string(1 + sheet_num));
};
if(pic_info.x == 2 && pic_info.y == 2) {
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, terrain_buttons_gworld, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, terrain_buttons_gworld, 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, terrain_buttons_gworld, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, terrain_buttons_gworld, 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, terrain_buttons_gworld, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, terrain_buttons_gworld, 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, terrain_buttons_gworld, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, terrain_buttons_gworld, 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, terrain_buttons_gworld, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, terrain_buttons_gworld, 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, terrain_buttons_gworld, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, terrain_buttons_gworld, 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, terrain_buttons_gworld, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, terrain_buttons_gworld, 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, terrain_buttons_gworld, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, terrain_buttons_gworld, 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, terrain_buttons_gworld, to_rect, sf::BlendAlpha);
rect_draw_some_item(monst_gworld(picture_wanted / 20), source_rect, terrain_buttons_gworld, to_rect, sf::BlendAlpha);
}
}
} else if(overall_mode == MODE_PLACE_ITEM || overall_mode == MODE_PLACE_SAME_ITEM) {
@@ -1509,42 +1493,46 @@ void place_location() {
rect_draw_some_item(*source_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
} else if(picture_wanted < 50) {
source_rect = calc_rect(picture_wanted % 5,picture_wanted / 5);
rect_draw_some_item(items_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("objects"),source_rect,terrain_buttons_gworld,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(tiny_obj_gworld,tiny_from,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("tinyobj"),tiny_from,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
}
} else if(overall_mode == MODE_TOGGLE_SPECIAL_DOT) {
draw_field = true;
source_rect = calc_rect(4, 0);
rect_draw_some_item(fields_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
} else if(overall_mode == MODE_PLACE_FORCECAGE) {
draw_field = true;
source_rect = calc_rect(0, 0);
rect_draw_some_item(fields_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
} else if(overall_mode == MODE_PLACE_WEB) {
draw_field = true;
source_rect = calc_rect(5, 0);
rect_draw_some_item(fields_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
} else if(overall_mode == MODE_PLACE_CRATE) {
draw_field = true;
source_rect = calc_rect(6, 0);
rect_draw_some_item(fields_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
} else if(overall_mode == MODE_PLACE_BARREL) {
draw_field = true;
source_rect = calc_rect(7, 0);
rect_draw_some_item(fields_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
} else if(overall_mode == MODE_PLACE_FIRE_BARRIER) {
source_rect = calc_rect(8, 4);
rect_draw_some_item(anim_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("teranim"),source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
} else if(overall_mode == MODE_PLACE_FORCE_BARRIER) {
source_rect = calc_rect(8, 4);
rect_draw_some_item(anim_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
rect_draw_some_item(*ResMgr::get<ImageRsrc>("teranim"),source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
} else if(overall_mode == MODE_PLACE_QUICKFIRE) {
draw_field = true;
source_rect = calc_rect(7, 1);
rect_draw_some_item(fields_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
} else if(overall_mode == MODE_PLACE_STONE_BLOCK) {
draw_field = true;
source_rect = calc_rect(3, 0);
rect_draw_some_item(fields_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
} else if(overall_mode == MODE_PLACE_SFX) {
draw_field = true;
source_rect = calc_rect(mode_count, 3);
}
if(draw_field) {
sf::Texture& fields_gworld = *ResMgr::get<ImageRsrc>("fields");
rect_draw_some_item(fields_gworld,source_rect,terrain_buttons_gworld,draw_rect,sf::BlendAlpha);
}
draw_rect.offset(0,40);

View File

@@ -14,7 +14,6 @@ void draw_rb_slot (short which,short mode) ;
void set_up_terrain_buttons(bool reset);
void draw_terrain();
void draw_monsts();
rectangle get_item_template_rect (short type_wanted);
void draw_items();
void force_tiny_redraw();
void draw_one_terrain_spot (short i,short j,ter_num_t terrain_to_draw);

View File

@@ -27,15 +27,11 @@
#include "restypes.hpp"
bool cur_scen_is_mac = true;
extern sf::Texture items_gworld,tiny_obj_gworld,fields_gworld,roads_gworld,boom_gworld,missiles_gworld;
extern sf::Texture dlogpics_gworld,monst_gworld[],terrain_gworld[],anim_gworld,talkfaces_gworld,pc_gworld;
extern sf::Texture status_gworld, vehicle_gworld, small_ter_gworld;
extern cCustomGraphics spec_scen_g;
extern fs::path tempDir;
void load_spec_graphics_v1(fs::path scen_file);
void load_spec_graphics_v2(int num_sheets);
void reload_core_graphics();
// Load old scenarios (town talk is handled by the town loading function)
static bool load_scenario_v1(fs::path file_to_load, cScenario& scenario, bool only_header);
static bool load_outdoors_v1(fs::path scen_file, location which_out,cOutdoors& the_out, legacy::scenario_data_type& scenario);
@@ -2434,7 +2430,6 @@ void load_spec_graphics_v1(fs::path scen_file) {
}
}
}
reload_core_graphics();
}
void load_spec_graphics_v2(int num_sheets) {
@@ -2446,37 +2441,6 @@ void load_spec_graphics_v2(int num_sheets) {
while(num_sheets-- > 0) {
std::string name = "sheet" + std::to_string(num_sheets);
ResMgr::free<ImageRsrc>(name);
spec_scen_g.sheets[num_sheets].loadFromImage(*ResMgr::get<ImageRsrc>(name));
spec_scen_g.sheets[num_sheets] = *ResMgr::get<ImageRsrc>(name);
}
reload_core_graphics();
}
void reload_core_graphics() {
// TODO: This should really reload ALL textures...
// Now load regular graphics
items_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("objects"));
tiny_obj_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("tinyobj"));
fields_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("fields"));
roads_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("trim"));
boom_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("booms"));
missiles_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("missiles"));
dlogpics_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("dlogpics"));
status_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("staticons"));
for(int i = 0; i < NUM_MONST_SHEETS; i++){
std::ostringstream sout;
sout << "monst" << i + 1;
monst_gworld[i].loadFromImage(*ResMgr::get<ImageRsrc>(sout.str()));
}
for(int i = 0; i < NUM_TER_SHEETS; i++){
std::ostringstream sout;
sout << "ter" << i + 1;
terrain_gworld[i].loadFromImage(*ResMgr::get<ImageRsrc>(sout.str()));
}
anim_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("teranim"));
talkfaces_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("talkportraits"));
pc_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("pcs"));
vehicle_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("vehicle"));
small_ter_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("termap"));
// TODO: Scenario icons ...
}

View File

@@ -33,7 +33,6 @@ using boost::math::constants::pi;
rectangle bg_rects[21];
tessel_ref_t bg[21];
tessel_ref_t bw_pats[6];
sf::Texture bg_gworld, bw_gworld;
bool use_win_graphics = false;
sf::Shader maskShader;
extern fs::path progDir;
@@ -108,8 +107,6 @@ void init_graph_tool(){
bg_rects[18].top += 32;
bg_rects[7].left += 32;
bg_rects[7].top += 32;
bg_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("pixpats"));
bw_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("bwpats"));
register_main_patterns();
}
@@ -391,13 +388,17 @@ rectangle calc_rect(short i, short j){
return base_rect;
}
extern sf::Texture fields_gworld;
graf_pos cCustomGraphics::find_graphic(pic_num_t which_rect, bool party) {
static graf_pos dummy = {&fields_gworld, {72,140,108,28}};
if(party && !party_sheet) return dummy;
bool valid = true;
if(party && !party_sheet) valid = false;
else if(!party && !is_old && (which_rect / 100) >= numSheets)
return dummy;
else if(numSheets == 0) return dummy;
valid = false;
else if(numSheets == 0) valid = false;
if(!valid) {
INVALID:
sf::Texture* blank = ResMgr::get<ImageRsrc>("blank").get();
return {blank, {0,0,36,28}};
}
short sheet = which_rect / 100;
if(is_old || party) sheet = 0;
else which_rect %= 100;
@@ -406,7 +407,7 @@ graf_pos cCustomGraphics::find_graphic(pic_num_t which_rect, bool party) {
store_rect.offset(28 * (which_rect % 10),36 * (which_rect / 10));
sf::Texture* the_sheet = party ? party_sheet.get() : &sheets[sheet];
rectangle test(*the_sheet);
if((store_rect & test) != store_rect) return dummy;
if((store_rect & test) != store_rect) goto INVALID; // FIXME: HACK
return std::make_pair(the_sheet,store_rect);
}
@@ -989,20 +990,11 @@ tessel_ref_t prepareForTiling(sf::Texture& srcImg, rectangle srcRect) {
return ref;
}
void flushTessels(sf::Texture& alteredImg) {
erase_if(tiling_reservoir, [&alteredImg](std::pair<const tessel_ref_t,tessel_t>& kv) -> bool {
if(kv.second.img == &alteredImg) {
delete kv.second.tessel;
return true;
}
return false;
});
if(&alteredImg == &bg_gworld)
register_main_patterns();
}
static void register_main_patterns() {
rectangle bw_rect = {0,0,8,8};
sf::Texture& bg_gworld = *ResMgr::get<ImageRsrc>("pixpats");
sf::Texture& bw_gworld = *ResMgr::get<ImageRsrc>("bwpats");
for(int i = 0; i < 21; i++) {
if(i < 6) {
bw_pats[i] = prepareForTiling(bw_gworld, bw_rect);

View File

@@ -21,8 +21,6 @@
namespace fs = boost::filesystem;
#define LINES_IN_TEXT_WIN 11
#define NUM_TER_SHEETS 14
#define NUM_MONST_SHEETS 10
struct m_pic_index_t {
unsigned char i, x, y;
@@ -118,7 +116,6 @@ void win_draw_string(sf::RenderTarget& dest_window,rectangle dest_rect,std::stri
size_t string_length(std::string str, TextStyle style, short* height = nullptr);
rectangle calc_rect(short i, short j);
void setActiveRenderTarget(sf::RenderTarget& where);
void flushTessels(sf::Texture& alteredImg);
tessel_ref_t prepareForTiling(sf::Texture& srcImg, rectangle srcRect);
void tileImage(sf::RenderTarget& target, rectangle area, tessel_ref_t tessel, sf::BlendMode mode = sf::BlendNone);
void tileImage(sf::RenderWindow& target, Region& rgn, tessel_ref_t tessel, sf::BlendMode mode = sf::BlendNone);

View File

@@ -10,14 +10,23 @@
#define BOE_RESMGR_H
#include <string>
#include <map>
#include <unordered_map>
#include <stack>
#include <exception>
#include <memory>
#include <boost/filesystem.hpp>
#include <boost/functional/hash.hpp>
#include <functional>
#include <iostream>
namespace std {
template<> struct hash<boost::filesystem::path> {
size_t operator()(const boost::filesystem::path& p) const {
return boost::filesystem::hash_value(p);
}
};
}
/// A simple resource manager.
/// Handles loading, retaining, and releasing of resources as necessary.
/// Resources include sounds, images, fonts, and cursors.
@@ -35,8 +44,8 @@ namespace ResMgr {
/// @tparam type The type of resource that this pool manages.
template<typename type> struct resPool {
/// Get the map of all currently-loaded resources from this resource pool.
static std::map<std::string,std::shared_ptr<type> >& resources() {
static std::map<std::string,std::shared_ptr<type> > data;
static std::unordered_map<std::string,std::shared_ptr<type> >& resources() {
static std::unordered_map<std::string,std::shared_ptr<type> > data;
return data;
}
/// Get the current search path stack for this resource pool.
@@ -51,8 +60,8 @@ namespace ResMgr {
}
/// Get the map of past path resolutions.
/// @return A map of relative paths to the absolute path they most recently resolved to.
static std::map<fs::path,fs::path>& pathFound() {
static std::map<fs::path,fs::path> data;
static std::unordered_map<fs::path,fs::path>& pathFound() {
static std::unordered_map<fs::path,fs::path> data;
return data;
}
/// Convert a relative path to an absolute path by checking the current search path stack.

View File

@@ -22,7 +22,7 @@
#include "cursors.hpp"
#include "location.hpp"
using ImageRsrc = sf::Image;
using ImageRsrc = sf::Texture;
using CursorRsrc = Cursor;
using FontRsrc = sf::Font;
using StringRsrc = std::vector<std::string>;

View File

@@ -4,9 +4,6 @@
// After this are some globals that are referenced from common code but not defined, and not used in the test cases
#include "graphtool.hpp"
sf::Texture fields_gworld, anim_gworld, boom_gworld, dlogpics_gworld, items_gworld, missiles_gworld, monst_gworld[NUM_MONST_SHEETS];
sf::Texture pc_gworld, roads_gworld, small_ter_gworld, status_gworld, talkfaces_gworld, terrain_gworld[NUM_TER_SHEETS];
sf::Texture tiny_obj_gworld, vehicle_gworld;
sf::RenderWindow mainPtr;
std::string scenario_temp_dir_name = "test_scenario";
cCustomGraphics spec_scen_g;