Pulver correctly goes and retrieves the item. Items still need to be enabled again after a failed couroutine

This commit is contained in:
Michal Pikulski
2025-09-04 00:14:31 +02:00
parent 0c930d09a4
commit 65d8be6cf2
4 changed files with 203 additions and 85 deletions

View File

@@ -34,6 +34,10 @@ public class FollowerController : MonoBehaviour
private Animator animator;
private Transform artTransform;
[Header("Held Item")]
public PickupItemData currentlyHeldItem;
public SpriteRenderer heldObjectRenderer;
void Awake()
{
aiPath = GetComponent<AIPath>();
@@ -224,6 +228,24 @@ public class FollowerController : MonoBehaviour
pickupCoroutine = StartCoroutine(PickupSequence(itemPosition, playerTransform));
}
public void SetHeldItem(PickupItemData itemData)
{
currentlyHeldItem = itemData;
if (heldObjectRenderer != null)
{
if (currentlyHeldItem != null && currentlyHeldItem.mapSprite != null)
{
heldObjectRenderer.sprite = currentlyHeldItem.mapSprite;
heldObjectRenderer.enabled = true;
}
else
{
heldObjectRenderer.sprite = null;
heldObjectRenderer.enabled = false;
}
}
}
private System.Collections.IEnumerator PickupSequence(Vector2 itemPosition, Transform playerTransform)
{
isManualFollowing = false;
@@ -239,6 +261,22 @@ public class FollowerController : MonoBehaviour
yield return null;
}
OnPickupArrived?.Invoke();
// Set held item and destroy pickup
if (heldObjectRenderer != null)
{
// Find Pickup object at itemPosition
Collider2D[] hits = Physics2D.OverlapCircleAll(itemPosition, 0.2f);
foreach (var hit in hits)
{
var pickup = hit.GetComponent<Pickup>();
if (pickup != null)
{
SetHeldItem(pickup.itemData);
GameObject.Destroy(pickup.gameObject);
break;
}
}
}
// Wait briefly, then return to player
yield return new WaitForSeconds(0.2f);
if (aiPath != null && playerTransform != null)

View File

@@ -113,7 +113,6 @@ public class Pickup : MonoBehaviour
{
followerController.OnPickupReturned -= OnFollowerReturned;
pickupInProgress = false;
Destroy(gameObject);
}
playerController.OnArrivedAtTarget += OnPlayerArrived;
Vector3 stopPoint = transform.position + (playerObj.transform.position - transform.position).normalized * playerStopDistance;