void render(){ if(ga_changed){ ga_changed = FALSE; set_ga_mul(0, 0, 10, 18, 0); render_game_area(); write_ga(); } if(intf_changed){ intf_changed = FALSE; if(intf_full_clear_needed){ intf_full_clear_needed = FALSE; set_intf_mul(0, 0, 10, 18, TILE_WHITE); } else{ set_intf_mul(0, 10, 10, 8, TILE_WHITE); } render_interface(); write_intf(); } }
void GUI::OnRender() { if(current_screen == MENU_SCREEN) { render_menu(menu); } else if(current_screen == MAP_SCREEN) { std::vector<std::vector<MapTile> > map_canvas = world_map_gui.get_canvas(); for(size_t i = 0; i < map_canvas.size(); i++) { for(size_t j = 0; j < map_canvas[i].size(); j++) { drawChr(j, i, map_canvas[i][j].char_count, ascii, screen, map_canvas[i][j].color); } } drawStr(0, GAME_HEIGHT - 2, std::string("Use the arrow keys to move the cursor.").c_str(), ascii, screen, WHITE); drawStr(0, GAME_HEIGHT - 1, std::string("Press ENTER to spawn on the selected map tile.").c_str(), ascii, screen, WHITE); } else if (current_screen == GAME_SCREEN) { render_canvas(); render_target(); render_characters(); render_main_char(); render_animations(); clear_area(IntPoint(0, UI_START), IntPoint(UI_HEIGHT, UI_WIDTH)); render_interface(); render_message(); } else if(current_screen == DIRECTION_SCREEN) { drawStr(0, 0, std::string("Pick a direction to perform the action.").c_str(), ascii, screen, WHITE); } else if (current_screen == DEATH_SCREEN) { clear_screen(); drawStr(GAME_WIDTH/2 - 12, GAME_HEIGHT/2, std::string("You suck, uninstall bro.").c_str(), ascii, screen, WHITE); } else if (current_screen == DEBUG_CONSOLE) { render_canvas(); render_target(); render_characters(); render_main_char(); render_debug(); } if(game.is_paused()) { drawStr(GAME_WIDTH-20, 0, std::string("Paused").c_str(), ascii, screen, WHITE); } SDL_Flip(screen); }
STORY_RESULT controller::show(START_POSITION startpos) { if(parts_.empty()) { LOG_NG << "no storyscreen parts to show\n"; return NEXT; } gui::button back_button (video_, "", gui::button::TYPE_PRESS, "button_normal/button_small_H22" , gui::button::DEFAULT_SPACE, true, "icons/arrows/long_arrow_ornate_left"); gui::button next_button (video_, "", gui::button::TYPE_PRESS, "button_normal/button_small_H22" , gui::button::DEFAULT_SPACE, true, "icons/arrows/long_arrow_ornate_right"); gui::button play_button (video_, _("Skip")); // Build renderer cache unless built for a low-memory environment; // caching the scaled backgrounds can take over a decent amount of memory. #ifndef LOW_MEM std::vector< render_pointer_type > uis_; for(part_pointer_type p : parts_) { ASSERT_LOG( p != nullptr, "Ouch: hit nullptr storyscreen part in collection" ); render_pointer_type const rpt(new part_ui(*p, video_, next_button, back_button, play_button)); uis_.push_back(rpt); } #endif size_t k = 0; switch(startpos) { case START_BEGINNING: break; case START_END: k = parts_.size() -1; break; default: assert(false); break; } while(k < parts_.size()) { #ifndef LOW_MEM part_ui &render_interface = *uis_[k]; #else part_ui render_interface(*parts_[k], video_, next_button, back_button, play_button); #endif LOG_NG << "displaying storyscreen part " << k+1 << " of " << parts_.size() << '\n'; back_button.enable(segment_index_ != 0 || k != 0); switch(render_interface.show()) { case part_ui::NEXT: ++k; break; case part_ui::BACK: if(k > 0) { --k; } else if(segment_index_ > 0) { return BACK; } break; case part_ui::QUIT: return QUIT; } } return NEXT; }