Files
aibis-dream/Assets/Scripts/MiniGame/Engine/MovablePartGroup.cs
T
2025-02-22 02:42:57 +08:00

78 lines
2.0 KiB
C#

using System;
using DG.Tweening;
using UnityEngine;
using UnityEngine.UIElements;
namespace AibisDream
{
public class MoveablePartGroup : MonoBehaviour
{
#region 动件索引
[Header("可动组件索引")] public EngineGear[] engineGears;
public GameObject piston;
#endregion
private EngineSystem _engineSystem;
private void Awake()
{
_engineSystem = transform.GetComponentInParent<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);
Debug.Log("Rotate");
_rotateTween = gear.DORotate(target, duration, RotateMode.LocalAxisAdd)
.SetEase(Ease.Linear)
.SetLoops(-1, LoopType.Incremental);
}
}
}