Files
aibis-dream/Assets/Scripts/MiniGame/Gear/Gear.cs
T
2024-11-24 22:09:12 +08:00

85 lines
2.1 KiB
C#

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<CircleCollider2D>();
spriteRenderer = GetComponent<SpriteRenderer>();
}
private void Start()
{
gearController = transform.parent.parent.GetComponent<GearController>();
// 给齿轮赋值
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 = 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;
}
}
}