using System; using Core; using DG.Tweening; using UnityEngine; namespace Components.TileObjects { public abstract class TileObject : BaseMonoBehaviour { public event Action OnReset; private Transform _objectTransform; public Transform Transform { get { if (_objectTransform == null) _objectTransform = transform; return _objectTransform; } } private const float ResetOffset = -6f; private bool _isMoving; private float _duration; private Tween _moveTween; // public virtual void Initialize(DifficultyStage inStageSettings) {} public virtual void Initialize((int, int) spawnRange) {} public virtual void ResetObject() {} public void MoveObject(float inSpeed) { if (_isMoving) return; _isMoving = true; _duration = inSpeed; _moveTween = Transform.DOLocalMoveZ(ResetOffset, inSpeed) .SetEase(Ease.Linear) .OnComplete(OnObjectReset); } private void OnObjectReset() { OnReset?.Invoke(this); OnReset = null; _isMoving = false; } public void UpdateSpeed(float inSpeed) { var factor = inSpeed / _duration; _moveTween.timeScale = 1 / factor; } public virtual void PauseMovement() => _moveTween?.Pause(); public virtual void ResumeMovement() => _moveTween?.Play(); // TODO: Fix Reset structure !!! } }