Files
aibis-dream/Assets/Scripts/FixSystemNew/CoolingMachine/CoolingBottle.cs
T
2024-12-12 01:07:26 +08:00

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