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.
Jeremy/Assets/Scripts/CraneControl.cs

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();
}
}