You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.9 KiB
102 lines
2.9 KiB
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();
|
|
}
|
|
}
|