public override void PrepareFrame(RenderFrame frame, ORTS.Common.ElapsedTime elapsedTime, bool updateFull) { if (updateFull) { var labels = Labels; var newLabels = new Dictionary<TrItemLabel, LabelPrimitive>(labels.Count); var worldFiles = Owner.Viewer.World.Scenery.WorldFiles; foreach (var worldFile in worldFiles) { if ((State & DisplayState.Platforms) != 0 && worldFile.platforms != null) foreach (var platform in worldFile.platforms) if (labels.ContainsKey(platform)) newLabels[platform] = labels[platform]; else newLabels[platform] = new LabelPrimitive(Owner.Label3DMaterial, Color.Yellow, Color.Black, 0) { Position = platform.Location, Text = platform.ItemName }; if ((State & DisplayState.Sidings) != 0 && worldFile.sidings != null) foreach (var siding in worldFile.sidings) if (labels.ContainsKey(siding)) newLabels[siding] = labels[siding]; else newLabels[siding] = new LabelPrimitive(Owner.Label3DMaterial, Color.Yellow, Color.Black, 0) { Position = siding.Location, Text = siding.ItemName }; } Labels = newLabels; } foreach (var primitive in Labels.Values) frame.AddPrimitive(Owner.Label3DMaterial, primitive, RenderPrimitiveGroup.World, ref Identity); }
public override void PrepareFrame(RenderFrame frame, ORTS.Common.ElapsedTime elapsedTime, bool updateFull) { if (updateFull) { var labels = Labels; var newLabels = new Dictionary <TrainCar, LabelPrimitive>(labels.Count); var cars = Owner.Viewer.World.Trains.Cars; foreach (var car in cars.Keys) { if (State == DisplayState.Cars) { if (labels.ContainsKey(car)) { newLabels[car] = labels[car]; } else { newLabels[car] = new LabelPrimitive(Owner.Label3DMaterial, Color.Blue, Color.White, car.CarHeightM) { Position = car.WorldPosition } }; newLabels[car].Text = car.CarID; } else if (State == DisplayState.Trains && (car.Train == null || car.Train.FirstCar == car)) { if (labels.ContainsKey(car)) { newLabels[car] = labels[car]; } else { newLabels[car] = new LabelPrimitive(Owner.Label3DMaterial, Color.Blue, Color.White, car.CarHeightM) { Position = car.WorldPosition } }; newLabels[car].Text = car.Train == null ? car.CarID : car.Train.Name; } } Labels = newLabels; } foreach (var primitive in Labels.Values) { frame.AddPrimitive(Owner.Label3DMaterial, primitive, RenderPrimitiveGroup.World, ref Identity); } } }