68 lines
1.7 KiB
C#
68 lines
1.7 KiB
C#
using AibisDream.Framework;
|
|
using DG.Tweening;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream
|
|
{
|
|
public class Gear : MonoBehaviour, IMoveable
|
|
{
|
|
[SerializeField] public float radius;
|
|
[SerializeField] private Sprite gearSprite;
|
|
|
|
private GearController gearController;
|
|
private CircleCollider2D circleCollider;
|
|
private SpriteRenderer spriteRenderer;
|
|
|
|
public Shaft targetShaft;
|
|
|
|
private void Awake()
|
|
{
|
|
gearController = transform.parent.parent.GetComponent<GearController>();
|
|
circleCollider = GetComponent<CircleCollider2D>();
|
|
spriteRenderer = GetComponent<SpriteRenderer>();
|
|
|
|
// 给齿轮赋值
|
|
InitGearModel();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置齿轮信息
|
|
/// </summary>
|
|
/// <param name="gearModel">齿轮信息</param>
|
|
public void InitGearModel()
|
|
{
|
|
// 给齿轮赋值
|
|
spriteRenderer.sprite = gearSprite;
|
|
circleCollider.radius = radius;
|
|
}
|
|
|
|
public void StartMove()
|
|
{
|
|
targetShaft?.PlugOutGear();
|
|
transform.DOPause();
|
|
}
|
|
|
|
public void StopMove()
|
|
{
|
|
if (targetShaft)
|
|
{
|
|
transform.position = targetShaft.transform.position;
|
|
targetShaft.PlugInGear(this);
|
|
}
|
|
}
|
|
|
|
public void Move(Vector2 targetPos)
|
|
{
|
|
transform.position = targetPos;
|
|
targetShaft = CheckTargetShaft();
|
|
}
|
|
|
|
private Shaft CheckTargetShaft()
|
|
{
|
|
var closestShaft = gearController.CheckClosestShaft(transform.position, radius);
|
|
return closestShaft;
|
|
}
|
|
}
|
|
}
|
|
|