123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- class DayZSpectator : Camera
- {
- private float m_SpeedMultiplier = 1.0;
-
- private float m_SendUpdateAcc = 0.0;
-
- void DayZSpectator()
- {
- SetEventMask(EntityEvent.FRAME);
- }
-
- override void EOnFrame(IEntity other, float timeSlice)
- {
- if (GetUApi().GetInputByID(UACarShiftGearUp).LocalPress())
- m_SpeedMultiplier = m_SpeedMultiplier + 2;
- if (GetUApi().GetInputByID(UACarShiftGearDown).LocalPress())
- m_SpeedMultiplier = m_SpeedMultiplier - 2;
-
- float speed = 5.0 * m_SpeedMultiplier;
- if (GetUApi().GetInputByID(UATurbo).LocalValue())
- speed *= 2;
-
- float forward = GetUApi().GetInputByID(UAMoveForward).LocalValue() - GetUApi().GetInputByID(UAMoveBack).LocalValue();
- float strafe = GetUApi().GetInputByID(UAMoveRight).LocalValue() - GetUApi().GetInputByID(UAMoveLeft).LocalValue();
-
- vector direction = GetDirection();
- vector directionAside = vector.Up * direction;
-
- vector oldPos = GetPosition();
- vector forwardChange = forward * timeSlice * direction * speed;
- vector strafeChange = strafe * timeSlice * directionAside * speed;
- vector newPos = oldPos + forwardChange + strafeChange;
- float yMin = GetGame().SurfaceRoadY(newPos[0], newPos[2]);
- if (newPos[1] < yMin)
- newPos[1] = yMin;
-
- SetPosition(newPos);
-
- float yawDiff = GetUApi().GetInputByID(UAAimLeft).LocalValue() - GetUApi().GetInputByID(UAAimRight).LocalValue();
- float pitchDiff = GetUApi().GetInputByID(UAAimDown).LocalValue() - GetUApi().GetInputByID(UAAimUp).LocalValue();
- vector oldOrient = GetOrientation();
- vector newOrient = oldOrient;
- newOrient[0] = newOrient[0] - Math.RAD2DEG * yawDiff * timeSlice;
- newOrient[1] = newOrient[1] - Math.RAD2DEG * pitchDiff * timeSlice;
- if (newOrient[1] < -89)
- newOrient[1] = -89;
- if (newOrient[1] > 89)
- newOrient[1] = 89;
-
- SetOrientation(newOrient);
-
- if (m_SendUpdateAcc > 0.5)
- {
- GetGame().UpdateSpectatorPosition(newPos);
- m_SendUpdateAcc = 0;
- }
-
- m_SendUpdateAcc = m_SendUpdateAcc + timeSlice;
- }
- };
|