/[enigma]/enigma/src/game.cc
ViewVC logotype

Diff of /enigma/src/game.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.33 by reallysoft, Mon Jun 30 12:31:27 2003 UTC revision 1.34 by reallysoft, Sun Jul 6 12:41:34 2003 UTC
# Line 42  namespace Line 42  namespace
42  {  {
43      class GameMenu : public gui::Menu {      class GameMenu : public gui::Menu {
44      public:      public:
45          GameMenu();          GameMenu(int zoomxpos_, int zoomypos_);
46            virtual ~GameMenu();
47      private:      private:
48          bool on_event (const SDL_Event &e);          bool on_event (const SDL_Event &e);
49          void on_action(gui::Widget *w);          void on_action(gui::Widget *w);
50            void draw_background(px::GC &gc);
51    
52          gui::Widget *resume, *restart, *options, *abort;          gui::Widget *resume, *restart, *options, *abort;
53            px::Surface *zoomed;
54            int          zoomxpos, zoomypos; // position to be zoomed
55      };      };
56    
57      class Game {      class Game {
# Line 104  namespace Line 109  namespace
109  // GameMenu impl  // GameMenu impl
110  //----------------------------------------  //----------------------------------------
111    
112  GameMenu::GameMenu()  GameMenu::GameMenu(int zoomxpos_, int zoomypos_)
113  : resume(new gui::TextButton("Resume Level", this)),  : resume(new gui::TextButton("Resume Level", this)),
114    restart(new gui::TextButton("Restart Level", this)),    restart(new gui::TextButton("Restart Level", this)),
115    options(new gui::TextButton("Options", this)),    options(new gui::TextButton("Options", this)),
116    abort(new gui::TextButton("Abort Level", this))    abort(new gui::TextButton("Abort Level", this)),
117      zoomed(0),
118      zoomxpos(zoomxpos_),
119      zoomypos(zoomypos_)
120  {  {
121      add(resume,     Rect(0,0,150,40));      add(resume,     Rect(0,0,150,40));
122      add(restart,    Rect(0,45,150,40));      add(restart,    Rect(0,45,150,40));
# Line 117  GameMenu::GameMenu() Line 125  GameMenu::GameMenu()
125      center(video::GetScreen());      center(video::GetScreen());
126  }  }
127    
128    GameMenu::~GameMenu() {
129        delete(zoomed);
130    }
131    
132    void
133    GameMenu::draw_background(px::GC &gc) {
134        if (!zoomed) {
135            const int PART             = 3;
136            const int WIDTH            = 640;
137            const int SCREEN_HEIGHT    = 480;
138            const int INVENTORY_HEIGHT = 64;
139            const int GAME_HEIGHT      = SCREEN_HEIGHT-INVENTORY_HEIGHT;
140            const int PART_WIDTH       = WIDTH/PART;
141            const int PART_HEIGHT      = SCREEN_HEIGHT/PART;
142    
143            // randomly choose upper-left corner (zoomxypos is always visible)
144            int x = zoomxpos - IntegerRand(16, PART_WIDTH-16-1);
145            int y = zoomypos - IntegerRand(16, PART_HEIGHT-16-1);
146    
147            x = min(max(0, x), WIDTH-(PART_WIDTH+16-1));
148            y = min(max(0, y), GAME_HEIGHT-(PART_HEIGHT+16-1));
149    
150            x = (x/32)*32+24;
151            y = (y/32)*32+16;
152    
153            Surface  back(video::GetScreen()->get_surface());
154            Rect     src_area(x, y, PART_WIDTH, PART_HEIGHT);
155            Surface *src = Grab(&back, src_area);
156    
157            // zoom 3 times to get softer image :
158            {
159                Surface *zoom1 = src->zoom(WIDTH/3, SCREEN_HEIGHT/3);
160                Surface *zoom2 = src->zoom(WIDTH/6, SCREEN_HEIGHT/6);
161                zoomed         = zoom1->zoom(WIDTH, SCREEN_HEIGHT);
162                delete zoom2;
163                delete zoom1;
164            }
165            delete src;
166        }
167    
168        px::blit(gc, 0,0, zoomed);
169    }
170    
171  bool  bool
172  GameMenu::on_event (const SDL_Event &e) {  GameMenu::on_event (const SDL_Event &e) {
173      if (e.type == SDL_MOUSEBUTTONDOWN      if (e.type == SDL_MOUSEBUTTONDOWN
# Line 144  GameMenu::on_action(gui::Widget *w) { Line 195  GameMenu::on_action(gui::Widget *w) {
195      }      }
196      else if (w == options)      else if (w == options)
197      {      {
198          GUI_OptionsMenu();          GUI_OptionsMenu(zoomed);
199          if (options::MustRestartLevel) {          if (options::MustRestartLevel) {
200              options::MustRestartLevel = false;              options::MustRestartLevel = false;
201              enigma::RestartGame();              enigma::RestartGame();
# Line 675  Game::show_menu() Line 726  Game::show_menu()
726      sdl::TempInputGrab grab(SDL_GRAB_OFF);      sdl::TempInputGrab grab(SDL_GRAB_OFF);
727    
728      video::ShowMouse();      video::ShowMouse();
729      GameMenu().manage(screen);      {
730            int x, y;
731            display::GetReferencePointCoordinates(&x, &y);
732            GameMenu(x, y).manage(screen);
733        }
734      video::HideMouse();      video::HideMouse();
735      update_mouse_button_state();      update_mouse_button_state();
736      last_tick_time = SDL_GetTicks();      last_tick_time = SDL_GetTicks();

Legend:
Removed from v.1.33  
changed lines
  Added in v.1.34

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26