src/Graphics/GameView.cc
branchnew_graphics
changeset 412 721c60072091
parent 411 106aaf6eadfe
child 414 cede5463b845
equal deleted inserted replaced
411:106aaf6eadfe 412:721c60072091
     6 
     6 
     7 namespace graphics
     7 namespace graphics
     8 {
     8 {
     9 
     9 
    10 GameView::GameView (GameState &state, LocalPlayer *player) :
    10 GameView::GameView (GameState &state, LocalPlayer *player) :
    11     View(PixelArea(0, 0, graphics->display.get_width, graphics->display.get_height)),
    11     View(PixelArea(0, 0, graphics->display.get_width(), graphics->display.get_height())),
    12     state(state), player(NULL), info_view(NULL), message_view(getMessageViewArea())
    12     state(state), player(NULL), info_view(NULL), message_view(getMessageViewArea()),
       
    13     flags(0)
    13 {
    14 {
    14     // have player?
    15     // have player?
    15     if (player)
    16     if (player)
    16         setPlayer(player);
    17         setPlayer(player);
    17 
    18 
    18     // insert message
    19     // insert message
    19     message_view.add_message("Hello World!");
    20     message_view.add_message(CL_Color::white, "Hello World!");
    20 }
    21 }
    21 
    22 
    22 void GameView::setPlayer (LocalPlayer *player) {
    23 void GameView::setPlayer (LocalPlayer *player) {
    23     assert(!this->player && player);
    24     assert(!this->player && player);
    24     
    25     
    27 
    28 
    28     // build the info_view as well
    29     // build the info_view as well
    29     info_view = new PlayerInfoView(getInfoViewArea(), player);
    30     info_view = new PlayerInfoView(getInfoViewArea(), player);
    30 }
    31 }
    31 
    32 
       
    33 /*
       
    34  * Helper function for Camera
       
    35  */
       
    36 static PixelDimension value_between (PixelDimension low, PixelDimension value, PixelDimension high) {
       
    37         if (high < low)
       
    38             return (high + low) / 2;
    32 
    39 
    33 void GameView::draw (Display *display) {
    40         else if (value < low)
    34     CL_GraphicContext *gc = display->get_gc();
    41             return low;
       
    42 
       
    43         else if (value > high)
       
    44             return high;
       
    45 
       
    46         else
       
    47             return value;
       
    48 }
       
    49 
       
    50 void GameView::draw (Display &display) {
       
    51     CL_GraphicContext *gc = display.get_gc();
    35 
    52 
    36     // calculate camera
    53     // calculate camera
    37     PixelCoordinate camera(0, 0);
    54     PixelCoordinate camera(0, 0);
    38     
    55     
    39     // ...to track our local player
    56     // ...to track our local player
    40     if (player != NULL) {
    57     if (player != NULL) {
    41         // display resolution
    58         // display resolution
    42         PixelCoordinate resolution = display->getResolution();
    59         PixelCoordinate resolution = display.getResolution();
    43 
    60 
    44         // try and center the screen on the player
    61         // try and center the screen on the player
    45         PixelCoordinate target = player->getCoordinate() - PixelCoordinate(resolution.x / 2, (resolution.y - 100) / 2);
    62         PixelCoordinate target = player->getCoordinate() - PixelCoordinate(resolution.x / 2, (resolution.y - 100) / 2);
    46 
    63 
    47         // ...but keep the world in view
    64         // ...but keep the world in view
    56     
    73     
    57     // Black background
    74     // Black background
    58     gc->clear(CL_Color::black);
    75     gc->clear(CL_Color::black);
    59 
    76 
    60     // Draw the game
    77     // Draw the game
    61     state.draw(this, camera, flags & GUI_INPUT_DISPLAY_WEAPON);
    78     state.draw(display, camera, flags & GUI_INPUT_DISPLAY_WEAPON);
    62     
    79     
    63     // draw info view?
    80     // draw info view?
    64     if (info_view)
    81     if (info_view)
    65         info_view->draw(display);
    82         info_view->draw(display);
    66 
    83 
    67     // draw messages
    84     // draw messages
    68     message_view.draw(this);
    85     message_view.draw(display);
    69 }
    86 }
    70 
    87 
    71 void GameView::resize (const PixelArea &new_area) {
    88 void GameView::resize (const PixelArea &new_area) {
    72     View::resize(new_area);
    89     View::resize(new_area);
    73     
    90     
    76         info_view->resize(getInfoViewArea());
    93         info_view->resize(getInfoViewArea());
    77     
    94     
    78     message_view.resize(getMessageViewArea());
    95     message_view.resize(getMessageViewArea());
    79 
    96 
    80     // log message
    97     // log message
    81     message_view.add_message(CL_Color::yellow, CL_String::format("[ Resized window to %1 x %2 ]", getWidth(), getHeight()));
    98     message_view.add_message(CL_Color::yellow, CL_String::format("[ Resized window to %1 x %2 ]", (int) getWidth(), (int) getHeight()));
    82 }
    99 }
    83 
   100 
    84 
   101 
    85 }
   102 }