void Renderer::on_surface_changed(int width, int height, bool is_tablet) { DLOG(INFO) << "Surface changed: " << width << "x" << height << ", tablet: " << std::boolalpha << is_tablet; invalidate(); // Устанавливаем вьюпорт принудительно, так как gl-контекст между сменами поверхности мог быть разрушен gl::set_viewport(rectangle_t(0, 0, width, height), true); // Запоминаем размеры экрана. Если размеры поверхности не изменились, матрицы не изменяем if (!gl::set_screen_size(dimension_t(width, height))) return; // Строим исходную матрицу проекции, от которой будут отталкиваться координаты объектов matrix().reset(); /* // Аспект - отношение ширины вьюпорта к его высоте float aspect = (float)width / (float)height; // Перспектива: ближняя и дальняя плоскости отсечения всегда положительные, ось Z направлена из глубины в // сторону экрана, позиция камеры в нулевой точке мировых координат, смотрит в глубину экрана, расположена // в горизонтальной плоскости осей X и Z. matrix().perspective(45.0f, aspect, 0.0001f, 100.0f); // Камеру разворачиваем вокруг оси Z в обратную сторону, чтобы смотрела по направлению оси Z. Таким образом // добиваемся того, что ось Z направлена от экрана в глубину, а не наоборот. matrix().look_at(position_t(0.0f, 0.0f, 0.0f), position_t(0.0f, 0.0f, 1.0f), position_t(0.0f, 1.0f, 0.0f)); */ matrix().ortho(0.0f, static_cast<GLfloat>(width), static_cast<GLfloat>(height), 0.0f, -100.0f, 100.0f); }
font_face_set::dimension_t font_face_set::character_dimensions(const unsigned c) { std::map<unsigned, dimension_t>::const_iterator itr; itr = dimension_cache_.find(c); if (itr != dimension_cache_.end()) { return itr->second; } FT_Matrix matrix; FT_Vector pen; FT_Error error; pen.x = 0; pen.y = 0; FT_BBox glyph_bbox; FT_Glyph image; glyph_ptr glyph = get_glyph(c); FT_Face face = glyph->get_face()->get_face(); matrix.xx = (FT_Fixed)( 1 * 0x10000L ); matrix.xy = (FT_Fixed)( 0 * 0x10000L ); matrix.yx = (FT_Fixed)( 0 * 0x10000L ); matrix.yy = (FT_Fixed)( 1 * 0x10000L ); FT_Set_Transform(face, &matrix, &pen); error = FT_Load_Glyph (face, glyph->get_index(), FT_LOAD_NO_HINTING); if ( error ) return dimension_t(0, 0, 0); error = FT_Get_Glyph(face->glyph, &image); if ( error ) return dimension_t(0, 0, 0); FT_Glyph_Get_CBox(image, ft_glyph_bbox_pixels, &glyph_bbox); FT_Done_Glyph(image); unsigned tempx = face->glyph->advance.x >> 6; //std::clog << "glyph: " << glyph_index << " x: " << tempx << " y: " << tempy << std::endl; dimension_t dim(tempx, glyph_bbox.yMax, glyph_bbox.yMin); //dimension_cache_[c] = dim; would need an default constructor for dimension_t dimension_cache_.insert(std::pair<unsigned, dimension_t>(c, dim)); return dim; }
HRESULT get_BSTR_ff(BSTR* bstr2) { return GetFilter_new(dimension_t(), short(), bstr2); }
HRESULT get_BSTR_original(BSTR* bstr1) { return GetFilter_old(dimension_t(), short(), bstr1); }
void Application::initialize() { music = NULL; m_game_turn = 1; m_ready = false; m_graph = new GraphicalController(); m_mouse = new MouseController(); command_set_cursor(m_graph->m_cursor); command_set_cursor_visibility(true); m_GUI = new ApplicationGUI(); m_GUI->m_position = position_t(0, 0); m_GUI->m_size = dimension_t(1024, 1024); key_press += std::bind(&Application::on_key_press, this, std::placeholders::_1); m_mouse->mouse_click += std::bind(&Application::on_mouse_click, this, std::placeholders::_1); m_mouse->mouse_down += std::bind(&Application::on_mouse_down, this, std::placeholders::_1); m_mouse->mouse_wheel += std::bind(&Application::on_mouse_wheel, this, std::placeholders::_1); m_mouse->mouse_move += std::bind(&Application::on_mouse_move, this, std::placeholders::_1); m_action_manager = new ActionManager(); m_actions[0] = new action_move_step(); m_actions[1] = new ActionClass_Push(); m_actions[2] = new ActionClass_Turn(); m_actions[3] = new Action_OpenInventory(); m_actions[4] = new Action_CellInfo(); m_game_object_manager.init(); m_GUI->MapViewer = new GUI_MapViewer(this); m_GUI->MapViewer->m_position.x = 0; m_GUI->MapViewer->m_position.y = 0; m_GUI->MapViewer->m_size.w = 1024; m_GUI->MapViewer->m_size.h = 1024; m_GUI->MapViewer->m_map = new GameMap(dimension_t(200,200)); m_GUI->MapViewer->m_map->generate_level(); GameObject* obj = m_game_object_manager.new_object("elf"); obj->set_tile_direction(ObjectDirection_Left); m_GUI->MapViewer->m_player = obj; int index = rand() % m_GUI->MapViewer->m_map->m_link_rooms.size(); GameMap::block_t* room = *std::next(m_GUI->MapViewer->m_map->m_link_rooms.begin(), index); int rx = rand() % room->rect.w; int ry = rand() % room->rect.h; m_GUI->MapViewer->m_map->add_object(m_GUI->MapViewer->m_player, m_GUI->MapViewer->m_map->m_items[room->rect.y + ry][room->rect.x + rx]); rx = rand() % room->rect.w; ry = rand() % room->rect.h; m_GUI->MapViewer->m_map->add_object(Application::instance().m_game_object_manager.new_object("chest"), m_GUI->MapViewer->m_map->m_items[room->rect.y + ry][room->rect.x + rx]); GUI_ActionManager* AMTextBox; AMTextBox = new GUI_ActionManager(m_action_manager); AMTextBox->m_position.x = 650; AMTextBox->m_position.y = 710; AMTextBox->resize(372, 263); GUI_ActionPanel* ActionPanel; ActionPanel = new GUI_ActionPanel(2,975,898,47); GUI_ActionButton* ActionButton; ActionButton = new GUI_ActionButton(); ActionButton->m_action = m_actions[action_e::move]; ActionPanel->add_item_control(ActionButton); ActionButton = new GUI_ActionButton(); ActionButton->m_action = m_actions[action_e::push]; ActionPanel->add_item_control(ActionButton); ActionButton = new GUI_ActionButton(); ActionButton->m_action = m_actions[action_e::turn]; ActionPanel->add_item_control(ActionButton); ActionButton = new GUI_ActionButton(); ActionButton->m_action = m_actions[action_e::open_inventory]; ActionPanel->add_item_control(ActionButton); ActionButton = new GUI_ActionButton(); ActionButton->m_action = m_actions[action_e::cell_info]; ActionPanel->add_item_control(ActionButton); GUI_Layer* MenuLayer; MenuLayer = new GUI_Layer(); MenuLayer->m_position.x = 0; MenuLayer->m_position.y = 0; MenuLayer->m_size.w = 1024; MenuLayer->m_size.h = 1024; GUI_TextBox* TextBox = new GUI_TextBox(); TextBox->m_position.x = 2; TextBox->m_position.y = 710; TextBox->resize(646, 263); m_GUI->DescriptionBox = TextBox; m_GUI->Timer = new GUI_Timer(902, 975, 120, 47, 0); MenuLayer->add(AMTextBox); MenuLayer->add(ActionPanel); MenuLayer->add(TextBox); GUI_Window* MiniMap = new GUI_Window(0, 0, 400, 400, "Мини-карта"); GUI_MiniMap* mini_map = new GUI_MiniMap(position_t(5, 30), dimension_t(MiniMap->m_size.w - 10, MiniMap->m_size.h - 35), m_GUI->MapViewer); MiniMap->add_item_control(mini_map); MenuLayer->add(m_GUI->Timer); MenuLayer->add(MiniMap); //MenuLayer->add(new GUI_Item(0, 0, 100,21, "4565656")); m_GUI->add(MenuLayer); m_GUI->add(m_GUI->MapViewer); m_GUI->MapViewer->m_GUI = MenuLayer; m_graph->set_VSync(false); //if (SDL_Init(SDL_INIT_AUDIO) < 0) //{ // MessageBox(NULL, "Error", "Audio", MB_OK); //} //static Uint32 wav_length; // length of our sample //static Uint8 *wav_buffer; // buffer containing our audio file //static SDL_AudioSpec wav_spec; // the specs of our piece of music //static Uint32 wav_length2; // length of our sample //static Uint8 *wav_buffer2; // buffer containing our audio file //static SDL_AudioSpec wav_spec2; // the specs of our piece of music //if (SDL_LoadWAV("C:\\ExplorersOfSaarum\\123.wav", &wav_spec, &wav_buffer, &wav_length) == NULL){ // MessageBox(NULL, "Error", "Audio", MB_OK); //} //if (SDL_LoadWAV("C:\\ExplorersOfSaarum\\456.wav", &wav_spec2, &wav_buffer2, &wav_length2) == NULL){ // MessageBox(NULL, "Error", "Audio", MB_OK); //} //wav_spec.callback = my_audio_callback; //wav_spec.userdata = NULL; //// set our global static variables //audio_pos = wav_buffer; // copy sound buffer //audio_len = wav_length; // copy file length ///* Open the audio device */ //if (SDL_OpenAudio(NULL, NULL) < 0){ // MessageBox(NULL, "Error", "Audio", MB_OK); // exit(-1); //} ///* Start playing */ //SDL_PauseAudio(0); //SDL_Delay(900); //SDL_MixAudio(audio_pos, wav_buffer2, audio_len, SDL_MIX_MAXVOLUME);// mix from one buffer into another //// wait until we're don't playing ///*while (audio_len > 0) { //}*/ //// shut everything down ///*SDL_CloseAudio(); //SDL_FreeWAV(wav_buffer);*/ int audio_rate = 44100; Uint16 audio_format = AUDIO_S16; /* 16-bit stereo */ int audio_channels = 2; int audio_buffers = 4096; if (SDL_Init(SDL_INIT_AUDIO) < 0) { MessageBox(NULL, "Error", "Audio", MB_OK); } if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers)) { MessageBox(NULL, "Error", "Audio", MB_OK); exit(1); } Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels); if (music == NULL) { /* Actually loads up the music */ music = Mix_LoadWAV((FileSystem::instance().m_resource_path+"Sounds\\Click.wav").c_str()); /* This begins playing the music - the first argument is a pointer to Mix_Music structure, and the second is how many times you want it to loop (use -1 for infinite, and 0 to have it just play once) */ } m_ready = true; }