void PingusMenu::draw_background(DrawingContext& gc) { background->draw(gc); gc.draw(logo, Vector2i((gc.get_width()/2) - (logo.get_width()/2), gc.get_height()/2 - 280)); gc.print_left(Fonts::pingus_small, Vector2i(gc.get_width()/2 - 400 + 25, gc.get_height()-140), "Pingus " VERSION " - Copyright (C) 1998-2011 Ingo Ruhnke <*****@*****.**>\n" "See the file AUTHORS for a complete list of contributors.\n" "Pingus comes with ABSOLUTELY NO WARRANTY. This is free software, and you are\n" "welcome to redistribute it under certain conditions; see the file COPYING for details.\n"); gc.draw_fillrect(Rect(0, Display::get_height () - 26, Display::get_width (), Display::get_height ()), Color(0, 0, 0, 255)); gc.print_center(Fonts::pingus_small, Vector2i(gc.get_width() / 2, gc.get_height() - Fonts::pingus_small.get_height() - 8), help); if (0) // display hint { gc.print_center(Fonts::pingus_small, Vector2i(gc.get_width() / 2, gc.get_height() - Fonts::pingus_small.get_height()), hint); } }
void SmallMap::draw(DrawingContext& gc) { // FIXME: This is potentially dangerous, since we don't know how // long 'gc' will be alive. Should use a DrawingContext for caching. gc_ptr = &gc; World* const& world = server->get_world(); Vector2i of = playfield->get_pos(); Rect view_rect; if (world->get_width() > gc.get_width()) { int rwidth = int(gc.get_width() * rect.get_width() / world->get_width()); view_rect.left = rect.left + (of.x * rect.get_width() / world->get_width()) - rwidth/2; view_rect.right = view_rect.left + rwidth; } else { view_rect.left = rect.left; view_rect.right = rect.left + rect.get_width(); } if (world->get_height() > gc.get_height()) { int rheight = int(gc.get_height() * rect.get_height() / world->get_height()); view_rect.top = rect.top + (of.y * rect.get_height() / world->get_height()) - rheight/2; view_rect.bottom = view_rect.top + rheight; } else { view_rect.top = rect.top; view_rect.bottom = rect.top + rect.get_height(); } gc.draw(image->get_surface(), Vector2i(rect.left, rect.top)); gc.draw_rect(view_rect, Color(0, 255, 0)); server->get_world()->draw_smallmap(this); // Draw Pingus PinguHolder* pingus = world->get_pingus(); for(PinguIter i = pingus->begin(); i != pingus->end(); ++i) { int x = static_cast<int>(static_cast<float>(rect.left) + ((*i)->get_x() * static_cast<float>(rect.get_width()) / static_cast<float>(world->get_width()))); int y = static_cast<int>(static_cast<float>(rect.top) + ((*i)->get_y() * static_cast<float>(rect.get_height()) / static_cast<float>(world->get_height()))); gc.draw_line(Vector2i(x, y), Vector2i(x, y-2), Color(255, 255, 0)); } gc_ptr = 0; }
void StoryScreenComponent::draw (DrawingContext& gc) { gc.draw(background, Vector2i(gc.get_width()/2, gc.get_height()/2)); gc.print_center(Fonts::chalk_large, Display::get_width()/2, Display::get_height()/2 - 200, story->get_title()); gc.draw(page_surface, Vector2i(gc.get_width()/2, gc.get_height()/2 - 65)); gc.print_left(Fonts::chalk_normal, Display::get_width()/2 - 280, Display::get_height()/2 + 35, display_text); }
void Credits::draw_background (DrawingContext& gc) { { // Paint the background wood panel for(int y = 0; y < gc.get_height(); y += background.get_height()) for(int x = 0; x < gc.get_width(); x += background.get_width()) gc.draw(background, Vector2i(x, y)); } int x; int y; int yof; x = Display::get_width()/2; y = static_cast<int>(offset); gc.draw(blackboard, Vector2i(gc.get_width()/2, gc.get_height()/2)); gc.draw(pingu, Vector2i(gc.get_width()/2, gc.get_height()/2 - 20)); yof = 0; scene_context->clear(); scene_context->set_cliprect(Rect(gc.get_width()/2 - 685/2, gc.get_height()/2 - 250, gc.get_width()/2 + 685/2, gc.get_height()/2 + 250)); for (std::vector<std::string>::iterator i = credits.begin(); i != credits.end(); ++i) { switch ((*i)[0]) { case '-': scene_context->color().print_center(font, Vector2i(x, (y + yof)), i->substr(1)); yof += font.get_height() + 5; break; case '_': scene_context->color().print_center(font_small, Vector2i(x, (y + yof)), i->substr(1)); yof += font_small.get_height() + 5; break; case 'n': yof += 50; break; default: log_error("Credits: Syntax error: Unknown format: '%1%'", (*i)[0]); break; } } gc.draw(new SceneContextDrawingRequest(scene_context.get(), Vector2i(0,0), 100)); }
void OptionMenu::draw_background(DrawingContext& gc) { gc.fill_screen(Color(0, 0, 0)); // gc.draw_fillrect(Rect(100, 100, 400, 400), Color(255, 0, 0)); gc.draw(background, Vector2i(gc.get_width()/2 - background.get_width()/2, gc.get_height()/2 - background.get_height()/2)); gc.print_center(Fonts::chalk_large, Vector2i(gc.get_width()/2, gc.get_height()/2 - 210), _("Option Menu")); gc.print_center(Fonts::chalk_normal, Vector2i(gc.get_width()/2 + 225 + 30, gc.get_height()/2 + 125 - 20), _("Close")); }
void AddOnMenu::draw_background(DrawingContext& gc) { // gc.draw_fillrect(Rect(100, 100, 400, 400), Color(255, 0, 0)); gc.draw(background, Vector2i(gc.get_width()/2, gc.get_height()/2)); gc.print_center(Fonts::chalk_large, Vector2i(gc.get_width()/2, 90), "Add-On Menu"); gc.print_left(Fonts::chalk_normal, Vector2i(120, 145), "X-Mas Pingus Sprites"); gc.print_left(Fonts::chalk_small, Vector2i(140, 170), "christmas look for penguins"); gc.print_left(Fonts::chalk_small, Vector2i(140, 190), "Author: John Foo <*****@*****.**>"); gc.print_center(Fonts::chalk_normal, Vector2i(gc.get_width()/2, gc.get_height()/2 + 160), "Update Online [ ]"); gc.print_center(Fonts::chalk_normal, Vector2i(gc.get_width()/2 + 245 + 30, gc.get_height()/2 + 150 - 20), _("Close")); gc.draw(ok_button, Vector2i(gc.get_width()/2 + 245, gc.get_height()/2 + 150)); gc.draw(ok_button, Vector2i(610, 145)); }
void StoryScreenComponent::draw (DrawingContext& gc) { // Paint the background wood panel for(int y = 0; y < gc.get_height(); y += background.get_height()) for(int x = 0; x < gc.get_width(); x += background.get_width()) gc.draw(background, Vector2i(x, y)); gc.draw(blackboard, Vector2i(gc.get_width()/2, gc.get_height()/2)); gc.print_center(Fonts::chalk_large, Vector2i(gc.get_width()/2, gc.get_height()/2 - 200), story->get_title()); gc.draw(page_surface, Vector2i(gc.get_width()/2, gc.get_height()/2 - 65)); gc.print_left(Fonts::chalk_normal, Vector2i(gc.get_width()/2 - 280, gc.get_height()/2 + 35), display_text); }
void OptionMenu::draw_background(DrawingContext& gc) { // Paint the background wood panel for(int y = 0; y < gc.get_height(); y += m_background.get_height()) for(int x = 0; x < gc.get_width(); x += m_background.get_width()) gc.draw(m_background, Vector2i(x, y)); // gc.draw_fillrect(Rect(100, 100, 400, 400), Color(255, 0, 0)); gc.draw(m_blackboard, Vector2i(gc.get_width()/2, gc.get_height()/2)); gc.print_center(Fonts::chalk_large, Vector2i(gc.get_width()/2, gc.get_height()/2 - 240), _("Option Menu")); gc.print_center(Fonts::chalk_normal, Vector2i(gc.get_width()/2 + 245 + 30, gc.get_height()/2 + 150 - 20), _("Close")); gc.print_left(Fonts::chalk_normal, Vector2i(gc.get_width()/2 - 320, gc.get_height()/2 + 200), _("Some options require a restart of the game to take effect.")); }
void Thunderstorm::draw(DrawingContext& context) { if (!flash_display_timer.started()) return; float alpha = 0.33f; context.push_transform(); context.set_translation(Vector(0, 0)); context.color().draw_filled_rect(Vector(0, 0), Vector(static_cast<float>(context.get_width()), static_cast<float>(context.get_height())), Color(1, 1, 1, alpha), layer); context.pop_transform(); }
void StartScreenComponent::draw(DrawingContext& gc) { // Paint the background wood panel for(int y = 0; y < gc.get_height(); y += background.get_height()) for(int x = 0; x < gc.get_width(); x += background.get_width()) gc.draw(background, Vector2i(x, y)); gc.draw(blackboard, Vector2i(gc.get_width()/2, gc.get_height()/2)); int left_x = gc.get_width()/2 - 150; int right_x = gc.get_width()/2 + 150; int y = gc.get_height()/2 + 40; gc.print_center(Fonts::chalk_large, Vector2i(gc.get_width() /2, gc.get_height()/2 - 230), _(plf.get_levelname())); gc.print_left(Fonts::chalk_normal, Vector2i(gc.get_width() /2 - 300, gc.get_height()/2 - 170), format_description(800 - 200)); y += 32; y += 45; gc.print_left (Fonts::chalk_normal, Vector2i(left_x, y), _("Number of Pingus: ")); gc.print_right(Fonts::chalk_normal, Vector2i(right_x, y), StringUtil::to_string(plf.get_number_of_pingus())); gc.print_left (Fonts::chalk_normal, Vector2i(left_x, (y += 30)), _("Number to Save: ")); gc.print_right(Fonts::chalk_normal, Vector2i(right_x, y), StringUtil::to_string(plf.get_number_to_save())); gc.print_left (Fonts::chalk_normal, Vector2i(left_x, (y += 30)), _("Time: ")); gc.print_right(Fonts::chalk_normal, Vector2i(right_x, y), time_str); gc.print_center(Fonts::chalk_small, Vector2i(gc.get_width()/2, gc.get_height()/2 + 215), _("Author: ") + plf.get_author()); if (globals::developer_mode) { gc.print_center(Fonts::chalk_small, Vector2i(gc.get_width()/2, gc.get_height()-50), plf.get_resname()); } }
void Worldmap::draw(DrawingContext& gc) { Vector2i pingu_pos(static_cast<int>(pingus->get_pos().x), static_cast<int>(pingus->get_pos().y)); int min, max; int width = worldmap.get_width(); int height = worldmap.get_height(); if (width >= gc.get_width()) { min = gc.get_width()/2; max = width - gc.get_width()/2; } else { min = width - gc.get_width()/2; max = gc.get_width()/2; } pingu_pos.x = Math::clamp(min, pingu_pos.x, max); if (height >= gc.get_height()) { min = gc.get_height()/2; max = height - gc.get_height()/2; } else { min = height - gc.get_height()/2; max = gc.get_height()/2; } pingu_pos.y = Math::clamp(min, pingu_pos.y, max); gc_state.set_size(gc.get_width(), gc.get_height()); gc_state.set_pos(Vector2i(pingu_pos.x, pingu_pos.y)); gc_state.push(gc); for (auto i = drawables.begin (); i != drawables.end (); ++i) { (*i)->draw(gc); } Vector2f mpos = gc_state.screen2world(Vector2i(mouse_x, mouse_y)); Dot* dot = path_graph->get_dot(mpos.x, mpos.y); if (dot) dot->draw_hover(gc); gc_state.pop(gc); }
void InfoBox::draw(DrawingContext& context) { float x1 = static_cast<float>(context.get_width()) / 2.0f - 200.0f; float y1 = static_cast<float>(context.get_height()) / 2.0f - 200.0f; float width = 400.0f; float height = 200.0f; context.color().draw_filled_rect(Rectf(Vector(x1, y1), Sizef(width, height)), Color(0.6f, 0.7f, 0.8f, 0.5f), LAYER_GUI - 1); float y = y1; bool linesLeft = false; for (size_t i = firstline; i < lines.size(); ++i) { if (y >= y1 + height) { linesLeft = true; break; } lines[i]->draw(context, Rectf(x1, y, x1+width, y), LAYER_GUI); y += lines[i]->get_height(); } { // draw the scrolling arrows if (arrow_scrollup.get() && firstline > 0) context.color().draw_surface(arrow_scrollup, Vector(x1 + width - static_cast<float>(arrow_scrollup->get_width()), // top-right corner of box y1), LAYER_GUI); if (arrow_scrolldown.get() && linesLeft && firstline < lines.size()-1) context.color().draw_surface(arrow_scrolldown, Vector(x1 + width - static_cast<float>(arrow_scrolldown->get_width()), // bottom-light corner of box y1 + height - static_cast<float>(arrow_scrolldown->get_height())), LAYER_GUI); } }
void EditorToolboxWidget::draw(DrawingContext& context) { //SCREEN_WIDTH SCREEN_HEIGHT context.color().draw_filled_rect(Rectf(Vector(static_cast<float>(m_Xpos), 0), Vector(static_cast<float>(context.get_width()), static_cast<float>(context.get_height()))), Color(0.9f, 0.9f, 1.0f, 0.6f), 0.0f, LAYER_GUI-10); if (m_dragging) { context.color().draw_filled_rect(selection_draw_rect(), Color(0.2f, 0.4f, 1.0f, 0.6f), 0.0f, LAYER_GUI+1); } if (m_hovered_item != HoveredItem::NONE) { context.color().draw_filled_rect(get_item_rect(m_hovered_item), Color(0.9f, 0.9f, 1.0f, 0.6f), 0.0f, LAYER_GUI - 5); } context.color().draw_text(Resources::normal_font, _("Tilegroups"), Vector(static_cast<float>(context.get_width()), 0), ALIGN_RIGHT, LAYER_GUI, ColorScheme::Menu::default_color); context.color().draw_text(Resources::normal_font, _("Objects"), Vector(static_cast<float>(context.get_width()), 24), ALIGN_RIGHT, LAYER_GUI, ColorScheme::Menu::default_color); m_rubber->draw(context); m_select_mode->draw(context); m_move_mode->draw(context); m_settings_mode->draw(context); draw_tilegroup(context); draw_objectgroup(context); }
// Draw the background and components void EditorScreen::draw(DrawingContext& gc) { // Black out screen //gc.fill_screen(Color(255,0,255)); // FIXME: Could be removed for added speed gui_manager->draw(gc); if (show_help) { Size size_(640, 400); gc.draw_fillrect(Rect(gc.get_width()/2 - size_.width/2 - 2, gc.get_height()/2 - size_.height/2 - 2, gc.get_width()/2 + size_.width/2 + 2, gc.get_height()/2 + size_.height/2 + 2), Color(0,0,0)); gc.draw_fillrect(Rect(gc.get_width()/2 - size_.width/2, gc.get_height()/2 - size_.height/2, gc.get_width()/2 + size_.width/2, gc.get_height()/2 + size_.height/2), Color(255,255,255)); gc.print_center(Fonts::verdana11, Vector2i(gc.get_width()/2, gc.get_height()/2 - size_.height/2 + 12), _("== Editor Help ==")); int x = gc.get_width()/2 - size_.width/2 + 12; int y = gc.get_height()/2 - size_.height/2 + 36; gc.print_center(Fonts::verdana11, Vector2i(x + 75, y), "A\n" "Shift+A\n" "PageUp, ], w\n" "PageDown, [, s\n" "Shift+PageUp\n" "Shift+PageDown\n" "R\n" "Shift+R\n" "G\n" "Shift+G\n" ); gc.print_left(Fonts::verdana11, Vector2i(x+150, y), _("Select all\n" "Clear Selection\n" "Raise objects\n" "Lower objects\n" "Raise objects to top\n" "Lower objects to bottom\n" "Rotate 90 degree\n" "Rotate 270 degree\n" "Group selected objects\n" "Ungroup selected objects\n")); x = int(gc.get_width()/2 + 12); y = int(gc.get_height()/2) - size_.height/2 + 36; gc.print_center(Fonts::verdana11, Vector2i(x + 50, y), "F\n" "Shift+F\n" "Delete, Backspace\n" "I, K, J, L\n" "Shift+I, K, J, L\n" "B, Shift+B\n" "=, +, -\n"); gc.print_left(Fonts::verdana11, Vector2i(x + 125, y), _("Flip object horizontaly\n" "Flip object vertically\n" "Delete all marked objects\n" "Move objects by one pixel\n" "Move objects by 32 pixel\n" "Toggle background color\n" "Increase/lower repeat\n")); gc.print_left(Fonts::verdana11, Vector2i(gc.get_width()/2 - size_.width/2 + 12, gc.get_height()/2 - 10), _("You should name your level files systematically, i.e. by their theme, " "their number and your nickname:\n\n" " <levelname><number>-<creator>.pingus\n\n" "So if you create your second level with a stone theme, call it: " "stone2-yourname.pingus\n\n" "When you have created a level and want to have it included " "in the game mail it to:\n\n" " [email protected]\n\n" "Only levels published under the GPL are allowed into the game. The editor " "automatically inserts a reference \n" "to the GPL, if you want to have your level under a different license, you " "have to change that reference.\n" )); } }
void ResultScreenComponent::draw(DrawingContext& gc) { // Paint the background wood panel for(int y = 0; y < gc.get_height(); y += background.get_height()) for(int x = 0; x < gc.get_width(); x += background.get_width()) gc.draw(background, Vector2i(x, y)); gc.draw(blackboard, Vector2i(gc.get_width()/2, gc.get_height()/2)); gc.print_center(Fonts::chalk_large, Vector2i(gc.get_width()/2, Display::get_height()/2 - 200), _(result.plf.get_levelname())); if (result.success()) { gc.print_center(Fonts::chalk_large, Vector2i(gc.get_width()/2, Display::get_height()/2 - 140), _("Success!")); /*gc.print_center(Fonts::pingus_small, gc.get_width()/2, gc.get_height()-30, "..:: Press Space to continue ::..");*/ } else { gc.print_center(Fonts::chalk_large, Vector2i(gc.get_width()/2, Display::get_height()/2 - 140), _("Failure!")); /*gc.print_center(Fonts::pingus_normal, gc.get_width()/2, gc.get_height()-30, "..:: Press Space to retry the level ::..");*/ } std::string message; if (result.success()) { if (result.killed == 0 && result.saved == result.total) message = _("Perfect! You saved everyone possible - great!"); else if (result.killed == 0) message = _("No-one got killed, pretty good work."); else if (result.saved == result.needed) message = _("You saved exactly what you needed - you made it, but\n" "maybe you can do better?"); else if (result.killed >= 5) message = _("Not everybody was saved, but still good work!"); else message = _("What can I say, you made it - congratulations!"); } else { if (result.killed == result.total) message = _("You killed everybody, not good."); else if (result.saved == 0) message = _("No-one got saved - I know you can do better."); else if (result.saved > 0) message = _("You didn't save enough, but you saved a few. Next\n" "time you might do better."); else if (result.saved + 1 >= result.needed) message = _("Only one more and you would have made it - try again!"); else if (result.saved + 5 >= result.needed) message = _("Only a handful more and you would have made it - try again!"); else message = _("Better luck next time!"); } gc.print_center(Fonts::chalk_normal, Vector2i(gc.get_width()/2, gc.get_height()/2 - 70), message); int left_x = gc.get_width()/2 - 100; int right_x = gc.get_width()/2 + 100; int y = Display::get_height()/2 + 10; gc.print_left(Fonts::chalk_normal, Vector2i(left_x, y), _("Saved: ")); gc.print_right(Fonts::chalk_normal, Vector2i(right_x, y), StringUtil::to_string(result.saved) + "/" + StringUtil::to_string(result.needed));; gc.print_left(Fonts::chalk_normal, Vector2i(left_x, (y+=30)), _("Died: ")); gc.print_right(Fonts::chalk_normal, Vector2i(right_x, y), StringUtil::to_string(result.killed)); gc.print_left(Fonts::chalk_normal, Vector2i(left_x, (y+=30)), _("Time left: ")); gc.print_right(Fonts::chalk_normal, Vector2i(right_x, y), time_str); }
void Dialog::draw(DrawingContext& context) { Rectf bg_rect(Vector(static_cast<float>(m_passive ? (static_cast<float>(context.get_width()) - m_text_size.width - 20.0f) : static_cast<float>(context.get_width()) / 2.0f - m_text_size.width / 2.0f), static_cast<float>(m_passive ? (static_cast<float>(context.get_height()) - m_text_size.height - 65.0f) : (static_cast<float>(context.get_height()) / 2.0f - m_text_size.height / 2.0f))), Sizef(m_text_size.width, m_text_size.height + 44)); // draw background rect context.color().draw_filled_rect(bg_rect.grown(12.0f), Color(0.2f, 0.3f, 0.4f, m_passive ? 0.3f : 0.8f), 16.0f, LAYER_GUI-10); context.color().draw_filled_rect(bg_rect.grown(8.0f), Color(0.6f, 0.7f, 0.8f, m_passive ? 0.2f : 0.5f), 16.0f, LAYER_GUI-10); // draw text context.color().draw_text(Resources::normal_font, m_text, Vector(bg_rect.get_left() + bg_rect.get_width()/2.0f, bg_rect.get_top()), ALIGN_CENTER, LAYER_GUI); if (m_passive) return; // draw HL line context.color().draw_filled_rect(Rectf(Vector(bg_rect.get_left(), bg_rect.get_bottom() - 35), Sizef(bg_rect.get_width(), 4)), Color(0.6f, 0.7f, 1.0f, 1.0f), LAYER_GUI); context.color().draw_filled_rect(Rectf(Vector(bg_rect.get_left(), bg_rect.get_bottom() - 35), Sizef(bg_rect.get_width(), 2)), Color(1.0f, 1.0f, 1.0f, 1.0f), LAYER_GUI); // draw buttons for (int i = 0; i < static_cast<int>(m_buttons.size()); ++i) { float segment_width = bg_rect.get_width() / static_cast<float>(m_buttons.size()); float button_width = segment_width; Vector pos(bg_rect.get_left() + segment_width/2.0f + static_cast<float>(i) * segment_width, bg_rect.get_bottom() - 12); if (i == m_selected_button) { float button_height = 24.0f; float blink = (sinf(g_real_time * math::PI * 1.0f)/2.0f + 0.5f) * 0.5f + 0.25f; context.color().draw_filled_rect(Rectf(Vector(pos.x - button_width/2, pos.y - button_height/2), Vector(pos.x + button_width/2, pos.y + button_height/2)).grown(2.0f), Color(1.0f, 1.0f, 1.0f, blink), 14.0f, LAYER_GUI-10); context.color().draw_filled_rect(Rectf(Vector(pos.x - button_width/2, pos.y - button_height/2), Vector(pos.x + button_width/2, pos.y + button_height/2)), Color(1.0f, 1.0f, 1.0f, 0.5f), 12.0f, LAYER_GUI-10); } context.color().draw_text(Resources::normal_font, m_buttons[i].text, Vector(pos.x, pos.y - static_cast<float>(int(Resources::normal_font->get_height() / 2))), ALIGN_CENTER, LAYER_GUI, i == m_selected_button ? ColorScheme::Menu::active_color : ColorScheme::Menu::default_color); } }