Untitled

 avatar
unknown
csharp
5 months ago
2.7 kB
6
Indexable
using UnityEngine;

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

        private double _previousTargetSetTime;
        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 isCurrentTargetValid = IsTargetAvailable(_target) && IsWithinTargetChangeTime();

                if (isCurrentTargetValid == false)
                {
                    _previousTarget = _target;
                    _target = null;

                    if (TrySetValidTarget(_lockedTarget) == false &&
                        TrySetValidTarget(_activeTarget) == false)
                    {
                        _target = _targetInRangeContainer.GetTarget();

                        if (IsTargetAvailable(_target) == false)
                        {
                            _target = null;
                        }
                    }
                }
            }
            finally
            {
                if (_target != null)
                {
                    UpdatePreviousTargetSetTime();
                }

                TargetableEntity.Selected = _target;
            }
        }

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

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

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

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

        private bool TrySetValidTarget(dynamic target)
        {
            if (IsTargetAvailable(target))
            {
                _target = target;
                return true;
            }
			
            return false;
        }

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