DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ OnUpdate()

override void DayZPlayerCamera3rdPersonVehicleMotorbike::OnUpdate ( float pDt,
out DayZPlayerCameraResult pOutResult )
inlineprotected

get player transform

update camera offset

orientation LS

create LS lag from vehicle velocities

smooth it!

setup orientation

setup position

setup rest

get vehicle and set it as ignore entity for camera collision solver

См. определение в файле DayZPlayerCameraVehicles.c строка 320

321 {
323 vector playerTransformWS[4];
324 m_pPlayer.GetTransform(playerTransformWS);
325
327 vector cameraPosition = vector.Zero;
328 if (m_Transport)
329 {
330 vector vehiclePositionWS = m_Transport.GetOrigin();
331 vector vehiclePositionMS = vehiclePositionWS.InvMultiply4(playerTransformWS);
332 cameraPosition = vehiclePositionMS + m_CameraOffsetMS;
333 }
334
339
341 vector posDiffLS = vector.Zero;
342 vector rotDiffLS = vector.Zero;
343
344 vector rotWS = m_pPlayer.GetOrientation();
345 rotWS = rotWS * Math.DEG2RAD;
346 rotWS[2] = 0;
347
348 vector velocity = GetVelocity(m_Transport);
349
350 if (m_Transport)
351 {
352 vector posDiffWS = velocity * CONST_LINEAR_VELOCITY_STRENGTH;
353 posDiffLS = posDiffLS + posDiffWS.InvMultiply3(playerTransformWS);
354
356 rotDiffLS = rotDiffLS + rotDiffWS.InvMultiply3(playerTransformWS);
357
358 vector tempRot1 = rotDiffLS;
359 rotDiffLS[0] = tempRot1[1];
360 rotDiffLS[1] = tempRot1[2];
361 rotDiffLS[2] = tempRot1[0];
362
363 rotWS[0] = rotWS[0] + rotDiffLS[0];
364 rotWS[1] = rotWS[1] + rotDiffLS[1];
365 rotWS[2] = rotWS[2] + rotDiffLS[2];
366 }
367
369 m_LagOffsetPosition[0] = Math.SmoothCD(m_LagOffsetPosition[0], posDiffLS[0], m_fLagOffsetVelocityX, CONST_SPRING_SMOOTHTIME_POS_X, 1000, pDt);
370 m_LagOffsetPosition[1] = Math.SmoothCD(m_LagOffsetPosition[1], posDiffLS[1], m_fLagOffsetVelocityY, CONST_SPRING_SMOOTHTIME_POS_Y, 1000, pDt);
371 m_LagOffsetPosition[2] = Math.SmoothCD(m_LagOffsetPosition[2], posDiffLS[2], m_fLagOffsetVelocityZ, CONST_SPRING_SMOOTHTIME_POS_Z, 1000, pDt);
372
376
378 vector rot = m_LagOffsetOrientation * Math.RAD2DEG;
379 if (m_Transport)
380 {
381 vector rotTM[3];
382 Math3D.YawPitchRollMatrix(rot, rotTM);
383
384 Math3D.MatrixInvMultiply3(playerTransformWS, rotTM, rotTM);
385
386 vector tempRot = Math3D.MatrixToAngles(rotTM);
387 float lagYaw = tempRot[0];
388 if (lagYaw > 180.0)
389 lagYaw -= 360.0; // normalize to [-180,180]
390 rot[0] = -lagYaw * CONST_YAW_LAG_REVERSE; // reverse + dampen the yaw lag swing
391 }
392
393 rot[0] = rot[0] * (1.0 + (Math.InverseLerp(0.0, 1.0 + CONST_ANGULAR_LAG_YAW_STRENGTH, Math.AbsFloat(rotDiffLS[0])) * CONST_ANGULAR_LAG_YAW_STRENGTH));
394 rot[1] = rot[1] * (1.0 + (Math.InverseLerp(0.0, 1.0 + CONST_ANGULAR_LAG_PITCH_STRENGTH, Math.AbsFloat(rotDiffLS[1])) * CONST_ANGULAR_LAG_PITCH_STRENGTH));
395 rot[2] = rot[2] * (1.0 + (Math.InverseLerp(0.0, 1.0 + CONST_ANGULAR_LAG_ROLL_STRENGTH, Math.AbsFloat(rotDiffLS[2])) * CONST_ANGULAR_LAG_ROLL_STRENGTH));
396
397 rot = GetCurrentOrientation() + rot;
398
399 float distance = m_fDistance;
400 distance -= (2 * Math.Clamp(Math.InverseLerp(UP_ANGLE_CAP * 0.5, CONST_UD_MAX, rot[1]), 0, 1));
401
402 if (rot[1] > UP_ANGLE_CAP)
403 {
404 rot[1] = UP_ANGLE_CAP;
405 }
406
407 Math3D.YawPitchRollMatrix(rot, pOutResult.m_CameraTM);
408
410 pOutResult.m_CameraTM[3] = cameraPosition - m_LagOffsetPosition;
411
413 pOutResult.m_fDistance = distance;
414 pOutResult.m_fUseHeading = 0.0;
415 pOutResult.m_fInsideCamera = 0.0;
416 pOutResult.m_fIgnoreParentRoll = 1.0;
417 pOutResult.m_fIgnoreParentPitch = 1.0;
418 pOutResult.m_fIgnoreParentYaw = 0.0;
419 pOutResult.m_bUpdateEveryFrame = g_Game.IsPhysicsExtrapolationEnabled();
420
422 pOutResult.m_CollisionIgnoreEntity = m_Transport;
423 pOutResult.m_fPredictCollisionRadius = 1.0;
424
425 StdFovUpdate(pDt, pOutResult);
426
427 super.OnUpdate(pDt, pOutResult);
428 }
DayZGame g_Game
Определения DayZGame.c:4074
float UpdateLRAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
Определения DayZPlayerCamera_Base.c:212
float m_CurrentCameraYaw
Определения DayZPlayerCamera_Base.c:760
float m_CurrentCameraPitch
Определения DayZPlayerCamera_Base.c:761
float UpdateUDAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
Определения DayZPlayerCamera_Base.c:150
void StdFovUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
Определения DayZPlayerCamera_Base.c:337
float m_CurrentCameraRoll
Определения DayZPlayerCamera_Base.c:762
static const float CONST_YAW_LAG_REVERSE
Определения DayZPlayerCameraVehicles.c:256
static const float CONST_UD_MIN
down limit
Определения DayZPlayerCameraVehicles.c:241
float m_fUpDownAngleAdd
up down angle in rad
Определения DayZPlayerCameraVehicles.c:454
float m_fLeftRightAngle
left right angle in rad
Определения DayZPlayerCameraVehicles.c:455
static const float CONST_LR_MIN
down limit
Определения DayZPlayerCameraVehicles.c:245
static const float CONST_SPRING_SMOOTHTIME_YAW
Определения DayZPlayerCameraVehicles.c:258
float m_fDistance
distance from start
Определения DayZPlayerCameraVehicles.c:450
static const float CONST_SPRING_SMOOTHTIME_PITCH
Определения DayZPlayerCameraVehicles.c:259
static const float CONST_SPRING_SMOOTHTIME_POS_Y
Определения DayZPlayerCameraVehicles.c:264
static const float CONST_UD_MAX
up limit
Определения DayZPlayerCameraVehicles.c:242
static const float CONST_SPRING_SMOOTHTIME_ROLL
Определения DayZPlayerCameraVehicles.c:260
static const float CONST_LR_MAX
up limit
Определения DayZPlayerCameraVehicles.c:246
static const float CONST_SPRING_SMOOTHTIME_POS_Z
Определения DayZPlayerCameraVehicles.c:265
vector m_CameraOffsetMS
runtime config
Определения DayZPlayerCameraVehicles.c:449
float m_fLeftRightAngleAdd
left right angle in rad
Определения DayZPlayerCameraVehicles.c:456
static const float CONST_SPRING_SMOOTHTIME_POS_X
Определения DayZPlayerCameraVehicles.c:263
proto vector InvMultiply4(vector mat[4])
Invert-transforms position.
proto vector InvMultiply3(vector mat[3])
Invert-transforms vector.
DayZPlayer m_pPlayer
data
Определения dayzplayer.c:135
vector GetCurrentOrientation()
Определения dayzplayer.c:112
proto native vector GetVelocity(notnull IEntity ent)
Returns linear velocity.
proto vector dBodyGetAngularVelocity(notnull IEntity body)
Gets angular velocity for a rigidbody.

Перекрестные ссылки Math::AbsFloat(), Math::Clamp(), CONST_ANGULAR_LAG_PITCH_STRENGTH, CONST_ANGULAR_LAG_ROLL_STRENGTH, CONST_ANGULAR_LAG_YAW_STRENGTH, CONST_ANGULAR_VELOCITY_STRENGTH, CONST_LINEAR_VELOCITY_STRENGTH, CONST_LR_MAX, CONST_LR_MIN, CONST_SPRING_SMOOTHTIME_PITCH, CONST_SPRING_SMOOTHTIME_POS_X, CONST_SPRING_SMOOTHTIME_POS_Y, CONST_SPRING_SMOOTHTIME_POS_Z, CONST_SPRING_SMOOTHTIME_ROLL, CONST_SPRING_SMOOTHTIME_YAW, CONST_UD_MAX, CONST_UD_MIN, CONST_YAW_LAG_REVERSE, dBodyGetAngularVelocity(), Math::DEG2RAD, g_Game, GetCurrentOrientation(), GetVelocity(), Math::InverseLerp(), vector::InvMultiply3(), vector::InvMultiply4(), m_CameraOffsetMS, m_CurrentCameraPitch, m_CurrentCameraRoll, m_CurrentCameraYaw, m_fDistance, m_fLagOffsetVelocityPitch, m_fLagOffsetVelocityRoll, m_fLagOffsetVelocityX, m_fLagOffsetVelocityY, m_fLagOffsetVelocityYaw, m_fLagOffsetVelocityZ, m_fLeftRightAngle, m_fLeftRightAngleAdd, m_fUpDownAngle, m_fUpDownAngleAdd, m_LagOffsetOrientation, m_LagOffsetPosition, m_pPlayer, m_Transport, Math3D::MatrixInvMultiply3(), Math3D::MatrixToAngles(), Math::RAD2DEG, Math::SmoothCD(), Math::SmoothCDPI2PI(), StdFovUpdate(), UP_ANGLE_CAP, UpdateLRAngleUnlocked(), UpdateUDAngleUnlocked(), Math3D::YawPitchRollMatrix() и vector::Zero.