public static Agent GetSuitableAgentForStandingPoint(
            UsableMachine usableMachine,
            StandingPoint standingPoint,
            IEnumerable <AgentValuePair <float> > agents,
            List <Agent> usedAgents,
            float weight)
        {
            if (usableMachine.IsStandingPointNotUsedOnAccountOfBeingAmmoLoad(standingPoint))
            {
                return((Agent)null);
            }
            IEnumerable <AgentValuePair <float> > source = agents.Where <AgentValuePair <float> >((Func <AgentValuePair <float>, bool>)(ap =>
            {
                Agent agent = ap.Agent;
                if (usedAgents.Contains(agent) || !agent.IsAIControlled || (!agent.IsActive() || agent.IsRunningAway) || (agent.AIUseGameObjectIsEnabled() || agent.AIMoveToGameObjectIsEnabled() || standingPoint.IsDisabledForAgent(agent)))
                {
                    return(false);
                }
                return(agent.Formation == null || !agent.Formation.IsUnitDetached(agent) || (double)agent.DetachmentWeight * 0.400000005960464 > (double)weight);
            }));

            return(!source.Any <AgentValuePair <float> >() ? (Agent)null : source.MaxBy <AgentValuePair <float>, float>((Func <AgentValuePair <float>, float>)(a => standingPoint.GetUsageScoreForAgent(a))).Agent);
        }
 public static bool IsAgentAssignable(Agent agent)
 {
     if (agent == null || !agent.IsAIControlled || (!agent.IsActive() || agent.IsRunningAway) || (agent.AIUseGameObjectIsEnabled() || agent.AIMoveToGameObjectIsEnabled()))
     {
         return(false);
     }
     return(agent.Formation == null || !agent.Formation.IsUnitDetached(agent));
 }
 private bool ConditionsAreMet(Agent agent, Agent.AIScriptedFrameFlags flags) => agent.IsAIControlled && agent.IsActive() && (agent.Team != null && agent.Team.Side == this._managedSide) && (agent.MovementLockedState == AgentMovementLockedState.None && !agent.IsUsingGameObject && (!agent.AIMoveToGameObjectIsEnabled() && (agent.AIStateFlags & (Agent.AIStateFlag.UseObjectMoving | Agent.AIStateFlag.UseObjectUsing)) == Agent.AIStateFlag.None)) && (!agent.IsDetachedFromFormation && !this._userAgents.Contains(agent) && agent.GetScriptedFlags() == flags) && agent.GetCurrentNavigationFaceId() != this.ManagedNavigationFaceId;