Пример #1
0
        public IActivity <PhysicalActor>?Interpret(IVerbalAI <PhysicalActor> ai, string input)
        {
            var lookupTable = Parser.Match(input);

            if (lookupTable == null)
            {
                return(null);
            }
            return(BuildActivity(ai, lookupTable));
        }
Пример #2
0
        protected override IActivity <PhysicalActor>?BuildActivity(IVerbalAI <PhysicalActor> ai, Dictionary <string, string> lookup)
        {
            List <GameObject> targets = ai.ObjectsWithName(lookup["TARGET"]).ToList();

            if (targets.Count == 0)
            {
                return(new AutoFailAction <PhysicalActor>(
                           ai.Actor,
                           new FailedOutcome($"There is no {lookup["TARGET"]} here")
                           ));
            }
            List <TAction>?activities      = null;
            List <TAction>?validActivities = null;

            while (validActivities == null || validActivities.Count > 1)
            {
                IEnumerable <TAction> query =
                    from target in targets
                    select new TAction
                {
                    Actor  = ai.Actor,
                    Target = target,
                };
                activities      = new List <TAction>(query);
                validActivities = activities.Where(x => x.IsValid()).ToList();
                IEnumerable <GameObject> validTargets = from act in validActivities select act.Target;
                var uniqueTargets = new HashSet <GameObject>(validTargets);
                if (uniqueTargets.Count > 1)
                {
                    GameObject?definiteTarget = ai.ChooseObject(lookup["TARGET"], uniqueTargets);
                    if (definiteTarget == null)
                    {
                        targets = new List <GameObject>(); // empty
                    }
                    else
                    {
                        targets = new List <GameObject>()
                        {
                            definiteTarget
                        };
                    }
                }
            }
            // activities cannot be null here, because the above loop only exits if it is non-null
            if (activities !.Count == 0)
            {
                return(null);
            }
Пример #3
0
 protected override IActivity <PhysicalActor> BuildActivity(IVerbalAI <PhysicalActor> ai, Dictionary <string, string> lookup)
 {
     return(new TAction {
         Actor = ai.Actor
     });
 }
Пример #4
0
 protected abstract IActivity <PhysicalActor>?BuildActivity(IVerbalAI <PhysicalActor> ai, Dictionary <string, string> lookup);