using UnityEngine;
public class MovingPlatformPath : MonoBehaviour
{
[Header("Movement Settings")]
public float moveSpeed = 2f;
public float waitTime = 1f;
public bool moveOnStart = true;
public GameObject Player;
private Transform startPoint;
private Transform endPoint;
private Vector3 startPosition;
private Vector3 endPosition;
private Vector3 targetPosition;
private bool isWaiting = false;
private float waitTimer = 0f;
private bool isGoingEnd = true;
private void Start()
{
InitializeWaypoints();
if (startPoint != null && endPoint != null)
{
startPosition = startPoint.position;
endPosition = endPoint.position;
targetPosition = endPoint.position;
}
}
private void Update()
{
if (isWaiting)
{
waitTimer -= Time.deltaTime;
if (waitTimer <= 0f)
{
isWaiting = false;
SwitchTarget();
}
return;
}
MovePlatform();
}
private void InitializeWaypoints()
{
startPoint = transform.Find("Waypoint_Start");
if (startPoint == null)
{
Debug.LogError("ERRORE: StartPoint non trovato");
}
endPoint = transform.Find("Waypoint_End");
if (endPoint == null)
{
Debug.LogError("ERRORE: EndPoint non trovato");
}
}
private void MovePlatform()
{
transform.position = Vector3.MoveTowards(transform.position, targetPosition, moveSpeed * Time.deltaTime);
if (Vector3.Distance(transform.position, targetPosition) < 0.1f)
{
transform.position = targetPosition;
StartWaiting();
}
}
private void StartWaiting()
{
if (waitTime > 0f)
{
isWaiting = true;
waitTimer = waitTime;
}
else
{
SwitchTarget();
}
}
private void SwitchTarget()
{
isGoingEnd = !isGoingEnd;
targetPosition = isGoingEnd ? endPosition : startPosition;
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject == Player)
{
Player.transform.parent = transform;
Debug.Log("Player salito sulla piattaforma");
}
}
private void OnCollisionExit(Collision other)
{
if (other.gameObject == Player)
{
Player.transform.parent = null;
Debug.Log("Player sceso dalla piattaforma");
}
}
}