home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Programmierung / SOURCE.mdf / programm / msdos / pascal / rehack / game / game.cpp next >
Encoding:
C/C++ Source or Header  |  1993-07-09  |  2.4 KB  |  126 lines

  1. #include "..\GAME\GAME.HPP"
  2.  
  3. // ------------------------------------------------------------------
  4. // File:        GAME.CPP
  5. // Path:        ...\REHACK\GAME\GAME.CPP
  6. // Version:        0.01
  7. // Author:        Pat Reilly
  8. // CIS Id:        71333,2764
  9. // Created On:    6/28/93
  10. // Modified On:
  11. // Description:    Game class for REHACK. See GAME.TXT for
  12. //                more details.
  13. // Tabs:        4
  14. // ------------------------------------------------------------------
  15.  
  16. GameInit::GameInit(VisMaker makeCloseUp, VisMaker makeAutoMap,
  17.                    VisMaker makeButtons, VisMaker makeCharacter,
  18.                    VisMaker makeMessage) :
  19.                    closeUpMaker(makeCloseUp),
  20.                    autoMapMaker(makeAutoMap),
  21.                    buttonsMaker(makeButtons),
  22.                    characterMaker(makeCharacter),
  23.                    messageMaker(makeMessage)
  24. {}
  25.  
  26.  
  27. EventQueue Game::eventQueue;
  28. Mouse Game::mouse;
  29. Keyboard Game::keyboard;
  30. Game*  Game::game = 0;
  31. Visible* Game::closeUp = 0;
  32. Visible* Game::autoMap = 0;
  33. Visible* Game::buttons = 0;
  34. Visible* Game::character = 0;
  35. Visible* Game::message = 0;
  36.  
  37. Game::Game(const Rect& aBounds) :
  38.     Window(aBounds),
  39.     GameInit(0, 0, 0, 0, 0)
  40. {
  41.     game = this;
  42.     Rect rect = getLocalBounds();
  43.  
  44.     // Insert the subwindows.
  45.     if(closeUpMaker != 0)
  46.         {
  47.         closeUp = closeUpMaker(rect);
  48.         insert(closeUp);
  49.         }
  50.     if(autoMapMaker != 0)
  51.         {
  52.         autoMap = autoMapMaker(rect);
  53.         insert(autoMap);
  54.         }
  55.     if(buttonsMaker != 0)
  56.         {
  57.         buttons = buttonsMaker(rect);
  58.         insert(buttons);
  59.         }
  60.     if(characterMaker != 0)
  61.         {
  62.         character = characterMaker(rect);
  63.         insert(character);
  64.         }
  65.     if(messageMaker != 0)
  66.         {
  67.         message = messageMaker(rect);
  68.         insert(message);
  69.         }
  70.  
  71.     // Initialize the mouse.
  72.     mouse.install();
  73.     rect.bottomRight.x--;
  74.     rect.bottomRight.y--;
  75.     mouse.setBounds(rect);
  76.     mouse.show();
  77.  
  78.     // install keyboard routines
  79.     keyboard.install();
  80.  
  81. }
  82.  
  83. Game::~Game()
  84. {
  85.     mouse.remove();
  86.     keyboard.remove();
  87. }
  88.  
  89. void Game::get(Event& event)
  90. {
  91.     eventQueue.get(event);
  92.     if(event.isNull())
  93.         idle();
  94. }
  95.  
  96. void Game::handle(Event& event)
  97. {
  98.     if((event.type & Message) && event.msg.id == IdQuit)
  99.         {
  100.         stopRunning(event.msg.id);
  101.         event.clear();
  102.         }
  103.     else
  104.         Window::handle(event);
  105. }
  106.  
  107. void Game::idle()
  108. {}
  109.  
  110. bool Game::sendMessage(Visible* obj, word type, word id, void* info)
  111. {
  112.     Event event;
  113.  
  114.     event.type = type;
  115.     event.msg.id = id;
  116.     event.msg.pointerValue = info;
  117.  
  118.     if(obj != 0)
  119.         {
  120.         obj->handle(event);
  121.         return bool(event.isNull());
  122.         }
  123.     else
  124.         return false;
  125. }
  126.