Commit abc66ec9 authored by fallenstardust's avatar fallenstardust

add card big picture

parent 72275db4
......@@ -122,7 +122,53 @@ inline void showDeckManage() {
mainGame->lstDecks->setSelected(mainGame->deckBuilder.prev_deck);
mainGame->PopupElement(mainGame->wDeckManage);
}
inline void ShowBigCard(int code, float zoom) {
mainGame->deckBuilder.bigcard_code = code;
mainGame->deckBuilder.bigcard_zoom = zoom;
ITexture* img = imageManager.GetBigPicture(code, zoom);
mainGame->imgBigCard->setImage(img);
auto size = img->getSize();
dimension2du window_size = mainGame->driver->getScreenSize();
s32 left = window_size.Width / 2 - size.Width / 2;
s32 top = window_size.Height / 2 - size.Height / 2;
mainGame->imgBigCard->setRelativePosition(recti(0, 0, size.Width, size.Height));
mainGame->wBigCard->setRelativePosition(recti(left, top, left + size.Width, top + size.Height));
mainGame->gMutex.lock();
mainGame->btnBigCardOriginalSize->setVisible(true);
mainGame->btnBigCardZoomIn->setVisible(true);
mainGame->btnBigCardZoomOut->setVisible(true);
mainGame->btnBigCardClose->setVisible(true);
mainGame->ShowElement(mainGame->wBigCard);
mainGame->env->getRootGUIElement()->bringToFront(mainGame->wBigCard);
mainGame->gMutex.unlock();
}
inline void ZoomBigCard(s32 centerx = -1, s32 centery = -1) {
if(mainGame->deckBuilder.bigcard_zoom >= 4)
mainGame->deckBuilder.bigcard_zoom = 4;
if(mainGame->deckBuilder.bigcard_zoom <= 0.2)
mainGame->deckBuilder.bigcard_zoom = 0.2;
ITexture* img = imageManager.GetBigPicture(mainGame->deckBuilder.bigcard_code, mainGame->deckBuilder.bigcard_zoom);
mainGame->imgBigCard->setImage(img);
auto size = img->getSize();
auto pos = mainGame->wBigCard->getRelativePosition();
if(centerx == -1) {
centerx = pos.UpperLeftCorner.X + pos.getWidth() / 2;
centery = pos.UpperLeftCorner.Y + pos.getHeight() * 0.444f;
}
float posx = (float)(centerx - pos.UpperLeftCorner.X) / pos.getWidth();
float posy = (float)(centery - pos.UpperLeftCorner.Y) / pos.getHeight();
s32 left = centerx - size.Width * posx;
s32 top = centery - size.Height * posy;
mainGame->imgBigCard->setRelativePosition(recti(0, 0, size.Width, size.Height));
mainGame->wBigCard->setRelativePosition(recti(left, top, left + size.Width, top + size.Height));
}
inline void CloseBigCard() {
mainGame->HideElement(mainGame->wBigCard);
mainGame->btnBigCardOriginalSize->setVisible(false);
mainGame->btnBigCardZoomIn->setVisible(false);
mainGame->btnBigCardZoomOut->setVisible(false);
mainGame->btnBigCardClose->setVisible(false);
}
void DeckBuilder::Initialize() {
mainGame->is_building = true;
mainGame->is_siding = false;
......@@ -174,6 +220,11 @@ void DeckBuilder::Terminate() {
mainGame->imgChat->setVisible(true);
mainGame->wSettings->setVisible(false);
mainGame->wLogs->setVisible(false);
mainGame->wBigCard->setVisible(false);
mainGame->btnBigCardOriginalSize->setVisible(false);
mainGame->btnBigCardZoomIn->setVisible(false);
mainGame->btnBigCardZoomOut->setVisible(false);
mainGame->btnBigCardClose->setVisible(false);
mainGame->PopupElement(mainGame->wMainMenu);
mainGame->device->setEventReceiver(&mainGame->menuHandler);
mainGame->wACMessage->setVisible(false);
......@@ -785,6 +836,24 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
deckManager.LoadDeck(mainGame->cbCategorySelect, mainGame->cbDeckSelect);
break;
}
case BUTTON_BIG_CARD_ORIG_SIZE: {
ShowBigCard(bigcard_code, 1);
break;
}
case BUTTON_BIG_CARD_ZOOM_IN: {
bigcard_zoom += 0.2;
ZoomBigCard();
break;
}
case BUTTON_BIG_CARD_ZOOM_OUT: {
bigcard_zoom -= 0.2;
ZoomBigCard();
break;
}
case BUTTON_BIG_CARD_CLOSE: {
CloseBigCard();
break;
}
case BUTTON_MSG_OK: {
mainGame->HideElement(mainGame->wMessage);
mainGame->actionSignal.Set();
......@@ -1140,6 +1209,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
}
case irr::EMIE_LMOUSE_LEFT_UP: {
is_starting_dragging = false;
irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
if(!is_draging)
break;
mainGame->soundManager->PlaySoundEffect(SoundManager::SFX::CARD_DROP);
......@@ -1163,6 +1233,14 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
is_draging = false;
break;
}
case irr::EMIE_LMOUSE_DOUBLE_CLICK: {
irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
if(!is_draging && !mainGame->is_siding && root->getElementFromPoint(mouse_pos) == root && hovered_code) {
ShowBigCard(hovered_code, 1);
break;
}
break;
}
case irr::EMIE_RMOUSE_LEFT_UP: {
if(mainGame->is_siding) {
if(is_draging)
......@@ -1185,6 +1263,10 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
}
break;
}
if(mainGame->wBigCard->isVisible()) {
CloseBigCard();
break;
}
if(havePopupWindow())
break;
if(!is_draging) {
......@@ -1263,22 +1345,20 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
is_starting_dragging = false;
}
mouse_pos.set(event.MouseInput.X, event.MouseInput.Y);
/* if(hovered_pos == 4 && mainGame->scrFilter->isVisible()) {
if(dragy - mouse_pos.Y > 0 && mainGame->scrFilter->getPos() < mainGame->scrFilter->getMax()) {
mainGame->scrFilter->setPos(mainGame->scrFilter->getPos() + 1);
} else if(dragy - mouse_pos.Y < 0 && mainGame->scrFilter->getPos() > 0){
mainGame->scrFilter->setPos(mainGame->scrFilter->getPos() - 1);
}
}*/
GetHoveredCard();
break;
}
case irr::EMIE_MOUSE_WHEEL: {
irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
if(root->getElementFromPoint(mouse_pos) == mainGame->imgBigCard) {
bigcard_zoom += 0.1f * event.MouseInput.Wheel;
ZoomBigCard(mouse_pos.X, mouse_pos.Y);
break;
}
if(!mainGame->scrFilter->isVisible())
break;
if(mainGame->env->hasFocus(mainGame->scrFilter))
break;
irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
if(root->getElementFromPoint(mouse_pos) != root)
break;
if(event.MouseInput.Wheel < 0) {
......@@ -1371,13 +1451,9 @@ void DeckBuilder::GetHoveredCard() {
if(pos >= (int)results.size()) {
hovered_seq = -1;
hovered_code = 0;
//} else if(x >= 805 * mainGame->xScale && x <= 850 * mainGame->xScale) {
} else {
hovered_code = results[pos]->first;
//} else if(x > 850 * mainGame->xScale && x <= 995 * mainGame->xScale) {
// mainGame->ShowCardInfo(results[pos]->first);
}
}
if(is_draging) {
dragx = x;
......
......@@ -62,6 +62,8 @@ public:
bool is_starting_dragging;
int dragx;
int dragy;
int bigcard_code;
float bigcard_zoom;
size_t pre_mainc;
size_t pre_extrac;
size_t pre_sidec;
......
......@@ -988,6 +988,23 @@ bool Game::Initialize(ANDROID_APP app) {
chkMusicMode->setVisible(false);
}
#endif
//big picture
wBigCard = env->addWindow(rect<s32>(0, 0, 0, 0), false, L"");
wBigCard->getCloseButton()->setVisible(false);
wBigCard->setDrawTitlebar(false);
wBigCard->setDrawBackground(false);
wBigCard->setVisible(false);
imgBigCard = env->addImage(rect<s32>(0, 0, 0, 0), wBigCard);
imgBigCard->setScaleImage(false);
imgBigCard->setUseAlphaChannel(true);
btnBigCardOriginalSize = env->addButton(rect<s32>(200 * yScale, 100 * yScale, 305 * yScale, 135 * yScale), 0, BUTTON_BIG_CARD_ORIG_SIZE, dataManager.GetSysString(1443));
btnBigCardZoomIn = env->addButton(rect<s32>(200 * yScale, 140 * yScale, 305 * yScale, 175 * yScale), 0, BUTTON_BIG_CARD_ZOOM_IN, dataManager.GetSysString(1441));
btnBigCardZoomOut = env->addButton(rect<s32>(200 * yScale, 180 * yScale, 305 * yScale, 215 * yScale), 0, BUTTON_BIG_CARD_ZOOM_OUT, dataManager.GetSysString(1442));
btnBigCardClose = env->addButton(rect<s32>(200 * yScale, 220 * yScale, 305 * yScale, 275 * yScale), 0, BUTTON_BIG_CARD_CLOSE, dataManager.GetSysString(1440));
btnBigCardOriginalSize->setVisible(false);
btnBigCardZoomIn->setVisible(false);
btnBigCardZoomOut->setVisible(false);
btnBigCardClose->setVisible(false);
//leave/surrender/exit
btnLeaveGame = env->addButton(rect<s32>(200 * yScale, 1 * yScale, 305 * yScale, 80 * yScale), 0, BUTTON_LEAVE_GAME, L"");
btnLeaveGame->setVisible(false);
......
......@@ -576,6 +576,13 @@ public:
irr::gui::IGUIButton* btnChainWhenAvail;
//cancel or finish
irr::gui::IGUIButton* btnCancelOrFinish;
//big picture
irr::gui::IGUIWindow* wBigCard;
irr::gui::IGUIImage* imgBigCard;
irr::gui::IGUIButton* btnBigCardOriginalSize;
irr::gui::IGUIButton* btnBigCardZoomIn;
irr::gui::IGUIButton* btnBigCardZoomOut;
irr::gui::IGUIButton* btnBigCardClose;
float xScale;
float yScale;
......@@ -832,6 +839,10 @@ private:
#define CHECKBOX_MULTI_KEYWORDS 372
#define CHECKBOX_PREFER_EXPANSION 373
#define CHECKBOX_DRAW_SINGLE_CHAIN 374
#define BUTTON_BIG_CARD_CLOSE 380
#define BUTTON_BIG_CARD_ZOOM_IN 381
#define BUTTON_BIG_CARD_ZOOM_OUT 382
#define BUTTON_BIG_CARD_ORIG_SIZE 383
#define DEFAULT_DUEL_RULE 5
......
......@@ -8,6 +8,7 @@ ImageManager imageManager;
bool ImageManager::Initial(const path dir) {
tCover[0] = driver->getTexture((dir + path("/textures/cover.jpg")).c_str());
tCover[1] = driver->getTexture((dir + path("/textures/cover2.jpg")).c_str());
tBigPicture = NULL;
if(!tCover[1])
tCover[1] = tCover[0];
tUnknown = driver->getTexture((dir + path("/textures/unknown.jpg")).c_str());
......@@ -82,6 +83,10 @@ void ImageManager::ClearTexture() {
}
tMap.clear();
tThumb.clear();
if(tBigPicture != NULL) {
driver->removeTexture(tBigPicture);
tBigPicture = NULL;
}
}
void ImageManager::RemoveTexture(int code) {
auto tit = tMap.find(code);
......@@ -148,6 +153,37 @@ irr::video::ITexture* ImageManager::GetTexture(int code) {
else
return GetTextureThumb(code);
}
irr::video::ITexture* ImageManager::GetBigPicture(int code, float zoom) {
if(code == 0)
return tUnknown;
if(tBigPicture != NULL) {
driver->removeTexture(tBigPicture);
tBigPicture = NULL;
}
irr::video::ITexture* texture;
char file[256];
sprintf(file, "expansions/pics/%d.jpg", code);
irr::video::IImage* srcimg = driver->createImageFromFile(file);
if(srcimg == NULL) {
sprintf(file, "pics/%d.jpg", code);
srcimg = driver->createImageFromFile(file);
}
if(srcimg == NULL) {
return tUnknown;
}
if(zoom == 1) {
texture = driver->addTexture(file, srcimg);
} else {
auto origsize = srcimg->getDimension();
video::IImage* destimg = driver->createImage(srcimg->getColorFormat(), irr::core::dimension2d<u32>(origsize.Width * zoom, origsize.Height * zoom));
//imageScaleNNAA(srcimg, destimg);
texture = driver->addTexture(file, destimg);
destimg->drop();
}
srcimg->drop();
tBigPicture = texture;
return texture;
}
irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
return tUnknown;
}
......
......@@ -17,6 +17,7 @@ public:
void RemoveTexture(int code);
// irr::video::ITexture* GetTextureFromFile(char* file, s32 width, s32 height);
irr::video::ITexture* GetTexture(int code);
irr::video::ITexture* GetBigPicture(int code, float zoom);
irr::video::ITexture* GetTextureThumb(int code);
irr::video::ITexture* GetTextureField(int code);
......@@ -28,6 +29,7 @@ public:
irr::IrrlichtDevice* device;
irr::video::IVideoDriver* driver;
irr::video::ITexture* tCover[2];
irr::video::ITexture* tBigPicture;
irr::video::ITexture* tUnknown;
irr::video::ITexture* tAct;
irr::video::ITexture* tAttack;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment