Untitled

 avatar
unknown
csharp
5 months ago
2.4 kB
3
Indexable
using UnityEngine;

namespace Cleanup
{
    internal class Program
    {
        private const double TargetChangeTime = 1;

        private double _previousTargetSetTime;
        private bool _isTargetSet;
        private dynamic _lockedCandidateTarget;
        private dynamic _lockedTarget;
        private dynamic _target;
        private dynamic _previousTarget;
        private dynamic _activeTarget;
        private dynamic _targetInRangeContainer;

        public void CleanupTest(Frame frame)
        {
            try
            {
                CheckAndResetLockedTargets();
				
                TrySetActiveTargetFromQuantum(frame);
				
				bool isTargetAvailable = IsTargetAvailable(_target);
				bool isTargetChangeTimeComplete = IsTargetChangeTimeNotComplete();
				
				_isTargetSet = isTargetAvailable && isTargetChangeTimeComplete;
				
				if (_isTargetSet == false)
                {
					_previousTarget = _target;

					if (TrySetTarget(_lockedTarget) == false && 
						TrySetTarget(_activeTarget) == false)
					{
						_target = _targetInRangeContainer.GetTarget();
					
						if (_target)
						{
							_isTargetSet = true;
						}
					}
				}
            }
            finally
            {
                if (_isTargetSet)
				{
					SetupPrevTargetSetTime();
				}
                else
                {
                    _target = null;
                }
				
                TargetableEntity.Selected = _target;
            }
        }

		private void CheckAndResetLockedTargets()
		{
			if (IsTargetAvailable(_lockedCandidateTarget) == false)
			{
				_lockedCandidateTarget = null;
			}

			if (IsTargetAvailable(_lockedCandidateTarget) == false)
			{
				_lockedTarget = null;
			}
		}

		private bool IsTargetChangeTimeNotComplete()
		{
			return Time.time - _previousTargetSetTime < TargetChangeTime;
		}

		private bool IsTargetAvailable(dynamic target)
		{
			return target != null && target.CanBeTarget;
		}

		private bool TrySetTarget(dynamic target)
		{
			bool isTargetAvailable = IsTargetAvailable(target);

			if (isTargetAvailable == false)
			{
				return false;
			}

			_target = target;
			_isTargetSet = true;
			
			return true;
		}

		private void SetupPrevTargetSetTime()
		{
			if (_previousTarget != _target)
			{
				_previousTargetSetTime = Time.time;
			}
		}
	}
}
Editor is loading...
Leave a Comment