using System;
using System.Windows.Forms;
using GTA;
using GTA.Native;
using GTA.Math;
public class CustomVehicleCamera : Script
{
private Camera _carCamera;
private float _heightOffset = 0.0f; // Смещение высоты по умолчанию
private readonly float _heightStep = 0.05f; // Шаг изменения высоты
public CustomVehicleCamera()
{
Tick += OnTick;
KeyDown += OnKeyDown;
}
private void OnTick(object sender, EventArgs e)
{
var player = Game.Player.Character;
var vehicle = player.CurrentVehicle;
// Если игрок в машине и это не вид от первого лица
if (vehicle != null && !Function.Call<bool>(Hash.IS_GAMEPLAY_CAM_LOOKING_BEHIND))
{
// Создаём камеру, если её ещё нет
if (_carCamera == null || !_carCamera.Exists())
{
_carCamera = World.CreateCamera(vehicle.Position, vehicle.Rotation, 60f);
_carCamera.PointAt(vehicle.Position + vehicle.ForwardVector * 10);
}
// Привязываем камеру к машине со смещением
// X = 0 (по центру), Y = -5 (сзади), Z = 2 + _heightOffset (высота)
var offset = new Vector3(0f, -5f, 2f + _heightOffset);
_carCamera.AttachTo(vehicle, offset);
// Делаем камеру активной для рендера
World.RenderingCamera = _carCamera;
}
else
{
// Если игрок не в машине, удаляем камеру и возвращаем стандартный вид
if (_carCamera != null && _carCamera.Exists())
{
World.RenderingCamera = null;
_carCamera.Delete();
_carCamera = null;
}
}
}
private void OnKeyDown(object sender, KeyEventArgs e)
{
// Регулировка высоты камеры
if (e.KeyCode == Keys.NumPad8) // Поднять камеру
{
_heightOffset += _heightStep;
UI.ShowSubtitle($"Высота камеры: {_heightOffset:F2}");
}
else if (e.KeyCode == Keys.NumPad2) // Опустить камеру
{
_heightOffset -= _heightStep;
UI.ShowSubtitle($"Высота камеры: {_heightOffset:F2}");
}
}
}