Sprite flips depending on movement direction
This commit is contained in:
@@ -23,6 +23,7 @@ namespace Input
|
|||||||
// Note: String-based property lookup is flagged as inefficient, but is common in Unity for dynamic children.
|
// Note: String-based property lookup is flagged as inefficient, but is common in Unity for dynamic children.
|
||||||
private Animator animator;
|
private Animator animator;
|
||||||
private Transform artTransform;
|
private Transform artTransform;
|
||||||
|
private SpriteRenderer spriteRenderer;
|
||||||
|
|
||||||
// --- MoveToAndNotify State ---
|
// --- MoveToAndNotify State ---
|
||||||
public delegate void ArrivedAtTargetHandler();
|
public delegate void ArrivedAtTargetHandler();
|
||||||
@@ -39,6 +40,11 @@ namespace Input
|
|||||||
animator = artTransform.GetComponent<Animator>();
|
animator = artTransform.GetComponent<Animator>();
|
||||||
else
|
else
|
||||||
animator = GetComponentInChildren<Animator>();
|
animator = GetComponentInChildren<Animator>();
|
||||||
|
// Cache SpriteRenderer for flipping
|
||||||
|
if (artTransform != null)
|
||||||
|
spriteRenderer = artTransform.GetComponent<SpriteRenderer>();
|
||||||
|
if (spriteRenderer == null)
|
||||||
|
spriteRenderer = GetComponentInChildren<SpriteRenderer>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Start()
|
void Start()
|
||||||
@@ -169,16 +175,30 @@ namespace Input
|
|||||||
if (animator != null && aiPath != null)
|
if (animator != null && aiPath != null)
|
||||||
{
|
{
|
||||||
float normalizedSpeed = 0f;
|
float normalizedSpeed = 0f;
|
||||||
|
Vector3 velocity = Vector3.zero;
|
||||||
if (isHolding && GameManager.Instance.DefaultHoldMovementMode == GameSettings.HoldMovementMode.Direct)
|
if (isHolding && GameManager.Instance.DefaultHoldMovementMode == GameSettings.HoldMovementMode.Direct)
|
||||||
{
|
{
|
||||||
normalizedSpeed = directMoveVelocity.magnitude / aiPath.maxSpeed;
|
normalizedSpeed = directMoveVelocity.magnitude / aiPath.maxSpeed;
|
||||||
|
velocity = directMoveVelocity;
|
||||||
}
|
}
|
||||||
else if (aiPath.enabled)
|
else if (aiPath.enabled)
|
||||||
{
|
{
|
||||||
normalizedSpeed = aiPath.velocity.magnitude / aiPath.maxSpeed;
|
normalizedSpeed = aiPath.velocity.magnitude / aiPath.maxSpeed;
|
||||||
|
velocity = aiPath.velocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
animator.SetFloat("Speed", Mathf.Clamp01(normalizedSpeed));
|
animator.SetFloat("Speed", Mathf.Clamp01(normalizedSpeed));
|
||||||
|
SetSpriteFlip(velocity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetSpriteFlip(Vector3 velocity)
|
||||||
|
{
|
||||||
|
if (spriteRenderer != null && velocity.sqrMagnitude > 0.001f)
|
||||||
|
{
|
||||||
|
if (velocity.x > 0.01f)
|
||||||
|
spriteRenderer.flipX = false;
|
||||||
|
else if (velocity.x < -0.01f)
|
||||||
|
spriteRenderer.flipX = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ public class FollowerController : MonoBehaviour
|
|||||||
private float _currentSpeed = 0f;
|
private float _currentSpeed = 0f;
|
||||||
private Animator _animator;
|
private Animator _animator;
|
||||||
private Transform _artTransform;
|
private Transform _artTransform;
|
||||||
|
private SpriteRenderer spriteRenderer;
|
||||||
|
|
||||||
private PickupItemData _currentlyHeldItem;
|
private PickupItemData _currentlyHeldItem;
|
||||||
public PickupItemData CurrentlyHeldItem => _currentlyHeldItem;
|
public PickupItemData CurrentlyHeldItem => _currentlyHeldItem;
|
||||||
@@ -83,10 +84,12 @@ public class FollowerController : MonoBehaviour
|
|||||||
if (_artTransform != null)
|
if (_artTransform != null)
|
||||||
{
|
{
|
||||||
_animator = _artTransform.GetComponent<Animator>();
|
_animator = _artTransform.GetComponent<Animator>();
|
||||||
|
spriteRenderer = _artTransform.GetComponent<SpriteRenderer>();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_animator = GetComponentInChildren<Animator>(); // fallback
|
_animator = GetComponentInChildren<Animator>(); // fallback
|
||||||
|
spriteRenderer = GetComponentInChildren<SpriteRenderer>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,6 +184,14 @@ public class FollowerController : MonoBehaviour
|
|||||||
_currentSpeed = Mathf.Max(_currentSpeed, minSpeed);
|
_currentSpeed = Mathf.Max(_currentSpeed, minSpeed);
|
||||||
}
|
}
|
||||||
Vector3 dir = (_targetPoint - transform.position).normalized;
|
Vector3 dir = (_targetPoint - transform.position).normalized;
|
||||||
|
// Sprite flipping based on movement direction
|
||||||
|
if (spriteRenderer != null && dir.sqrMagnitude > 0.001f)
|
||||||
|
{
|
||||||
|
if (dir.x > 0.01f)
|
||||||
|
spriteRenderer.flipX = false;
|
||||||
|
else if (dir.x < -0.01f)
|
||||||
|
spriteRenderer.flipX = true;
|
||||||
|
}
|
||||||
transform.position += dir * _currentSpeed * Time.deltaTime;
|
transform.position += dir * _currentSpeed * Time.deltaTime;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -202,6 +213,14 @@ public class FollowerController : MonoBehaviour
|
|||||||
else if (_aiPath != null)
|
else if (_aiPath != null)
|
||||||
{
|
{
|
||||||
normalizedSpeed = _aiPath.velocity.magnitude / _followerMaxSpeed;
|
normalizedSpeed = _aiPath.velocity.magnitude / _followerMaxSpeed;
|
||||||
|
// Sprite flipping for pathfinding mode
|
||||||
|
if (spriteRenderer != null && _aiPath.velocity.sqrMagnitude > 0.001f)
|
||||||
|
{
|
||||||
|
if (_aiPath.velocity.x > 0.01f)
|
||||||
|
spriteRenderer.flipX = false;
|
||||||
|
else if (_aiPath.velocity.x < -0.01f)
|
||||||
|
spriteRenderer.flipX = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_animator.SetFloat("Speed", Mathf.Clamp01(normalizedSpeed));
|
_animator.SetFloat("Speed", Mathf.Clamp01(normalizedSpeed));
|
||||||
}
|
}
|
||||||
@@ -438,3 +457,5 @@ public class FollowerController : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user