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:
BIN
rsrc/graphics/blank.png
Normal file
BIN
rsrc/graphics/blank.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 265 B |
@@ -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();
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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"});
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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(){
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 ...
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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>;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user