石头
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using AibisDream.Framework;
|
||||
using AibisDream.Framework;
|
||||
using DG.Tweening;
|
||||
using UnityEngine;
|
||||
|
||||
@@ -7,41 +6,97 @@ namespace AibisDream
|
||||
{
|
||||
public class CoolingBottle : MonoBehaviour, IMoveable
|
||||
{
|
||||
private GameObject _mask;
|
||||
public CoolingMachineViewer coolingMachine;
|
||||
private Transform _mask;
|
||||
private Rigidbody2D _rb;
|
||||
|
||||
private static readonly Vector3 UpPos = new(0, 1.56f, 0);
|
||||
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)
|
||||
{
|
||||
_mask.transform.DOMove(DownPos, duration).OnComplete(() => isEmpty = true);
|
||||
var targetPos = transform.parent.TransformPoint(DownPos);
|
||||
_mask.transform.DOMove(targetPos, duration).OnComplete(() => isEmpty = true);
|
||||
}
|
||||
|
||||
public void LiquidUp(float duration)
|
||||
{
|
||||
_mask.transform.DOMove(UpPos, duration).OnComplete(() => isEmpty = false);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user