/// <summary> /// Creates an instance of the structure. /// </summary> /// <param name="builder">Wave initialization logic (e.g. <see cref="Waves.Base{TWave}.Builder"/>).</param> /// <param name="direction">Wave direction.</param> /// <param name="offset">Location offset relative to the progenitor.</param> public Parameters(IWaveBuilder<TWave> builder, Vector3 direction, Vector3 offset) { Builder = builder; Direction = direction; Offset = offset; }
/// <summary> /// Creates an instance of the structure. /// </summary> /// <param name="builder">Wave initialization logic (e.g. <see cref="Waves.Base{TWave}.Builder"/>).</param> /// <param name="direction">Wave direction.</param> public Parameters(IWaveBuilder<TWave> builder, Vector3 direction) : this(builder, direction, Vector3.Zero) { }
/// <summary> /// Searches for the shortest path between two points. /// </summary> /// <typeparam name="TWave">Type of waves to use (e.g. <see cref="Wave"/>).</typeparam> /// <param name="tracer">Tracer to search with.</param> /// <param name="from">Location to start from.</param> /// <param name="to">Location to reach.</param> /// <param name="map">Map to navigate (e.g. <see cref="GridMap"/>); if left null, <see cref="Tracer{TWave}.DefaultMap"/> will be used.</param> /// <param name="custom">Wave builder to create waves with (e.g. <see cref="Waves.Base{TWave}.Builder"/>).</param> /// <returns>List of waypoints.</returns> /// <exception cref="ArgumentNullException">Thrown if both <paramref name="map"/> parameter and <see cref="Tracer{TWave}.DefaultMap"/> field are null.</exception> public static IReadOnlyList <Vector3> FindShortestPath <TWave>( this Tracer <TWave> tracer, Vector3 from, Vector3 to, IMap <TWave> map = null, IWaveBuilder <TWave> custom = null) where TWave : Base <TWave>, new() { if (map == null && tracer.DefaultMap == null) { throw new ArgumentNullException(nameof(map), "ECHO: Either [map] parameter or [Tracer.DefaultMap] field must not be null."); } map = map ?? tracer.DefaultMap; var guide = map as IDirectionsProvider; var builder = new Base <TWave> .Builder { NestedBuilder = custom }; IInitializationStrategy <TWave> initial; IPropagationStrategy <TWave> propagation; if (guide == null) { initial = new Initialize26x3D <TWave>(builder, from); propagation = new Propagate16x3D <TWave>(builder); } else { initial = new InitializeX <TWave>(guide, builder, from); propagation = new PropagateX <TWave>(guide, builder); } builder.PropagationStrategy = propagation; builder.AcceptanceCondition = new AreaCondition(to); builder.FadeCondition = new GlobalIntersectionsCondition(); return(tracer.FindShortestPath(initial, to, map)); }
/// <summary> /// Creates an instance of the class. /// </summary> /// <param name="builder">Wave initialization logic (e.g. <see cref="Waves.Base{TWave}.Builder"/>).</param> public Propagate4x3D(IWaveBuilder <TWave> builder) { _builder = builder; }
/// <summary> /// Creates an instance of the class. /// </summary> /// <param name="provider">Directions provider (e.g. <see cref="Maps.GridMap"/>).</param> /// <param name="builder">Wave initialization logic (e.g. <see cref="Waves.Base{TWave}.Builder"/>).</param> /// <param name="locations">Locations where waves should be created.</param> public InitializeX(IDirectionsProvider provider, IWaveBuilder <TWave> builder, params Vector3[] locations) { _provider = provider; _builder = builder; _locations = locations; }
/// <summary> /// Creates an instance of the class. /// </summary> /// <param name="builder">Wave initialization logic (e.g. <see cref="Waves.Base{TWave}.Builder"/>).</param> /// <param name="locations">Locations where waves should be created.</param> public Initialize26x3D(IWaveBuilder <TWave> builder, params Vector3[] locations) { _builder = builder; _locations = locations; }
/// <summary> /// Creates an instance of the class. /// </summary> /// <param name="location">Wave initial location.</param> /// <param name="direction">Wave direction.</param> /// <param name="builder">Wave initialization logic (e.g. <see cref="Waves.Base{TWave}.Builder"/>).</param> public InitializeSingle(Vector3 location, Vector3 direction, IWaveBuilder <TWave> builder) { _builder = builder; _location = location; _direction = direction; }
/// <summary> /// Creates an instance of the class. /// </summary> /// <param name="provider">Directions provider (e.g. <see cref="Maps.GridMap"/>).</param> /// <param name="builder">Wave initialization logic (e.g. <see cref="Waves.Base{TWave}.Builder"/>).</param> public PropagateX(IDirectionsProvider provider, IWaveBuilder <TWave> builder) { _provider = provider; _builder = builder; }
/// <summary> /// Creates a new instance of the structure. /// </summary> /// <param name="builder">Wave initialization logic (e.g. <see cref="Waves.Base{TWave}.Builder"/>).</param> /// <param name="location">Wave initial location</param> /// <param name="direction">Wave direction.</param> public Parameters(IWaveBuilder <TWave> builder, Vector3 location, Vector3 direction) { Builder = builder; Location = location; Direction = direction; }