using UnityEngine;
public class GroundInteractableItem : MonoBehaviour
{
[SerializeField] private Animator _interactableController;
[SerializeField] private CircleCollider2D _itemCollider2d;
[SerializeField] private Item _itemToPickup;
private SpriteRenderer _itemSpriteRenderer;
private bool _closeEnoughToInteract;
private bool _moveItem = false;
private Vector3 _positionToMoveTo;
private float _movementSpeed = 100f;
private PlayerController _closePlayer;
// Start is called before the first frame update
void Start()
{
_itemSpriteRenderer = this.gameObject.GetComponent<SpriteRenderer>();
if(_itemToPickup != null)
{
_itemSpriteRenderer.sprite = _itemToPickup.itemLoRezSprite;
}
}
public void CreateNewGroundInteractable(Item itemToPickup)
{
Item clone = Instantiate(itemToPickup);
clone.amountStacked = 1;
_itemToPickup = clone;
_closeEnoughToInteract = false;
_itemCollider2d = this.gameObject.GetComponent<CircleCollider2D>();
_itemSpriteRenderer = this.gameObject.GetComponent<SpriteRenderer>();
}
public void TriggerChestDropAnimation()
{
_interactableController.SetTrigger("ChestDrop");
}
public void PickupItem()
{
bool finished = false;
if (_closeEnoughToInteract)
{
finished = _closePlayer.PickupGroundItem(_itemToPickup);
}
if (finished)
{
Destroy(this.gameObject);
}
else
{
Debug.Log("Couldn't Pick up item");
}
}
public void MoveItemToLocation(Vector3 position)
{
_positionToMoveTo = position;
_moveItem = true;
TriggerChestDropAnimation();
}
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.layer == 3)
{
_closeEnoughToInteract = true;
_closePlayer = collision.gameObject.GetComponent<PlayerController>();
PickupItem();
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if(collision.gameObject.layer == 3)
{
if(collision.gameObject.GetComponent<PlayerController>() == _closePlayer)
{
_closeEnoughToInteract = false;
_closePlayer = null;
}
}
}
// Update is called once per frame
void Update()
{
if(_moveItem == true)
{
transform.position = Vector3.MoveTowards(transform.position, _positionToMoveTo, _movementSpeed * Time.deltaTime);
if(transform.position == _positionToMoveTo)
{
_moveItem = false;
_interactableController.SetTrigger("Idle");
}
}
}
}