Skip to content

Commit c27f32d

Browse files
committed
Some clean up
1 parent 42ea7ad commit c27f32d

File tree

4 files changed

+54
-92
lines changed

4 files changed

+54
-92
lines changed

Source/RunActivity/Viewer3D/Materials.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,9 @@ public Material Load(string materialName, string textureName = null, int options
367367
case "Water":
368368
Materials[materialKey] = new WaterMaterial(Viewer, textureName);
369369
break;
370+
case "Screen":
371+
Materials[materialKey] = new ScreenMaterial(Viewer, textureName);
372+
break;
370373
default:
371374
Trace.TraceInformation("Skipped unknown material type {0}", materialName);
372375
Materials[materialKey] = new YellowMaterial(Viewer);
@@ -1164,6 +1167,37 @@ public override bool GetBlending()
11641167
}
11651168
}
11661169

1170+
public class ScreenMaterial : SceneryMaterial
1171+
{
1172+
RollingStock.CabViewControlRenderer ScreenRenderer;
1173+
1174+
public ScreenMaterial(Viewer viewer, string key)
1175+
: base(viewer, key, SceneryMaterialOptions.ShaderFullBright, 0)
1176+
{
1177+
}
1178+
1179+
public void Set2DRenderer(RollingStock.CabViewControlRenderer circularSpeedGaugeRenderer)
1180+
{
1181+
ScreenRenderer = circularSpeedGaugeRenderer;
1182+
Texture = new RenderTarget2D(Viewer.GraphicsDevice,
1183+
(int)ScreenRenderer.Control.Width, (int)ScreenRenderer.Control.Height, false, SurfaceFormat.Color, DepthFormat.None);
1184+
}
1185+
1186+
public override void Render(GraphicsDevice graphicsDevice, IEnumerable<RenderItem> renderItems, ref Matrix XNAViewMatrix, ref Matrix XNAProjectionMatrix)
1187+
{
1188+
if (ScreenRenderer != null)
1189+
{
1190+
var originalRenderTargets = graphicsDevice.GetRenderTargets();
1191+
graphicsDevice.SetRenderTarget(Texture as RenderTarget2D);
1192+
ScreenRenderer.ControlView.SpriteBatch.Begin(); // Dummy Begin(), gets closed immediately
1193+
ScreenRenderer.Draw(graphicsDevice);
1194+
ScreenRenderer.ControlView.SpriteBatch.End();
1195+
graphicsDevice.SetRenderTargets(originalRenderTargets);
1196+
}
1197+
base.Render(graphicsDevice, renderItems, ref XNAViewMatrix, ref XNAProjectionMatrix);
1198+
}
1199+
}
1200+
11671201
public class YellowMaterial : Material
11681202
{
11691203
static BasicEffect basicEffect;

Source/RunActivity/Viewer3D/RollingStock/MSTSLocomotiveViewer.cs

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,7 +1603,7 @@ public abstract class CabViewControlRenderer : RenderPrimitive
16031603
protected readonly MSTSLocomotive Locomotive;
16041604
public readonly CabViewControl Control;
16051605
protected readonly CabShader Shader;
1606-
protected readonly SpriteBatchMaterial ControlView;
1606+
public readonly SpriteBatchMaterial ControlView;
16071607

16081608
protected Vector2 Position;
16091609
protected Texture2D Texture;
@@ -3346,7 +3346,16 @@ public ThreeDimentionCabViewer(Viewer viewer, MSTSLocomotive car, MSTSLocomotive
33463346
break;
33473347
}
33483348

3349-
if (style != null && style is CabViewDigitalRenderer)//digits?
3349+
if (style is CircularSpeedGaugeRenderer || style is DriverMachineInterfaceRenderer)
3350+
{
3351+
// Attach the control renderer to the material
3352+
var material = Viewer.MaterialManager.Load("Screen", Helpers.GetTextureFile(Viewer.Simulator, Helpers.TextureFlags.None,
3353+
TrainCarShape.SharedShape.ReferencePath, matrixName)) as ScreenMaterial;
3354+
material?.Set2DRenderer(locoViewer.ThreeDimentionCabRenderer.ControlMap[key]);
3355+
3356+
ScreenDisplays3D.Add(key, new ThreeDimCabScreen(viewer, iMatrix, TrainCarShape, locoViewer.ThreeDimentionCabRenderer.ControlMap[key]));
3357+
}
3358+
else if (style != null && style is CabViewDigitalRenderer)//digits?
33503359
{
33513360
//DigitParts.Add(key, new DigitalDisplay(viewer, TrainCarShape, iMatrix, parameter, locoViewer.ThreeDimentionCabRenderer.ControlMap[key]));
33523361
DigitParts3D.Add(key, new ThreeDimCabDigit(viewer, iMatrix, parameter1, parameter2, this.TrainCarShape, locoViewer.ThreeDimentionCabRenderer.ControlMap[key], Locomotive));
@@ -3375,10 +3384,6 @@ public ThreeDimentionCabViewer(Viewer viewer, MSTSLocomotive car, MSTSLocomotive
33753384
{
33763385
DPIDisplays3D.Add(key, new ThreeDimCabDPI(viewer, iMatrix, parameter1, parameter2, this.TrainCarShape, locoViewer.ThreeDimentionCabRenderer.ControlMap[key]));
33773386
}
3378-
else if (style is CircularSpeedGaugeRenderer || style is DriverMachineInterfaceRenderer)
3379-
{
3380-
ScreenDisplays3D.Add(key, new ThreeDimCabScreen(viewer, iMatrix, TrainCarShape, locoViewer.ThreeDimentionCabRenderer.ControlMap[key]));
3381-
}
33823387
else
33833388
{
33843389
//if there is a part already, will insert this into it, otherwise, create a new
@@ -3531,24 +3536,6 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
35313536
p.Value.PrepareFrame(frame, elapsedTime);
35323537
}
35333538

3534-
foreach (var p in ScreenDisplays3D)
3535-
{
3536-
var dpdisplay = p.Value.CVFR.Control;
3537-
if (dpdisplay.Screens != null && dpdisplay.Screens[0] != "all")
3538-
{
3539-
foreach (var screen in dpdisplay.Screens)
3540-
{
3541-
if (LocoViewer.ThreeDimentionCabRenderer.ActiveScreen[dpdisplay.Display] == screen)
3542-
{
3543-
p.Value.PrepareFrame(frame, elapsedTime);
3544-
break;
3545-
}
3546-
}
3547-
continue;
3548-
}
3549-
p.Value.PrepareFrame(frame, elapsedTime);
3550-
}
3551-
35523539
foreach (var p in Gauges)
35533540
{
35543541
var gauge = p.Value.CVFR.Control;
@@ -3602,10 +3589,6 @@ internal override void Mark()
36023589
{
36033590
threeDimCabDPI.Mark();
36043591
}
3605-
foreach (var threeDimCabControl in ScreenDisplays3D.Values)
3606-
{
3607-
threeDimCabControl.Mark();
3608-
}
36093592
}
36103593
}
36113594

Source/RunActivity/Viewer3D/RollingStock/SubSystems/ETCS/DriverMachineInterface.cs

Lines changed: 3 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -866,78 +866,18 @@ public override void Draw(GraphicsDevice graphicsDevice)
866866
}
867867
}
868868

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
869+
public class ThreeDimCabScreen// : ICabViewMouseControlRenderer
897870
{
898871
PoseableShape TrainCarShape;
899872
Matrix XNAMatrix;
900873
Viewer Viewer;
901-
ShapePrimitive ShapePrimitive;
902-
public CircularSpeedGaugeRenderer CVFR;
903-
ScreenMaterial Material;
874+
public CabViewControlRenderer CVFR;
904875
public ThreeDimCabScreen(Viewer viewer, int iMatrix, PoseableShape trainCarShape, CabViewControlRenderer c)
905876
{
906-
CVFR = (CircularSpeedGaugeRenderer)c;
877+
CVFR = c;
907878
Viewer = viewer;
908879
TrainCarShape = trainCarShape;
909880
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();
941881
}
942882
}
943883
}

Source/RunActivity/Viewer3D/Shapes.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2283,7 +2283,12 @@ public SubObject(sub_object sub_object, ref int totalPrimitiveIndex, int[] hiera
22832283
if (String.IsNullOrEmpty(sharedShape.ReferencePath))
22842284
material = sharedShape.Viewer.MaterialManager.Load("Scenery", Helpers.GetRouteTextureFile(sharedShape.Viewer.Simulator, textureFlags, imageName), (int)options, texture.MipMapLODBias);
22852285
else
2286-
material = sharedShape.Viewer.MaterialManager.Load("Scenery", Helpers.GetTextureFile(sharedShape.Viewer.Simulator, textureFlags, sharedShape.ReferencePath, imageName), (int)options, texture.MipMapLODBias);
2286+
{
2287+
if (imageName.ToUpper().Contains(nameof(CABViewControlTypes.ORTS_ETCS)))
2288+
material = sharedShape.Viewer.MaterialManager.Load("Screen", Helpers.GetTextureFile(sharedShape.Viewer.Simulator, Helpers.TextureFlags.None, sharedShape.ReferencePath, imageName));
2289+
else
2290+
material = sharedShape.Viewer.MaterialManager.Load("Scenery", Helpers.GetTextureFile(sharedShape.Viewer.Simulator, textureFlags, sharedShape.ReferencePath, imageName), (int)options, texture.MipMapLODBias);
2291+
}
22872292
}
22882293
else
22892294
{

0 commit comments

Comments
 (0)