using System; using UnityEngine; public class HammerThrower : MonoBehaviour { [SerializeField] private Transform _spawnPoint; [SerializeField] private GameObject _hammerPrefab; [SerializeField] private float _throwSpeed = 5f; [SerializeField] private float _throwCooldown = 1.5f; private GameObject _currentHammer; private bool _hasHammer = true; private bool _facingRight = true; private float _cooldownTimer = 0f; private Collider2D _playerCollider; public bool HasHammer => _hasHammer; public bool CanThrow => _hasHammer && _cooldownTimer <= 0f; public float CooldownRemaining => Mathf.Max(0f, _cooldownTimer); private void Awake() { _playerCollider = GetComponent() ?? GetComponentInChildren(); } public void SetFacingDirection(bool facingRight) { _facingRight = facingRight; } public bool TryThrowHammer() { if (!CanThrow) return false; ThrowHammer(); return true; } private void ThrowHammer() { _hasHammer = false; _cooldownTimer = _throwCooldown; _currentHammer = Instantiate(_hammerPrefab, _spawnPoint.position, _spawnPoint.rotation); if (_playerCollider != null) { var hammerCollider = _currentHammer.GetComponent(); if (hammerCollider != null) { Physics2D.IgnoreCollision(_playerCollider, hammerCollider); } } // Initialize hammer with direction and speed var hammerComponent = _currentHammer.GetComponent(); if (hammerComponent != null) { hammerComponent.Initialize(_facingRight, _throwSpeed); } // Flip hammer visual based on direction _currentHammer.transform.localScale = new Vector2( _currentHammer.transform.localScale.x * (_facingRight ? 1 : -1), _currentHammer.transform.localScale.y ); } private void Update() { // Update cooldown timer if (_cooldownTimer > 0f) { _cooldownTimer -= Time.deltaTime; } // Hammer destroyed → hammer returned if (!_hasHammer && _currentHammer == null) { _hasHammer = true; } } }