graphics: continue to rewrite code to be more simple ;
retrieve modifications to allow to load some graphics with different resolutions: actionhelp, bigscenpics, fighthelp, invenhelp, outhelp, scenpics, stathelp, townhelp, dlogpics, dlogscrollled, dlogscrollwh, edbuttons, edsplash, pcedtitle.
This commit is contained in:
@@ -129,13 +129,14 @@ ePicType cPict::getPicType(){
|
||||
return picType;
|
||||
}
|
||||
|
||||
// AsanU: unset
|
||||
cPict::cPict(cDialog& parent) :
|
||||
cControl(CTRL_PICT,parent) {
|
||||
cControl(CTRL_PICT,parent), drawScaled(false) {
|
||||
setFormat(TXT_FRAME, FRM_SOLID);
|
||||
}
|
||||
|
||||
cPict::cPict(sf::RenderWindow& parent) :
|
||||
cControl(CTRL_PICT, parent) {
|
||||
cControl(CTRL_PICT, parent), drawScaled(false) {
|
||||
setFormat(TXT_FRAME, FRM_SOLID);
|
||||
}
|
||||
|
||||
@@ -577,15 +578,14 @@ void cPict::recalcRect() {
|
||||
case PIC_CUSTOM_FULL:
|
||||
if(drawScaled) break;
|
||||
auto sheet = getSheet(SHEET_FULL, picNum);
|
||||
sf::Vector2u sz = sheet->getSize();
|
||||
bounds.width() = sz.x;
|
||||
bounds.height() = sz.y;
|
||||
bounds.width() = sheet->dimension.x;
|
||||
bounds.height() = sheet->dimension.y;
|
||||
break;
|
||||
}
|
||||
setBounds(bounds);
|
||||
}
|
||||
|
||||
std::shared_ptr<const sf::Texture> cPict::getSheet(eSheetType type, size_t n) {
|
||||
std::shared_ptr<const Texture> cPict::getSheet(eSheetType type, size_t n) {
|
||||
std::ostringstream sout;
|
||||
bool purgeable = false;
|
||||
switch(type) {
|
||||
@@ -672,7 +672,7 @@ std::shared_ptr<const sf::Texture> cPict::getSheet(eSheetType type, size_t n) {
|
||||
sout << "sheet" << n;
|
||||
}
|
||||
}
|
||||
return &ResMgr::graphics.get(sout.str(), purgeable);
|
||||
return &ResMgr::textures.get(sout.str(), purgeable);
|
||||
}
|
||||
|
||||
void cPict::draw(){
|
||||
@@ -862,7 +862,7 @@ void cPict::drawPresetItem(short num, rectangle to_rect){
|
||||
to_rect.right = to_rect.left + 28;
|
||||
to_rect.bottom = to_rect.top + 36;
|
||||
fill_rect(*inWindow, to_rect, sf::Color::Black);
|
||||
std::shared_ptr<const sf::Texture> from_gw;
|
||||
std::shared_ptr<const Texture> from_gw;
|
||||
rectangle from_rect = {0,0,18,18};
|
||||
if(num < 55) {
|
||||
from_gw = getSheet(SHEET_ITEM);
|
||||
@@ -916,9 +916,9 @@ void cPict::drawPresetBoom(short num, rectangle to_rect){
|
||||
}
|
||||
|
||||
void cPict::drawFullSheet(short num, rectangle to_rect){
|
||||
rectangle from_rect;
|
||||
auto from_gw = getSheet(SHEET_FULL, num);
|
||||
from_rect = rectangle(*from_gw);
|
||||
if (!from_gw) return;
|
||||
rectangle from_rect = rectangle(*from_gw);
|
||||
if(!drawScaled) {
|
||||
to_rect.right = to_rect.left + (from_rect.right - from_rect.left);
|
||||
to_rect.bottom = to_rect.top + (from_rect.bottom - from_rect.top);
|
||||
|
@@ -18,6 +18,7 @@
|
||||
#include <map>
|
||||
#include "control.hpp"
|
||||
#include "pictypes.hpp"
|
||||
#include "texture.hpp"
|
||||
|
||||
/// A simple icon.
|
||||
/// This control can also be made clickable.
|
||||
@@ -87,7 +88,7 @@ public:
|
||||
cPict& operator=(cPict& other) = delete;
|
||||
cPict(cPict& other) = delete;
|
||||
private:
|
||||
static std::shared_ptr<const sf::Texture> getSheet(eSheetType type, size_t n = 0);
|
||||
static std::shared_ptr<const Texture> getSheet(eSheetType type, size_t n = 0);
|
||||
static short animFrame;
|
||||
pic_num_t picNum;
|
||||
ePicType picType;
|
||||
|
@@ -395,7 +395,7 @@ void cScrollbar::draw_horizontal() {
|
||||
draw_rect.width() = btn_size;
|
||||
if(depressed && pressedPart == PART_UP)
|
||||
from_rect = up_rect[style][HORZ_PRESSED];
|
||||
sf::Texture scroll_gw = *ResMgr::graphics.get(scroll_textures[style]);
|
||||
auto const &scroll_gw = *ResMgr::textures.get(scroll_textures[style]);
|
||||
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
|
||||
if(pos > 0) {
|
||||
from_rect = bar_rect[style][HORZ];
|
||||
@@ -458,7 +458,7 @@ void cScrollbar::draw_vertical() {
|
||||
draw_rect.height() = btn_size;
|
||||
if(depressed && pressedPart == PART_UP)
|
||||
from_rect = up_rect[style][VERT_PRESSED];
|
||||
sf::Texture scroll_gw = *ResMgr::graphics.get(scroll_textures[style]);
|
||||
auto const &scroll_gw = *ResMgr::textures.get(scroll_textures[style]);
|
||||
rect_draw_some_item(scroll_gw, from_rect, *inWindow, draw_rect);
|
||||
if(pos > 0) {
|
||||
from_rect = bar_rect[style][VERT];
|
||||
|
@@ -32,25 +32,50 @@ struct Texture {
|
||||
return rectangle(0, 0, dimension.y, dimension.x);
|
||||
}
|
||||
static sf::Vector2u getApplicationDimension(std::string const &name) {
|
||||
if (name.size()<5 || name.substr(name.size()-4)!=".png") return {0,0};
|
||||
std::string const base=name.substr(0,name.size()-4);
|
||||
static std::map<std::string, sf::Vector2u> nameToDimensions = {
|
||||
{ "buttons.png", {192,115} },
|
||||
{ "spidlogo.png", {350,350} },
|
||||
{ "inventory.png", {271,144} },
|
||||
{ "actionhelp", {275,100} },
|
||||
{ "bigscenpics", {256,64} },
|
||||
{ "booms", {224,252} },
|
||||
{ "buttons", {192,115} },
|
||||
{ "dlogpics", {144,360} },
|
||||
{ "fields", {224,144} },
|
||||
{ "fighthelp", {320,125} },
|
||||
{ "invenhelp", {138,112} },
|
||||
{ "inventory", {271,144} },
|
||||
{ "missiles", {144,288} },
|
||||
{ "objects", {140,396} },
|
||||
{ "outhelp", {320,125} },
|
||||
{ "pcedbuttons", {114,57} },
|
||||
{ "startanim.png", {280,590} },
|
||||
{ "startbut.png", {301,48} },
|
||||
{ "startsplash.png", {640,480} },
|
||||
{ "startup.png", {602, 322} },
|
||||
{ "statarea.png", {271,116} },
|
||||
{ "terscreen.png", {278,350} },
|
||||
{ "textbar.png", {279,22} },
|
||||
{ "transcript.png", {256,138} },
|
||||
{ "pcs", {280,576} },
|
||||
{ "scenpics", {160,224} },
|
||||
{ "spidlogo", {350,350} },
|
||||
{ "startanim", {280,590} },
|
||||
{ "startbut", {301,48} },
|
||||
{ "startsplash", {640,480} },
|
||||
{ "startup", {602,322} },
|
||||
{ "statarea", {271,116} },
|
||||
{ "stathelp", {106,29} },
|
||||
{ "staticons", {36,120} },
|
||||
{ "talkportraits", {320,288} },
|
||||
{ "teranim", {672,180} },
|
||||
{ "termap", {252,576} },
|
||||
{ "terscreen", {278,350} },
|
||||
{ "textbar", {279,22} },
|
||||
{ "tinyobj", {180,252} },
|
||||
{ "townhelp", {320,125} },
|
||||
{ "transcript", {256,138} },
|
||||
};
|
||||
auto const &it=nameToDimensions.find(name);
|
||||
auto const &it=nameToDimensions.find(base);
|
||||
if (it!=nameToDimensions.end())
|
||||
return it->second;
|
||||
else
|
||||
return {0,0};
|
||||
// now check the special case terXXX.png and monstXXX.png
|
||||
if (base.size()>=4 && base.substr(0,3)=="ter" && base.substr(3).find_first_not_of( "0123456789" ) == std::string::npos)
|
||||
return {280,180};
|
||||
if (base.size()>=6 && base.substr(0,5)=="monst" && base.substr(5).find_first_not_of( "0123456789" ) == std::string::npos)
|
||||
return {224,360};
|
||||
return {0,0};
|
||||
}
|
||||
std::shared_ptr<sf::Texture> texture;
|
||||
sf::Vector2u dimension;
|
||||
|
@@ -188,13 +188,13 @@ void init_main_buttons() {
|
||||
|
||||
void Set_up_win () {
|
||||
// Preload the main PC editor interface images
|
||||
ResMgr::graphics.get("pcedtitle");
|
||||
ResMgr::graphics.get("icon");
|
||||
ResMgr::graphics.get("invenbtns");
|
||||
ResMgr::graphics.get("staticons");
|
||||
ResMgr::graphics.get("dlogpics");
|
||||
ResMgr::textures.get("pcedtitle");
|
||||
ResMgr::textures.get("icon");
|
||||
ResMgr::textures.get("invenbtns");
|
||||
ResMgr::textures.get("staticons");
|
||||
ResMgr::textures.get("dlogpics");
|
||||
ResMgr::textures.get("pcedbuttons");
|
||||
ResMgr::graphics.get("pcs");
|
||||
ResMgr::textures.get("pcs");
|
||||
}
|
||||
|
||||
static void draw_main_screen();
|
||||
@@ -239,12 +239,12 @@ void draw_main_screen() {
|
||||
tileImage(mainPtr,windRect,bg[12]);
|
||||
mainPtr.setView(mainView);
|
||||
|
||||
sf::Texture& icon_gworld = *ResMgr::graphics.get("icon");
|
||||
auto const & icon_gworld = *ResMgr::textures.get("icon");
|
||||
dest_rec = source_rect = rectangle(icon_gworld);
|
||||
dest_rec.offset(23, 16);
|
||||
rect_draw_some_item(icon_gworld,source_rect,mainPtr,dest_rec);
|
||||
|
||||
sf::Texture& title_gworld = *ResMgr::graphics.get("pcedtitle");
|
||||
auto const &title_gworld = *ResMgr::textures.get("pcedtitle");
|
||||
dest_rec = source_rect = rectangle(title_gworld);
|
||||
dest_rec.offset(66, 0);
|
||||
rect_draw_some_item(title_gworld,source_rect,mainPtr,dest_rec,sf::BlendAlpha);
|
||||
|
@@ -358,7 +358,7 @@ void Set_up_win() {
|
||||
|
||||
void run_startup_g() {
|
||||
sf::Event event;
|
||||
sf::Texture& pict_to_draw = *ResMgr::graphics.get("edsplash", true);
|
||||
auto & pict_to_draw = *ResMgr::textures.get("edsplash", true);
|
||||
rectangle dest_rect = rectangle(pict_to_draw);
|
||||
|
||||
play_sound(-95);
|
||||
@@ -374,16 +374,16 @@ void run_startup_g() {
|
||||
}
|
||||
|
||||
// It's never needed again, so don't keep it in GPU memory
|
||||
ResMgr::graphics.free("edsplash");
|
||||
ResMgr::textures.free("edsplash");
|
||||
}
|
||||
|
||||
void load_graphics(){
|
||||
// Preload the main editor interface graphics
|
||||
ResMgr::graphics.get("edbuttons");
|
||||
ResMgr::graphics.get("teranim");
|
||||
ResMgr::textures.get("edbuttons");
|
||||
ResMgr::textures.get("teranim");
|
||||
ResMgr::graphics.get("fields");
|
||||
ResMgr::graphics.get("objects");
|
||||
ResMgr::graphics.get("tinyobj");
|
||||
ResMgr::textures.get("objects");
|
||||
ResMgr::textures.get("tinyobj");
|
||||
ResMgr::graphics.get("termap");
|
||||
}
|
||||
|
||||
@@ -455,7 +455,8 @@ void draw_lb_slot (short which,short mode) {
|
||||
from_rect = blue_button_from;
|
||||
if(mode > 0)
|
||||
from_rect.offset(0,from_rect.height());
|
||||
rect_draw_some_item(*ResMgr::graphics.get("edbuttons"),from_rect,mainPtr,left_buttons[which][1]);
|
||||
auto const &edbuttons=*ResMgr::textures.get("edbuttons");
|
||||
rect_draw_some_item(edbuttons,from_rect,mainPtr,left_buttons[which][1]);
|
||||
}
|
||||
if(left_button_status[which].mode == LB_INDENT)
|
||||
text_rect.left += 16;
|
||||
@@ -520,7 +521,7 @@ void set_up_terrain_buttons(bool reset) {
|
||||
int end = min(first + 256, max);
|
||||
|
||||
// first make terrain buttons
|
||||
sf::Texture& editor_mixed = *ResMgr::graphics.get("edbuttons");
|
||||
auto const &editor_mixed = *ResMgr::textures.get("edbuttons");
|
||||
for(short i = first; i < end; i++) {
|
||||
rectangle draw_rect = terrain_rects[i - first];
|
||||
draw_rect.offset(RIGHT_AREA_UL_X, RIGHT_AREA_UL_Y);
|
||||
@@ -550,7 +551,7 @@ void set_up_terrain_buttons(bool reset) {
|
||||
ter_from.right = ter_from.left + 28;
|
||||
ter_from.top = 36 * (pic % 5);
|
||||
ter_from.bottom = ter_from.top + 36;
|
||||
rect_draw_some_item(*ResMgr::graphics.get("teranim"), ter_from, mainPtr, draw_rect);
|
||||
rect_draw_some_item(*ResMgr::textures.get("teranim"), ter_from, mainPtr, draw_rect);
|
||||
|
||||
}
|
||||
small_i = get_small_icon(i);
|
||||
@@ -674,7 +675,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(*ResMgr::graphics.get("tinyobj"), tiny_from, mainPtr, tiny_to, sf::BlendAlpha);
|
||||
rect_draw_some_item(*ResMgr::textures.get("tinyobj"), tiny_from, mainPtr, tiny_to, sf::BlendAlpha);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -812,7 +813,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(*ResMgr::graphics.get("teranim"),from_rect,mainPtr,destrec,sf::BlendAlpha);
|
||||
rect_draw_some_item(*ResMgr::textures.get("teranim"),from_rect,mainPtr,destrec,sf::BlendAlpha);
|
||||
}
|
||||
if(is_field_type(cen_x + q - 4,cen_y + r - 4, FIELD_QUICKFIRE)) {
|
||||
from_rect = calc_rect(7,1);
|
||||
@@ -820,7 +821,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(*ResMgr::graphics.get("teranim"),from_rect,mainPtr,destrec,sf::BlendAlpha);
|
||||
rect_draw_some_item(*ResMgr::textures.get("teranim"),from_rect,mainPtr,destrec,sf::BlendAlpha);
|
||||
}
|
||||
if(is_field_type(cen_x + q - 4,cen_y + r - 4, OBJECT_BLOCK)) {
|
||||
from_rect = calc_rect(3,0);
|
||||
@@ -848,7 +849,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::graphics.get("edbuttons");
|
||||
auto const &editor_mixed = *ResMgr::textures.get("edbuttons");
|
||||
for(short icon : icons) {
|
||||
rectangle tiny_from = tiny_from_base;
|
||||
if(icon == -1) {
|
||||
@@ -1090,7 +1091,7 @@ void draw_items() {
|
||||
dest_rect.left += 5;
|
||||
dest_rect.right -= 5;
|
||||
}
|
||||
rect_draw_some_item(*ResMgr::graphics.get((pic_num < 55) ? "objects" : "tinyobj"),
|
||||
rect_draw_some_item(*ResMgr::textures.get((pic_num < 55) ? "objects" : "tinyobj"),
|
||||
source_rect, mainPtr, dest_rect,sf::BlendAlpha);
|
||||
}
|
||||
}
|
||||
@@ -1198,7 +1199,9 @@ void draw_one_tiny_terrain_spot (short i,short j,ter_num_t terrain_to_draw,short
|
||||
rectangle road_rect = dest_rect;
|
||||
int border = (size - 4) / 2;
|
||||
road_rect.inset(border,border);
|
||||
rect_draw_some_item(*ResMgr::graphics.get("edbuttons"), {120, 231, 124, 235}, mainPtr, road_rect);
|
||||
auto const &edbuttons=*ResMgr::textures.get("edbuttons");
|
||||
rectangle const road_from={120, 231, 124, 235};
|
||||
rect_draw_some_item(edbuttons, road_from, mainPtr, road_rect);
|
||||
}
|
||||
if(mouse_spot.x >= 0 && mouse_spot.y >= 0) {
|
||||
location where_draw(i,j);
|
||||
@@ -1286,7 +1289,7 @@ static void place_selected_terrain(ter_num_t ter, rectangle draw_rect) {
|
||||
source_rect.right = source_rect.left + 28;
|
||||
source_rect.top = 36 * (picture_wanted % 5);
|
||||
source_rect.bottom = source_rect.top + 36;
|
||||
rect_draw_some_item(*ResMgr::graphics.get("teranim"),source_rect,mainPtr,draw_rect);
|
||||
rect_draw_some_item(*ResMgr::textures.get("teranim"),source_rect,mainPtr,draw_rect);
|
||||
}
|
||||
else {
|
||||
source_rect = get_template_rect(ter);
|
||||
@@ -1302,7 +1305,7 @@ static void place_selected_terrain(ter_num_t ter, rectangle draw_rect) {
|
||||
rectangle tiny_from = base_small_button_from;
|
||||
tiny_from.offset(7 * (small_i % 30),7 * (small_i / 30));
|
||||
if(small_i >= 0 && small_i < 255)
|
||||
rect_draw_some_item(*ResMgr::graphics.get("edbuttons"),tiny_from,mainPtr,tiny_to);
|
||||
rect_draw_some_item(*ResMgr::textures.get("edbuttons"),tiny_from,mainPtr,tiny_to);
|
||||
}
|
||||
|
||||
void place_location() {
|
||||
@@ -1519,7 +1522,7 @@ void place_location() {
|
||||
rect_draw_some_item(*ResMgr::graphics.get("teranim"),source_rect,mainPtr,draw_rect,sf::BlendAlpha);
|
||||
} else if(overall_mode == MODE_PLACE_FORCE_BARRIER) {
|
||||
source_rect = calc_rect(8, 4);
|
||||
rect_draw_some_item(*ResMgr::graphics.get("teranim"),source_rect,mainPtr,draw_rect,sf::BlendAlpha);
|
||||
rect_draw_some_item(*ResMgr::textures.get("teranim"),source_rect,mainPtr,draw_rect,sf::BlendAlpha);
|
||||
} else if(overall_mode == MODE_PLACE_QUICKFIRE) {
|
||||
draw_field = true;
|
||||
source_rect = calc_rect(7, 1);
|
||||
|
Reference in New Issue
Block a user