maj00r
|
513daa52cc
|
merge feat/rail-crossings: the split rail code, mitred wide crossings, guard rail treads, check rail spacers and frogs for every rail profile, with the geometric switch blades moved into RailCrossings, their shape in track_rails::switch_blade and the lowering of the head in loft_span
|
2026-10-17 23:32:43 +02:00 |
|
maj00r
|
20c4b6542e
|
feat(track): the blades of a switch whose frog is cut from the rails are made from its geometry: the tip is where the gauge lines of both paths are 3 mm apart, the head reaches its full width where they are a head plus 0.5 mm apart, and the heel is the shortest blade whose open flangeway stays at least 58 mm with a throw of 160 mm bent like a cantilever from the heel, or straight when that does not fit as in slips; the blade is the whole rail profile lofted from the tip to the heel, cut along the head of the stock rail, with the head lowered by the drop of the blade half of the profile file towards the tip and back to the top at a 50 mm head, and thrown with knots every 0.5 m so the vertex count does not change between the positions; the stock rails get stations every 0.5 m along the blades so their curve follows the blade, the fixed rail behind the heel starts at the heel, the old blades take their segment count per path, and the self-test command blade logs the tip, heel, drop, flangeway and the gauge lines against x^2/2R and faults on a short flangeway, a heel past the throat or a change of the vertex count
|
2026-10-17 23:30:36 +02:00 |
|
maj00r
|
569194ceae
|
refactor(track): the rails are planned by the class TTrack::rail_planner instead of one function: each crossing is added by its kind (grooved, wide, acute, obtuse), the acute frog of a crossing and of a switch is one acute_frog and the vee of grooved rails one add_vee, the switch frog is described as a rail_crossing, the corners of crossings at a middle angle are kept as rail_crossing instead of a copy of its fields and framed by frame_guard, wide() takes the crossing and a wide_cut value instead of ten arguments, and the knots are sorted by knots::sort
|
2026-10-17 23:29:08 +02:00 |
|
maj00r
|
22e378b910
|
refactor(track): a rail is laid by the class TTrack::rail_layer instead of one function of lambdas sharing a current material and the bends and fits of the ends; a piece of rail is a rail_piece value with its material, the ends of a run are passed as piece_ends, the bands across the top of the head of a running and of a shared tread are laid from one table each by lay_top, the guard and check rails take their flared offsets from one helper, and the grooved profile is split by split_grooved and cut by top_cuts
|
2026-10-17 23:29:08 +02:00 |
|
maj00r
|
a88774d279
|
refactor(track): the rail layout value types (crossings, sizes, check and guard rails, cuts, bands, fills, treads, layout) and the wheel and rail constants live in world/RailLayout.h in track_rails instead of inside TTrack
|
2026-10-17 23:28:42 +02:00 |
|
maj00r
|
2804978464
|
feat(track): at a crossing at a wide angle the rails and guard rails ending against the side of another rail or guard rail are glued to it, their ends fitted to its profile height by height instead of square ends with caps and a gap of 5 mm, so the corners of the crossing are closed; the ends at the flangeways stay open for the flanges; a loft span can shift its first and last cross-section along the track by a fit given per height of the profile, and the rail profile gives the outlines of its field and gauge sides
|
2026-10-17 23:28:42 +02:00 |
|
maj00r
|
7786076bda
|
feat(track): at a crossing at a wide angle each guard rail is glued to its running rail by a filler block between their webs along its whole length, so the flangeways and the gaps cut for the wheels of the other track have a floor instead of showing the ballast; the filler of the track not going through lies a millimetre lower where both overlap
|
2026-10-17 23:28:41 +02:00 |
|
maj00r
|
618a3004dd
|
feat(track): at an obtuse crossing the flangeway between the point rail and the knuckle rail is closed below by a filler block at the height of the webs, from the meeting point to where the point reaches its full profile, so the ballast no longer shows through the gap; the rail profile gives the middle of its web and the height where its head starts above it
|
2026-10-17 23:28:41 +02:00 |
|
maj00r
|
a30918a95e
|
fix(track): at an obtuse crossing the rail ending at the meeting point and the rail going on from it are joined by a mitre on the bisector of the bend, like one bent knuckle rail, instead of two square ends overlapping in a wedge, and the check rails of the two tracks meet there the same way instead of overlapping each other by 3 cm; a loft span can turn its first and last cross-section about the gauge line for such joints
|
2026-10-17 23:28:41 +02:00 |
|
maj00r
|
93d512c0f2
|
fix(track): obtuse crossings share the running surface too: the top of a rail crossed by the treads of the wheels of the other track takes the brighter texture between the gauge line of the other rail and the edge of its treads, so the boundary runs aslant on both sides
|
2026-10-17 23:28:41 +02:00 |
|
maj00r
|
2c8e8d00c4
|
fix(track): the shared running surface ends along the edge of the treads of the wheels of the other track, not across the rail: on a nose leg the edge runs aslant over the head, on a stock rail it follows the curve of the other path; only the top of the head takes the other texture, the rest of the rail keeps its own
|
2026-10-17 23:28:41 +02:00 |
|
maj00r
|
59446f9a98
|
fix(track): flat rail frogs have no plates in the V; the shared running surface of a nose leg goes from its tip to where the wheels of the other track stop reaching its head, on the leg only and not on the wing beside it; the stock rail of a switch is shared up to a quarter of the blade length, where the blade head is half its width and takes the wheel
|
2026-10-17 23:28:41 +02:00 |
|
maj00r
|
9448bd8c70
|
feat(track): where two rails share a running surface it takes the texture whose running surface is brighter; the brightness is read from the texture file over the u range of the rail head top, the shared parts are the block of crossing grooved rails, the nose of an acute frog from its tip to the end of the V, the through rail across a wide or grooved crossing, the frog of a switch, and the stock rails of a switch with frogs up to half the blade length where the blade grows to a full head
|
2026-10-17 23:28:41 +02:00 |
|
maj00r
|
2f8aeb24c0
|
fix(track): a crossing of grooved rails is one flat block where their lofts overlap; the rail cut by the other covers the roundings of the rail going through, the tops in the block are flat in one texture, the plates of the V reach up to the rail top, the walls of the cuts are lit and textured as walls, and the nose between two flangeways starts blunt at the width of a nose tip instead of a thin sliver standing in the groove
|
2026-10-17 23:28:41 +02:00 |
|
maj00r
|
9343ebcb13
|
feat(track): frogs and crossings for every rail profile; grooved rails share the floor of their grooves where they cross and need no check rails, the V beside the rail going through is one block where the lofts of the rails overlap; the nose of an acute frog of flat rails is filled between its legs as far as their lofts overlap, like a cast insert
|
2026-10-17 23:28:41 +02:00 |
|
maj00r
|
405081e81c
|
refactor(track): the rails of the two paths of a switch are laid by one loop for left and right switches alike, the side of the blade of a path and the blade itself come from one place, used when a switch is made, thrown and its frog found
|
2026-10-17 23:28:41 +02:00 |
|
maj00r
|
2159d682f2
|
feat(track): rails are cut where they cross other rails: a switch with the key frogs draws its frog, wing rails and check rails from its rails, tracks crossing other tracks get acute frogs with wing rails and check rails, obtuse points, guard rails along the quadrilateral of a crossing between 20 and 45 degrees and broken rails with guard rails at wider angles, the track going through chosen by name; sizes come from the rail profile, only for the profiles default, s60, uic60 and s39, others are laid whole; rail ends left open are closed with their cross-section; switches of older sceneries, with check rails in their includes and no key, are drawn as before
|
2026-10-17 23:28:41 +02:00 |
|
|
|
27a94509c4
|
feat(roads): right of way and lane turns at junctions, road weights, kerbs, medians and forking roads, banks to the ground, roundabouts, pedestrian crossings, spawn sets by count; fix(editor): model skin export, placement on the ground under the orthophoto
|
2026-10-04 01:55:35 +02:00 |
|
|
|
daeed40f15
|
feat(roads): junctions, height above the ground and rounded profile following the terrain
|
2026-10-03 20:28:37 +02:00 |
|
|
|
2f417fddcc
|
feat(roads): road node with generated lanes, surface and markings
|
2026-10-03 17:35:08 +02:00 |
|
maj00r
|
7ede96df5f
|
chore(editor): cleanup comments
|
2026-10-03 02:41:34 +02:00 |
|
maj00r
|
8f2a34b3cf
|
feat(editor): route design with curves and transitions
|
2026-10-03 02:41:34 +02:00 |
|
maj00r
|
e46fe6d06c
|
refactor(track): reusable segment init, geometry rebuild, cell removal
|
2026-10-03 02:41:30 +02:00 |
|
jerrrrycho
|
d85096f64d
|
reformat: remove redundant parentheses
|
2026-06-30 21:19:46 +02:00 |
|
|
|
1be56de0fa
|
Add sleepermodel optional parameter for tracks
|
2026-05-19 22:10:47 +02:00 |
|
docentYT
|
6be1b0886d
|
Remove sad workaround
|
2026-04-28 01:23:53 +02:00 |
|
docentYT
|
ed28eff066
|
use glm instead of Math3D in world
|
2026-04-27 00:36:03 +02:00 |
|
copilot-swe-agent[bot]
|
7e49aa8740
|
Rewrite #includes to use explicit subdirectory paths
Co-authored-by: Hirek193 <23196899+Hirek193@users.noreply.github.com>
|
2026-03-14 19:16:48 +00:00 |
|
copilot-swe-agent[bot]
|
0531086bb9
|
Reorganize source files into logical subdirectories
Co-authored-by: Hirek193 <23196899+Hirek193@users.noreply.github.com>
|
2026-03-14 19:01:57 +00:00 |
|