Projext/Assets/Scripts/Player/Interaction/PlayerInteraction.cs

93 lines
2.7 KiB
C#
Raw Normal View History

2026-01-29 06:58:38 +00:00
using UnityEngine;
public class PlayerInteraction : MonoBehaviour
{
[Header("--- 설정 ---")]
[SerializeField] private float interactRange = 3f;
[SerializeField] private LayerMask itemLayer;
[SerializeField] private Transform handSlot;
[SerializeField] private Stats playerStats;
private EquippableItem _currentWeapon;
public EquippableItem CurrentWeapon => _currentWeapon;
public void TryInteract()
{
Collider[] hits = Physics.OverlapSphere(transform.position, interactRange, itemLayer);
foreach (var hit in hits)
{
2026-02-09 14:49:44 +00:00
// [MODIFIED] ArrowItem 제거 → ArrowPickup으로 통일
if (hit.TryGetComponent<ArrowPickup>(out var arrowPickup))
2026-02-06 09:27:08 +00:00
{
2026-02-09 14:49:44 +00:00
PickupArrow(arrowPickup);
2026-02-06 09:27:08 +00:00
break;
}
2026-01-29 06:58:38 +00:00
if (hit.TryGetComponent<EquippableItem>(out var item))
{
EquipWeapon(item);
break;
2026-01-29 06:58:38 +00:00
}
2026-02-06 09:27:08 +00:00
2026-02-09 14:49:44 +00:00
if (hit.TryGetComponent<HealthPotion>(out var potion))
{
potion.Use(GetComponent<PlayerHealth>());
break;
}
if (hit.TryGetComponent<HealthAltar>(out var altar))
{
altar.Use(GetComponent<PlayerHealth>());
break;
}
2026-01-29 06:58:38 +00:00
}
}
2026-02-09 14:49:44 +00:00
/// <summary>
/// [MODIFIED] ArrowPickup을 직접 처리
/// 기존: ArrowItem 타입 → 변경: ArrowPickup 타입으로 통일
/// </summary>
private void PickupArrow(ArrowPickup arrowPickup)
2026-02-06 09:27:08 +00:00
{
2026-02-09 14:49:44 +00:00
if (arrowPickup == null) return;
2026-02-06 09:27:08 +00:00
PlayerAttack playerAttack = GetComponent<PlayerAttack>();
2026-02-09 14:49:44 +00:00
if (playerAttack != null)
{
// ArrowPickup.Pickup() 내부에서
// playerAttack.SetCurrentArrow(ArrowData)를 호출합니다
arrowPickup.Pickup(playerAttack);
}
2026-02-06 09:27:08 +00:00
}
private void EquipWeapon(EquippableItem item)
{
if (_currentWeapon != null) _currentWeapon.OnDropped(transform.forward);
_currentWeapon = item;
_currentWeapon.OnPickedUp(handSlot);
if (playerStats != null)
{
playerStats.weaponDamage = item.Config.BaseDamage;
}
FindObjectOfType<PlayerStatsUI>()?.UpdateStatTexts();
}
public void ClearCurrentWeapon()
{
_currentWeapon = null;
if (playerStats != null)
{
playerStats.weaponDamage = 0;
FindObjectOfType<PlayerStatsUI>()?.UpdateStatTexts();
}
2026-02-09 14:49:44 +00:00
// [NEW] 무기 해제 시 화살도 초기화
PlayerAttack playerAttack = GetComponent<PlayerAttack>();
if (playerAttack != null)
{
playerAttack.ResetArrow();
}
}
2026-01-29 06:58:38 +00:00
}