]> git.tdb.fi Git - r2c2.git/log
r2c2.git
9 years agoAlso check if the clock is stopped
Mikko Rasa [Sun, 15 Feb 2015 07:20:57 +0000 (09:20 +0200)]
Also check if the clock is stopped

9 years agoDon't eat away departure delay while halted
Mikko Rasa [Fri, 13 Feb 2015 00:50:36 +0000 (02:50 +0200)]
Don't eat away departure delay while halted

9 years agoDon't segfault if an emergency doesn't have a block
Mikko Rasa [Fri, 13 Feb 2015 00:48:03 +0000 (02:48 +0200)]
Don't segfault if an emergency doesn't have a block

9 years agoDeclare emergency if route planning fails
Mikko Rasa [Fri, 13 Feb 2015 00:47:25 +0000 (02:47 +0200)]
Declare emergency if route planning fails

9 years agoAbort route planning if it takes too long
Mikko Rasa [Fri, 13 Feb 2015 00:47:01 +0000 (02:47 +0200)]
Abort route planning if it takes too long

9 years agoBe more permissive when checking route continuity
Mikko Rasa [Thu, 12 Feb 2015 16:11:06 +0000 (18:11 +0200)]
Be more permissive when checking route continuity

In some cases more than one consecutive route may end on the same track,
or a route might only go one track past the previous one, with that track
being a turnout with undetermined path.  Allow skipping routes to deal
with these situations, as long as we don't go completely off route.

9 years agoEnsure that remaining estimate is negative if the waypoint is unreachable
Mikko Rasa [Thu, 12 Feb 2015 14:54:27 +0000 (16:54 +0200)]
Ensure that remaining estimate is negative if the waypoint is unreachable

9 years agoFix critical block logic
Mikko Rasa [Thu, 12 Feb 2015 14:46:45 +0000 (16:46 +0200)]
Fix critical block logic

First noncritical block is not reliable, as it could be outside of the
train's allocated blocks and not guaranteed to set to a consistent path.
Worse, the get_first_noncritical_block function could return a block on
the other side of a turnout which is changing path, and is_block_critical
used completely different logic.

9 years agoDon't allow trains to become blocked in critical blocks
Mikko Rasa [Thu, 12 Feb 2015 09:33:47 +0000 (11:33 +0200)]
Don't allow trains to become blocked in critical blocks

9 years agoAvoid arriving too early if there's an unexpected stop on the last route
Mikko Rasa [Wed, 11 Feb 2015 18:14:30 +0000 (20:14 +0200)]
Avoid arriving too early if there's an unexpected stop on the last route

If the final block of the route is allocated while the train is stopped,
arrival could be triggered prematurely.  I'm not entirely certain if this
can happen in absence of certain quirks of the dummy driver, but better
safe than sorry.

9 years agoBetter sequence syncing on route change
Mikko Rasa [Wed, 11 Feb 2015 16:28:49 +0000 (18:28 +0200)]
Better sequence syncing on route change

Immediately go into the wait state if an uncleared sequence point is
encountered during sync.

9 years agoApply all planned routes at once
Mikko Rasa [Wed, 11 Feb 2015 15:35:56 +0000 (17:35 +0200)]
Apply all planned routes at once

Letting each router to do it separately in the tick function causes
certain problems with synchronization.  In particular, sequence points
are difficult to synchronize unless the route update is atomic.

9 years agoAdd turnout failure simulation to the dummy driver
Mikko Rasa [Wed, 11 Feb 2015 12:54:49 +0000 (14:54 +0200)]
Add turnout failure simulation to the dummy driver

9 years agoEliminate an unnecessary variable
Mikko Rasa [Wed, 11 Feb 2015 12:54:42 +0000 (14:54 +0200)]
Eliminate an unnecessary variable

9 years agoUnify destination and waypoints
Mikko Rasa [Wed, 11 Feb 2015 12:43:15 +0000 (14:43 +0200)]
Unify destination and waypoints

Destination is really just a special case of a waypoint, so there's no
point in keeping it separate.  It just adds duplicated logic, which was
about to get worse with some upcoming new features.

9 years agoDo not allocate blocks while halt is in effect
Mikko Rasa [Wed, 11 Feb 2015 12:06:39 +0000 (14:06 +0200)]
Do not allocate blocks while halt is in effect

A turnout state change signal is emitted even if a failure is detected,
to indicate the end of the operation.  Resuming allocation in such a case
would cause the train to stray to an incorrect path.  It's better to wait
until the user has resolved the situation and removed the halt state.

9 years agoUse a shared white material for techniques
Mikko Rasa [Mon, 9 Feb 2015 17:41:17 +0000 (19:41 +0200)]
Use a shared white material for techniques

9 years agoInstantly set turnout paths when loading state
Mikko Rasa [Mon, 9 Feb 2015 17:33:41 +0000 (19:33 +0200)]
Instantly set turnout paths when loading state

Vehicles are placed immediately and will follow turnout paths.  Having
them in the wrong places confuses the route planner.

9 years agoMove block reservation signal serialization to Layout
Mikko Rasa [Mon, 9 Feb 2015 17:27:38 +0000 (19:27 +0200)]
Move block reservation signal serialization to Layout

It needs to be serialized between different blocks as well, since
TrainRouter at least expects to receive the signals in order.

9 years agoInitialize clock rate field with the current rate
Mikko Rasa [Fri, 6 Feb 2015 22:00:58 +0000 (00:00 +0200)]
Initialize clock rate field with the current rate

9 years agoInterpret turnout delay as float, not unsigned
Mikko Rasa [Fri, 6 Feb 2015 22:00:12 +0000 (00:00 +0200)]
Interpret turnout delay as float, not unsigned

9 years agoCosmetic fixes
Mikko Rasa [Fri, 6 Feb 2015 21:58:10 +0000 (23:58 +0200)]
Cosmetic fixes

9 years agoUse max/min for range capping
Mikko Rasa [Fri, 6 Feb 2015 21:55:14 +0000 (23:55 +0200)]
Use max/min for range capping

9 years agoSync timetable to clock on first tick
Mikko Rasa [Fri, 6 Feb 2015 14:45:54 +0000 (16:45 +0200)]
Sync timetable to clock on first tick

This is not perfect, but it allows some flexibility in restarting the
program.

9 years agoMake sure Block::signal_reserved is emitted consistently
Mikko Rasa [Fri, 6 Feb 2015 14:37:46 +0000 (16:37 +0200)]
Make sure Block::signal_reserved is emitted consistently

Sigc++ apparently takes arguments as references, so if someone reached to
a signal with null train by reserving the block again, any remaining slots
of the release emission would also get the new train pointer.  This caused
the routing system to malfunction in certain cases as the router saw two
emissions for the same block reservation.

The simplest solution would be to pass t instead of train to emit(), but
then the ordering of the two emissions would be inconsistent.  Thus the
additional logic to delay further emissions until the outstanding one is
completed.

9 years agoConsider block deallocation when planning routes
Mikko Rasa [Fri, 6 Feb 2015 14:32:18 +0000 (16:32 +0200)]
Consider block deallocation when planning routes

Blocks are not released until a sensor is detriggered.  Not taking that
into account could cause situations where the planner tries to drive
trains through a balloon loop which is actually too small for them.

9 years agoFurther improve lead route generation
Mikko Rasa [Fri, 6 Feb 2015 14:26:10 +0000 (16:26 +0200)]
Further improve lead route generation

The previous version generated nonsense if the first actual route was
completely covered by existing critical blocks.

9 years agoImmediately process sequence points that are already covered
Mikko Rasa [Fri, 6 Feb 2015 14:23:05 +0000 (16:23 +0200)]
Immediately process sequence points that are already covered

The planner starts from the front buffer of the train, so it may generate
sequence points in the existing critical blocks.

9 years agoDon't diverge from critical blocks
Mikko Rasa [Thu, 5 Feb 2015 18:02:20 +0000 (20:02 +0200)]
Don't diverge from critical blocks

Doing so could confuse the router.

9 years agoImprove metrics_stale flag handling
Mikko Rasa [Thu, 5 Feb 2015 16:03:25 +0000 (18:03 +0200)]
Improve metrics_stale flag handling

9 years agoEliminate a possible race condition in thread termination
Mikko Rasa [Thu, 5 Feb 2015 14:19:01 +0000 (16:19 +0200)]
Eliminate a possible race condition in thread termination

In the unlikely event that the thread doesn't terminate fast enough after
setting the goal pointer, deleting it would send it a kill signal.
Remove this possibility by explicitly jouning the thread.

9 years agoAllow an undetermined turnout at the beginning of a route
Mikko Rasa [Thu, 5 Feb 2015 14:01:13 +0000 (16:01 +0200)]
Allow an undetermined turnout at the beginning of a route

If route plans are regenerated when the train's last vehicle is on the
sensor following a turnout in a points-facing movement, the first track
of the lead route is a turnout with undetermined path.  Route_changed
would then try to figure out which route the next allocation will occur
on and fail at the very beginning because advance_to_track refused to
use the undetermined turnout.

9 years agoRestructure lead route generation
Mikko Rasa [Thu, 5 Feb 2015 13:58:45 +0000 (15:58 +0200)]
Restructure lead route generation

All of the relevant logic is now in one place.

9 years agoDon't access waypoint and metric data if the router has no destination
Mikko Rasa [Thu, 5 Feb 2015 13:53:32 +0000 (15:53 +0200)]
Don't access waypoint and metric data if the router has no destination

9 years agoDon't use bool for a counter variable
Mikko Rasa [Thu, 5 Feb 2015 13:06:57 +0000 (15:06 +0200)]
Don't use bool for a counter variable

9 years agoPenalize steps other than the fastest one
Mikko Rasa [Thu, 5 Feb 2015 08:48:48 +0000 (10:48 +0200)]
Penalize steps other than the fastest one

This encourages the planner to follow a single chain of steps and avoids
exploding the state tree too much.  In the future this may be replaced by
different speed limits on diverging paths of turnouts (reducing the
ambiguity of fastest path) and an actual heuristic for potential wait time
(giving wait states an implicit penalty).

9 years agoStore routing information in TrainRoutePlanner to avoid threading problems
Mikko Rasa [Thu, 5 Feb 2015 08:40:19 +0000 (10:40 +0200)]
Store routing information in TrainRoutePlanner to avoid threading problems

TrainRouter removes checkpoints when the train passes them, which will
cause problems if the planner is still running.

9 years agoResume allocation if a train moves out of its own way
Mikko Rasa [Wed, 4 Feb 2015 12:15:11 +0000 (14:15 +0200)]
Resume allocation if a train moves out of its own way

The normal handling in block_reserved() does not work, since by that time
release_block() has already cleared pending_block.

9 years agoUnoccupy destination during planning when the train has departed again
Mikko Rasa [Tue, 3 Feb 2015 23:25:32 +0000 (01:25 +0200)]
Unoccupy destination during planning when the train has departed again

9 years agoEliminate the one step delay in adding tracks to routes
Mikko Rasa [Tue, 3 Feb 2015 22:37:24 +0000 (00:37 +0200)]
Eliminate the one step delay in adding tracks to routes

It is no longer necessary now that we inspect linked tracks to detect
loops.  Removing it makes the logic easier to understand.

9 years agoMake route planning threaded
Mikko Rasa [Tue, 3 Feb 2015 21:47:17 +0000 (23:47 +0200)]
Make route planning threaded

It can take several seconds in some cases, which would cause an
unacceptable pause in simulation and control.

9 years agoAvoid creating needlessly long lead routes
Mikko Rasa [Tue, 3 Feb 2015 15:58:16 +0000 (17:58 +0200)]
Avoid creating needlessly long lead routes

Mostly a cosmetic fix.

9 years agoSkip routes that are completely covered by the lead route
Mikko Rasa [Tue, 3 Feb 2015 15:29:22 +0000 (17:29 +0200)]
Skip routes that are completely covered by the lead route

Advance_to_track throws a fit if no advancement happens from one route to
the next.

9 years agoUpdate routes for all involved trains when planning completes
Mikko Rasa [Tue, 3 Feb 2015 15:21:33 +0000 (17:21 +0200)]
Update routes for all involved trains when planning completes

Sequencing is likely to have changed even if routes haven't.

9 years agoAvoid going past the end of route when a new one is set
Mikko Rasa [Tue, 3 Feb 2015 14:23:01 +0000 (16:23 +0200)]
Avoid going past the end of route when a new one is set

Calling stop_at(0) causes the block allocator to immediately resume
allocating blocks.  In certain circumstances this would cause an
allocation past the end of the route.

9 years agoMake sure the shadow volume does not have zero size
Mikko Rasa [Mon, 2 Feb 2015 17:51:42 +0000 (19:51 +0200)]
Make sure the shadow volume does not have zero size

9 years agoImprove accessory switching logic
Mikko Rasa [Mon, 2 Feb 2015 17:40:43 +0000 (19:40 +0200)]
Improve accessory switching logic

The off command can be sent as soon as the current monitor indicates that
the solenoid is no longer drawing power.  This allows giving multi-bit
accessories more time to accommodate quirks of the 74465 decoder.

9 years agoAdd debug output for accessory switching in ArduControl
Mikko Rasa [Mon, 2 Feb 2015 17:37:16 +0000 (19:37 +0200)]
Add debug output for accessory switching in ArduControl

9 years agoAvoid invalid states when setting multi-bit accessories
Mikko Rasa [Mon, 2 Feb 2015 17:21:53 +0000 (19:21 +0200)]
Avoid invalid states when setting multi-bit accessories

9 years agoAdd a dialog to control the clock
Mikko Rasa [Fri, 30 Jan 2015 09:03:34 +0000 (11:03 +0200)]
Add a dialog to control the clock

9 years agoEnsure that Timetable has necessary helper AIs
Mikko Rasa [Thu, 29 Jan 2015 16:50:52 +0000 (18:50 +0200)]
Ensure that Timetable has necessary helper AIs

Since AIControl and TrainRouter don't emit statements to the state file,
they are not created automatically when loading the state.  If they are
missing, the timetable won't be able to operate.

9 years agoAdapt to changes in vector slicing and composing API
Mikko Rasa [Wed, 28 Jan 2015 18:47:28 +0000 (20:47 +0200)]
Adapt to changes in vector slicing and composing API

10 years agoSet lighting for the sky pass too
Mikko Rasa [Sun, 13 Jul 2014 13:56:11 +0000 (16:56 +0300)]
Set lighting for the sky pass too

Otherwise whatever parameters were there before will get used, resulting
in incorrect rendering with multiple views.

10 years agoImprove lighting color computations
Mikko Rasa [Sun, 13 Jul 2014 13:48:14 +0000 (16:48 +0300)]
Improve lighting color computations

This produces a bit too bluish skylight and a bit too reddish sunlight,
but it's a step in the right direction.

10 years agoImprove graphics quality with some shaders and effects
Mikko Rasa [Thu, 8 May 2014 21:39:11 +0000 (00:39 +0300)]
Improve graphics quality with some shaders and effects

Lighting is now carried out in linear colorspace and sRGB conversion
applied in postprocessing.  All these effects will probably make the
program really slow on lower-end machines, but I'll fix that later.

10 years agoGet rid of some obsolete #includes
Mikko Rasa [Thu, 8 May 2014 15:27:10 +0000 (18:27 +0300)]
Get rid of some obsolete #includes

10 years agoAvoid segfault if an exception is thrown while loading
Mikko Rasa [Wed, 7 May 2014 20:26:13 +0000 (23:26 +0300)]
Avoid segfault if an exception is thrown while loading

The Layout::add functions are called from object constructors.  If an
exception is thrown inside them, the constructor will abort and the
object will be deleted.  If that happens, it must be removed from the
Layout as well, or an invalid memory access will occur later.

10 years agoReorganize data files into a directory structure
Mikko Rasa [Wed, 7 May 2014 20:14:49 +0000 (23:14 +0300)]
Reorganize data files into a directory structure

All object types have been split out of the *.dat files into individual
files.  As a side effect, their names have acquired a type-specific
suffix.

10 years agoBe more consistent with the use of name and description
Mikko Rasa [Sun, 4 May 2014 21:08:46 +0000 (00:08 +0300)]
Be more consistent with the use of name and description

10 years agoRemove some unnecessary things
Mikko Rasa [Sun, 4 May 2014 20:23:59 +0000 (23:23 +0300)]
Remove some unnecessary things

10 years agoRework article numbers
Mikko Rasa [Sun, 4 May 2014 19:10:34 +0000 (22:10 +0300)]
Rework article numbers

10 years agoAvoid crash in SlopeTool if nothing is selected
Mikko Rasa [Sun, 4 May 2014 17:36:44 +0000 (20:36 +0300)]
Avoid crash in SlopeTool if nothing is selected

10 years agoSupport multiple TrackAppearances in Catalogue
Mikko Rasa [Sun, 4 May 2014 09:11:37 +0000 (12:11 +0300)]
Support multiple TrackAppearances in Catalogue

10 years agoConvert Catalogue to a Collection
Mikko Rasa [Sun, 4 May 2014 07:47:49 +0000 (10:47 +0300)]
Convert Catalogue to a Collection

Since this involves changing the key from ArticleNumber to std::string,
existing layout and state files need to be adjusted by hand.

10 years agoThings with different gauges don't go together
Mikko Rasa [Sat, 3 May 2014 11:04:14 +0000 (14:04 +0300)]
Things with different gauges don't go together

10 years agoAdd a shortcut for getting the gauge of a TrackType
Mikko Rasa [Sat, 3 May 2014 11:03:33 +0000 (14:03 +0300)]
Add a shortcut for getting the gauge of a TrackType

10 years agoAlso store gauge in VehicleType
Mikko Rasa [Sat, 3 May 2014 10:59:57 +0000 (13:59 +0300)]
Also store gauge in VehicleType

10 years agoSet depth clip in View3D::view_all
Mikko Rasa [Sat, 3 May 2014 09:18:18 +0000 (12:18 +0300)]
Set depth clip in View3D::view_all

10 years agoFix a bug with attaching ends in ExtendTool
Mikko Rasa [Sat, 3 May 2014 09:17:07 +0000 (12:17 +0300)]
Fix a bug with attaching ends in ExtendTool

This managed to avoid a segfault despite the null pointer dereference,
because the first thing Track::link_to does is check if the passed-in
reference is a track, and a null pointer isn't.

10 years agoMove gauge to TrackAppearance
Mikko Rasa [Sat, 3 May 2014 09:15:22 +0000 (12:15 +0300)]
Move gauge to TrackAppearance

It may eventually be desirable to have multiple gauges in the same layout
(narrow-gauge trams together with a standard-gauge railway, for example),
and this is a necessary step towards that.

10 years agoOverhaul SvgExporter to use SVG defs for tracks
Mikko Rasa [Fri, 2 May 2014 20:53:16 +0000 (23:53 +0300)]
Overhaul SvgExporter to use SVG defs for tracks

This produces much more compact SVG files than outputting the paths for
each track separately.

10 years agoUse GL::Resources and DirectorySource in Catalogue3D
Mikko Rasa [Tue, 29 Apr 2014 05:32:22 +0000 (08:32 +0300)]
Use GL::Resources and DirectorySource in Catalogue3D

10 years agoImprove comments
Mikko Rasa [Wed, 16 Apr 2014 19:02:01 +0000 (22:02 +0300)]
Improve comments

10 years agoAlways handle sequence checks in tick()
Mikko Rasa [Wed, 16 Apr 2014 19:00:54 +0000 (22:00 +0300)]
Always handle sequence checks in tick()

10 years agoBegin arrival immediately if the entire route has already been reserved
Mikko Rasa [Wed, 16 Apr 2014 18:55:39 +0000 (21:55 +0300)]
Begin arrival immediately if the entire route has already been reserved

10 years agoKeep routes until the train has completely left them
Mikko Rasa [Tue, 15 Apr 2014 19:58:07 +0000 (22:58 +0300)]
Keep routes until the train has completely left them

10 years agoTinker with arrival logic
Mikko Rasa [Tue, 15 Apr 2014 19:20:10 +0000 (22:20 +0300)]
Tinker with arrival logic

10 years agoAdd a signal for advancing the rear end of the train
Mikko Rasa [Tue, 15 Apr 2014 15:41:36 +0000 (18:41 +0300)]
Add a signal for advancing the rear end of the train

10 years agoMove members after type declarations
Mikko Rasa [Tue, 15 Apr 2014 15:37:03 +0000 (18:37 +0300)]
Move members after type declarations

10 years agoRemove a function that was never used
Mikko Rasa [Tue, 15 Apr 2014 15:36:36 +0000 (18:36 +0300)]
Remove a function that was never used

10 years agoKeep better track of routes
Mikko Rasa [Tue, 15 Apr 2014 15:25:34 +0000 (18:25 +0300)]
Keep better track of routes

Finding the correct route for each allocated block from scratch is prone
to errors if the combined route contains loops.

10 years agoSimplify sequence handling
Mikko Rasa [Mon, 14 Apr 2014 06:00:30 +0000 (09:00 +0300)]
Simplify sequence handling

Instead of checking all sequence points when another train reserves a
block, only check the first one.  The subsequent ones can be checked
when they become relevant.

10 years agoRedesign the interface between TrainRouter and TrainRoutePlanner
Mikko Rasa [Mon, 14 Apr 2014 05:01:36 +0000 (08:01 +0300)]
Redesign the interface between TrainRouter and TrainRoutePlanner

This will make it easier to move planning to a separate thread in the
future.

10 years agoRefactor TrainRoutePlanner so that the same object may be used again
Mikko Rasa [Sun, 13 Apr 2014 17:02:42 +0000 (20:02 +0300)]
Refactor TrainRoutePlanner so that the same object may be used again

This is unlikely to be needed, but it makes the design more robust.

10 years agoAvoid creating looping routes
Mikko Rasa [Sat, 12 Apr 2014 19:45:27 +0000 (22:45 +0300)]
Avoid creating looping routes

If th route went past its end, adding the turnout would cause a loop to
be created.  Trying to add the next track would then throw bad_chain.

10 years agoReplace waits with a more robust sequencing system
Mikko Rasa [Sat, 12 Apr 2014 19:32:03 +0000 (22:32 +0300)]
Replace waits with a more robust sequencing system

10 years agoUse set_route for the first route
Mikko Rasa [Sat, 12 Apr 2014 19:29:23 +0000 (22:29 +0300)]
Use set_route for the first route

10 years agoDon't pick a route that doesn't know how to set the turnout
Mikko Rasa [Fri, 11 Apr 2014 19:59:16 +0000 (22:59 +0300)]
Don't pick a route that doesn't know how to set the turnout

10 years agoDiverge from a route early only if it's a loop
Mikko Rasa [Fri, 11 Apr 2014 19:31:18 +0000 (22:31 +0300)]
Diverge from a route early only if it's a loop

This does not entirely fix handling of chained routes, but it's a step in
the right direction.

10 years agoUse a better cost estimator for the route planner
Mikko Rasa [Fri, 11 Apr 2014 19:12:39 +0000 (22:12 +0300)]
Use a better cost estimator for the route planner

Total time is not good because it doesn't penalize waiting time for
earlier trains.  This can cause the state tree to explode as later ones
start moving.

The sum of travel and wait times for each train works much better.

10 years agoFix lead route generation
Mikko Rasa [Fri, 11 Apr 2014 18:18:09 +0000 (21:18 +0300)]
Fix lead route generation

Lead routes are now created up to the target, but not past it.  This fixes
a problem where a route diverging from the train's reserved blocks caused
the router to attempt to create a lead route with gaps.

10 years agoAdd a function to check if a track chain forms a loop
Mikko Rasa [Fri, 11 Apr 2014 17:28:56 +0000 (20:28 +0300)]
Add a function to check if a track chain forms a loop

10 years agoPopulate the target variable when a timetable row is selected
Mikko Rasa [Fri, 11 Apr 2014 17:24:51 +0000 (20:24 +0300)]
Populate the target variable when a timetable row is selected

Failing to do so will clear the target from the row when applying changes.

10 years agoUse signal_advanced for train speed measurement and vehicle placement
Mikko Rasa [Fri, 11 Apr 2014 17:24:30 +0000 (20:24 +0300)]
Use signal_advanced for train speed measurement and vehicle placement

It's stupid to try to reproduce the logic of checking whether this is the
correct sensor when BlockAllocator has that information already.

10 years agoPut signal_advanced in BlockAllocator
Mikko Rasa [Fri, 11 Apr 2014 05:27:54 +0000 (08:27 +0300)]
Put signal_advanced in BlockAllocator

It's bad practice to emit other objects' signals.

10 years agoUse the endpoint closest to the pointer when placing trains
Mikko Rasa [Thu, 10 Apr 2014 23:06:18 +0000 (02:06 +0300)]
Use the endpoint closest to the pointer when placing trains

10 years agoFurther fix delay handling
Mikko Rasa [Thu, 10 Apr 2014 22:54:47 +0000 (01:54 +0300)]
Further fix delay handling

10 years agoTrack trains' remaining estimate by distance, not time
Mikko Rasa [Thu, 10 Apr 2014 22:50:43 +0000 (01:50 +0300)]
Track trains' remaining estimate by distance, not time

This makes it easier to keep correct since delay is not included.

10 years agoDon't return indeterminate paths from Route::get_path
Mikko Rasa [Thu, 10 Apr 2014 19:49:52 +0000 (22:49 +0300)]
Don't return indeterminate paths from Route::get_path

Return the active path of the track instead.

10 years agoUse path coercion in track iterators
Mikko Rasa [Thu, 10 Apr 2014 19:04:03 +0000 (22:04 +0300)]
Use path coercion in track iterators

This enforces common traversal rules in all places.  It also fixes a bug
in TrackOffsetIter where moving to a turnout from an endpoint not on the
selected path would potentially cause an out-of-range iterator to be
created.