X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=radiant%2Fcamwindow.cpp;h=27ae274e8749d768df3bc4e97a455471d0f5534b;hb=3764f8088d5b34474a6bd909f7bec3b29de27b12;hp=04110ee7ab11f13fca10b49e36c77857ee31fe50;hpb=cd6613e5171544b68d4ae70546c90a15c99b22a5;p=xonotic%2Fnetradiant.git diff --git a/radiant/camwindow.cpp b/radiant/camwindow.cpp index 04110ee7..27ae274e 100644 --- a/radiant/camwindow.cpp +++ b/radiant/camwindow.cpp @@ -76,6 +76,7 @@ void CameraMovedNotify(){ struct camwindow_globals_private_t { + int m_nFOV; int m_nMoveSpeed; bool m_bCamLinkSpeed; int m_nAngleSpeed; @@ -86,6 +87,7 @@ struct camwindow_globals_private_t int m_nStrafeMode; camwindow_globals_private_t() : + m_nFOV( 110 ), m_nMoveSpeed( 100 ), m_bCamLinkSpeed( true ), m_nAngleSpeed( 3 ), @@ -151,8 +153,6 @@ struct camera_t guint m_keymove_handler; - float fieldOfView; - DeferredMotionDelta m_mouseMove; static void motionDelta( int x, int y, void* data ){ @@ -171,9 +171,11 @@ struct camera_t origin( 0, 0, 0 ), angles( 0, 0, 0 ), color( 0, 0, 0 ), + projection( g_matrix4_identity ), + modelview( g_matrix4_identity ), movementflags( 0 ), + m_keycontrol_timer(), m_keymove_handler( 0 ), - fieldOfView( 90.0f ), m_mouseMove( motionDelta, this ), m_view( view ), m_update( update ){ @@ -202,7 +204,7 @@ float Camera_getFarClipPlane( camera_t& camera ){ void Camera_updateProjection( camera_t& camera ){ float farClip = Camera_getFarClipPlane( camera ); - camera.projection = projection_for_camera( farClip / 4096.0f, farClip, camera.fieldOfView, camera.width, camera.height ); + camera.projection = projection_for_camera( farClip / 4096.0f, farClip, (float)g_camwindow_globals_private.m_nFOV, camera.width, camera.height ); camera.m_view->Construct( camera.projection, camera.modelview, camera.width, camera.height ); } @@ -527,6 +529,9 @@ typedef ReferenceCaller FreeMoveCame typedef ReferenceCaller FreeMoveCameraMoveDownKeyUpCaller; +const float MIN_FOV = 60; +const float MAX_FOV = 179; +const float FOV_STEP = 10; const float SPEED_MOVE = 32; const float SPEED_TURN = 22.5; const float MIN_CAM_SPEED = 10; @@ -1264,7 +1269,7 @@ void CamWnd::Cam_PositionDrag(){ CamWnd_Update( camwnd ); CameraMovedNotify(); - Sys_SetCursorPos( m_parent, m_PositionDragCursorX, m_PositionDragCursorY ); + Sys_SetCursorPos( m_gl_widget, m_PositionDragCursorX, m_PositionDragCursorY ); } } #endif @@ -1289,7 +1294,7 @@ void CamWnd::EnableFreeMove(){ gtk_window_set_focus( m_parent, m_gl_widget ); m_freemove_handle_focusout = m_gl_widget.connect( "focus_out_event", G_CALLBACK( camwindow_freemove_focusout ), this ); - m_freezePointer.freeze_pointer( m_parent, Camera_motionDelta, &m_Camera ); + m_freezePointer.freeze_pointer( m_gl_widget, Camera_motionDelta, &m_Camera ); CamWnd_Update( *this ); } @@ -1304,7 +1309,7 @@ void CamWnd::DisableFreeMove(){ CamWnd_Remove_Handlers_FreeMove( *this ); CamWnd_Add_Handlers_Move( *this ); - m_freezePointer.unfreeze_pointer( m_parent ); + m_freezePointer.unfreeze_pointer( m_gl_widget ); g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_freemove_handle_focusout ); CamWnd_Update( *this ); @@ -1358,9 +1363,11 @@ void PopState(){ m_state_stack.pop_back(); } void Highlight( EHighlightMode mode, bool bEnable = true ){ - ( bEnable ) - ? m_state_stack.back().m_highlight |= mode - : m_state_stack.back().m_highlight &= ~mode; + if ( bEnable ) { + m_state_stack.back().m_highlight |= mode; + } else { + m_state_stack.back().m_highlight &= ~mode; + } } void setLights( const LightList& lights ){ m_state_stack.back().m_lights = &lights; @@ -1583,7 +1590,7 @@ void CamWnd::BenchMark(){ Vector3 angles; angles[CAMERA_ROLL] = 0; angles[CAMERA_PITCH] = 0; - angles[CAMERA_YAW] = static_cast( i * ( 360.0 / 100.0 ) ); + angles[CAMERA_YAW] = i * 360.0f / 100.0f; Camera_setAngles( *this, angles ); } double dEnd = Sys_DoubleTime(); @@ -1599,7 +1606,7 @@ void GlobalCamera_ResetAngles(){ CamWnd& camwnd = *g_camwnd; Vector3 angles; angles[CAMERA_ROLL] = angles[CAMERA_PITCH] = 0; - angles[CAMERA_YAW] = static_cast( 22.5 * floor( ( Camera_getAngles( camwnd )[CAMERA_YAW] + 11 ) / 22.5 ) ); + angles[CAMERA_YAW] = 22.5f * floorf( ( Camera_getAngles( camwnd )[CAMERA_YAW] + 11 ) / 22.5f ); Camera_setAngles( camwnd, angles ); } @@ -1627,8 +1634,8 @@ void Camera_CubeIn(){ void Camera_CubeOut(){ CamWnd& camwnd = *g_camwnd; g_camwindow_globals.m_nCubicScale++; - if ( g_camwindow_globals.m_nCubicScale > 23 ) { - g_camwindow_globals.m_nCubicScale = 23; + if ( g_camwindow_globals.m_nCubicScale > 46 ) { + g_camwindow_globals.m_nCubicScale = 46; } Camera_updateProjection( camwnd.getCamera() ); CamWnd_Update( camwnd ); @@ -1676,6 +1683,8 @@ void CamWnd_registerShortcuts(){ command_connect_accelerator( "TogglePreview" ); } + command_connect_accelerator( "FOVInc" ); + command_connect_accelerator( "FOVDec" ); command_connect_accelerator( "CameraSpeedInc" ); command_connect_accelerator( "CameraSpeedDec" ); } @@ -1793,6 +1802,7 @@ struct RenderMode { }; void Camera_constructPreferences( PreferencesPage& page ){ + page.appendSlider( "FOV", g_camwindow_globals_private.m_nFOV, TRUE, 0, 0, 100, MIN_FOV, MAX_FOV, 1, 10 ); page.appendSlider( "Movement Speed", g_camwindow_globals_private.m_nMoveSpeed, TRUE, 0, 0, 100, MIN_CAM_SPEED, MAX_CAM_SPEED, 1, 10 ); page.appendCheckBox( "", "Link strafe speed to movement speed", g_camwindow_globals_private.m_bCamLinkSpeed ); page.appendSlider( "Rotation Speed", g_camwindow_globals_private.m_nAngleSpeed, TRUE, 0, 0, 3, 1, 180, 1, 10 ); @@ -1846,6 +1856,31 @@ void Camera_registerPreferencesPage(){ #include "stringio.h" #include "dialog.h" +void FOV_increase(){ + CamWnd& camwnd = *g_camwnd; + if ( g_camwindow_globals_private.m_nFOV <= ( MAX_FOV - FOV_STEP - 10 ) ) { + g_camwindow_globals_private.m_nFOV += FOV_STEP; + } + else { + g_camwindow_globals_private.m_nFOV = MAX_FOV - 10; + } + Camera_updateProjection( camwnd.getCamera() ); + CamWnd_Update( camwnd ); +} + +void FOV_decrease(){ + CamWnd& camwnd = *g_camwnd; + if ( g_camwindow_globals_private.m_nFOV >= ( MIN_FOV + FOV_STEP ) ) { + g_camwindow_globals_private.m_nFOV -= FOV_STEP; + } + else { + g_camwindow_globals_private.m_nFOV = MIN_FOV; + } + Camera_updateProjection( camwnd.getCamera() ); + CamWnd_Update( camwnd ); +} + + void CameraSpeed_increase(){ if ( g_camwindow_globals_private.m_nMoveSpeed <= ( MAX_CAM_SPEED - CAM_SPEED_STEP - 10 ) ) { g_camwindow_globals_private.m_nMoveSpeed += CAM_SPEED_STEP; @@ -1883,6 +1918,9 @@ void CamWnd_Construct(){ GlobalCommands_insert( "TogglePreview", makeCallbackF(CamWnd_TogglePreview), Accelerator( GDK_KEY_F3 ) ); } + GlobalCommands_insert( "FOVInc", makeCallbackF(FOV_increase), Accelerator( GDK_KEY_KP_Multiply, (GdkModifierType)GDK_SHIFT_MASK ) ); + GlobalCommands_insert( "FOVDec", makeCallbackF(FOV_decrease), Accelerator( GDK_KEY_KP_Divide, (GdkModifierType)GDK_SHIFT_MASK ) ); + GlobalCommands_insert( "CameraSpeedInc", makeCallbackF(CameraSpeed_increase), Accelerator( GDK_KEY_KP_Add, (GdkModifierType)GDK_SHIFT_MASK ) ); GlobalCommands_insert( "CameraSpeedDec", makeCallbackF(CameraSpeed_decrease), Accelerator( GDK_KEY_KP_Subtract, (GdkModifierType)GDK_SHIFT_MASK ) ); @@ -1906,6 +1944,7 @@ void CamWnd_Construct(){ GlobalToggles_insert( "ShowStats", makeCallbackF(ShowStatsToggle), ToggleItem::AddCallbackCaller( g_show_stats ) ); GlobalPreferenceSystem().registerPreference( "ShowStats", make_property_string( g_camwindow_globals_private.m_showStats ) ); + GlobalPreferenceSystem().registerPreference( "FOV", make_property_string( g_camwindow_globals_private.m_nFOV ) ); GlobalPreferenceSystem().registerPreference( "MoveSpeed", make_property_string( g_camwindow_globals_private.m_nMoveSpeed ) ); GlobalPreferenceSystem().registerPreference( "CamLinkSpeed", make_property_string( g_camwindow_globals_private.m_bCamLinkSpeed ) ); GlobalPreferenceSystem().registerPreference( "AngleSpeed", make_property_string( g_camwindow_globals_private.m_nAngleSpeed ) );