From 2b6469e391277c911fa474db997d84ab9e0cdcdf Mon Sep 17 00:00:00 2001 From: Xawotihs Date: Sat, 20 Nov 2010 21:30:15 +0000 Subject: [PATCH] Mouse support in deck editor --- projects/mtg/include/GameStateDeckViewer.h | 6 ++-- projects/mtg/src/GameStateDeckViewer.cpp | 35 +++++++++++++++++++++- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/projects/mtg/include/GameStateDeckViewer.h b/projects/mtg/include/GameStateDeckViewer.h index 3694a06fe..6683261e3 100644 --- a/projects/mtg/include/GameStateDeckViewer.h +++ b/projects/mtg/include/GameStateDeckViewer.h @@ -76,11 +76,12 @@ enum DECK_VIEWER_MENU_ITEMS #define LOW_SPEED 1.5 #define MAX_SAVED_FILTERS 8 +#define CARDS_DISPLAYED 7 class GameStateDeckViewer: public GameState, public JGuiListener { private: - JQuad * mIcons[7]; + JQuad * mIcons[CARDS_DISPLAYED]; JQuad * pspIcons[8]; JTexture * pspIconsTexture; float last_user_activity; @@ -109,7 +110,7 @@ private: DeckDataWrapper * displayed_deck; DeckDataWrapper * myDeck; DeckDataWrapper * myCollection; - MTGCard * cardIndex[7]; + MTGCard * cardIndex[CARDS_DISPLAYED]; StatsWrapper *stw; int hudAlpha; @@ -119,6 +120,7 @@ private: void saveDeck(); //Saves the deck and additional necessary information void saveAsAIDeck(string deckName); // saves deck as an AI Deck int getCurrentPos(); + pair cardsCoordinates[CARDS_DISPLAYED]; public: GameStateDeckViewer(GameApp* parent); diff --git a/projects/mtg/src/GameStateDeckViewer.cpp b/projects/mtg/src/GameStateDeckViewer.cpp index d73e5cf5a..c1805eac1 100644 --- a/projects/mtg/src/GameStateDeckViewer.cpp +++ b/projects/mtg/src/GameStateDeckViewer.cpp @@ -339,6 +339,11 @@ void GameStateDeckViewer::Update(float dt) int myD = (displayed_deck == myDeck); + int x, y; + unsigned int distance2; + unsigned int minDistance2 = -1; + int n; + if (options.keypadActive()) { options.keypadUpdate(dt); @@ -463,6 +468,32 @@ void GameStateDeckViewer::Update(float dt) else if ((mStage == STAGE_ONSCREEN_MENU) && (++stw->currentPage > stw->pageCount)) stw->currentPage = 0; break; default: // no keypress + if (mEngine->GetLeftClickCoordinates(x, y)) + { + for(int i=0; i < CARDS_DISPLAYED; i++) + { + distance2 = (cardsCoordinates[i].second - y) * (cardsCoordinates[i].second - y) + (cardsCoordinates[i].first - x) * (cardsCoordinates[i].first - x); + if (distance2 < minDistance2) + { + minDistance2 = distance2; + n = i; + } + } + + if (n < ((CARDS_DISPLAYED/2) - 1)) + { + last_user_activity = 0; + mStage = STAGE_TRANSITION_RIGHT; + } + if (n > ((CARDS_DISPLAYED/2) + 1)) + { + last_user_activity = 0; + mStage = STAGE_TRANSITION_LEFT; + } + mEngine->LeftClickedProcessed(); + break; + } + if (last_user_activity > NO_USER_ACTIVITY_HELP_DELAY) { if (mStage != STAGE_ONSCREEN_MENU) @@ -1272,6 +1303,8 @@ void GameStateDeckViewer::renderCard(int id, float rotation) float y = (SCREEN_HEIGHT_F) / 2.0f + SCREEN_HEIGHT_F * mSlide * (scale + 0.2f); + cardsCoordinates[id] = pair(x, y); + int alpha = (int) (255 * (scale + 1.0 - max_scale)); if (!card) return; @@ -1354,8 +1387,8 @@ void GameStateDeckViewer::Render() { WFont * mFont = resources.GetWFont(Fonts::MAIN_FONT); - JRenderer * r = JRenderer::GetInstance(); + r->ClearScreen(ARGB(0,0,0,0)); if (displayed_deck == myDeck && mStage != STAGE_MENU) renderDeckBackground(); int order[3] = { 1, 2, 3 };