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(); _spriteRenderer = GetComponent(); } private void Start() { _gearSystem = FixSystemCenter.SystemDic.Get(); // 给齿轮赋值 InitGearModel(); } /// /// 设置齿轮信息 /// 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; } } } }