Aimbot-ParallelEnv/Assets/Script/UI/StartMenuAnimations.cs

115 lines
4.6 KiB
C#
Raw Normal View History

using DG.Tweening;
using UnityEngine;
public class StartMenuAnimations : MonoBehaviour
{
[SerializeField] private GameObject maskObj;
[SerializeField] private GameObject mixButton;
[SerializeField] private GameObject attackButton;
[SerializeField] private GameObject gotoButton;
[SerializeField] private GameObject freeButton;
[Header("Animation Parameter")]
[SerializeField] private float animeDuration = 0.2f;
[SerializeField] private float animeMoveXDistance = 20f;
[SerializeField] private float animeMoveYDistance = 20f;
[SerializeField] private float animeScaleX = 1.2f;
[SerializeField] private float animeScaleY = 1.2f;
[SerializeField] private float maskScaleX = 1;
[SerializeField] private float maskScaleY = 0.4f;
private Vector3 mixOriginDestination;
private Vector3 attackOriginDestination;
private Vector3 gotoOriginDestination;
private Vector3 freeOriginDestination;
private Vector3 mixDestination;
private Vector3 attackDestination;
private Vector3 gotoDestination;
private Vector3 freeDestination;
private Vector3 originalCanvas;
private PolygonCollider2D parallelogramPolygon;
private bool isMouseOverMask = false;
private void Start()
{
originalCanvas = transform.parent.position;
// get start position
mixOriginDestination = mixButton.transform.position;
attackOriginDestination = attackButton.transform.position;
gotoOriginDestination = gotoButton.transform.position;
freeOriginDestination = freeButton.transform.position;
// transform local vector3 to world vector3 by parent
mixDestination = mixButton.transform.position + new Vector3(animeScaleX * animeMoveXDistance, animeScaleY * animeMoveYDistance, 0);
attackDestination = attackButton.transform.position + new Vector3(animeMoveXDistance, animeMoveYDistance, 0);
gotoDestination = gotoButton.transform.position - new Vector3(animeMoveXDistance, animeMoveYDistance, 0);
freeDestination = freeButton.transform.position - new Vector3(animeScaleX * animeMoveXDistance, animeScaleY * animeMoveYDistance, 0);
//get polygon from maskOBJ
parallelogramPolygon = maskObj.GetComponent<PolygonCollider2D>();
// minimize mask object
MinimizeMaskObj();
}
private void Update()
{
// check if mouse is in parallelogram
if (!isMouseOverMask && parallelogramPolygon.OverlapPoint(Input.mousePosition))
{
isMouseOverMask = true;
OnMaskPointerEnter();
}
else if (isMouseOverMask && !parallelogramPolygon.OverlapPoint(Input.mousePosition))
{
isMouseOverMask = false;
OnMaskPointerExit();
}
}
private void OnMaskPointerEnter()
{
// dotween move button
mixButton.transform.DOMove(fixCanvas(mixDestination), animeDuration, true).SetEase(Ease.OutCirc).Play();
attackButton.transform.DOMove(fixCanvas(attackDestination), animeDuration, true).SetEase(Ease.OutCirc).Play();
gotoButton.transform.DOMove(fixCanvas(gotoDestination), animeDuration, true).SetEase(Ease.OutCirc).Play();
freeButton.transform.DOMove(fixCanvas(freeDestination), animeDuration, true).SetEase(Ease.OutCirc).Play();
MaximizeMaskObj();
}
private void OnMaskPointerExit()
{
// dotween move button batck to original position
mixButton.transform.DOMove(fixCanvas(mixOriginDestination), animeDuration, true).SetEase(Ease.OutCirc).Play();
attackButton.transform.DOMove(fixCanvas(attackOriginDestination), animeDuration, true).SetEase(Ease.OutCirc).Play();
gotoButton.transform.DOMove(fixCanvas(gotoOriginDestination), animeDuration, true).SetEase(Ease.OutCirc).Play();
freeButton.transform.DOMove(fixCanvas(freeOriginDestination), animeDuration, true).SetEase(Ease.OutCirc).Play();
MinimizeMaskObj();
}
private void MinimizeMaskObj()
{
// minimize mask object use dotween doscale
maskObj.transform.DOScaleX(maskScaleX, animeDuration).SetEase(Ease.OutCirc).Play();
maskObj.transform.DOScaleY(maskScaleY, animeDuration).SetEase(Ease.OutCirc).Play();
}
private void MaximizeMaskObj()
{
// maximize mask object use dotween doscale
maskObj.transform.DOScaleX(1, animeDuration).SetEase(Ease.OutCirc).Play();
maskObj.transform.DOScaleY(1, animeDuration).SetEase(Ease.OutCirc).Play();
}
private Vector3 fixCanvas(Vector3 vector)
{
// fix position of button while canvas is changed
return vector.FixCanvas(originalCanvas, transform.parent.position);
}
}