void ProcessEditModeCamera(){ int x, y; Mouse::GetPos(&x, &y); if (x < 10) { Window::GetCamera()->Move(Vec2(-5, 0)); } else if (x > Window::GetWidth() - 10) { Window::GetCamera()->Move(Vec2(5, 0)); } if (y < 10) { Window::GetCamera()->Move(Vec2(0, -5)); } else if (y > Window::GetHeight() - 10) { Window::GetCamera()->Move(Vec2(0, 5)); } Vec2 cam_offset(Window::GetCamera()->X(), Window::GetCamera()->Y()); if (Mouse::Pressed(MOUSE_LEFT)) { map->SetTile((Mouse::GetPos() + cam_offset) * Map::GRID_SCALE, static_cast<tile> (edit_tile)); } }
void DoInput(photon_instance &instance, float time){ photon_input &input = instance.input; DoInputSingle(input.left, input); DoInputSingle(input.right, input); DoInputSingle(input.up, input); DoInputSingle(input.down, input); DoInputSingle(input.select, input); DoInputSingle(input.back, input); DoInputSingle(input.pause, input); DoInputSingle(input.interact, input); DoInputSingle(input.move_right, input); DoInputSingle(input.move_left, input); DoInputSingle(input.move_up, input); DoInputSingle(input.move_down, input); DoInputSingle(input.camera_right, input); DoInputSingle(input.camera_left, input); DoInputSingle(input.camera_up, input); DoInputSingle(input.camera_down, input); DoInputSingle(input.rotate_clockwise, input); DoInputSingle(input.rotate_counter_clockwise, input); DoInputSingle(input.zoom_in, input); DoInputSingle(input.zoom_out, input); DoInputSingle(input.next_item, input); DoInputSingle(input.previous_item, input); if(instance.gui.load_save_menu.loading || instance.gui.load_save_menu.saving){ photon_gui_load_save_menu &load_save_menu = instance.gui.load_save_menu; if(IsActivated(input.select)){ gui::ConfirmLoadSave(instance); } if(IsActivated(input.back)){ gui::CancelLoadSave(instance); } if(IsActivated(input.left)){ if(load_save_menu.cursor > 0){ load_save_menu.cursor--; } } if(IsActivated(input.right)){ if(++load_save_menu.cursor > load_save_menu.filename.length()){ load_save_menu.cursor = load_save_menu.filename.length(); } } if(IsActivated(input.up)){ if(--load_save_menu.current_file_index < 0){ load_save_menu.current_file_index = load_save_menu.file_list.size() - 1; } load_save_menu.filename = load_save_menu.file_list[load_save_menu.current_file_index]; } if(IsActivated(input.down)){ if(++load_save_menu.current_file_index >= (int)load_save_menu.file_list.size()){ load_save_menu.current_file_index = 0; } load_save_menu.filename = load_save_menu.file_list[load_save_menu.current_file_index]; } }else if(!instance.level.is_valid){ photon_gui_button_list &menu = instance.gui.main_menu; if(IsActivated(input.select)){ gui::ActivateButton(instance, menu, menu.highlighted); } if(IsActivated(input.up)){ if(--menu.highlighted < 0){ menu.highlighted = menu.buttons.size() - 1; } } if(IsActivated(input.down)){ if(++menu.highlighted >= (int8_t)menu.buttons.size()){ menu.highlighted = 0; } } }else if(instance.paused){ photon_gui_button_list &menu = instance.gui.pause_menu; if(IsActivated(input.select)){ gui::ActivateButton(instance, menu, menu.highlighted); } if(IsActivated(input.back) || IsActivated(input.pause)){ instance.paused = false; } if(IsActivated(input.up)){ if(--menu.highlighted < 0){ menu.highlighted = menu.buttons.size() - 1; } } if(IsActivated(input.down)){ if(++menu.highlighted >= (int8_t)menu.buttons.size()){ menu.highlighted = 0; } } }else{ instance.player.location.x += (input.move_right.current_state - input.move_left.current_state) * time * instance.camera_offset.z; instance.player.location.y += (input.move_up.current_state - input.move_down.current_state) * time * instance.camera_offset.z; glm::vec2 cam_offset(input.camera_right.current_state - input.camera_left.current_state, input.camera_up.current_state - input.camera_down.current_state); // TODO - make a setting that enables/disables screen edges. // if only SDL_GetMouseState worked when the cursor is outside the window... oh well... if(SDL_GetMouseFocus() == instance.window.window_SDL){ glm::ivec2 mouse; uint32_t buttons = SDL_GetMouseState(&mouse.x, &mouse.y); // if the mouse position is (0,0) chances are it hasn't recieved the first event yet... I should try to find a better way to fix this, but this will do for now... if(instance.settings.screen_edges && !(mouse == glm::ivec2(0))){ cam_offset.x += (std::max(80 + mouse.x - int(instance.window.width), 0) - std::max(80 - mouse.x, 0)) / 80.0f; cam_offset.y += (std::max(80 - mouse.y, 0) - std::max(80 + mouse.y - int(instance.window.height), 0)) / 80.0f; } if(input.enable_mouse){ glm::vec2 delta = WindowToWorldCoord(instance, mouse.x, mouse.y) - instance.player.location; if(buttons & SDL_BUTTON_LMASK){ if(glm::length(delta) > 0.5f){ instance.player.location += delta * time; } } if(buttons & SDL_BUTTON_RMASK){ float angle = glm::degrees(glm::atan(delta.y, delta.x)); blocks::OnRotate(glm::uvec2(instance.player.location + 0.5f), instance.level, angle); } } } cam_offset *= instance.camera_offset.z * 0.5f * time * 2.0f; instance.camera_offset.x += cam_offset.x; instance.camera_offset.y += cam_offset.y; instance.camera_offset.x /= 1.0f + (time * 2.0f); instance.camera_offset.y /= 1.0f + (time * 2.0f); if(IsActivated(input.interact)){ blocks::OnPhotonInteract(glm::uvec2(instance.player.location + glm::vec2(0.5f)), instance.level, instance.player); } if(IsActivated(input.rotate_clockwise)){ blocks::OnRotate(glm::uvec2(instance.player.location + glm::vec2(0.5f)), instance.level); } if(IsActivated(input.rotate_counter_clockwise)){ blocks::OnRotate(glm::uvec2(instance.player.location + glm::vec2(0.5f)), instance.level, true); } if(IsActivated(input.next_item)){ player::NextItem(instance.player); } if(IsActivated(input.previous_item)){ player::PreviousItem(instance.player); } instance.camera_offset.z -= (input.zoom_in.current_state - input.zoom_out.current_state) * instance.camera_offset.z * 0.5f * time; if(IsActivated(input.pause)){ instance.paused = true; } } }