55 lines
2.3 KiB
C#
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
|
|
}
|