private EntityId FindNearestTargetToAttackOrDefend()
        {
            var layerMask = ~(1 << LayerMask.NameToLayer(SimulationSettings.TreeLayerName));
            var nearestDefendableTarget = NPCUtils.FindNearestTarget(parentBehaviour.gameObject, SimulationSettings.NPCViewRadius, NPCUtils.IsTargetDefendable, layerMask);
            var nearestAttackableTarget = NPCUtils.FindNearestTarget(parentBehaviour.gameObject, SimulationSettings.NPCViewRadius, NPCUtils.IsTargetAttackable, layerMask);

            if (nearestDefendableTarget == null && nearestAttackableTarget == null)
            {
                return(EntityId.InvalidEntityId);
            }

            var sqrDistanceToNearestDefendableTarget = (nearestDefendableTarget != null) ? MathUtils.SqrDistance(parentBehaviour.transform.position, nearestDefendableTarget.transform.position) : float.MaxValue;
            var sqrDistanceToNearestAttackableTarget = (nearestAttackableTarget != null) ? MathUtils.SqrDistance(parentBehaviour.transform.position, nearestAttackableTarget.transform.position) : float.MaxValue;

            return((sqrDistanceToNearestDefendableTarget < sqrDistanceToNearestAttackableTarget) ? nearestDefendableTarget.gameObject.EntityId() : nearestAttackableTarget.gameObject.EntityId());
        }
        private void CheckForNearbyTreesOrStockpiles()
        {
            GameObject targetEntity;

            if (inventory.HasResources())
            {
                targetEntity = NPCUtils.FindNearestTarget(parentBehaviour.gameObject, SimulationSettings.NPCViewRadius, NPCUtils.IsTargetATeamStockpile, LayerMask.GetMask(SimulationSettings.BarrackLayerName));
                if (targetEntity == null)
                {
                    MoveCloserToHQ();
                    return;
                }
            }
            else
            {
                targetEntity = NPCUtils.FindNearestTarget(parentBehaviour.gameObject, SimulationSettings.NPCViewRadius, NPCUtils.IsTargetAHealthyTree, LayerMask.GetMask(SimulationSettings.TreeLayerName));
                if (targetEntity == null)
                {
                    MoveToRandomPlaceNearby();
                    return;
                }
            }
            MoveToEntity(targetEntity.EntityId());
        }