Files
aibis-dream/Assets/Scripts/FixSystemNew/WhackMole/PipelineObject.cs
T
2025-08-05 14:36:28 +08:00

70 lines
1.7 KiB
C#

using System;
using UnityEngine;
namespace AibisDream.FixSystem
{
public class PipelineObject : MonoBehaviour
{
#region 组件
private SpriteRenderer _renderer;
public event Action<PipelineObject, bool> OnObjEnd;
#endregion
#region 数据
private float _speed;
private float _maxDistance;
private bool _isActive;
private Vector3 _initPos;
#endregion
private void Init(PipelineObjectData data, float speed, float maxDistance)
{
_renderer = GetComponent<SpriteRenderer>();
_renderer.sprite = data.sprite;
_renderer.color = data.color;
_initPos = transform.position;
_speed = speed;
_maxDistance = maxDistance;
}
private void Update()
{
if (_isActive)
{
transform.position += _speed * Time.deltaTime * Vector3.right;
if (IsReachedEnd())
{
OnPipelineEnd(true);
}
}
}
private bool IsReachedEnd()
{
return transform.position.x > _initPos.x + _maxDistance;
}
private void OnPipelineEnd(bool isReachedEnd)
{
_isActive = false;
gameObject.SetActive(false);
OnObjEnd?.Invoke(this, isReachedEnd);
}
public bool TryRecycle(Vector3 pos, float usefulDistance)
{
if (!_isActive) return false;
if (Vector3.Distance(pos, transform.position) > usefulDistance) return false;
OnPipelineEnd(false);
return true;
}
}
}