r5550 - in trunk/data: . qcsrc/client
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu Jan 15 09:27:54 EST 2009
Author: mand1nga
Date: 2009-01-15 09:27:53 -0500 (Thu, 15 Jan 2009)
New Revision: 5550
Modified:
trunk/data/defaultNexuiz.cfg
trunk/data/qcsrc/client/View.qc
Log:
Demo camera improvements:
Added support for controlling the camera smoothly (cvars camera_speed_attenuation and camera_mouse_treshold)
Independent speeds for free and chase modes
Support for applying smoothness to player movements (cvar camera_chase_smoothly)
More intuitive cvar names
Modified: trunk/data/defaultNexuiz.cfg
===================================================================
--- trunk/data/defaultNexuiz.cfg 2009-01-15 14:03:07 UTC (rev 5549)
+++ trunk/data/defaultNexuiz.cfg 2009-01-15 14:27:53 UTC (rev 5550)
@@ -1299,30 +1299,34 @@
alias camera_enable "set cl_demo_mousegrab 1; set _chase_active $chase_active; chase_active 2;" // Enables the camera for demo playback
alias camera_disable "set cl_demo_mousegrab 0; chase_active $_chase_active;" // Disables the camera for demo playback
-set chase_active_rolling_step 1 // Camera rotation speed
-set chase_active_direction_step 3 // Camera movement speed on the x/y/z axis
-set chase_active_free 0 // Free camera instead of chasing the player
-set chase_active_reset 0 // Reset the camera position
-set chase_active_direction_x 0 // Move the camera on the x axis (relative to the camera angle)
-set chase_active_direction_y 0 // Move the camera on the y axis (relative to the camera angle)
-set chase_active_direction_z 0 // Move the camera on the z axis (relative to the camera rotation)
+set camera_speed_roll 0.9 // Camera rotation speed
+set camera_speed_chase 4 // Camera movement speed on the x/y/z axis while chasing the player
+set camera_speed_free 8 // Camera movement speed on the x/y/z axis in free mode
+set camera_speed_attenuation 30 // Camera movements attenuation factor. Bigger is smoother
+set camera_free 0 // Free camera instead of chasing the player
+set camera_reset 0 // Reset the camera position
+set camera_direction_x 0 // Move the camera on the x axis (relative to the camera angle)
+set camera_direction_y 0 // Move the camera on the y axis (relative to the camera angle)
+set camera_direction_z 0 // Move the camera on the z axis (relative to the camera rotation)
+set camera_mouse_treshold 0.5 // Use to ignore small mouse movements. This allows for smoother camera contro.
+set camera_chase_smoothly 0 // Attenuate player movements (only in chase mode)
-alias +camera_move_forward "set chase_active_direction_x 1"
-alias -camera_move_forward "set chase_active_direction_x 0"
-alias +camera_move_backward "set chase_active_direction_x -1"
+alias +camera_move_forward "set camera_direction_x 1"
+alias -camera_move_forward "set camera_direction_x 0"
+alias +camera_move_backward "set camera_direction_x -1"
alias -camera_move_backward -camera_move_forward
-alias +camera_move_left "set chase_active_direction_y 1"
-alias -camera_move_left "set chase_active_direction_y 0"
-alias +camera_move_right "set chase_active_direction_y -1"
+alias +camera_move_left "set camera_direction_y 1"
+alias -camera_move_left "set camera_direction_y 0"
+alias +camera_move_right "set camera_direction_y -1"
alias -camera_move_right -camera_move_left
-alias +camera_move_up "set chase_active_direction_z 1"
-alias -camera_move_up "set chase_active_direction_z 0"
-alias +camera_move_down "set chase_active_direction_z -1"
+alias +camera_move_up "set camera_direction_z 1"
+alias -camera_move_up "set camera_direction_z 0"
+alias +camera_move_down "set camera_direction_z -1"
alias -camera_move_down -camera_move_up
-alias +camera_roll_right "set chase_active_roll 1"
-alias -camera_roll_right "set chase_active_roll 0"
-alias +camera_roll_left "set chase_active_roll -1"
+alias +camera_roll_right "set camera_roll 1"
+alias -camera_roll_right "set camera_roll 0"
+alias +camera_roll_left "set camera_roll -1"
alias -camera_roll_left -camera_roll_right
Modified: trunk/data/qcsrc/client/View.qc
===================================================================
--- trunk/data/qcsrc/client/View.qc 2009-01-15 14:03:07 UTC (rev 5549)
+++ trunk/data/qcsrc/client/View.qc 2009-01-15 14:27:53 UTC (rev 5550)
@@ -191,7 +191,7 @@
float zoomscript_caught;
float view_set;
float camera_mode;
-vector camera_offset, new_angles;
+vector camera_offset, current_origin, mouse_angles, current_camera_offset, new_angles;
void CSQC_UpdateView(float w, float h)
{
entity e;
@@ -308,64 +308,89 @@
R_SetView(VF_FOV, GetCurrentFov(fov));
- if (cvar("chase_active") > 1 && isdemo())
+ // Camera for demo playback
+ if (cvar("chase_active") > 1 && cvar("cl_demo_mousegrab") && isdemo())
{
- float distance, chase_view_angle, step;
+ float speed, attenuation;
vector new_origin, m;
- step = cvar("chase_active_direction_step");
+ speed = ((cvar("camera_free")) ? cvar("camera_speed_free") : cvar("camera_speed_chase"));
+
+ attenuation = cvar("camera_speed_attenuation");
- if( cvar("chase_active_reset") || !camera_mode )
+ attenuation = ((attenuation<1) ? 1 : (1 / attenuation));
+
+ if( cvar("camera_reset") || !camera_mode )
{
camera_offset = '0 0 0';
new_angles = view_angles;
camera_offset_z += 20;
camera_offset_x -= 20 * cos(new_angles_y * DEG2RAD);
camera_offset_y -= 20 * sin(new_angles_y * DEG2RAD);
+ current_origin = view_origin;
}
- if( cvar("chase_active_roll") )
- new_angles_z += cvar("chase_active_roll") * cvar("chase_active_rolling_step");
+ // Camera angles
+ if( cvar("camera_roll") )
+ mouse_angles_z += cvar("camera_roll") * cvar("camera_speed_roll");
m = getmousepos() * 0.1;
- new_angles_x += m_y * cos(new_angles_z * DEG2RAD) + (m_x * sin(new_angles_z * DEG2RAD));
- new_angles_y -= m_x * cos(new_angles_z * DEG2RAD) + (m_y * -sin(new_angles_z * DEG2RAD));
-
- if( cvar("chase_active_direction_x") )
+ if(vlen(m)>cvar("camera_mouse_treshold"))
{
- camera_offset_x += cvar("chase_active_direction_x") * step * cos(new_angles_y * DEG2RAD);
- camera_offset_y += cvar("chase_active_direction_x") * step * sin(new_angles_y * DEG2RAD);
+ mouse_angles_x += m_y * cos(mouse_angles_z * DEG2RAD) + (m_x * sin(mouse_angles_z * DEG2RAD));
+ mouse_angles_y -= m_x * cos(mouse_angles_z * DEG2RAD) + (m_y * -sin(mouse_angles_z * DEG2RAD));
}
+
+ new_angles += (mouse_angles - new_angles) * attenuation;
+
+ // Camera position
+ if( cvar("camera_direction_x") )
+ {
+ camera_offset_x += cvar("camera_direction_x") * speed * cos(new_angles_y * DEG2RAD);
+ camera_offset_y += cvar("camera_direction_x") * speed * sin(new_angles_y * DEG2RAD);
+ }
- if( cvar("chase_active_direction_y") )
+ if( cvar("camera_direction_y") )
{
- camera_offset_y += cvar("chase_active_direction_y") * step * cos(new_angles_y * DEG2RAD) * cos(new_angles_z * DEG2RAD);
- camera_offset_x += cvar("chase_active_direction_y") * step * -sin(new_angles_y * DEG2RAD);
- camera_offset_z += cvar("chase_active_direction_y") * step * sin(new_angles_z * DEG2RAD);
+ camera_offset_y += cvar("camera_direction_y") * speed * cos(new_angles_y * DEG2RAD) * cos(new_angles_z * DEG2RAD);
+ camera_offset_x += cvar("camera_direction_y") * speed * -sin(new_angles_y * DEG2RAD);
+ camera_offset_z += cvar("camera_direction_y") * speed * sin(new_angles_z * DEG2RAD);
}
- if( cvar("chase_active_direction_z") )
- camera_offset_z += cvar("chase_active_direction_z") * step * cos(new_angles_z * DEG2RAD);
+ if( cvar("camera_direction_z") )
+ camera_offset_z += cvar("camera_direction_z") * speed * cos(new_angles_z * DEG2RAD);
- if( cvar("chase_active_free") )
+ current_camera_offset += (camera_offset - current_camera_offset) * attenuation;
+
+ // Camera modes
+ if( cvar("camera_free") )
{
- if ( camera_mode == CAMERA_CHASE ){
- camera_offset = view_origin + camera_offset;
+ if ( camera_mode == CAMERA_CHASE )
+ {
+ current_camera_offset = current_origin + current_camera_offset;
+ camera_offset = current_origin + camera_offset;
}
camera_mode = CAMERA_FREE;
-
- new_origin = camera_offset;
+ new_origin = current_camera_offset;
}
else
{
if ( camera_mode == CAMERA_FREE )
{
- camera_offset = camera_offset - view_origin;
+ current_origin = view_origin;
+ camera_offset = camera_offset - current_origin;
+ current_camera_offset = current_camera_offset - current_origin;
}
camera_mode = CAMERA_CHASE;
- new_origin = view_origin + camera_offset;
+
+ if(cvar("camera_chase_smoothly"))
+ current_origin += (view_origin - current_origin) * attenuation;
+ else
+ current_origin = view_origin;
+
+ new_origin = current_origin + current_camera_offset;
}
R_SetView(VF_ANGLES, new_angles);
More information about the nexuiz-commits
mailing list