using System;
using UnityEngine;
public class CarController : MonoBehaviour
{
private Rigidbody rb;
public float speed = 5f, finalspeed = 15f, rotatespeed = 300f;
private bool isClicked;
private float curPointX, curPointY;
public enum Axis
{
Vertical, Horizontal
}
public Axis CarAxis;
[NonSerialized] public Vector3 FinalPosition;
private enum Direction
{
Forward, Backward, None
}
private Direction moveDirection = Direction.None;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void OnMouseDown()
{
curPointX = Input.mousePosition.x;
curPointY = Input.mousePosition.y;
}
void OnMouseUp()
{
float deltaX = Input.mousePosition.x - curPointX;
float deltaY = Input.mousePosition.y - curPointY;
// Минимальный порог сдвига, чтобы исключить случайные клики без пролистывания
if (Mathf.Abs(deltaX) < 10f && Mathf.Abs(deltaY) < 10f) return;
if (CarAxis == Axis.Horizontal)
{
// Для горизонтальной машины учитываем сдвиг по оси X
moveDirection = deltaX > 0 ? Direction.Forward : Direction.Backward;
}
else if (CarAxis == Axis.Vertical)
{
// Для вертикальной машины учитываем сдвиг по оси Y
moveDirection = deltaY > 0 ? Direction.Forward : Direction.Backward;
}
isClicked = true;
}
void Update()
{
if (FinalPosition.x != 0)
{
transform.position = Vector3.MoveTowards(transform.position, FinalPosition, finalspeed * Time.deltaTime);
Vector3 lookAtPos = FinalPosition - transform.position;
lookAtPos.y = 0;
if (lookAtPos != Vector3.zero)
{
transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(lookAtPos), Time.deltaTime * rotatespeed);
}
}
if (transform.position == FinalPosition)
{
Destroy(gameObject);
}
}
void FixedUpdate()
{
if (isClicked && FinalPosition.x == 0)
{
Vector3 whichWay = CarAxis == Axis.Horizontal ? Vector3.forward : Vector3.left;
float currentSpeed = Mathf.Abs(speed);
if (moveDirection == Direction.Backward)
{
currentSpeed *= -1f;
}
rb.MovePosition(rb.position + whichWay * currentSpeed * Time.fixedDeltaTime);
}
}
}