Files
AppleHillsProduction/Assets/Scripts/EndlessDescenderController.cs
2025-09-04 22:26:45 +02:00

55 lines
2.3 KiB
C#

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);
// Debug.Log($"EndlessDescenderController: Moved from {oldPos} to {transform.position} (targetX={targetX}, lerpSpeed={lerpSpeed}, offset={offset}, exponent={exponent}, moveStep={moveStep})");
}
// Optionally, handle touch release if needed
// You can add a method to reset isTouchActive if desired
}