87 lines
2.8 KiB
C#
87 lines
2.8 KiB
C#
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
|
|
public class AmmoPickup : MonoBehaviour
|
|
{
|
|
[Header("Настройки")]
|
|
public int ammoAmount = 14; // Сколько патронов дает коробка
|
|
public bool pickupOnTouch = true; // Подбирать автоматически при касании
|
|
public float interactionDistance = 2.5f; // Дистанция для подбора по клавише E
|
|
public AudioClip pickupSound; // Звук подбора
|
|
|
|
[Header("Анимация парения")]
|
|
public bool animateBobbing = true;
|
|
public float rotationSpeed = 45f;
|
|
public float bobSpeed = 2f;
|
|
public float bobHeight = 0.1f;
|
|
|
|
private Vector3 startPos;
|
|
private bool isCollected = false;
|
|
|
|
void Start()
|
|
{
|
|
startPos = transform.position;
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (isCollected) return;
|
|
|
|
// Анимация вращения и легкого покачивания
|
|
if (animateBobbing)
|
|
{
|
|
transform.Rotate(Vector3.up, rotationSpeed * Time.deltaTime, Space.World);
|
|
float newY = startPos.y + Mathf.Sin(Time.time * bobSpeed) * bobHeight;
|
|
transform.position = new Vector3(startPos.x, newY, startPos.z);
|
|
}
|
|
|
|
// Если не автоматический подбор, проверяем дистанцию до игрока и нажатие клавиши E
|
|
if (!pickupOnTouch && Keyboard.current != null && Keyboard.current.eKey.wasPressedThisFrame)
|
|
{
|
|
var playerGun = FindAnyObjectByType<PlayerGun>();
|
|
if (playerGun != null)
|
|
{
|
|
float dist = Vector3.Distance(transform.position, playerGun.transform.position);
|
|
if (dist <= interactionDistance)
|
|
{
|
|
TryPickup(playerGun);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnTriggerEnter(Collider other)
|
|
{
|
|
if (isCollected || !pickupOnTouch) return;
|
|
|
|
PlayerGun playerGun = other.GetComponentInParent<PlayerGun>();
|
|
if (playerGun != null)
|
|
{
|
|
TryPickup(playerGun);
|
|
}
|
|
}
|
|
|
|
private void TryPickup(PlayerGun playerGun)
|
|
{
|
|
if (playerGun == null) return;
|
|
|
|
bool added = playerGun.AddAmmo(ammoAmount);
|
|
if (added)
|
|
{
|
|
isCollected = true;
|
|
|
|
if (pickupSound != null)
|
|
{
|
|
AudioSource.PlayClipAtPoint(pickupSound, transform.position, 1.0f);
|
|
}
|
|
|
|
Debug.Log($"<color=green>[Подбор] Взята коробка патронов (+{ammoAmount})!</color>");
|
|
Destroy(gameObject);
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("[Подбор] Боезапас уже полон!");
|
|
}
|
|
}
|
|
}
|