mirror of
https://github.com/MaSzyna-EU07/StarterNG.git
synced 2026-11-11 16:57:11 +01:00
- The stations, the signals passed, the horn points, the couplings, the consists and the timetable progress of the user's train are kept until a read adds something; the views asked for them every frame, which on a long session with many trains took the window down. A read that adds nothing no longer counts as a change. - The lights are checked against the lamps the vehicles at the ends have (written by the simulator from now on), as its driver checks them: Pc 1 without the upper headlight, with the auxiliary lamps, Pc 5 with the rear-end signals. Only while the user drives: the autopilot's lights are its own. - A train off the platform counts at both ends: its head past the stop point as well as its tail before the platform's end. - A recording without the couplings keeps the timetable for any vehicle of the user. - A signal passed at danger is ringed on the map only once it was. - In the tapes window a black box opens on a click or Enter, not when the arrow keys go over it. - The viewer's screenshot of a window not laid out saves nothing and still closes.
30 lines
1.1 KiB
C#
30 lines
1.1 KiB
C#
using System.Threading.Tasks;
|
|
using Avalonia;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Media.Imaging;
|
|
using Eu07.BlackBox.Views;
|
|
|
|
namespace Eu07.BlackBox.Viewer;
|
|
|
|
/// <summary>The window as it shows a moment, saved to a PNG; then the viewer closes.</summary>
|
|
internal static class Screenshot
|
|
{
|
|
public static async Task SaveAsync(BlackBoxWindow window, string path, double? time, bool follow)
|
|
{
|
|
if (time is { } t)
|
|
window.SeekTo(t);
|
|
window.FollowTrain = follow;
|
|
// A few frames for the layout and the first render.
|
|
await Task.Delay(1000);
|
|
// Not laid out (a minimised window): nothing to save, and the viewer still closes.
|
|
if (window.Content is Control content && content.Bounds.Width >= 1 && content.Bounds.Height >= 1)
|
|
{
|
|
var size = new PixelSize((int)content.Bounds.Width, (int)content.Bounds.Height);
|
|
using var bitmap = new RenderTargetBitmap(size);
|
|
bitmap.Render(content);
|
|
bitmap.Save(path, new PngBitmapEncoderOptions());
|
|
}
|
|
window.Close();
|
|
}
|
|
}
|