void CCamera::OnRender() { //vec2 center; // update camera center if(m_pClient->m_Snap.m_SpecInfo.m_Active && !m_pClient->m_Snap.m_SpecInfo.m_UsePosition || m_ForceFreeView) { if(m_CamType != CAMTYPE_SPEC) { m_pClient->m_pControls->m_MousePos = m_PrevCenter; m_pClient->m_pControls->ClampMousePos(); m_CamType = CAMTYPE_SPEC; } m_Center = m_pClient->m_pControls->m_MousePos; } else { if(m_CamType != CAMTYPE_PLAYER) { m_pClient->m_pControls->ClampMousePos(); m_CamType = CAMTYPE_PLAYER; } vec2 CameraOffset(0, 0); float l = length(m_pClient->m_pControls->m_MousePos); if(l > 0.0001f) // make sure that this isn't 0 { float DeadZone = g_Config.m_ClMouseDeadzone; float FollowFactor = g_Config.m_ClMouseFollowfactor/100.0f; float OffsetAmount = max(l-DeadZone, 0.0f) * FollowFactor; CameraOffset = normalize(m_pClient->m_pControls->m_MousePos)*OffsetAmount; } if(m_pClient->m_Snap.m_SpecInfo.m_Active) m_Center = m_pClient->m_Snap.m_SpecInfo.m_Position + CameraOffset; else m_Center = m_pClient->m_LocalCharacterPos + CameraOffset; } if (m_UseForceCenter) m_Center = m_ForceCenter; m_PrevCenter = m_Center; }
void CCamera::OnRender() { //vec2 center; m_Zoom = 1.0f; // update camera center if(m_pClient->m_Snap.m_Spectate) m_Center = m_pClient->m_pControls->m_MousePos; else { float l = length(m_pClient->m_pControls->m_MousePos); float DeadZone = g_Config.m_ClMouseDeadzone; float FollowFactor = g_Config.m_ClMouseFollowfactor/100.0f; vec2 CameraOffset(0, 0); float OffsetAmount = max(l-DeadZone, 0.0f) * FollowFactor; if(l > 0.0001f) // make sure that this isn't 0 CameraOffset = normalize(m_pClient->m_pControls->m_MousePos)*OffsetAmount; m_Center = m_pClient->m_LocalCharacterPos + CameraOffset; } }
void CCamera::OnRender() { if(Client()->State() == IClient::STATE_ONLINE || Client()->State() == IClient::STATE_DEMOPLAYBACK) { m_Zoom = 1.0f; // update camera center if(m_pClient->m_Snap.m_SpecInfo.m_Active && !m_pClient->m_Snap.m_SpecInfo.m_UsePosition) { if(m_CamType != CAMTYPE_SPEC) { m_pClient->m_pControls->m_MousePos = m_PrevCenter; m_pClient->m_pControls->ClampMousePos(); m_CamType = CAMTYPE_SPEC; } m_Center = m_pClient->m_pControls->m_MousePos; } else { if(m_CamType != CAMTYPE_PLAYER) { m_pClient->m_pControls->ClampMousePos(); m_CamType = CAMTYPE_PLAYER; } vec2 CameraOffset(0, 0); float l = length(m_pClient->m_pControls->m_MousePos); if(l > 0.0001f) // make sure that this isn't 0 { float DeadZone = g_Config.m_ClMouseDeadzone; float FollowFactor = g_Config.m_ClMouseFollowfactor/100.0f; float OffsetAmount = max(l-DeadZone, 0.0f) * FollowFactor; CameraOffset = normalize(m_pClient->m_pControls->m_MousePos)*OffsetAmount; } if(m_pClient->m_Snap.m_SpecInfo.m_Active) m_Center = m_pClient->m_Snap.m_SpecInfo.m_Position + CameraOffset; else m_Center = m_pClient->m_LocalCharacterPos + CameraOffset; } } else { m_Zoom = 0.7f; static vec2 Dir = vec2(1.0f, 0.0f); if(distance(m_Center, m_RotationCenter) <= (float)g_Config.m_ClRotationRadius+0.5f) { // do little rotation float RotPerTick = 360.0f/(float)g_Config.m_ClRotationSpeed * Client()->RenderFrameTime(); Dir = rotate(Dir, RotPerTick); m_Center = m_RotationCenter+Dir*(float)g_Config.m_ClRotationRadius; } else { Dir = normalize(m_RotationCenter-m_Center); m_Center += Dir*(500.0f*Client()->RenderFrameTime()); Dir = normalize(m_Center-m_RotationCenter); } } m_PrevCenter = m_Center; }
void CCamera::OnRender() { if(Client()->State() == IClient::STATE_ONLINE || Client()->State() == IClient::STATE_DEMOPLAYBACK) { m_Zoom = 1.0f; // update camera center if(m_pClient->m_Snap.m_SpecInfo.m_Active && !m_pClient->m_Snap.m_SpecInfo.m_UsePosition && (m_pClient->m_Snap.m_SpecInfo.m_SpecMode == SPEC_FREEVIEW || (m_pClient->m_Snap.m_pLocalInfo && !(m_pClient->m_Snap.m_pLocalInfo->m_PlayerFlags&PLAYERFLAG_DEAD)))) { if(m_CamType != CAMTYPE_SPEC) { m_pClient->m_pControls->m_MousePos = m_PrevCenter; m_pClient->m_pControls->ClampMousePos(); m_CamType = CAMTYPE_SPEC; } m_Center = m_pClient->m_pControls->m_MousePos; } else { if(m_CamType != CAMTYPE_PLAYER) { m_pClient->m_pControls->ClampMousePos(); m_CamType = CAMTYPE_PLAYER; } vec2 CameraOffset(0, 0); float l = length(m_pClient->m_pControls->m_MousePos); if(g_Config.m_ClDynamicCamera && l > 0.0001f) // make sure that this isn't 0 { float DeadZone = g_Config.m_ClMouseDeadzone; float FollowFactor = g_Config.m_ClMouseFollowfactor/100.0f; float OffsetAmount = max(l-DeadZone, 0.0f) * FollowFactor; CameraOffset = normalize(m_pClient->m_pControls->m_MousePos)*OffsetAmount; } if(m_pClient->m_Snap.m_SpecInfo.m_Active) m_Center = m_pClient->m_Snap.m_SpecInfo.m_Position + CameraOffset; else m_Center = m_pClient->m_LocalCharacterPos + CameraOffset; } } else { m_Zoom = 0.7f; static vec2 Dir = vec2(1.0f, 0.0f); if(distance(m_Center, m_RotationCenter) <= (float)g_Config.m_ClRotationRadius+0.5f) { // do little rotation float RotPerTick = 360.0f/(float)g_Config.m_ClRotationSpeed * Client()->RenderFrameTime(); Dir = rotate(Dir, RotPerTick); m_Center = m_RotationCenter+Dir*(float)g_Config.m_ClRotationRadius; } else { // positions for the animation Dir = normalize(m_AnimationStartPos - m_RotationCenter); vec2 TargetPos = m_RotationCenter + Dir * (float)g_Config.m_ClRotationRadius; float Distance = distance(m_AnimationStartPos, TargetPos); // move time m_MoveTime += Client()->RenderFrameTime()*g_Config.m_ClCameraSpeed / 10.0f; float XVal = 1 - m_MoveTime; XVal = pow(XVal, 7.0); m_Center = TargetPos + Dir * (XVal*Distance); } } m_PrevCenter = m_Center; }
void CCamera::OnRender() { CServerInfo Info; Client()->GetServerInfo(&Info); if(!(m_pClient->m_Snap.m_SpecInfo.m_Active || IsRace(&Info) || IsBlockWorlds(&Info) || Client()->State() == IClient::STATE_DEMOPLAYBACK)) { if(!Client()->DummyConnected() && !Client()->DummyConnecting()) { m_ZoomSet = false; m_Zoom = 1.0; } } else if(!m_ZoomSet && g_Config.m_ClDefaultZoom != 10) { m_ZoomSet = true; OnReset(); } // update camera center if(m_pClient->m_Snap.m_SpecInfo.m_Active && !m_pClient->m_Snap.m_SpecInfo.m_UsePosition) { if(m_CamType != CAMTYPE_SPEC) { m_LastPos[g_Config.m_ClDummy] = m_pClient->m_pControls->m_MousePos[g_Config.m_ClDummy]; m_pClient->m_pControls->m_MousePos[g_Config.m_ClDummy] = m_PrevCenter; m_pClient->m_pControls->ClampMousePos(); m_CamType = CAMTYPE_SPEC; } m_Center = m_pClient->m_pControls->m_MousePos[g_Config.m_ClDummy]; } else { if(m_CamType != CAMTYPE_PLAYER) { if(m_LastPos[g_Config.m_ClDummy].x < g_Config.m_ClMouseMinDistance) m_pClient->m_pControls->m_MousePos[g_Config.m_ClDummy].x = m_LastPos[g_Config.m_ClDummy].x + g_Config.m_ClMouseMinDistance; else m_pClient->m_pControls->m_MousePos[g_Config.m_ClDummy] = m_LastPos[g_Config.m_ClDummy]; m_pClient->m_pControls->ClampMousePos(); m_CamType = CAMTYPE_PLAYER; } vec2 CameraOffset(0, 0); float l = length(m_pClient->m_pControls->m_MousePos[g_Config.m_ClDummy]); if(l > 0.0001f) // make sure that this isn't 0 { float DeadZone = g_Config.m_ClDyncam ? g_Config.m_ClDyncamDeadzone : g_Config.m_ClMouseDeadzone; float FollowFactor = (g_Config.m_ClDyncam ? g_Config.m_ClDyncamFollowFactor : g_Config.m_ClMouseFollowfactor) / 100.0f; float OffsetAmount = maximum(l-DeadZone, 0.0f) * FollowFactor; CameraOffset = normalize(m_pClient->m_pControls->m_MousePos[g_Config.m_ClDummy])*OffsetAmount; } if(m_pClient->m_Snap.m_SpecInfo.m_Active) m_Center = m_pClient->m_Snap.m_SpecInfo.m_Position + CameraOffset; else m_Center = m_pClient->m_LocalCharacterPos + CameraOffset; } m_PrevCenter = m_Center; }
void CCamera::OnRender() { //vec2 center; if(Client()->State() != IClient::STATE_OFFLINE) m_Zoom = 1.0f; // update camera center if(m_pClient->m_Snap.m_SpecInfo.m_Active && !m_pClient->m_Snap.m_SpecInfo.m_UsePosition) { if(m_CamType != CAMTYPE_SPEC) { m_pClient->m_pControls->m_MousePos = m_PrevCenter; m_pClient->m_pControls->ClampMousePos(); m_CamType = CAMTYPE_SPEC; } m_Center = m_pClient->m_pControls->m_MousePos; } else if (Client()->State() == IClient::STATE_OFFLINE) { // sway float d = distance(m_Center, m_WantedPos); float r = 10.0f; float s = 7.5f; // movement int64 Now = time_get(); int acc = 1000; float t = acc / 0.5f; float a = 0; if (m_Center != m_WantedPos && !m_Sway) { a = 1.0f - ((float)clamp(acc - (int)((Now - m_LastMove) / (time_freq() / t)), 0, acc) / acc); m_Center = m_PrevPos - (m_PrevPos - m_WantedPos) * a; m_Zoom = m_PrevZoom - (m_PrevZoom - m_WantedZoom) * a; } else m_Sway = true; if (m_Sway) { t = acc / s; a = 1.0f - ((float)clamp(acc - (int)((Now - m_LastSway) / (time_freq() / t)), 0, acc) / acc); m_Center = m_WantedPos + vec2(cosf(2*pi * a), sinf(2*pi * a))*r; } if (m_LastSway + time_freq() * s < Now) m_LastSway = Now; } else { if(m_CamType != CAMTYPE_PLAYER) { m_pClient->m_pControls->ClampMousePos(); m_CamType = CAMTYPE_PLAYER; } vec2 CameraOffset(0, 0); float l = length(m_pClient->m_pControls->m_MousePos); if(l > 0.0001f) // make sure that this isn't 0 { float DeadZone = g_Config.m_ClMouseDeadzone; float FollowFactor = g_Config.m_ClMouseFollowfactor/100.0f; float OffsetAmount = max(l-DeadZone, 0.0f) * FollowFactor; CameraOffset = normalize(m_pClient->m_pControls->m_MousePos)*OffsetAmount; } if(m_pClient->m_Snap.m_SpecInfo.m_Active) m_Center = m_pClient->m_Snap.m_SpecInfo.m_Position + CameraOffset; else m_Center = m_pClient->m_LocalCharacterPos + CameraOffset; } m_PrevCenter = m_Center; }