17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-02 06:59:13 +01:00
Commit Graph

3800 Commits

Author SHA1 Message Date
maj00r
8171bdc7d5 feat(editor): zoomed in from above, the curves are labelled with their radius and length and the switches with their name and type
In the top view at a metre a pixel or closer, each curved track of 5 m or more gets "R 600  L 120" by its middle and each
switch its name and its type from the kept switch record ("Rz 60E1-300-1:9 P") by its start, on a dark plate as on a plan.
A label which would cover another one is left out, the switches going first and then the sharper curves. View > Track labels
in the top view switches them off.
2026-10-21 17:51:45 +02:00
maj00r
6a5f0d735d feat(editor): the tracks of the track mode can be coloured by their radius, speed or grade, with a legend
View > Track colours draws the rail tracks over the view in bands of the radius of their paths, of their speed or of the grade
along them, from above over the whole view and in the 3D view within 1.5 km of the camera, with the legend of the bands in
the bottom right corner. Plain keeps the lines of the top view as they were. Self-test command trackcolours.
2026-10-21 17:47:42 +02:00
maj00r
27ea2a7456 feat(editor): the joints of the tracks just changed are checked at once and their faults marked in the view
After a change of the tracks, once the mouse is let go, the joints check looks at the joints of the tracks changed and of
the tracks they join, with the limits of the Joints panel: ends almost meeting, steps, kinks, jumps of the cant and of the
grade get a marker with the value in the view while the panel is closed, and go away once a later change or an undo puts
them right. The check of a track is shared with the panel (joints_check takes the list and the pairs seen), the pairs
already looked at are kept by the tool instead of a global. Self-test command jointslive.
2026-10-21 17:41:51 +02:00
maj00r
d0ff7be1c2 feat(editor): the fields of the features switched off in the build are shown greyed with the reason instead of hidden
The frog, movable nose and 3D sleeper and timber fields of the track properties and the frog chips of the switch panel stay
in place while track_features::crossings or track_features::sleepers are off, greyed, with a tooltip saying the feature is
switched off in this build; nothing changes them, copying and pasting the properties leaves them out.
2026-10-21 17:34:41 +02:00
maj00r
4db3dd70d3 feat(editor): the free ends of the tracks are marked red in the track mode
Each end of a rail track joined to nothing, where a train would run off, gets a red dot next to the white dots of the joints,
in the 3D view near the camera and from above over the whole view. The ends are looked for again after an edit or once the
camera leaves the place they were found for, not every frame.
2026-10-21 17:34:36 +02:00
maj00r
a154fce67b feat(editor): the data of a track under the cursor give its grade there and its cant, and the radius of a curve without one written
After the cursor rests on a track, its label gives the grade at the place pointed at and the cant of the path, besides the
name, the length, the radius and the speed; a curve whose radius isn't written in the scenery gets the one of its geometry
instead of being called straight.
2026-10-21 17:34:26 +02:00
maj00r
62b0e925a7 feat(editor): the readout of a track being laid or led out of an end gives its rise, its grades and the speed of its arc
Next to the length and the radius, the readout at the cursor shows the difference of height from the start to the end of the
track about to be laid, the grade along it (one value or the range it goes over) and the speed the sharpest arc lets the
trains through at within the cant and the unbalanced acceleration of the laying limits. The self-test layclicks logs it.
2026-10-21 17:34:19 +02:00
maj00r
e86a536a9d fix(editor): a point taken out of a grade line leaves its neighbours with the radius of the limits, and paths meeting at a sharp break keep their own grades
The points of a grade line read from the tracks keep the radius measured there; once a point between them was taken out, the
breaks of its neighbours changed while their radii stayed, so a break without a curve read as 0.4 per mille became one of
9 per mille with no curve, and the tracks took it as a kink. The neighbours of the point taken out follow the limits now,
with the button, Del and the self-test alike (profile_remove_point).

Applying a line with a break without a curve gave the path which ends at the break the grade of the element after it, so
its Hermite heights bowed 0.12 m off the line over 100 m before the break; each path takes the grade on its own side now.

Self-test commands vprofilerun, vprofiledel and vprofileput.
2026-10-21 17:25:17 +02:00
83c8c23c80 feat(editor): presets of the track properties, applied on the selected tracks 2026-10-21 16:09:05 +02:00
16c77ab6fb feat(editor): texture of the rails of path 2 of a switch set apart 2026-10-21 15:50:00 +02:00
30cb83584d fix(track): timbermodel of a track lays switch timbers without sleepers3d in eu07.ini 2026-10-21 15:37:11 +02:00
3c890e4eb9 Make the default material matte 2026-10-21 15:03:14 +02:00
maj00r
d2d06817bc feat(editor): the track laid on the terrain gets its grade line from the profile solver
In place of a line bent every ten metres to keep within 0.1 m of every bump,
the grades and the vertical curves are fitted to the ground the way the
profile fits them. Where the formation is made in the terrain model the line
keeps to the radius of the norms and cuts and fills; over the ground left as
it is it bends as sharply as it has to. The joints keep the height and the
grade of the track joined, no grade is capped and no piece is under 5 m.
2026-10-21 13:20:47 +02:00
maj00r
eea0900928 fix(editor): an arc and a straight laid to a point on the circle of the radius aren't refused 2026-10-21 13:20:47 +02:00
maj00r
a39a3d4dbe feat(editor): the terrain model loads from a clearer panel and follows the tracks edited
The panel gives the place on the map or typed, the area, one main button, a
progress bar with Stop and a banner over the view while it loads. The terrain
grown ahead of a track goes on at the height of the one beside it and skips
the ground made by hand. The formations follow the tracks moved, laid and
removed, in the same step of the history; a whole load is one step, the
ground grown ahead none.
2026-10-21 13:20:39 +02:00
maj00r
0f9b00c74a feat(editor): a map of Poland to pick a place on, shared by the scenery wizard and the terrain model 2026-10-21 13:20:25 +02:00
maj00r
6f25290eee feat(editor): the terrain model asks again for what it didn't get, can be stopped and says when the place is outside Poland 2026-10-21 13:20:20 +02:00
ae3e063df0 Add a list of the terrain chunks to the editor 2026-10-21 13:15:44 +02:00
maj00r
da18883558 feat(editor): what the editor refuses shows by the mouse cursor
An error put in the status bar also shows for 4 s by the cursor, and the
refusals the tools kept in their panels (a curve which can't be laid,
a switch which doesn't fit, a signal which can't be moved, a drive
without the variant) go there as well.
2026-10-21 11:47:26 +02:00
maj00r
9d27fd1ace fix(editor): a straight dragged by its free end past a curve isn't refused
When the refitted curve needed more of the straight at its other end,
the ends of the line were both checked against the design, and the free
end that went along with the drag "missed" by as far as it was dragged.
Only an end whose straight was cut is checked now. The longer transition
curves of the PKP PLK norms ran into it more often.
2026-10-21 11:47:25 +02:00
maj00r
825c91705d fix(editor): the free design gets no transition curves from the Plan tools
Dragging an end of a straight refits the curve next to it with the cant
and the transition curves recommended for the speed, keeping the curve's
own only where it had some; a plain arc laid freely came out with
transitions. Break and S-curve took the recommended transitions too. The
recommendation of a design not checked against the norms is a plain arc
now, the tools take the norms in effect rather than the ones the design
was last computed with, and the Plan panel calls the automatic choice
"None" in the free design. Self-test: norms free|plk.
2026-10-21 11:47:25 +02:00
maj00r
19b7364bca fix(editor): the cant of a path is typed in millimetres
The inspector took the cant as the roll angle in degrees while every
readout shows it in millimetres of one rail over the other.
2026-10-21 11:09:16 +02:00
maj00r
0b74da1474 fix(editor): a radius typed while dragging out of a free end reaches the curve
The shape pulled out of a free end took a typed radius for its curve,
but the typed keys were thrown away while the drag went on, so the value
never got there. Digits now type the radius whenever the shape has a
curve and a straight.
2026-10-21 11:09:16 +02:00
maj00r
ddde8d12d9 fix(editor): Esc takes back what a drag did
Esc in the middle of dragging a point of a track kept the moved point,
and the hint said so; dragging a straight was taken back but left an
empty step in the history; a vertex or the radius grip of a curve stayed
moved in the design. Now Esc puts back what was there before the drag in
all three, and the history doesn't keep a step for it.
2026-10-21 11:09:06 +02:00
maj00r
7da0432dca fix(editor): a signal goes to the other side of the track and turns around
Dragging a standing signal over the track takes it to the other side;
the side used to come from where the signal stood, so it never crossed.
The selected signal gets "To the other side" and "Turn around": the
first mirrors it over the axis facing the same trains, the second turns
it to the trains of the other direction and moves its event to the
other event list of the path. Either one swaps a head leaning to the
track for its counterpart, and an include keeps the template its
directive names, so undo brings the old file back too.
2026-10-21 10:44:58 +02:00
maj00r
87bacede74 refactor(editor): the helpers repeated over the editor files are shared
The name of a node or "(no name)" was written out in twenty places and
four local functions, a lower-case copy of a text in four files, the
test for a number, the file name of a template made comparable and the
heading of a direction in three and two, the green main button of a
panel in five and the key=value parameters of a self-test command in
five. Each of them is one helper now: name_of, tall_button_height and
main_button with the panel helpers, numeric with format, normalized
with the include helpers, heading_of with the plan geometry and
selftest_values with the tools; lower gives way to ToLower.
2026-10-21 10:28:42 +02:00
maj00r
747c6817f0 refactor(editor): the tools get the roles of the editor they need, not all of it
editor_services was growing into one interface every tool depended on
whole. It splits into the roles the editor plays for its tools: the
selection, the view, the undo history, the templates by the track, the
ground with the terrain model, the track design and the guide of the
first steps. Each tool is handed only the roles it uses, so what it
depends on can be read from its constructor; editor_services stays as
the sum of the roles the editor implements.
2026-10-21 10:08:27 +02:00
maj00r
872e1b5e19 refactor(editor): the parallel track is a tool of its own
The seventh tool out of editor_mode. It reads the selected set of tracks
and the tab shown through the services, digitizes the tracks it lays and
refreshes the plan after it sets one parallel to another. The panel shown
for two selected tracks is a public call of the tool, and the self-test
command parallel moves with it and lays the same tracks as before.
2026-10-21 09:54:39 +02:00
maj00r
6ee771bb22 refactor(editor): the hectometre posts and the fouling points are tools of their own
The fifth and the sixth tool out of editor_mode, the two lineside ones
sharing their file. Placing, moving and taking out the templates which
stand by the track become services of the editor, with the template
types of their own, and so do the tab of the track tools shown, the
ground under a point and the first step done. The context menu, the
click on a fouling point in the view and the lineside tabs go through
the public calls of the tools. The self-test commands hekto and fouling
move with them and log the same as before.
2026-10-21 09:50:38 +02:00
maj00r
c45c4713d6 refactor(editor): the trainset is a tool of its own
The fourth tool out of editor_mode. The track under the cursor and the
first steps of the tutorial become types of their own, which the editor
gives to the tools, and a tool shown as a tab of the lineside panel keeps
its open and expanded flags in a tool_tab. The trainsets waiting for the
save are handed to the editor by the tool, which hears back when they
were written. The self-test command trainset moves with it.
2026-10-21 09:44:17 +02:00
maj00r
8ba8345faf refactor(editor): the joints check is a tool of its own
The third tool out of editor_mode. It reaches the terrain model and the
places of the tracks on it through the services, the place of a track
for the terrain model is a type of its own now, and the laying and the
switches ask the tool for the kink it allows. A self-test command can
ask to be run again in the next frame, as the check against the terrain
model does while the model comes in.
2026-10-21 09:23:36 +02:00
maj00r
0c2880f48f refactor(editor): the speed check is a tool of its own
The second tool out of editor_mode. Tools get two more hooks, the overlay
drawn over the view and the options in the tool window, and the editor
gives them the track it focuses on, the node it makes current, the norms
of the route design and the snapshot of the tracks for the undo.

The check gets a self-test command, speedcheck <scope>, which runs it
through and logs the paths found too fast for their geometry.
2026-10-21 09:10:27 +02:00
maj00r
3c9c90b468 refactor(editor): the structure gauge is a tool of its own
The first step of taking the tools out of editor_mode: a tool keeps its
own state and reaches the editor through editor_services, the few things
it needs from it, instead of through every member of the editor. The
editor holds its tools in a list for the hooks they share: a deleted
node is forgotten by all of them in one place, and a self-test command
the editor doesn't know goes to each of them.

The gauge moves with its state, its window and its self-test command;
the ImGui ids and the texts stay the same, and the self-test gives the
same hits on the test scenery as before.
2026-10-21 09:00:59 +02:00
40a4267bd3 Merge pull request #189 from pwarszawski/fix/ai-ready-released-brakes
AI: don't cut the power for a brake already released below 0.4 bar
2026-10-21 09:00:34 +02:00
09a7e1e5ef Merge pull request #219 from MaSzyna-EU07/fix/imgui-viewport-windows
fix(ui): panels dragged out of the simulator window get no taskbar or…
2026-10-21 09:00:06 +02:00
maj00r
a168e2ccfc fix(editor): an undo no longer moves a model which took the place of a deleted one
The states of the objects which followed a track, kept in the history
for the undo, held the pointer of a model after it was deleted. Only the
address was checked before the model was moved back, so a node made
later at the same address, of another type too, was taken for it. The
states of a deleted model are dropped from the history with its other
pointers.
2026-10-21 08:59:54 +02:00
maj00r
4512ed4e0b fix(editor): guard the places where the editor could crash outright
Found with an address and undefined behaviour sanitizer build, random
monkey sessions on the test sceneries and broken inputs:

- A deleted model left its pointer in the pick list of the renderer, the
  bound node of the panels, the bindings of the infrastructure and the
  selection: the next pick or panel frame read freed memory. The renderer
  forgets it, and one erase_model does the cleaning for all the places
  which deleted a model by hand.
- The plan band of a route read the vertex before the first one in the
  frame a drag was let go.
- A scenery which can't be opened goes back to the launcher with the
  reason in the log, a track of an unknown type or a tributary loads as
  a normal track or a river with a message, and a spline with no finite
  length or step gets a sane number of segments.
- Typed numbers which aren't (NaN, inf, ends 0 m or 1000 km apart, a
  vector of 1e30, a diverging track part of 5 km, a curve threshold of 0,
  a zero history size, radius norms below zero) are refused or clamped,
  where they made the geometry run away or divide by zero.
- Folders which can't be read and file names which aren't valid in the
  locale no longer throw out of the scans of sceneries, textures, sweeps,
  roads and signal plates; the scans skip them.
- The launcher: Ctrl+Del with no trainset selected, a dropped vehicle
  whose skin is gone and a text with a percent sign.
- A terrain mesh made for another resolution of its chunk isn't put into
  the chunk, and a slot is reused only for a mesh of the same size.
- Vehicles on a track changed by the editor are moved over a copy of the
  list they leave.
- The table of the keyboard shortcuts gives its stretched column a
  weight, else ImGui divides 0 by 0 in the first frame of the window.
2026-10-21 08:42:29 +02:00
maj00r
9696b5f795 fix: closing the simulator no longer makes a destroyed window current
The python task queue was stopped after the windows were destroyed, and
its worker, leaving, released the context of its own window, which was
gone by then: a use after free on every exit. The queue is stopped
first.
2026-10-21 08:41:59 +02:00
maj00r
8903d15b94 fix(editor): a track dragged around no longer piles copies of its geometry up in the graphics memory
The geometry of a track made anew, ten times a second while it's
dragged, only forgot the chunks it had: the bank kept them all, so the
buffer of the section grew by the whole track and its neighbours each
time and was sent to the gpu in full again. Ten rebuilds of a test
scenery took the bank from 2 to 29 MB; a long session would run the
card out of memory. The old chunks are erased from the bank now, but
for those of a moving nose, laid again in place, and a moved traction
wire drops its old one too.

A chunk swapped for one without the extra vertex data kept the flag of
having it and the upload read from an empty array; the buffer is made
again when that changes.
2026-10-21 08:41:50 +02:00
7a07e862d1 Merge pull request #218 from MaSzyna-EU07/feat/bc7-dds-support
Add dds BC7 algorithm
2026-10-20 18:58:23 +02:00
7d0f76aaa9 Make the material shaders physically based 2026-10-20 18:39:31 +02:00
cf36b24e8d Let the smoke leave the exhaust as a widening jet that fades in 2026-10-20 18:00:51 +02:00
abbdca4773 Let the templates of smoke sources set how fast their particles rise or fall 2026-10-20 17:12:23 +02:00
867497b658 Simulate and light the smoke on the GPU and make rain and snow of particles 2026-10-20 16:44:27 +02:00
6a109e984c perf(gl46): skip shapes out of the pass frustum and the motion blur when nothing moves 2026-10-20 15:23:03 +02:00
dfbe8a6d9e feat(gl46): leave out instance buckets beyond their range before the culling 2026-10-20 14:57:30 +02:00
07ac7406a0 feat(terrain): grass follows the seasons and fades out over gfx.grass.fadedistance 2026-10-20 02:20:03 +02:00
ceb439b218 Fix windows build 2026-10-20 01:38:33 +02:00
f3bdadad66 feat(terrain): holes cut in the heightmap terrain and shader grass painted over it 2026-10-20 01:32:01 +02:00
d7ba6926fc Enable rail crossings and sleepers 2026-10-19 22:17:09 +02:00