public InternalRoadJunctionEdge( Factories.Factories factories, RoadJunctionBlock roadJunctionBlock, int index )
     : base( factories, Styles.NormalStyle, roadJunctionBlock )
 {
     this._vertexContainer = new InternalRoadJunctionEdgeVertexContainer( this );
     this._parent = roadJunctionBlock;
     this.EdgeIndex = index;
 }
        private IEnumerable<IAction> Convert( RoadJunctionBlock control )
        {
            yield return Actions.CreateControl( control.Id, () => new RoadJunctionBlock( Is.Ioc<Factories.Factories>(), Is.Const( control.Location ) ) );
            yield return SetProperties<Vector2>.Create<RoadJunctionBlock>( control.Id, () => control.LeftTop.Location );
            yield return SetProperties<Vector2>.Create<RoadJunctionBlock>( control.Id, () => control.RightTop.Location );
            yield return SetProperties<Vector2>.Create<RoadJunctionBlock>( control.Id, () => control.RightBottom.Location );
            yield return SetProperties<Vector2>.Create<RoadJunctionBlock>( control.Id, () => control.LeftBottom.Location );
            if ( control.Connector.LeftEdge != null )
            {
                yield return Actions.Call<RoadJunctionBlock>(
                            control.Id,
                            () => control.Connector.ConnectStartOn( Is.Control( control.Connector.LeftEdge ), Is.Const( EdgeType.Left ) ) );
            }
            if ( control.Connector.RightEdge != null )
            {
                yield return Actions.Call<RoadJunctionBlock>(
                            control.Id,
                            () => control.Connector.ConnectStartOn( Is.Control( control.Connector.RightEdge ), Is.Const( EdgeType.Right ) ) );
            }

            if ( control.Connector.TopEdge != null )
            {
                yield return Actions.Call<RoadJunctionBlock>(
                            control.Id,
                            () => control.Connector.ConnectStartOn( Is.Control( control.Connector.TopEdge ), Is.Const( EdgeType.Top ) ) );
            }
            if ( control.Connector.BottomEdge != null )
            {
                yield return Actions.Call<RoadJunctionBlock>(
                            control.Id,
                            () => control.Connector.ConnectStartOn( Is.Control( control.Connector.BottomEdge ), Is.Const( EdgeType.Bottom ) ) );
            }
        }
        public void ConnectWithJunction( RoadJunctionBlock junction, int edge )
        {
            this.JunctionEdge = junction.JunctionEdges[ edge ];

            this.JunctionEdge.StartPoint.Translated.Subscribe( s => this._owner.Edge.EndPoint.SetLocation( s.Control.Location ) );
            this.JunctionEdge.EndPoint.Translated.Subscribe( s => this._owner.Edge.StartPoint.SetLocation( s.Control.Location ) );
        }
        public LaneJunction( RoadJunctionBlock control, Func<LaneJunction, IRoadInformation> condutorFactory )
            : base( control )
        {
            this.JunctionBuilder = control;

            this._condutorFactory = condutorFactory;
            this._roadInformation = this._condutorFactory( this );
            this._drawer = new LaneJunctionDrawer( this );
        }
 public IVertexContainer<VertexPositionColor> Create( RoadJunctionBlock roadJunctionBlock )
 {
     var textureManager = this._container.Resolve<TextureManager>();
     return new RoadJunctionBlockVertexContainer( roadJunctionBlock, Styles.NormalStyle );
 }
 public RoadJunctionBlockConnector( RoadJunctionBlock owner )
 {
     this._owner = owner;
 }