17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-07 20:16:08 +01:00
Commit Graph

10 Commits

Author SHA1 Message Date
jerrrrycho
00934a17ed fix(physics): automatic couplers don't catch above the safe collision speed (#86)
Two vehicles with automatic couplers coupled the moment they touched, in CouplerForce(), before
CollisionDetect() ran; its derail check only covers uncoupled vehicles, so they never collided nor
derailed, at any speed. With crash damage on, the coupling now waits for a closing speed of at most
15 km/h, the limit of the derail check. A faster hit locks the automatic coupling until the vehicles
part, so the collision runs its course instead of the couplers catching once it has slowed them down.

Two collision bugs on the way:
- CollisionVelocity() took the length of the difference of the heading quaternions times the speeds;
  a quaternion turns by half its angle, so for vehicles facing each other the speeds came out at right
  angles: a head-on hit at 10 + 10 km/h read as 14.1 km/h, under the limit. The closing speed is now
  taken from the touching ends, as CouplerForce() relates the vehicles: the sum of the speeds head-on,
  the difference rear-end, negative when the ends part,
- CollisionDetect() gave ComputeCollision() the other vehicle's speed along that vehicle's own axis,
  which points the other way for vehicles facing each other: a wagon hit head-on counted as running
  into the hitter, and the hitter bounced back as from a wall (20 km/h into a standing wagon: it ran
  off at 6 km/h instead of 17). The speed is turned into this vehicle's frame and back.

Head-on hits now count with both speeds, so with crash damage on they derail sooner than before, at
the 15 km/h the check was meant for.

Tests: test::pair runs two test vehicles on one track the way vehicle_table::update() runs a scene
(neighbours, forces, movement), with coupling, buffing, collisions and derailing coming from the
physics. tests/unit/test_couplers.cpp: catching up to 15 km/h and not above; a slow hit couples, a fast
one doesn't, nor once slowed down, the lock resets once the vehicles part; a hit a little over 15 km/h
bounces apart on the rails, harder ones derail; head-on 7 + 7 couples, 8 + 8 bounces, 15 + 15 derails;
no catching a coupler of another type, couplers of different control systems couple without the
control connection.
2026-10-17 13:49:05 +02:00
551f6dbc3b seasonal model variants for vehicle exterior model 2026-09-28 20:49:18 +02:00
jerrrrycho
8fbb482350 feat(materials): texture randomization for loads
* feat(materials): texture randomization for loads
2026-09-27 00:09:16 +02:00
jerrrrycho
d85096f64d reformat: remove redundant parentheses 2026-06-30 21:19:46 +02:00
jerrrrycho
bf147dd155 refactor: replace null with nullptr 2026-06-29 02:48:25 +02:00
docentYT
623c4f827e Remove not needed casts, variables and switch from double precission to float precission for some angle vectors 2026-04-28 00:51:17 +02:00
docentYT
0fcdf98392 more glm instead of Math3D in vehicle 2026-04-27 21:57:13 +02:00
docentYT
fae68642bc use glm instead of Math3D in vehicle
WARNING: Model rotation is broken
2026-04-27 13:07:38 +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