Files
aibis-dream/Assets/Scripts/MiniGame/Engine/MovablePartGroup.cs
T
2025-08-19 20:45:12 +08:00

70 lines
1.9 KiB
C#

using System;
using AibisDream.FixSystem;
using DG.Tweening;
using UnityEngine;
namespace AibisDream
{
public class MoveablePartGroup : MonoBehaviour
{
#region 动件索引
[Header("可动组件索引")] public EngineGear[] engineGears;
private EngineSystem EngineSystem => FixSystemCenter.SystemDic.Get<EngineSystem>();
#endregion
private EngineSystem _engineSystem;
private void Start()
{
// 赋予初始速度
foreach (var gear in engineGears)
{
gear.Rotate(EngineSystem.engineConfig.gearSpeed);
}
EngineSystem.updateSpeedEvent.AddListener(OnSpeedUpdate);
}
private void OnSpeedUpdate(float originSpeed, float speedScale)
{
// 处理齿轮速度
foreach (var gear in engineGears)
{
gear.SetSpeedScale(speedScale);
}
}
}
[Serializable]
public class EngineGear
{
public Transform gear;
public float speedRadio;
private Tween _rotateTween;
/// <summary>
/// 设置速度
/// </summary>
/// <param name="speedScale">基础速度</param>
public void SetSpeedScale(float speedScale)
{
if (_rotateTween != null)
{
_rotateTween.timeScale = speedScale;
}
// _rotateTween.timeScale = speedScale;
}
public void Rotate(float initSpeed)
{
var duration = 1 / Mathf.Abs(initSpeed * speedRadio);
var target = speedRadio >= 0 ? new Vector3(0, 0, 360) : new Vector3(0, 0, -360);
_rotateTween = gear.DORotate(target, duration, RotateMode.LocalAxisAdd)
.SetEase(Ease.Linear)
.SetLoops(-1, LoopType.Incremental);
}
}
}