cPict: continue to differentiate the picture type and the dialog type

and to merge the drawing functions, to be continued
This commit is contained in:
ALONSO Laurent
2021-10-23 13:46:29 +02:00
committed by Celtic Minstrel
parent 31c5a24e81
commit 282c640173
2 changed files with 105 additions and 51 deletions

View File

@@ -699,6 +699,7 @@ try {
if (pict.num<0)
type=ePicType::PIC_NONE;
switch (type) {
// terrain
case ePicType::PIC_TER: {
source = *ResMgr::textures.get("ter" + std::to_string(1 + pict.num / 50));
int picture_wanted = pict.num%50;
@@ -732,6 +733,7 @@ try {
break;
std::tie(source,from_rect) = spec_scen_g.find_graphic(pict.num+(anim%4));
break;
// item
case ePicType::PIC_ITEM: // 0-54
case ePicType::PIC_TINY_ITEM: // 0-139
if (pict.num<55 && pict.type != ePicType::PIC_TINY_ITEM) {
@@ -752,6 +754,48 @@ try {
break;
std::tie(source,from_rect) = spec_scen_g.find_graphic(pict.num);
break;
// TODO monster
// dialog
case ePicType::PIC_DLOG:
from_rect = {0,0,36,36};
from_rect.offset(36 * (pict.num % 4),36 * (pict.num / 4));
source = *ResMgr::textures.get("dlogpics");
break;
case ePicType::PIC_DLOG_LG:
from_rect = {0,0,72,72};
from_rect.offset(36 * (pict.num % 4),36 * (pict.num / 4));
source = *ResMgr::textures.get("dlogpics");
break;
case ePicType::PIC_CUSTOM_DLOG:
case ePicType::PIC_CUSTOM_DLOG_LG:
if (!spec_scen_g)
break;
std::tie(source,from_rect) = spec_scen_g.find_graphic(pict.num);
from_rect.right = from_rect.left + 18;
from_rect.bottom = from_rect.top + 36;
break;
// scene
case ePicType::PIC_SCEN:
from_rect = {0,0,32,32};
from_rect.offset(32 * (pict.num % 5),32 * (pict.num / 5));
source = *ResMgr::textures.get("scenpics");
break;
case ePicType::PIC_SCEN_LG:
from_rect = {0,0,64,64};
from_rect.offset(64 * pict.num,0);
source = *ResMgr::textures.get("bigscenpics");
break;
// talk
case ePicType::PIC_TALK:
from_rect = {0,0,32,32};
from_rect.offset(32 * (pict.num % 10),32 * (pict.num / 10));
source = *ResMgr::textures.get("talkportraits");
break;
default:
break;
}
@@ -771,7 +815,7 @@ catch (...) {
void cPict::drawPresetTer(short num, rectangle to_rect){
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, fromType!=ePicType::PIC_NONE ? fromType : ePicType::PIC_TER), source, source_rect, animFrame))
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_TER)), source, source_rect, animFrame))
return;
if(to_rect.right - to_rect.left > 28)
to_rect.inset(4,0);
@@ -781,7 +825,7 @@ void cPict::drawPresetTer(short num, rectangle to_rect){
void cPict::drawPresetTerAnim(short num, rectangle to_rect){
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, fromType!=ePicType::PIC_NONE ? fromType : ePicType::PIC_TER_ANIM), source, source_rect, animFrame))
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_TER_ANIM)), source, source_rect, animFrame))
return;
if(to_rect.right - to_rect.left > 28) {
to_rect.inset(4,0);
@@ -897,54 +941,55 @@ void cPict::drawPresetMonstLg(short num, rectangle to_rect){
void cPict::drawPresetDlog(short num, rectangle to_rect){
to_rect.right = to_rect.left + 36;
to_rect.bottom = to_rect.top + 36;
if (fromType!=ePicType::PIC_NONE) {
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, fromType), source, source_rect, animFrame))
return;
rect_draw_some_item(source, source_rect, *inWindow, to_rect);
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_DLOG)), source, source_rect, animFrame))
return;
}
auto from_gw = getSheet(SHEET_DLOG);
rectangle from_rect = {0,0,36,36};
from_rect.offset(36 * (num % 4),36 * (num / 4));
rect_draw_some_item(*from_gw, from_rect, *inWindow, to_rect);
rect_draw_some_item(source, source_rect, *inWindow, to_rect);
}
void cPict::drawPresetDlogLg(short num, rectangle to_rect){
to_rect.right = to_rect.left + (drawScaled ? getBounds().width() : 72);
to_rect.bottom = to_rect.top + (drawScaled ? getBounds().height() : 72);
auto from_gw = getSheet(SHEET_DLOG);
rectangle from_rect = {0,0,72,72};
from_rect.offset(36 * (num % 4),36 * (num / 4));
rect_draw_some_item(*from_gw, from_rect, *inWindow, to_rect);
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_DLOG_LG)), source, source_rect, animFrame))
return;
rect_draw_some_item(source, source_rect, *inWindow, to_rect);
}
void cPict::drawPresetTalk(short num, rectangle to_rect){
to_rect.right = to_rect.left + 32;
to_rect.bottom = to_rect.top + 32;
auto from_gw = getSheet(SHEET_TALK);
rectangle from_rect = {0,0,32,32};
from_rect.offset(32 * (num % 10),32 * (num / 10));
rect_draw_some_item(*from_gw, from_rect, *inWindow, to_rect);
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_TALK)), source, source_rect, animFrame))
return;
rect_draw_some_item(source, source_rect, *inWindow, to_rect);
}
void cPict::drawPresetScen(short num, rectangle to_rect){
auto from_gw = getSheet(SHEET_SCEN);
rectangle from_rect = {0,0,32,32};
from_rect.offset(32 * (num % 5),32 * (num / 5));
to_rect.right = to_rect.left + 32;
to_rect.bottom = to_rect.top + 32;
rect_draw_some_item(*from_gw, from_rect, *inWindow, to_rect);
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_SCEN)), source, source_rect, animFrame))
return;
rect_draw_some_item(source, source_rect, *inWindow, to_rect);
}
void cPict::drawPresetScenLg(short num, rectangle to_rect){
auto from_gw = getSheet(SHEET_SCEN_LG);
to_rect.right = to_rect.left + (drawScaled ? getBounds().width() : 64);
to_rect.bottom = to_rect.top + (drawScaled ? getBounds().height() : 64);
rectangle from_rect = {0,0,64,64};
from_rect.offset(num * 64, 0);
rect_draw_some_item(*from_gw, from_rect, *inWindow, to_rect);
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_SCEN_LG)), source, source_rect, animFrame))
return;
rect_draw_some_item(source, source_rect, *inWindow, to_rect);
}
void cPict::drawPresetItem(short num, rectangle to_rect){
@@ -954,7 +999,7 @@ void cPict::drawPresetItem(short num, rectangle to_rect){
Texture source;
rectangle source_rect;
auto sourceType=fromType!=ePicType::PIC_NONE ? fromType : ePicType::PIC_ITEM;
auto sourceType=getSourceType(ePicType::PIC_ITEM);
if (!get_picture(cPictNum(num, sourceType), source, source_rect, animFrame))
return;
if (sourceType==ePicType::PIC_ITEM && num>=55)
@@ -969,7 +1014,7 @@ void cPict::drawPresetTinyItem(short num, rectangle to_rect){
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, fromType!=ePicType::PIC_NONE ? fromType : ePicType::PIC_TINY_ITEM), source, source_rect, animFrame))
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_TINY_ITEM)), source, source_rect, animFrame))
return;
rect_draw_some_item(source, source_rect, *inWindow, to_rect, sf::BlendAlpha);
}
@@ -1029,7 +1074,7 @@ void cPict::drawPresetMissile(short num, rectangle to_rect){
void cPict::drawPresetTerMap(short num, rectangle to_rect){
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, fromType!=ePicType::PIC_NONE ? fromType : ePicType::PIC_TER_MAP), source, source_rect, animFrame))
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_TER_MAP)), source, source_rect, animFrame))
return;
// TODO: Should probably fill black somewhere in here...?
to_rect.right = to_rect.left + 24;
@@ -1054,7 +1099,7 @@ void cPict::drawStatusIcon(short num, rectangle to_rect){
void cPict::drawCustomTer(short num, rectangle to_rect){
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, fromType!=ePicType::PIC_NONE ? fromType : ePicType::PIC_CUSTOM_TER), source, source_rect, animFrame))
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_CUSTOM_TER)), source, source_rect, animFrame))
return;
to_rect.right = to_rect.left + 28;
to_rect.bottom = to_rect.top + 36;
@@ -1064,7 +1109,7 @@ void cPict::drawCustomTer(short num, rectangle to_rect){
void cPict::drawCustomTerAnim(short num, rectangle to_rect){
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, fromType!=ePicType::PIC_NONE ? fromType : ePicType::PIC_CUSTOM_TER), source, source_rect, animFrame))
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_CUSTOM_TER)), source, source_rect, animFrame))
return;
to_rect.right = to_rect.left + 28;
to_rect.bottom = to_rect.top + 36;
@@ -1154,23 +1199,29 @@ void cPict::drawCustomMonstLg(short num, rectangle to_rect){
static int dlog_to_w = 18, dlog_to_h = 36;
void cPict::drawCustomDlog(short num, rectangle to_rect){
Texture from_gw;
rectangle from_rect;
std::tie(from_gw,from_rect) = spec_scen_g.find_graphic(num);
to_rect.right = to_rect.left + dlog_to_w;
to_rect.bottom = to_rect.top + dlog_to_h;
from_rect.right = from_rect.left + 18;
from_rect.bottom = from_rect.top + 36;
rect_draw_some_item(from_gw, from_rect, *inWindow, to_rect);
Texture source;
rectangle source_rect;
ePicType source_type=getSourceType(ePicType::PIC_CUSTOM_DLOG);
if (source_type==ePicType::PIC_CUSTOM_DLOG || source_type==ePicType::PIC_CUSTOM_DLOG_LG) {
to_rect.right = to_rect.left + dlog_to_w;
to_rect.bottom = to_rect.top + dlog_to_h;
if (get_picture(cPictNum(num, source_type), source, source_rect, animFrame))
rect_draw_some_item(source, source_rect, *inWindow, to_rect);
std::tie(from_gw,from_rect) = spec_scen_g.find_graphic(num+1);
to_rect.offset(dlog_to_w,0);
from_rect.right = from_rect.left + 18;
from_rect.bottom = from_rect.top + 36;
rect_draw_some_item(from_gw, from_rect, *inWindow, to_rect);
to_rect.offset(dlog_to_w,0);
if (get_picture(cPictNum(num+1, source_type), source, source_rect, animFrame))
rect_draw_some_item(source, source_rect, *inWindow, to_rect);
}
else {
to_rect.right = to_rect.left + 36;
to_rect.bottom = to_rect.top + 36;
if (get_picture(cPictNum(num, getSourceType(ePicType::PIC_CUSTOM_DLOG)), source, source_rect, animFrame))
rect_draw_some_item(source, source_rect, *inWindow, to_rect);
}
}
void cPict::drawCustomDlogLg(short num, rectangle to_rect){
// CHECKME: this does not make any sense
if(drawScaled) {
dlog_to_w = 9;
dlog_to_h = 18;
@@ -1184,7 +1235,7 @@ void cPict::drawCustomDlogLg(short num, rectangle to_rect){
drawCustomDlog(num + 6,to_rect);
if(drawScaled) {
dlog_to_w = 18;
dlog_to_h = 26;
dlog_to_h = 36;
}
}
@@ -1212,7 +1263,7 @@ void cPict::drawCustomItem(short num, rectangle to_rect){
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, fromType!=ePicType::PIC_NONE ? fromType : ePicType::PIC_CUSTOM_ITEM), source, source_rect, animFrame))
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_CUSTOM_ITEM)), source, source_rect, animFrame))
return;
rect_draw_some_item(source, source_rect, *inWindow, to_rect, sf::BlendAlpha);
}
@@ -1224,7 +1275,7 @@ void cPict::drawCustomTinyItem(short num, rectangle to_rect){
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, fromType!=ePicType::PIC_NONE ? fromType : ePicType::PIC_CUSTOM_TINY_ITEM), source, source_rect, animFrame))
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_CUSTOM_TINY_ITEM)), source, source_rect, animFrame))
return;
rect_draw_some_item(source, source_rect, *inWindow, to_rect, sf::BlendAlpha);
}
@@ -1255,7 +1306,7 @@ void cPict::drawCustomMissile(short num, rectangle to_rect){
void cPict::drawCustomTerMap(short num, rectangle to_rect){
Texture source;
rectangle source_rect;
if (!get_picture(cPictNum(num, fromType!=ePicType::PIC_NONE ? fromType : ePicType::PIC_CUSTOM_TER_MAP), source, source_rect, animFrame))
if (!get_picture(cPictNum(num, getSourceType(ePicType::PIC_CUSTOM_TER_MAP)), source, source_rect, animFrame))
return;
rect_draw_some_item(source, source_rect, *inWindow, to_rect);
}

View File

@@ -151,6 +151,9 @@ private:
void drawPartyScen(short num, rectangle to_rect);
void drawPartyItem(short num, rectangle to_rect);
void drawPartyPc(short num, rectangle to_rect);
ePicType getSourceType(ePicType defaultType) const {
return fromType==ePicType::PIC_NONE ? defaultType : fromType;
}
static std::map<ePicType,void(cPict::*)(short,rectangle)>& drawPict();
};