using System.Linq; using Goap.Agent.Runtime; using Goap.Core; namespace Goap.Runtime { public class DuplicateWorldSensorValidator : IValidator { public void Validate(IAgentTypeConfig config, IValidationResults results) { var provided = this.GetWorldSensorKeys(config).Concat(this.GetMultiSensorKeys(config)); var duplicates = provided .GroupBy(x => x) .Where(x => x.Count() > 1) .Select(x => x.Key) .ToArray(); if (!duplicates.Any()) return; results.AddWarning($"Duplicate world sensor keys: {string.Join(", ", duplicates)}"); } private string[] GetWorldSensorKeys(IAgentTypeConfig agentTypeConfig) { return agentTypeConfig.WorldSensors .Where(x => x.Key != null) .Select(x => x.Key.Name) .Distinct() .ToArray(); } private string[] GetMultiSensorKeys(IAgentTypeConfig agentTypeConfig) { var temp = new ClassResolver().Load(agentTypeConfig.MultiSensors); return temp .SelectMany(x => x.GetKeys()) .Select(x => x.GetGenericTypeName()) .Distinct() .ToArray(); } } }