@@ -2258,7 +2258,7 @@ void MapView::setupViewMenu()
|
|||||||
|
|
||||||
ADD_TOGGLE (view_menu, "Show Node Editor", "Shift+N", _show_node_editor);
|
ADD_TOGGLE (view_menu, "Show Node Editor", "Shift+N", _show_node_editor);
|
||||||
|
|
||||||
ADD_TOGGLE_NS(view_menu, "Game View", _game_mode_camera);
|
// ADD_TOGGLE_NS(view_menu, "Game View", _game_mode_camera);
|
||||||
|
|
||||||
view_menu->addSeparator();
|
view_menu->addSeparator();
|
||||||
view_menu->addAction(createTextSeparator("Minimap"));
|
view_menu->addAction(createTextSeparator("Minimap"));
|
||||||
@@ -2377,6 +2377,31 @@ void MapView::setupViewMenu()
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
view_menu->addSeparator();
|
||||||
|
view_menu->addAction(createTextSeparator("Camera Modes"));
|
||||||
|
view_menu->addSeparator();
|
||||||
|
|
||||||
|
/* // TODO, doesn't work for some reason.
|
||||||
|
ADD_TOGGLE_NS(view_menu, "Debug cam", _debug_cam_mode);
|
||||||
|
connect(&_debug_cam_mode, &Noggit::BoolToggleProperty::changed
|
||||||
|
, [this]
|
||||||
|
{
|
||||||
|
_debug_cam = Noggit::Camera(_camera.position, _camera.yaw(), _camera.pitch());
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
ADD_ACTION_NS(view_menu
|
||||||
|
, "Go to debug camera"
|
||||||
|
, [this]
|
||||||
|
{
|
||||||
|
_camera = Noggit::Camera(_debug_cam.position, _debug_cam.yaw(), _debug_cam.pitch());
|
||||||
|
}
|
||||||
|
);*/
|
||||||
|
|
||||||
|
ADD_TOGGLE_NS(view_menu, "FPS camera", _fps_mode);
|
||||||
|
|
||||||
|
ADD_TOGGLE_NS(view_menu, "Camera Collision", _camera_collision);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapView::setupHelpMenu()
|
void MapView::setupHelpMenu()
|
||||||
@@ -3003,6 +3028,7 @@ MapView::MapView( math::degrees camera_yaw0
|
|||||||
, cursor_color (1.f, 1.f, 1.f, 1.f)
|
, cursor_color (1.f, 1.f, 1.f, 1.f)
|
||||||
, _cursorType{CursorType::CIRCLE}
|
, _cursorType{CursorType::CIRCLE}
|
||||||
, _main_window (NoggitWindow)
|
, _main_window (NoggitWindow)
|
||||||
|
, _debug_cam(camera_pos, camera_yaw0, camera_pitch0)
|
||||||
, _world (std::move (world))
|
, _world (std::move (world))
|
||||||
, _status_position (new QLabel (this))
|
, _status_position (new QLabel (this))
|
||||||
, _status_selection (new QLabel (this))
|
, _status_selection (new QLabel (this))
|
||||||
@@ -4373,7 +4399,7 @@ void MapView::tick (float dt)
|
|||||||
rh = 0;
|
rh = 0;
|
||||||
rv = 0;
|
rv = 0;
|
||||||
|
|
||||||
if (_display_mode != display_mode::in_2D)
|
if (_display_mode == display_mode::in_3D)
|
||||||
{
|
{
|
||||||
if (turn)
|
if (turn)
|
||||||
{
|
{
|
||||||
@@ -4386,29 +4412,33 @@ void MapView::tick (float dt)
|
|||||||
_camera_moved_since_last_draw = true;
|
_camera_moved_since_last_draw = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_game_mode_camera.get())
|
// if (_fps_mode.get())
|
||||||
{
|
// {
|
||||||
if (moving)
|
// // if (moving)
|
||||||
{
|
// // {
|
||||||
_camera.move_forward(moving, dt);
|
// // _camera.move_forward(moving, dt);
|
||||||
_camera_moved_since_last_draw = true;
|
// // _camera_moved_since_last_draw = true;
|
||||||
// TODO use normalized speed (doesn't slow down when looking up)
|
// // // TODO use normalized speed (doesn't slow down when looking up)
|
||||||
// _camera.move_forward_normalized(moving, dt);
|
// // // _camera.move_forward_normalized(moving, dt);
|
||||||
}
|
// // }
|
||||||
if (strafing)
|
// // if (strafing)
|
||||||
{
|
// // {
|
||||||
_camera.move_horizontal(strafing, dt);
|
// // _camera.move_horizontal(strafing, dt);
|
||||||
_camera_moved_since_last_draw = true;
|
// // _camera_moved_since_last_draw = true;
|
||||||
}
|
// // }
|
||||||
// get ground z position
|
// // // get ground z position
|
||||||
// hack to update camera when entering mode in void ViewToolbar::add_tool_icon()
|
// // // hack to update camera when entering mode in void ViewToolbar::add_tool_icon()
|
||||||
if (_camera_moved_since_last_draw)
|
// // if (_camera_moved_since_last_draw)
|
||||||
{
|
// // {
|
||||||
auto ground_pos = _world.get()->get_ground_height(_camera.position);
|
// // auto ground_pos = _world.get()->get_ground_height(_camera.position);
|
||||||
_camera.position.y = ground_pos.y + 6;
|
// // _camera.position.y = ground_pos.y + 6;
|
||||||
}
|
// // }
|
||||||
}
|
//
|
||||||
else
|
// auto h = _world->get_ground_height(_camera.position).y;
|
||||||
|
//
|
||||||
|
// _camera.position.y = h + 6.f;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
{
|
{
|
||||||
|
|
||||||
if (moving)
|
if (moving)
|
||||||
@@ -4426,15 +4456,24 @@ void MapView::tick (float dt)
|
|||||||
_camera.move_vertical(updown, dt);
|
_camera.move_vertical(updown, dt);
|
||||||
_camera_moved_since_last_draw = true;
|
_camera_moved_since_last_draw = true;
|
||||||
}
|
}
|
||||||
// camera collision to ground
|
|
||||||
/*
|
|
||||||
auto ground_height = _world.get()->get_ground_height(_camera.position).y;
|
|
||||||
if (_camera.position.y < ground_height)
|
|
||||||
{
|
|
||||||
_camera.position.y = ground_height + 3;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
if (_camera_moved_since_last_draw)
|
||||||
|
{
|
||||||
|
if (_fps_mode.get())
|
||||||
|
{
|
||||||
|
// there is a also hack to update camera when entering mode in void ViewToolbar::add_tool_icon()
|
||||||
|
float h = _world->get_ground_height(_camera.position).y;
|
||||||
|
_camera.position.y = h + 3.f;
|
||||||
|
}
|
||||||
|
else if (_camera_collision.get())
|
||||||
|
{
|
||||||
|
float h = _world.get()->get_ground_height(_camera.position).y;
|
||||||
|
if (_camera.position.y < h + 3.f)
|
||||||
|
{
|
||||||
|
_camera.position.y = h + 3.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -4824,11 +4863,11 @@ void MapView::update_cursor_pos()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::mat4x4 MapView::model_view() const
|
glm::mat4x4 MapView::model_view(bool use_debug_cam) const
|
||||||
{
|
{
|
||||||
if (_display_mode == display_mode::in_2D)
|
if (_display_mode == display_mode::in_2D)
|
||||||
{
|
{
|
||||||
glm::vec3 eye = _camera.position;
|
glm::vec3 eye = use_debug_cam ? _debug_cam.position : _camera.position;
|
||||||
glm::vec3 target = eye;
|
glm::vec3 target = eye;
|
||||||
target.y -= 1.f;
|
target.y -= 1.f;
|
||||||
target.z -= 0.001f;
|
target.z -= 0.001f;
|
||||||
@@ -4839,7 +4878,14 @@ glm::mat4x4 MapView::model_view() const
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return _camera.look_at_matrix();
|
if (use_debug_cam)
|
||||||
|
{
|
||||||
|
return _debug_cam.look_at_matrix();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return _camera.look_at_matrix();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4856,7 +4902,7 @@ glm::mat4x4 MapView::projection() const
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return glm::perspective(_camera.fov()._, aspect_ratio(), 1.f, far_z);
|
return glm::perspective(_camera.fov()._, aspect_ratio(), _fps_mode.get() ? 0.1f : 1.f, far_z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4945,8 +4991,12 @@ void MapView::draw_map()
|
|||||||
|
|
||||||
bool classic_ui = _settings->value("classicUI", false).toBool();
|
bool classic_ui = _settings->value("classicUI", false).toBool();
|
||||||
bool show_unpaintable = classic_ui ? texturingTool->show_unpaintable_chunks() : _left_sec_toolbar->showUnpaintableChunk();
|
bool show_unpaintable = classic_ui ? texturingTool->show_unpaintable_chunks() : _left_sec_toolbar->showUnpaintableChunk();
|
||||||
|
|
||||||
|
bool debug_cam = _debug_cam_mode.get();
|
||||||
|
// math::frustum frustum(model_view(debug_cam) * projection());
|
||||||
|
|
||||||
_world->renderer()->draw (
|
_world->renderer()->draw (
|
||||||
model_view()
|
model_view(debug_cam)
|
||||||
, projection()
|
, projection()
|
||||||
, _cursor_pos
|
, _cursor_pos
|
||||||
, _cursorRotation
|
, _cursorRotation
|
||||||
@@ -4965,8 +5015,8 @@ void MapView::draw_map()
|
|||||||
, angled_mode
|
, angled_mode
|
||||||
, terrainMode == editing_mode::paint
|
, terrainMode == editing_mode::paint
|
||||||
, terrainMode
|
, terrainMode
|
||||||
, _camera.position
|
, debug_cam ? _debug_cam.position : _camera.position
|
||||||
, _camera_moved_since_last_draw
|
, debug_cam ? false : _camera_moved_since_last_draw
|
||||||
, _draw_mfbo.get()
|
, _draw_mfbo.get()
|
||||||
, _draw_terrain.get()
|
, _draw_terrain.get()
|
||||||
, _draw_wmo.get()
|
, _draw_wmo.get()
|
||||||
|
|||||||
@@ -133,6 +133,11 @@ private:
|
|||||||
bool look, freelook;
|
bool look, freelook;
|
||||||
bool ui_hidden = false;
|
bool ui_hidden = false;
|
||||||
|
|
||||||
|
Noggit::Camera _debug_cam;
|
||||||
|
Noggit::BoolToggleProperty _debug_cam_mode = { false };
|
||||||
|
Noggit::BoolToggleProperty _fps_mode = { false };
|
||||||
|
Noggit::BoolToggleProperty _camera_collision = { false };
|
||||||
|
|
||||||
bool _camera_moved_since_last_draw = true;
|
bool _camera_moved_since_last_draw = true;
|
||||||
|
|
||||||
std::array<Qt::Key, 6> _inputs = {Qt::Key_W, Qt::Key_S, Qt::Key_D, Qt::Key_A, Qt::Key_Q, Qt::Key_E};
|
std::array<Qt::Key, 6> _inputs = {Qt::Key_W, Qt::Key_S, Qt::Key_D, Qt::Key_A, Qt::Key_Q, Qt::Key_E};
|
||||||
@@ -158,7 +163,7 @@ public:
|
|||||||
Noggit::BoolToggleProperty _draw_fog = {false};
|
Noggit::BoolToggleProperty _draw_fog = {false};
|
||||||
Noggit::BoolToggleProperty _draw_hidden_models = {false};
|
Noggit::BoolToggleProperty _draw_hidden_models = {false};
|
||||||
Noggit::BoolToggleProperty _draw_occlusion_boxes = {false};
|
Noggit::BoolToggleProperty _draw_occlusion_boxes = {false};
|
||||||
Noggit::BoolToggleProperty _game_mode_camera = { false };
|
// Noggit::BoolToggleProperty _game_mode_camera = { false };
|
||||||
Noggit::BoolToggleProperty _draw_lights_zones = { false };
|
Noggit::BoolToggleProperty _draw_lights_zones = { false };
|
||||||
Noggit::BoolToggleProperty _show_detail_info_window = { false };
|
Noggit::BoolToggleProperty _show_detail_info_window = { false };
|
||||||
Noggit::BoolToggleProperty _show_minimap_window = { false };
|
Noggit::BoolToggleProperty _show_minimap_window = { false };
|
||||||
@@ -175,7 +180,7 @@ private:
|
|||||||
display_mode _display_mode;
|
display_mode _display_mode;
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
glm::mat4x4 model_view() const;
|
glm::mat4x4 model_view(bool use_debug_cam = false) const;
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
glm::mat4x4 projection() const;
|
glm::mat4x4 projection() const;
|
||||||
|
|||||||
Reference in New Issue
Block a user