using System; using AibisDream.Framework; using DG.Tweening; using UnityEngine; namespace AibisDream { public class Gear : MonoBehaviour, IMoveable { [SerializeField] public float radius; [SerializeField] public Sprite gearSprite; private GearController gearController; private CircleCollider2D circleCollider; private SpriteRenderer spriteRenderer; public Shaft targetShaft; private void Awake() { circleCollider = GetComponent(); spriteRenderer = GetComponent(); } private void Start() { gearController = transform.parent.parent.GetComponent(); // 给齿轮赋值 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 = gearController.CheckClosestShaft(transform.position, radius); if (!tempShaft) return; targetShaft = tempShaft; if (gearController.CheckGearSuitable(tempShaft, radius)) { targetShaft = tempShaft; } else { return; } } private Shaft CheckTargetShaft() { var closestShaft = gearController.CheckClosestShaft(transform.position, radius); return closestShaft; } } }