using System; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; using UnityEngine.UIElements; using static Swizzles.E3; public class CraneControl : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler,IPointerDownHandler,IPointerUpHandler { [SerializeField] private OutlineFx.OutlineFx _outline; [SerializeField] private SpriteRenderer _renderer; [SerializeField] private Sprite _closedSprite; [SerializeField] private float _speed = 3; [SerializeField] private UnityEvent _onHooked; [Header("Audio")] [SerializeField] private AudioSource _startMoveAudio; [SerializeField] private AudioSource _moveLoopAudio; [SerializeField] private AudioSource _endMoveAudio; private bool mouseIsDown = false; public void OnPointerEnter(PointerEventData eventData) { _outline.enabled = true; } public void OnPointerExit(PointerEventData eventData) { _outline.enabled = false; } public void OnPointerDown(PointerEventData eventData) { mouseIsDown = true; _startMoveAudio.Play(); _moveLoopAudio.Play(); _endMoveAudio.Stop(); } public void OnPointerUp(PointerEventData eventData) { mouseIsDown = false; _startMoveAudio.Stop(); _moveLoopAudio.Stop(); _endMoveAudio.Play(); } private void Update() { if(!mouseIsDown) return; var mouseWorldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition).Swiz(X,Y,Zero); var ownPosition = transform.position; mouseWorldPoint += ownPosition.Swiz(Zero, Zero, Z); var stepDistance = Time.deltaTime * _speed; var towardMousePosition = mouseWorldPoint - ownPosition; if (towardMousePosition.magnitude>stepDistance) { towardMousePosition.Normalize(); towardMousePosition *= stepDistance; } transform.position += towardMousePosition; if(transform.position.x>45) transform.position = new Vector3(45,transform.position.y,transform.position.z); if(transform.position.x<-45) transform.position = new Vector3(-45,transform.position.y,transform.position.z); if(transform.position.y>35) transform.position = new Vector3(transform.position.x,35,transform.position.z); if(transform.position.y<-35) transform.position = new Vector3(transform.position.x,-35,transform.position.z); } private void OnTriggerEnter2D(Collider2D other) { Debug.Log(other.gameObject.name); if(!other.gameObject.CompareTag("Bike")) return; other.transform.parent.SetParent(transform); other.transform.parent.localPosition = Vector3.zero; _renderer.sprite = _closedSprite; _onHooked.Invoke(); } }