Exemplo n.º 1
0
 /// <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;
 }
Exemplo n.º 2
0
 /// <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) { }
Exemplo n.º 3
0
        /// <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));
        }
Exemplo n.º 4
0
 /// <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;
 }
Exemplo n.º 5
0
 /// <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;
 }
Exemplo n.º 6
0
 /// <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;
 }
Exemplo n.º 7
0
 /// <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;
 }
Exemplo n.º 8
0
 /// <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;
 }
Exemplo n.º 9
0
 /// <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;
 }