2025-09-04 21:58:05 +02:00
using UnityEngine ;
public class EndlessDescenderController : MonoBehaviour , ITouchInputConsumer
{
private float targetFingerX ;
private bool isTouchActive ;
void Start ( )
{
// Register as default consumer for input
InputManager . Instance ? . SetDefaultConsumer ( this ) ;
// Initialize target to current position
targetFingerX = transform . position . x ;
isTouchActive = false ;
}
public void OnTouchPress ( Vector2 worldPosition )
{
// Only update horizontal position
targetFingerX = Mathf . Clamp ( worldPosition . x , GameManager . Instance . EndlessDescenderClampXMin , GameManager . Instance . EndlessDescenderClampXMax ) ;
isTouchActive = true ;
}
public void OnTouchPosition ( Vector2 worldPosition )
{
// Update target x as finger moves
targetFingerX = Mathf . Clamp ( worldPosition . x , GameManager . Instance . EndlessDescenderClampXMin , GameManager . Instance . EndlessDescenderClampXMax ) ;
}
void Update ( )
{
if ( ! isTouchActive ) return ;
float currentX = transform . position . x ;
float lerpSpeed = GameManager . Instance . EndlessDescenderLerpSpeed ;
float maxOffset = GameManager . Instance . EndlessDescenderMaxOffset ;
float exponent = GameManager . Instance . EndlessDescenderSpeedExponent ;
float targetX = targetFingerX ;
float offset = targetX - currentX ;
offset = Mathf . Clamp ( offset , - maxOffset , maxOffset ) ;
float absOffset = Mathf . Abs ( offset ) ;
float t = Mathf . Pow ( absOffset / maxOffset , exponent ) ; // Non-linear drop-off
float moveStep = Mathf . Sign ( offset ) * maxOffset * t * Time . deltaTime * lerpSpeed ;
// Prevent overshooting
moveStep = Mathf . Clamp ( moveStep , - absOffset , absOffset ) ;
float newX = currentX + moveStep ;
newX = Mathf . Clamp ( newX , GameManager . Instance . EndlessDescenderClampXMin , GameManager . Instance . EndlessDescenderClampXMax ) ;
Vector3 oldPos = transform . position ;
transform . position = new Vector3 ( newX , transform . position . y , transform . position . z ) ;
2025-09-04 22:26:45 +02:00
// Debug.Log($"EndlessDescenderController: Moved from {oldPos} to {transform.position} (targetX={targetX}, lerpSpeed={lerpSpeed}, offset={offset}, exponent={exponent}, moveStep={moveStep})");
2025-09-04 21:58:05 +02:00
}
// Optionally, handle touch release if needed
// You can add a method to reset isTouchActive if desired
}