75 lines
1.9 KiB
C#
75 lines
1.9 KiB
C#
using AibisDream.FixSystem;
|
|
using AibisDream.Framework;
|
|
using DG.Tweening;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream
|
|
{
|
|
public class Gear : MonoBehaviour, IMoveable
|
|
{
|
|
[SerializeField] public float radius;
|
|
[SerializeField] public Sprite gearSprite;
|
|
|
|
private GearSystem _gearSystem;
|
|
private CircleCollider2D _circleCollider;
|
|
private SpriteRenderer _spriteRenderer;
|
|
|
|
public Shaft targetShaft;
|
|
|
|
public bool IsBlock { get; }
|
|
|
|
private void Awake()
|
|
{
|
|
_circleCollider = GetComponent<CircleCollider2D>();
|
|
_spriteRenderer = GetComponent<SpriteRenderer>();
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
_gearSystem = FixSystemCenter.SystemDic.Get<GearSystem>();
|
|
// 给齿轮赋值
|
|
InitGearModel();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置齿轮信息
|
|
/// </summary>
|
|
public void InitGearModel()
|
|
{
|
|
// 给齿轮赋值
|
|
_spriteRenderer.sprite = gearSprite;
|
|
_circleCollider.radius = radius;
|
|
|
|
_spriteRenderer.size = new Vector2(radius * 2, radius * 2);
|
|
}
|
|
|
|
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;
|
|
var tempShaft = _gearSystem.CheckClosestShaft(transform.position, radius);
|
|
if (!tempShaft) return;
|
|
|
|
if (_gearSystem.CheckGearSuitable(tempShaft, radius))
|
|
{
|
|
targetShaft = tempShaft;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|