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 } |