@@ -754,7 +754,8 @@ public override void Draw(SpriteBatch spriteBatch, Point drawPosition)
754
754
755
755
public class CircularSpeedGaugeRenderer : CabViewDigitalRenderer
756
756
{
757
- DriverMachineInterface DMI ;
757
+ public DriverMachineInterface DMI ;
758
+
758
759
[ CallOnThread ( "Loader" ) ]
759
760
public CircularSpeedGaugeRenderer ( Viewer viewer , MSTSLocomotive locomotive , CVCDigital control , CabShader shader )
760
761
: base ( viewer , locomotive , control , shader )
@@ -864,4 +865,79 @@ public override void Draw(GraphicsDevice graphicsDevice)
864
865
ControlView . SpriteBatch . Begin ( SpriteSortMode . Deferred , BlendState . NonPremultiplied , null , DepthStencilState . Default , null , Shader ) ;
865
866
}
866
867
}
868
+
869
+ public class ScreenMaterial : SceneryMaterial
870
+ {
871
+ CircularSpeedGaugeRenderer CircularSpeedGaugeRenderer ;
872
+ SpriteBatch SpriteBatch ;
873
+
874
+ public ScreenMaterial ( Viewer viewer , string key , CircularSpeedGaugeRenderer circularSpeedGaugeRenderer )
875
+ : base ( viewer , key , SceneryMaterialOptions . ShaderFullBright , 0 )
876
+ {
877
+ CircularSpeedGaugeRenderer = circularSpeedGaugeRenderer ;
878
+ Texture = new RenderTarget2D ( viewer . GraphicsDevice ,
879
+ CircularSpeedGaugeRenderer . DMI . Width , CircularSpeedGaugeRenderer . DMI . Height , false , SurfaceFormat . Color , DepthFormat . None ) ;
880
+ SpriteBatch = new SpriteBatch ( viewer . GraphicsDevice ) ;
881
+ }
882
+
883
+ public override void Render ( GraphicsDevice graphicsDevice , IEnumerable < RenderItem > renderItems , ref Matrix XNAViewMatrix , ref Matrix XNAProjectionMatrix )
884
+ {
885
+ var originalRenderTargets = graphicsDevice . GetRenderTargets ( ) ;
886
+ graphicsDevice . SetRenderTarget ( Texture as RenderTarget2D ) ;
887
+ SpriteBatch . Begin ( ) ; // Dummy Begin(), gets closed immediately
888
+ CircularSpeedGaugeRenderer . Draw ( graphicsDevice ) ;
889
+ SpriteBatch . End ( ) ;
890
+ graphicsDevice . SetRenderTargets ( originalRenderTargets ) ;
891
+
892
+ base . Render ( graphicsDevice , renderItems , ref XNAViewMatrix , ref XNAProjectionMatrix ) ;
893
+ }
894
+ }
895
+
896
+ public class ThreeDimCabScreen
897
+ {
898
+ PoseableShape TrainCarShape ;
899
+ Matrix XNAMatrix ;
900
+ Viewer Viewer ;
901
+ ShapePrimitive ShapePrimitive ;
902
+ public CircularSpeedGaugeRenderer CVFR ;
903
+ ScreenMaterial Material ;
904
+ public ThreeDimCabScreen ( Viewer viewer , int iMatrix , PoseableShape trainCarShape , CabViewControlRenderer c )
905
+ {
906
+ CVFR = ( CircularSpeedGaugeRenderer ) c ;
907
+ Viewer = viewer ;
908
+ TrainCarShape = trainCarShape ;
909
+ XNAMatrix = TrainCarShape . SharedShape . Matrices [ iMatrix ] ;
910
+ Material = new ScreenMaterial ( viewer , "ETCS_SCREEN" , CVFR ) ;
911
+
912
+ var vertices = new [ ]
913
+ {
914
+ new VertexPositionNormalTexture ( new Vector3 ( 0 , 0 , 0 ) , new Vector3 ( 0 , 0 , - 1 ) , new Vector2 ( 0 , 0 ) ) ,
915
+ new VertexPositionNormalTexture ( new Vector3 ( 0 , 0 , 1 ) , new Vector3 ( 0 , 0 , - 1 ) , new Vector2 ( 0 , 1 ) ) ,
916
+ new VertexPositionNormalTexture ( new Vector3 ( 1 , 0 , 0 ) , new Vector3 ( 0 , 0 , - 1 ) , new Vector2 ( 1 , 0 ) ) ,
917
+ new VertexPositionNormalTexture ( new Vector3 ( 1 , 0 , 1 ) , new Vector3 ( 0 , 0 , - 1 ) , new Vector2 ( 1 , 1 ) ) ,
918
+ } ;
919
+ var indices = new short [ ] { 0 , 1 , 2 , 2 , 1 , 3 } ;
920
+ var indexBuffer = new IndexBuffer ( viewer . GraphicsDevice , IndexElementSize . SixteenBits , indices . Length , BufferUsage . WriteOnly ) ;
921
+ indexBuffer . SetData ( indices ) ;
922
+ ShapePrimitive = new ShapePrimitive ( Material , new SharedShape . VertexBufferSet ( vertices , viewer . GraphicsDevice ) , indexBuffer , 2 , new [ ] { - 1 } , 0 ) ;
923
+ }
924
+
925
+ public void PrepareFrame ( RenderFrame frame , ElapsedTime elapsedTime )
926
+ {
927
+ if ( ! CVFR . IsPowered && CVFR . Control . HideIfDisabled )
928
+ return ;
929
+
930
+ Matrix mx = TrainCarShape . Location . XNAMatrix ;
931
+ mx . M41 += ( TrainCarShape . Location . TileX - Viewer . Camera . TileX ) * 2048 ;
932
+ mx . M43 += ( - TrainCarShape . Location . TileZ + Viewer . Camera . TileZ ) * 2048 ;
933
+ Matrix m = XNAMatrix * mx ;
934
+
935
+ frame . AddPrimitive ( ShapePrimitive . Material , ShapePrimitive , RenderPrimitiveGroup . Interior , ref m , ShapeFlags . None ) ;
936
+ }
937
+
938
+ internal void Mark ( )
939
+ {
940
+ ShapePrimitive . Mark ( ) ;
941
+ }
942
+ }
867
943
}
0 commit comments