diff options
Diffstat (limited to 'game/vehicles/railloco.cpp')
-rw-r--r-- | game/vehicles/railloco.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/game/vehicles/railloco.cpp b/game/vehicles/railloco.cpp index a1add29..d61b882 100644 --- a/game/vehicles/railloco.cpp +++ b/game/vehicles/railloco.cpp @@ -39,10 +39,44 @@ RailLoco::tick(TickDuration dur) const auto diff = glm::normalize(b2pos.GetPos() - b1pos.GetPos()); location.GetRot().x = -vector_pitch(diff); location.GetRot().y = vector_yaw(diff); + updateWagons(); } +void +RailLoco::updateWagons() const +{ + // Drag wagons + float trailBy {wheelBase + ((length - wheelBase)) / 2}; + for (const auto & wagon : wagons) { + const auto w {wagon.lock()}; + auto wTrailBy {trailBy + ((w->length - w->wheelBase) / 2)}; + float b1linkDist {}; + const auto b1Link = linkHist.getAt(wTrailBy - linkDist, &b1linkDist); + const auto b1Pos = b1Link.first->positionAt(b1linkDist, b1Link.second); + wTrailBy += w->wheelBase; + float b2linkDist {}; + const auto b2Link = linkHist.getAt(wTrailBy - linkDist, &b2linkDist); + const auto b2Pos = b2Link.first->positionAt(b2linkDist, b2Link.second); + w->location.GetPos() = (b1Pos.GetPos() + b2Pos.GetPos()) / 2.F; + const auto diff = glm::normalize(b2Pos.GetPos() - b1Pos.GetPos()); + w->location.GetRot().x = -vector_pitch(diff); + w->location.GetRot().y = vector_yaw(diff); + trailBy += w->length; + } +} + +void RailWagon::tick(TickDuration) { } + Brush47::Brush47(const LinkPtr & l) : RailLoco(l, "brush47.obj", "brush47.png") { wheelBase = 15.7F; + length = 19.38F; + linkDist = wheelBase; +} + +Brush47Wagon::Brush47Wagon(const LinkPtr & l) : RailWagon(l, "brush47.obj", "brush47.png") +{ + wheelBase = 15.7F; + length = 19.38F; linkDist = wheelBase; } |