using System; using Goap.Core; namespace Goap.Runtime { public class TargetSensorBuilder : TargetSensorBuilder where T : ITargetSensor { public TargetSensorBuilder(TargetKeyBuilder targetKeyBuilder) : base(typeof(T), targetKeyBuilder) { } public TargetSensorBuilder SetTarget() where TTarget : ITargetKey { this.config.Key = this.targetKeyBuilder.GetKey(); return this; } public TargetSensorBuilder SetCallback(Action callback) { this.config.Callback = (obj) => callback((T) obj); return this; } } public class TargetSensorBuilder { protected readonly TargetKeyBuilder targetKeyBuilder; protected readonly TargetSensorConfig config; public TargetSensorBuilder(Type type, TargetKeyBuilder targetKeyBuilder) { this.targetKeyBuilder = targetKeyBuilder; this.config = new TargetSensorConfig() { Name = type.Name, ClassType = type.AssemblyQualifiedName, }; } public ITargetSensorConfig Build() { return this.config; } public static TargetSensorBuilder Create(TargetKeyBuilder targetKeyBuilder) where TTargetSensor : ITargetSensor { return new TargetSensorBuilder(targetKeyBuilder); } public static TargetSensorBuilder Create(Type _type, TargetKeyBuilder targetKeyBuilder) { return new TargetSensorBuilder(_type, targetKeyBuilder); } public TargetSensorBuilder SetTarget(Type _type) { this.config.Key = this.targetKeyBuilder.GetKey(_type); return this; } } }