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

◆ OnUpdate()

override void OnUpdate ( float pDt,
out DayZPlayerCameraResult pOutResult )

get player transform

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

update camera offset

orientation LS

create LS lag from vehicle velocities

smooth it!

setup orientation

setup position

setup rest

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

74 {
76 vector playerTransformWS[4];
77 m_pPlayer.GetTransform(playerTransformWS);
78
80 IEntity vehicle = m_Transport;
81 pOutResult.m_CollisionIgnoreEntity = vehicle;
82
84 vector cameraPosition = vector.Zero;
85 if ( vehicle )
86 {
87 vector vehiclePositionWS = vehicle.GetOrigin();
88 vector vehiclePositionMS = vehiclePositionWS.InvMultiply4(playerTransformWS);
89 cameraPosition = vehiclePositionMS + m_CameraOffsetMS;
90 }
91
96
98 vector posDiffLS = vector.Zero;
99 vector rotDiffLS = vector.Zero;
100 vector orientVeh = vector.Zero;
101
102 if (vehicle)
103 {
105 posDiffLS = posDiffWS.InvMultiply3(playerTransformWS);
106
108 rotDiffLS = rotDiffWS.InvMultiply3(playerTransformWS);
109
110 orientVeh = m_Transport.GetOrientation() * Math.DEG2RAD;
111 }
112
114 m_LagOffsetPosition[0] = Math.SmoothCD(m_LagOffsetPosition[0], posDiffLS[0], m_fLagOffsetVelocityX, 0.3, 1000, pDt);
115 m_LagOffsetPosition[1] = Math.SmoothCD(m_LagOffsetPosition[1], posDiffLS[1], m_fLagOffsetVelocityY, 0.3, 1000, pDt);
116 m_LagOffsetPosition[2] = Math.SmoothCD(m_LagOffsetPosition[2], posDiffLS[2], m_fLagOffsetVelocityZ, 0.3, 1000, pDt);
117
121
123 vector rot;
127
128 float distance = m_fDistance;
129
130 if (m_CurrentCameraPitch > UP_ANGLE_CAP) // restrict moving camera below surface level
131 {
132 vector clamped = GetCurrentOrientation() + rot;
133 clamped[1] = UP_ANGLE_CAP;
134 Math3D.YawPitchRollMatrix(clamped, pOutResult.m_CameraTM);
135
137
138 }
139 else
140 Math3D.YawPitchRollMatrix(GetCurrentOrientation() + rot, pOutResult.m_CameraTM);
141
143 pOutResult.m_CameraTM[3] = cameraPosition - m_LagOffsetPosition;
144
146 pOutResult.m_fDistance = distance;
147 pOutResult.m_fUseHeading = 0.0;
148 pOutResult.m_fInsideCamera = 0.0;
149 pOutResult.m_fIgnoreParentRoll = 1.0;
150 pOutResult.m_fIgnoreParentPitch = 1.0;
151 pOutResult.m_bUpdateEveryFrame = GetGame().IsPhysicsExtrapolationEnabled();
152
153 StdFovUpdate(pDt, pOutResult);
154
155 super.OnUpdate(pDt, pOutResult);
156 }
float m_fLeftRightAngle
left right angle in rad (in freelook only)
Определения DayZPlayerCamera1stPerson.c:194
float m_fUpDownAngle
up down angle in rad
Определения DayZPlayerCamera1stPerson.c:192
static const float CONST_UD_MAX
up limit
Определения DayZPlayerCamera1stPerson.c:106
float m_fLeftRightAngleAdd
left right angle in rad (in freelook only)
Определения DayZPlayerCamera1stPerson.c:195
float m_fUpDownAngleAdd
up down angle in rad
Определения DayZPlayerCamera1stPerson.c:193
static const float CONST_LR_MIN
down limit
Определения DayZPlayerCamera1stPerson.c:108
static const float CONST_LR_MAX
up limit
Определения DayZPlayerCamera1stPerson.c:109
static const float CONST_UD_MIN
down limit
Определения DayZPlayerCamera1stPerson.c:105
vector m_CameraOffsetMS
model space offset
Определения DayZPlayerCamera3rdPerson.c:301
float UpdateLRAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
Определения DayZPlayerCamera_Base.c:190
float m_CurrentCameraYaw
Определения DayZPlayerCamera_Base.c:578
float m_CurrentCameraPitch
Определения DayZPlayerCamera_Base.c:579
float UpdateUDAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
Определения DayZPlayerCamera_Base.c:129
void StdFovUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
Определения DayZPlayerCamera_Base.c:315
float m_CurrentCameraRoll
Определения DayZPlayerCamera_Base.c:580
vector m_LagOffsetOrientation
Определения DayZPlayerCameraVehicles.c:188
const float CONST_ANGULAR_LAG_ROLL_STRENGTH
Определения DayZPlayerCameraVehicles.c:32
const float CONST_ANGULAR_VELOCITY_STRENGTH
Определения DayZPlayerCameraVehicles.c:28
float m_fLagOffsetVelocityYaw[1]
Определения DayZPlayerCameraVehicles.c:192
const float UP_ANGLE_CAP
Определения DayZPlayerCameraVehicles.c:22
const float CONST_ANGULAR_LAG_PITCH_STRENGTH
Определения DayZPlayerCameraVehicles.c:31
vector m_LagOffsetPosition
lag offsets
Определения DayZPlayerCameraVehicles.c:187
float m_fLagOffsetVelocityPitch[1]
Определения DayZPlayerCameraVehicles.c:193
float m_fLagOffsetVelocityY[1]
Определения DayZPlayerCameraVehicles.c:190
float m_fLagOffsetVelocityRoll[1]
Определения DayZPlayerCameraVehicles.c:194
float m_fLagOffsetVelocityX[1]
Определения DayZPlayerCameraVehicles.c:189
const float CONST_ANGULAR_LAG_YAW_STRENGTH
Определения DayZPlayerCameraVehicles.c:30
Transport m_Transport
cache
Определения DayZPlayerCameraVehicles.c:197
float m_fLagOffsetVelocityZ[1]
Определения DayZPlayerCameraVehicles.c:191
const float CONST_LINEAR_VELOCITY_STRENGTH
Определения DayZPlayerCameraVehicles.c:27
proto native bool IsPhysicsExtrapolationEnabled()
If physics extrapolation is enabled, always true on retail release builds.
Определения EnEntity.c:165
Определения EnMath3D.c:28
Определения EnMath.c:7
proto vector InvMultiply4(vector mat[4])
Invert-transforms position.
static const vector Zero
Определения EnConvert.c:110
proto vector InvMultiply3(vector mat[3])
Invert-transforms vector.
Определения EnConvert.c:106
float m_fDistance
camera distance (external cameras only)
Определения dayzplayer.c:63
DayZPlayer m_pPlayer
data
Определения dayzplayer.c:135
vector GetCurrentOrientation()
Определения dayzplayer.c:112
proto native CGame GetGame()
proto native external vector GetOrigin()
Returns origin of Entity.
static proto void YawPitchRollMatrix(vector ang, out vector mat[3])
Creates rotation matrix from angles.
static float SmoothCDPI2PI(float val, float target, inout float velocity[], float smoothTime, float maxVelocity, float dt)
Определения EnMath.c:680
static proto float InverseLerp(float a, float b, float value)
Calculates the linear value that produces the interpolant value within the range [a,...
static const float RAD2DEG
Определения EnMath.c:16
static const float DEG2RAD
Определения EnMath.c:17
static proto float SmoothCD(float val, float target, inout float velocity[], float smoothTime, float maxVelocity, float dt)
Does the CD smoothing function - easy in | easy out / S shaped smoothing.
proto native vector GetVelocity(notnull IEntity ent)
Returns linear velocity.
proto vector dBodyGetAngularVelocity(notnull IEntity body)
Gets angular velocity for a rigidbody.

Перекрестные ссылки 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_UD_MAX, CONST_UD_MIN, dBodyGetAngularVelocity(), Math::DEG2RAD, GetCurrentOrientation(), GetGame(), IEntity::GetOrigin(), GetVelocity(), Math::InverseLerp(), vector::InvMultiply3(), vector::InvMultiply4(), CGame::IsPhysicsExtrapolationEnabled(), 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, Math::RAD2DEG, Math::SmoothCD(), Math::SmoothCDPI2PI(), StdFovUpdate(), UP_ANGLE_CAP, UpdateLRAngleUnlocked(), UpdateUDAngleUnlocked(), Math3D::YawPitchRollMatrix() и vector::Zero.