public void Setup( RouteElement roadElement, bool canStopOnIt, IRoadElement previous, IRoadElement next, PriorityType priorityType ) { this.SetRouteElement( roadElement.RoadElement ); this._canStopOnIt = canStopOnIt; this._routeElement = roadElement; this._next = next; }
private BuildRoute ConvertRoute( BuildMode.Controls.Route route, BuilderContext context, IRoadElement routeOwner ) { return new BuildRoute( this.GetRouteElements( route, context, routeOwner ) ) { Probability = route.Probability, Name = route.Name, Owner = routeOwner, }; }
public float Lenght( IRoadElement previous, IRoadElement next ) { if ( this._lane.Prev != previous || this._lane.Next != next ) { throw new ArgumentNullException(); } return Vector2.Distance( this._lane.Prev.BuildControl.Location, this._lane.Next.BuildControl.Location ); }
public Car Create( IRoadElement startElement ) { var randomRoute = this.GetRandomRoute( startElement ); var condcutors = this._routeToConductorConverter.Convert( randomRoute ).ToArray(); var car = new Car( condcutors ) { Width = UnitConverter.FromMeter( Widht ), Lenght = UnitConverter.FromMeter( Length ), BreakingForce = UnitConverter.FromKmPerHour( 10.0f ) / UnitConverter.FromSecond( 1.0f ), AccelerateForce = UnitConverter.FromKmPerHour( 10.0f ) / UnitConverter.FromSecond( 1.0f ), MaxSpeed = this.ToVirtualUnitSpeed( 60.0f ), Velocity = this.ToVirtualUnitSpeed( 10.0f ), CarId = ++_carId, }; return car; }
private IEnumerable<RouteElement> GetRouteElements( BuildMode.Controls.Route route, BuilderContext context, IRoadElement routeOwner ) { return route.Items.Select( ( index, prev, current, next ) => { var nextElement = next != null ? next.Control : null; var prevElement = prev != null ? prev.Control : null; if ( prevElement == null && index == 0 ) { prevElement = routeOwner.BuildControl; } return new RouteElement { PriorityType = current.PriorityType, RoadElement = this.GetRoadElement( context, current.Control ), Length = this.GetLength( prevElement, current, nextElement ), CanStopOnIt = current.CanStop, }; } ); }
private IEnumerable<RouteElement> GetRandomRoute( IRoadElement startElement ) { var result = new List<RouteElement> { new RouteElement { CanStopOnIt = true, PriorityType = PriorityType.None, RoadElement = startElement } }; result.AddRange( startElement.Routes.GetRandomRoute( this._rng ) ); while ( true ) { var nextRoute = result.Last().RoadElement.Routes.GetRandomRoute( this._rng ).ToArray(); if ( nextRoute.Length == 0 ) { break; } result.AddRange( nextRoute ); } return result; }
private void SetRouteElement( IRoadElement element ) { var laneCorner = element as LaneCorner; if ( laneCorner == null ) { throw new ArgumentException( "Wrong road element" ); } this._laneCorner = laneCorner; }
public bool CanStop( IRoadElement previous, IRoadElement next ) { return true; }
private void SetRouteElement( IRoadElement element ) { var carInserter = element as CarsInserter; if ( carInserter == null ) { throw new ArgumentException( "Wrong road element" ); } this._carInserter = carInserter; }
public bool CanCreate( IRoadElement roadElement ) { return this._conductorFactory.Any( s => s.CanCreate( roadElement ) ); }
public float Lenght( IRoadElement previous, IRoadElement next ) { return Constans.PointSize; }
public IRoadInformation Create( IRoadElement roadElement ) { var factory = this._conductorFactory.FirstOrDefault( f => f.CanCreate( roadElement ) ); if ( factory == null ) { throw new ArgumentException( "Can't create conductor for given road element", "roadElement" ); } return factory.Create( roadElement ); }
public Vector2 GetCarDirection( Car car, IRoadElement nextPoint ) { return this._lane.RoadLaneBlock.RightEdge.Location - car.Location; }
public void SetConnection( IRoadElement roadElement ) { if ( roadElement == null ) { return; } this._connections.Add( roadElement ); }
public void AddControl( IRoadElement element ) { this._elementsToDraw.Add( element ); }
public float GetCarDistanceTo( Car car, IRoadElement nextPoint ) { Debug.Assert( this._lane.Next == nextPoint ); return Vector2.Distance( car.Location, nextPoint.BuildControl.Location ); }
public float GetCarDistanceTo( Car car, IRoadElement nextPoint ) { return Constans.PointSize; }
public Vector2 GetCarDirection( Car car, IRoadElement nextPoint ) { return car.Direction; // return nextPoint.BuildControl.Location - car.Location; }
public StandardDrawer( IRoadElement owner ) { Contract.Requires( owner != null ); this._owner = owner; }
public void SetRouteElement( IRoadElement element ) { var junctionEdge = element as JunctionEdge; if ( junctionEdge == null ) { throw new ArgumentException( "Wrong road element" ); } this._junctionEdge = junctionEdge; }
protected virtual BuildRoute[] ConvertRoutes( Routes routes, BuilderContext obj, IRoadElement owner ) { return this._converter.Convert( routes.AvailableRoutes, obj, owner ).ToArray(); }
public void AddRoadElement( IRoadElement roadElement ) { this._roadElements.Add( roadElement ); this._controlers.ForEach( s => s.AddControl( roadElement ) ); }
public void SetReversConnection( IRoadElement roadElement ) { if ( roadElement == null ) { return; } this._reversConnection.Add( roadElement ); }
public IEnumerable<BuildRoute> Convert( IEnumerable<BuildMode.Controls.Route> buildRoutes, BuilderContext context, IRoadElement routeOwner ) { return buildRoutes.Select( route => this.ConvertRoute( route, context, routeOwner ) ); }
public float Lenght( IRoadElement previous, IRoadElement next ) { Debug.Assert( previous is JunctionEdge ); Debug.Assert( next is JunctionEdge ); return Vector2.Distance( previous.BuildControl.Location, next.BuildControl.Location ); }
private Tuple<int,JunctionEdge> GetEdgeConnectedWith( IRoadElement roadElement ) { var item = this._laneJunction.Edges.Select( (e,i ) => new { Index = i, Edge = e} ).Where( s => s.Edge.ConnectedEdge == roadElement ).FirstOrDefault(); if( item == null ) { return null; } return Tuple.Create( item.Index, item.Edge ); }