102 lines
2.6 KiB
C#
102 lines
2.6 KiB
C#
using AibisDream.Framework;
|
|
using DG.Tweening;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream
|
|
{
|
|
public class CoolingBottle : MonoBehaviour, IMoveable
|
|
{
|
|
public CoolingMachineViewer coolingMachine;
|
|
private Transform _mask;
|
|
private Rigidbody2D _rb;
|
|
|
|
private static readonly Vector3 UpPos = new(0, 1.86f, 0);
|
|
private static readonly Vector3 DownPos = Vector3.zero;
|
|
|
|
public bool isSnapped;
|
|
public bool isInMachine;
|
|
public bool isLocked;
|
|
|
|
public bool isEmpty;
|
|
public bool IsBlock { get; }
|
|
|
|
private void Awake()
|
|
{
|
|
InitComponentRefs();
|
|
}
|
|
|
|
private void InitComponentRefs()
|
|
{
|
|
_rb = GetComponent<Rigidbody2D>();
|
|
_mask = transform.Find("Mask");
|
|
coolingMachine = FindObjectOfType<CoolingMachineViewer>();
|
|
|
|
_mask.localPosition = isEmpty ? DownPos : UpPos;
|
|
}
|
|
|
|
public void LiquidDown(float duration)
|
|
{
|
|
var targetPos = transform.parent.TransformPoint(DownPos);
|
|
_mask.transform.DOMove(targetPos, duration).OnComplete(() => isEmpty = true);
|
|
}
|
|
|
|
public void LiquidUp(float duration)
|
|
{
|
|
var targetPos = transform.parent.TransformPoint(UpPos);
|
|
_mask.transform.DOMove(targetPos, duration).OnComplete(() => isEmpty = false);
|
|
}
|
|
|
|
public void StartMove()
|
|
{
|
|
}
|
|
|
|
public void Move(Vector2 mousePos)
|
|
{
|
|
// 锁定后无法移动
|
|
if (isLocked) return;
|
|
|
|
_rb.MovePosition(mousePos);
|
|
}
|
|
|
|
public void StopMove()
|
|
{
|
|
// 松手时若是已吸附,就触发插入逻辑
|
|
if (isSnapped) coolingMachine.InsertBottle(this);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 松手后吸附至某个位置
|
|
/// </summary>
|
|
/// <param name="snapPos">吸附点位</param>
|
|
public void Snap(Vector3 snapPos)
|
|
{
|
|
// 吸附至指定位置
|
|
transform.position = snapPos;
|
|
// 停用重力
|
|
_rb.gravityScale = 0;
|
|
// 瓶子进入机器
|
|
isInMachine = true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 离开指定位置就停止吸附
|
|
/// </summary>
|
|
public void Unsnap()
|
|
{
|
|
// 重新启用重力
|
|
_rb.gravityScale = 1;
|
|
// 瓶子不在机器中
|
|
isInMachine = false;
|
|
}
|
|
|
|
public void Lock()
|
|
{
|
|
isLocked = true;
|
|
}
|
|
|
|
public void Unlock()
|
|
{
|
|
isLocked = false;
|
|
}
|
|
}
|
|
} |