This commit is contained in:
dabreegster 2021-09-27 21:41:52 +00:00
parent d58c7fdc46
commit e2c594734e
37 changed files with 1865 additions and 1800 deletions

File diff suppressed because one or more lines are too long

View File

@ -47,11 +47,11 @@ the event and immediately apply the transition. <a href="#method.panel_changed">
call this to handle all other events. <a href="#method.other_event">Read more</a></p>
</div></details><div id="method.draw_baselayer-65" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/debug/uber_turns.rs.html#236-238" title="goto source code">[src]</a></div><a href="#method.draw_baselayer-65" class="anchor"></a><h4 class="code-header">fn <a href="#method.draw_baselayer" class="fnname">draw_baselayer</a>(&amp;self) -&gt; DrawBaselayer</h4></div><div id="method.draw-66" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/debug/uber_turns.rs.html#240-247" title="goto source code">[src]</a></div><a href="#method.draw-66" class="anchor"></a><h4 class="code-header">fn <a href="#method.draw" class="fnname">draw</a>(&amp;self, g: &amp;mut GfxCtx&lt;'_&gt;, app: &amp;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>)</h4></div><details class="rustdoc-toggle method-toggle" open><summary><div id="method.on_click_custom-1" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.on_click_custom-1" class="anchor"></a><h4 class="code-header">fn <a href="#method.on_click_custom" class="fnname">on_click_custom</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;_ctx: &amp;mut EventCtx&lt;'_&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_app: <a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.reference.html">&amp;mut </a>A, <br>&nbsp;&nbsp;&nbsp;&nbsp;_action: <a class="struct" href="https://doc.rust-lang.org/1.55.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="../../abstutil/clone/trait.CloneableAny.html" title="trait abstutil::clone::CloneableAny">CloneableAny</a> + 'static, <a class="struct" href="https://doc.rust-lang.org/1.55.0/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_panel: &amp;Panel<br>) -&gt; Transition&lt;A&gt;</h4></div></summary><div class='docblock'><p>Called when something on the panel has been clicked.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.on_mouseover-1" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.on_mouseover-1" class="anchor"></a><h4 class="code-header">fn <a href="#method.on_mouseover" class="fnname">on_mouseover</a>(&amp;mut self, &amp;mut EventCtx&lt;'_&gt;, <a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.reference.html">&amp;mut </a>A)</h4></div></summary><div class='docblock'><p>Called when the mouse has moved.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-SimpleState%3CApp%3E-10" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route.rs.html#794-857" title="goto source code">[src]</a></div><a href="#impl-SimpleState%3CApp%3E-10" class="anchor"></a><h3 class="code-header in-band">impl SimpleState&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt; for <a class="struct" href="../ungap/route/struct.RenameRoute.html" title="struct game::ungap::route::RenameRoute">RenameRoute</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.on_click-10" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route.rs.html#795-819" title="goto source code">[src]</a></div><a href="#method.on_click-10" class="anchor"></a><h4 class="code-header">fn <a class="fnname">on_click</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;mut EventCtx&lt;'_&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;mut <a class="struct" href="struct.App.html" title="struct game::app::App">App</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;x: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.str.html">str</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;panel: &amp;Panel<br>) -&gt; Transition&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt;</h4></div></summary><div class='docblock'><p>Called when something on the panel has been clicked. Since the action is just a string,
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-SimpleState%3CApp%3E-10" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route/files.rs.html#236-299" title="goto source code">[src]</a></div><a href="#impl-SimpleState%3CApp%3E-10" class="anchor"></a><h3 class="code-header in-band">impl SimpleState&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt; for <a class="struct" href="../ungap/route/files/struct.RenameRoute.html" title="struct game::ungap::route::files::RenameRoute">RenameRoute</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.on_click-10" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route/files.rs.html#237-261" title="goto source code">[src]</a></div><a href="#method.on_click-10" class="anchor"></a><h4 class="code-header">fn <a class="fnname">on_click</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;mut EventCtx&lt;'_&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;mut <a class="struct" href="struct.App.html" title="struct game::app::App">App</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;x: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.str.html">str</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;panel: &amp;Panel<br>) -&gt; Transition&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt;</h4></div></summary><div class='docblock'><p>Called when something on the panel has been clicked. Since the action is just a string,
the fallback case can just use <code>unreachable!()</code>. <a href="#tymethod.on_click">Read more</a></p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.panel_changed-11" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route.rs.html#821-852" title="goto source code">[src]</a></div><a href="#method.panel_changed-11" class="anchor"></a><h4 class="code-header">fn <a href="#method.panel_changed" class="fnname">panel_changed</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;ctx: &amp;mut EventCtx&lt;'_&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;mut <a class="struct" href="struct.App.html" title="struct game::app::App">App</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;panel: &amp;mut Panel<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.55.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Transition&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt;&gt;</h4></div></summary><div class='docblock'><p>Called when something on the panel has changed. If a transition is returned, stop handling
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.panel_changed-11" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route/files.rs.html#263-294" title="goto source code">[src]</a></div><a href="#method.panel_changed-11" class="anchor"></a><h4 class="code-header">fn <a href="#method.panel_changed" class="fnname">panel_changed</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;ctx: &amp;mut EventCtx&lt;'_&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_: &amp;mut <a class="struct" href="struct.App.html" title="struct game::app::App">App</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;panel: &amp;mut Panel<br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.55.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Transition&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt;&gt;</h4></div></summary><div class='docblock'><p>Called when something on the panel has changed. If a transition is returned, stop handling
the event and immediately apply the transition. <a href="#method.panel_changed">Read more</a></p>
</div></details><div id="method.draw-75" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route.rs.html#854-856" title="goto source code">[src]</a></div><a href="#method.draw-75" class="anchor"></a><h4 class="code-header">fn <a href="#method.draw" class="fnname">draw</a>(&amp;self, g: &amp;mut GfxCtx&lt;'_&gt;, app: &amp;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>)</h4></div><details class="rustdoc-toggle method-toggle" open><summary><div id="method.on_click_custom-10" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.on_click_custom-10" class="anchor"></a><h4 class="code-header">fn <a href="#method.on_click_custom" class="fnname">on_click_custom</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;_ctx: &amp;mut EventCtx&lt;'_&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_app: <a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.reference.html">&amp;mut </a>A, <br>&nbsp;&nbsp;&nbsp;&nbsp;_action: <a class="struct" href="https://doc.rust-lang.org/1.55.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="../../abstutil/clone/trait.CloneableAny.html" title="trait abstutil::clone::CloneableAny">CloneableAny</a> + 'static, <a class="struct" href="https://doc.rust-lang.org/1.55.0/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_panel: &amp;Panel<br>) -&gt; Transition&lt;A&gt;</h4></div></summary><div class='docblock'><p>Called when something on the panel has been clicked.</p>
</div></details><div id="method.draw-75" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route/files.rs.html#296-298" title="goto source code">[src]</a></div><a href="#method.draw-75" class="anchor"></a><h4 class="code-header">fn <a href="#method.draw" class="fnname">draw</a>(&amp;self, g: &amp;mut GfxCtx&lt;'_&gt;, app: &amp;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>)</h4></div><details class="rustdoc-toggle method-toggle" open><summary><div id="method.on_click_custom-10" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.on_click_custom-10" class="anchor"></a><h4 class="code-header">fn <a href="#method.on_click_custom" class="fnname">on_click_custom</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;_ctx: &amp;mut EventCtx&lt;'_&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_app: <a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.reference.html">&amp;mut </a>A, <br>&nbsp;&nbsp;&nbsp;&nbsp;_action: <a class="struct" href="https://doc.rust-lang.org/1.55.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="../../abstutil/clone/trait.CloneableAny.html" title="trait abstutil::clone::CloneableAny">CloneableAny</a> + 'static, <a class="struct" href="https://doc.rust-lang.org/1.55.0/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;_panel: &amp;Panel<br>) -&gt; Transition&lt;A&gt;</h4></div></summary><div class='docblock'><p>Called when something on the panel has been clicked.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.on_mouseover-10" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.on_mouseover-10" class="anchor"></a><h4 class="code-header">fn <a href="#method.on_mouseover" class="fnname">on_mouseover</a>(&amp;mut self, &amp;mut EventCtx&lt;'_&gt;, <a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.reference.html">&amp;mut </a>A)</h4></div></summary><div class='docblock'><p>Called when the mouse has moved.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.other_event-10" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.other_event-10" class="anchor"></a><h4 class="code-header">fn <a href="#method.other_event" class="fnname">other_event</a>(&amp;mut self, &amp;mut EventCtx&lt;'_&gt;, <a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.reference.html">&amp;mut </a>A) -&gt; Transition&lt;A&gt;</h4></div></summary><div class='docblock'><p>If a panel <code>on_click</code> event didnt occur and <code>panel_changed</code> didnt return transition, then
call this to handle all other events. <a href="#method.other_event">Read more</a></p>
@ -367,8 +367,8 @@ call this to handle all other events. <a href="#method.other_event">Read more</a
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.draw-63" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/quick_sketch.rs.html#118-122" title="goto source code">[src]</a></div><a href="#method.draw-63" class="anchor"></a><h4 class="code-header">fn <a class="fnname">draw</a>(&amp;self, g: &amp;mut GfxCtx&lt;'_&gt;, app: &amp;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>)</h4></div></summary><div class='docblock'><p>Draw</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.draw_baselayer-62" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.draw_baselayer-62" class="anchor"></a><h4 class="code-header">fn <a href="#method.draw_baselayer" class="fnname">draw_baselayer</a>(&amp;self) -&gt; DrawBaselayer</h4></div></summary><div class='docblock'><p>Specifies what to draw before draw()</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.on_destroy-62" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.on_destroy-62" class="anchor"></a><h4 class="code-header">fn <a href="#method.on_destroy" class="fnname">on_destroy</a>(&amp;mut self, &amp;mut EventCtx&lt;'_&gt;, <a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.reference.html">&amp;mut </a>A)</h4></div></summary><div class='docblock'><p>Before this state is popped or replaced, call this.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-State%3CApp%3E-63" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route.rs.html#106-174" title="goto source code">[src]</a></div><a href="#impl-State%3CApp%3E-63" class="anchor"></a><h3 class="code-header in-band">impl State&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt; for <a class="struct" href="../ungap/route/struct.RoutePlanner.html" title="struct game::ungap::route::RoutePlanner">RoutePlanner</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.event-63" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route.rs.html#107-165" title="goto source code">[src]</a></div><a href="#method.event-63" class="anchor"></a><h4 class="code-header">fn <a class="fnname">event</a>(&amp;mut self, ctx: &amp;mut EventCtx&lt;'_&gt;, app: &amp;mut <a class="struct" href="struct.App.html" title="struct game::app::App">App</a>) -&gt; Transition&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt;</h4></div></summary><div class='docblock'><p>Respond to a UI event, such as input or time passing.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.draw-64" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route.rs.html#167-173" title="goto source code">[src]</a></div><a href="#method.draw-64" class="anchor"></a><h4 class="code-header">fn <a class="fnname">draw</a>(&amp;self, g: &amp;mut GfxCtx&lt;'_&gt;, app: &amp;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>)</h4></div></summary><div class='docblock'><p>Draw</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-State%3CApp%3E-63" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route/mod.rs.html#98-166" title="goto source code">[src]</a></div><a href="#impl-State%3CApp%3E-63" class="anchor"></a><h3 class="code-header in-band">impl State&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt; for <a class="struct" href="../ungap/route/struct.RoutePlanner.html" title="struct game::ungap::route::RoutePlanner">RoutePlanner</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.event-63" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route/mod.rs.html#99-157" title="goto source code">[src]</a></div><a href="#method.event-63" class="anchor"></a><h4 class="code-header">fn <a class="fnname">event</a>(&amp;mut self, ctx: &amp;mut EventCtx&lt;'_&gt;, app: &amp;mut <a class="struct" href="struct.App.html" title="struct game::app::App">App</a>) -&gt; Transition&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt;</h4></div></summary><div class='docblock'><p>Respond to a UI event, such as input or time passing.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.draw-64" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route/mod.rs.html#159-165" title="goto source code">[src]</a></div><a href="#method.draw-64" class="anchor"></a><h4 class="code-header">fn <a class="fnname">draw</a>(&amp;self, g: &amp;mut GfxCtx&lt;'_&gt;, app: &amp;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>)</h4></div></summary><div class='docblock'><p>Draw</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.draw_baselayer-63" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.draw_baselayer-63" class="anchor"></a><h4 class="code-header">fn <a href="#method.draw_baselayer" class="fnname">draw_baselayer</a>(&amp;self) -&gt; DrawBaselayer</h4></div></summary><div class='docblock'><p>Specifies what to draw before draw()</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.on_destroy-63" class="method trait-impl has-srclink"><div class="rightside"></div><a href="#method.on_destroy-63" class="anchor"></a><h4 class="code-header">fn <a href="#method.on_destroy" class="fnname">on_destroy</a>(&amp;mut self, &amp;mut EventCtx&lt;'_&gt;, <a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.reference.html">&amp;mut </a>A)</h4></div></summary><div class='docblock'><p>Before this state is popped or replaced, call this.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-State%3CApp%3E-7" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/debug/path_counter.rs.html#82-124" title="goto source code">[src]</a></div><a href="#impl-State%3CApp%3E-7" class="anchor"></a><h3 class="code-header in-band">impl State&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt; for <a class="struct" href="../debug/path_counter/struct.PathCounter.html" title="struct game::debug::path_counter::PathCounter">PathCounter</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.event-7" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/debug/path_counter.rs.html#83-112" title="goto source code">[src]</a></div><a href="#method.event-7" class="anchor"></a><h4 class="code-header">fn <a class="fnname">event</a>(&amp;mut self, ctx: &amp;mut EventCtx&lt;'_&gt;, app: &amp;mut <a class="struct" href="struct.App.html" title="struct game::app::App">App</a>) -&gt; Transition&lt;<a class="struct" href="struct.App.html" title="struct game::app::App">App</a>&gt;</h4></div></summary><div class='docblock'><p>Respond to a UI event, such as input or time passing.</p>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The build time in RFC2822, UTC."><meta name="keywords" content="rust, rustlang, rust-lang, BUILT_TIME_UTC"><title>BUILT_TIME_UTC in game::pregame::built_info - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../../storage.js"></script><script src="../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc constant"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><h2 class="location">Other items in<br><a href="../../index.html">game</a>::<wbr><a href="../index.html">pregame</a>::<wbr><a href="index.html">built_info</a></h2><div id="sidebar-vars" data-name="BUILT_TIME_UTC" data-ty="constant" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../../wheel.svg"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Constant <a href="../../index.html">game</a>::<wbr><a href="../index.html">pregame</a>::<wbr><a href="index.html">built_info</a>::<wbr><a class="constant" href="#">BUILT_TIME_UTC</a><button id="copy-path" onclick="copy_path(this)" title="copy path"><img src="../../../clipboard.svg" width="19" height="18" alt="Copy item import" title="Copy item import to clipboard"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../src/game/home/runner/work/abstreet/abstreet/target/debug/build/game-0716a03cc01a18cb/out/built.rs.html#78" title="goto source code">[src]</a></span></h1><pre class="rust const">pub const BUILT_TIME_UTC: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.str.html">str</a> = r&quot;Mon, 27 Sep 2021 21:30:55 +0000&quot;;</pre><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The build time in RFC2822, UTC.</p>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The build time in RFC2822, UTC."><meta name="keywords" content="rust, rustlang, rust-lang, BUILT_TIME_UTC"><title>BUILT_TIME_UTC in game::pregame::built_info - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../../storage.js"></script><script src="../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc constant"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><h2 class="location">Other items in<br><a href="../../index.html">game</a>::<wbr><a href="../index.html">pregame</a>::<wbr><a href="index.html">built_info</a></h2><div id="sidebar-vars" data-name="BUILT_TIME_UTC" data-ty="constant" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../../wheel.svg"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Constant <a href="../../index.html">game</a>::<wbr><a href="../index.html">pregame</a>::<wbr><a href="index.html">built_info</a>::<wbr><a class="constant" href="#">BUILT_TIME_UTC</a><button id="copy-path" onclick="copy_path(this)" title="copy path"><img src="../../../clipboard.svg" width="19" height="18" alt="Copy item import" title="Copy item import to clipboard"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../src/game/home/runner/work/abstreet/abstreet/target/debug/build/game-0716a03cc01a18cb/out/built.rs.html#78" title="goto source code">[src]</a></span></h1><pre class="rust const">pub const BUILT_TIME_UTC: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.str.html">str</a> = r&quot;Mon, 27 Sep 2021 21:41:02 +0000&quot;;</pre><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The build time in RFC2822, UTC.</p>
</div></details></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../" data-current-crate="game" data-search-index-js="../../../search-index.js" data-search-js="../../../search.js"></div>
<script src="../../../main.js"></script>
</body></html>

View File

@ -1,3 +1,3 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `MAX_AVOID_PARAM` constant in crate `game`."><meta name="keywords" content="rust, rustlang, rust-lang, MAX_AVOID_PARAM"><title>MAX_AVOID_PARAM in game::ungap::route - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../../storage.js"></script><script src="../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc constant"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><h2 class="location">Other items in<br><a href="../../index.html">game</a>::<wbr><a href="../index.html">ungap</a>::<wbr><a href="index.html">route</a></h2><div id="sidebar-vars" data-name="MAX_AVOID_PARAM" data-ty="constant" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../../wheel.svg"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Constant <a href="../../index.html">game</a>::<wbr><a href="../index.html">ungap</a>::<wbr><a href="index.html">route</a>::<wbr><a class="constant" href="#">MAX_AVOID_PARAM</a><button id="copy-path" onclick="copy_path(this)" title="copy path"><img src="../../../clipboard.svg" width="19" height="18" alt="Copy item import" title="Copy item import to clipboard"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../src/game/ungap/route.rs.html#19" title="goto source code">[src]</a></span></h1><pre class="rust const">const MAX_AVOID_PARAM: <a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.f64.html">f64</a> = 2.0;</pre></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../" data-current-crate="game" data-search-index-js="../../../search-index.js" data-search-js="../../../search.js"></div>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `MAX_AVOID_PARAM` constant in crate `game`."><meta name="keywords" content="rust, rustlang, rust-lang, MAX_AVOID_PARAM"><title>MAX_AVOID_PARAM in game::ungap::route - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../../storage.js"></script><script src="../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc constant"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><h2 class="location">Other items in<br><a href="../../index.html">game</a>::<wbr><a href="../index.html">ungap</a>::<wbr><a href="index.html">route</a></h2><div id="sidebar-vars" data-name="MAX_AVOID_PARAM" data-ty="constant" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../../wheel.svg"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Constant <a href="../../index.html">game</a>::<wbr><a href="../index.html">ungap</a>::<wbr><a href="index.html">route</a>::<wbr><a class="constant" href="#">MAX_AVOID_PARAM</a><button id="copy-path" onclick="copy_path(this)" title="copy path"><img src="../../../clipboard.svg" width="19" height="18" alt="Copy item import" title="Copy item import to clipboard"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../src/game/ungap/route/mod.rs.html#11" title="goto source code">[src]</a></span></h1><pre class="rust const">const MAX_AVOID_PARAM: <a class="primitive" href="https://doc.rust-lang.org/1.55.0/std/primitive.f64.html">f64</a> = 2.0;</pre></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../" data-current-crate="game" data-search-index-js="../../../search-index.js" data-search-js="../../../search.js"></div>
<script src="../../../main.js"></script>
</body></html>

View File

@ -0,0 +1,7 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `files` mod in crate `game`."><meta name="keywords" content="rust, rustlang, rust-lang, files"><title>game::ungap::route::files - Rust</title><link rel="stylesheet" type="text/css" href="../../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../../../storage.js"></script><script src="../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../../rust-logo.png' alt='logo'></div></a><h2 class="location">Module files</h2><div class="sidebar-elems"><div class="block items"><ul><li><a href="#structs">Structs</a></li></ul></div><div id="sidebar-vars" data-name="files" data-ty="mod" data-relpath="./"></div><script defer src="./sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../../../wheel.svg"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../../index.html">game</a>::<wbr><a href="../../index.html">ungap</a>::<wbr><a href="../index.html">route</a>::<wbr><a class="mod" href="#">files</a><button id="copy-path" onclick="copy_path(this)" title="copy path"><img src="../../../../clipboard.svg" width="19" height="18" alt="Copy item import" title="Copy item import to clipboard"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../src/game/ungap/route/files.rs.html#1-299" title="goto source code">[src]</a></span></h1><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
<div class="item-table"><div class="item-left module-item"><a class="struct" href="struct.NamedRoute.html" title="game::ungap::route::files::NamedRoute struct">NamedRoute</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.RenameRoute.html" title="game::ungap::route::files::RenameRoute struct">RenameRoute</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.RouteManagement.html" title="game::ungap::route::files::RouteManagement struct">RouteManagement</a></div><div class="item-right docblock-short"><p>Save sequences of waypoints as named routes. Basic file management save, load, browse. This
is useful to define “test cases,” then edit the bike network and “run the tests” to compare
results.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.SavedRoutes.html" title="game::ungap::route::files::SavedRoutes struct">SavedRoutes</a></div><div class="item-right docblock-short"></div></div></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="game" data-search-index-js="../../../../search-index.js" data-search-js="../../../../search.js"></div>
<script src="../../../../main.js"></script>
</body></html>

View File

@ -0,0 +1 @@
initSidebarItems({"struct":[["NamedRoute",""],["RenameRoute",""],["RouteManagement","Save sequences of waypoints as named routes. Basic file management save, load, browse. This is useful to define “test cases,” then edit the bike network and “run the tests” to compare results."],["SavedRoutes",""]]});

View File

@ -1,8 +1,6 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `route` mod in crate `game`."><meta name="keywords" content="rust, rustlang, rust-lang, route"><title>game::ungap::route - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../../storage.js"></script><script src="../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><h2 class="location">Module route</h2><div class="sidebar-elems"><div class="block items"><ul><li><a href="#structs">Structs</a></li><li><a href="#constants">Constants</a></li></ul></div><div id="sidebar-vars" data-name="route" data-ty="mod" data-relpath="./"></div><script defer src="./sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../../wheel.svg"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../index.html">game</a>::<wbr><a href="../index.html">ungap</a>::<wbr><a class="mod" href="#">route</a><button id="copy-path" onclick="copy_path(this)" title="copy path"><img src="../../../clipboard.svg" width="19" height="18" alt="Copy item import" title="Copy item import to clipboard"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../src/game/ungap/route.rs.html#1-857" title="goto source code">[src]</a></span></h1><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
<div class="item-table"><div class="item-left module-item"><a class="struct" href="struct.AltRouteResults.html" title="game::ungap::route::AltRouteResults struct">AltRouteResults</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.NamedRoute.html" title="game::ungap::route::NamedRoute struct">NamedRoute</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.RenameRoute.html" title="game::ungap::route::RenameRoute struct">RenameRoute</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.RouteManagement.html" title="game::ungap::route::RouteManagement struct">RouteManagement</a></div><div class="item-right docblock-short"><p>Save sequences of waypoints as named routes. Basic file management save, load, browse. This
is useful to define “test cases,” then edit the bike network and “run the tests” to compare
results.</p>
</div><div class="item-left module-item"><a class="struct" href="struct.RoutePlanner.html" title="game::ungap::route::RoutePlanner struct">RoutePlanner</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.RouteResults.html" title="game::ungap::route::RouteResults struct">RouteResults</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.SavedRoutes.html" title="game::ungap::route::SavedRoutes struct">SavedRoutes</a></div><div class="item-right docblock-short"></div></div><h2 id="constants" class="section-header"><a href="#constants">Constants</a></h2>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `route` mod in crate `game`."><meta name="keywords" content="rust, rustlang, rust-lang, route"><title>game::ungap::route - Rust</title><link rel="stylesheet" type="text/css" href="../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../../storage.js"></script><script src="../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../rust-logo.png' alt='logo'></div></a><h2 class="location">Module route</h2><div class="sidebar-elems"><div class="block items"><ul><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#constants">Constants</a></li></ul></div><div id="sidebar-vars" data-name="route" data-ty="mod" data-relpath="./"></div><script defer src="./sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../../wheel.svg"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../index.html">game</a>::<wbr><a href="../index.html">ungap</a>::<wbr><a class="mod" href="#">route</a><button id="copy-path" onclick="copy_path(this)" title="copy path"><img src="../../../clipboard.svg" width="19" height="18" alt="Copy item import" title="Copy item import to clipboard"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../src/game/ungap/route/mod.rs.html#1-166" title="goto source code">[src]</a></span></h1><h2 id="modules" class="section-header"><a href="#modules">Modules</a></h2>
<div class="item-table"><div class="item-left module-item"><a class="mod" href="files/index.html" title="game::ungap::route::files mod">files</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="mod" href="results/index.html" title="game::ungap::route::results mod">results</a></div><div class="item-right docblock-short"></div></div><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
<div class="item-table"><div class="item-left module-item"><a class="struct" href="struct.RoutePlanner.html" title="game::ungap::route::RoutePlanner struct">RoutePlanner</a></div><div class="item-right docblock-short"></div></div><h2 id="constants" class="section-header"><a href="#constants">Constants</a></h2>
<div class="item-table"><div class="item-left module-item"><a class="constant" href="constant.MAX_AVOID_PARAM.html" title="game::ungap::route::MAX_AVOID_PARAM constant">MAX_AVOID_PARAM</a></div><div class="item-right docblock-short"></div></div></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../" data-current-crate="game" data-search-index-js="../../../search-index.js" data-search-js="../../../search.js"></div>
<script src="../../../main.js"></script>
</body></html>

View File

@ -0,0 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `results` mod in crate `game`."><meta name="keywords" content="rust, rustlang, rust-lang, results"><title>game::ungap::route::results - Rust</title><link rel="stylesheet" type="text/css" href="../../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../../../storage.js"></script><script src="../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../../rust-logo.png' alt='logo'></div></a><h2 class="location">Module results</h2><div class="sidebar-elems"><div class="block items"><ul><li><a href="#structs">Structs</a></li></ul></div><div id="sidebar-vars" data-name="results" data-ty="mod" data-relpath="./"></div><script defer src="./sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../../../wheel.svg"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../../index.html">game</a>::<wbr><a href="../../index.html">ungap</a>::<wbr><a href="../index.html">route</a>::<wbr><a class="mod" href="#">results</a><button id="copy-path" onclick="copy_path(this)" title="copy path"><img src="../../../../clipboard.svg" width="19" height="18" alt="Copy item import" title="Copy item import to clipboard"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../src/game/ungap/route/results.rs.html#1-414" title="goto source code">[src]</a></span></h1><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
<div class="item-table"><div class="item-left module-item"><a class="struct" href="struct.AltRouteResults.html" title="game::ungap::route::results::AltRouteResults struct">AltRouteResults</a></div><div class="item-right docblock-short"></div><div class="item-left module-item"><a class="struct" href="struct.RouteResults.html" title="game::ungap::route::results::RouteResults struct">RouteResults</a></div><div class="item-right docblock-short"></div></div></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="game" data-search-index-js="../../../../search-index.js" data-search-js="../../../../search.js"></div>
<script src="../../../../main.js"></script>
</body></html>

View File

@ -0,0 +1 @@
initSidebarItems({"struct":[["AltRouteResults",""],["RouteResults",""]]});

View File

@ -1 +1 @@
initSidebarItems({"constant":[["MAX_AVOID_PARAM",""]],"struct":[["AltRouteResults",""],["NamedRoute",""],["RenameRoute",""],["RouteManagement","Save sequences of waypoints as named routes. Basic file management save, load, browse. This is useful to define “test cases,” then edit the bike network and “run the tests” to compare results."],["RoutePlanner",""],["RouteResults",""],["SavedRoutes",""]]});
initSidebarItems({"constant":[["MAX_AVOID_PARAM",""]],"mod":[["files",""],["results",""]],"struct":[["RoutePlanner",""]]});

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `TakeLayers` trait in crate `game`."><meta name="keywords" content="rust, rustlang, rust-lang, TakeLayers"><title>TakeLayers in game::ungap - Rust</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../storage.js"></script><script src="../../crates.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../game/index.html'><div class='logo-container rust-logo'><img src='../../rust-logo.png' alt='logo'></div></a><h2 class="location">Trait TakeLayers</h2><div class="sidebar-elems"><div class="block items"><h3 class="sidebar-title"><a href="#required-methods">Required Methods</a></h3><div class="sidebar-links"><a href="#tymethod.take_layers">take_layers</a></div><h3 class="sidebar-title"><a href="#implementors">Implementors</a></h3></div><h2 class="location">Other items in<br><a href="../index.html">game</a>::<wbr><a href="index.html">ungap</a></h2><div id="sidebar-vars" data-name="TakeLayers" data-ty="trait" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../wheel.svg"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Trait <a href="../index.html">game</a>::<wbr><a href="index.html">ungap</a>::<wbr><a class="trait" href="#">TakeLayers</a><button id="copy-path" onclick="copy_path(this)" title="copy path"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item import" title="Copy item import to clipboard"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../src/game/ungap/mod.rs.html#32-34" title="goto source code">[src]</a></span></h1><div class="docblock type-decl"><pre class="rust trait">pub trait TakeLayers {
fn <a href="#tymethod.take_layers" class="fnname">take_layers</a>(self) -&gt; <a class="struct" href="layers/struct.Layers.html" title="struct game::ungap::layers::Layers">Layers</a>;
}</pre></div><h2 id="required-methods" class="small-section-header">Required methods<a href="#required-methods" class="anchor"></a></h2><div class="methods"><div id="tymethod.take_layers" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/mod.rs.html#33" title="goto source code">[src]</a></div><h4 class="code-header">fn <a href="#tymethod.take_layers" class="fnname">take_layers</a>(self) -&gt; <a class="struct" href="layers/struct.Layers.html" title="struct game::ungap::layers::Layers">Layers</a></h4></div></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor"></a></h2><div class="item-list" id="implementors-list"><div id="impl-TakeLayers" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/explore.rs.html#19-23" title="goto source code">[src]</a></div><a href="#impl-TakeLayers" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="trait.TakeLayers.html" title="trait game::ungap::TakeLayers">TakeLayers</a> for <a class="struct" href="explore/struct.ExploreMap.html" title="struct game::ungap::explore::ExploreMap">ExploreMap</a></h3></div><div id="impl-TakeLayers-1" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/predict.rs.html#23-27" title="goto source code">[src]</a></div><a href="#impl-TakeLayers-1" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="trait.TakeLayers.html" title="trait game::ungap::TakeLayers">TakeLayers</a> for <a class="struct" href="predict/struct.ShowGaps.html" title="struct game::ungap::predict::ShowGaps">ShowGaps</a></h3></div><div id="impl-TakeLayers-2" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/quick_sketch.rs.html#19-23" title="goto source code">[src]</a></div><a href="#impl-TakeLayers-2" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="trait.TakeLayers.html" title="trait game::ungap::TakeLayers">TakeLayers</a> for <a class="struct" href="quick_sketch/struct.QuickSketch.html" title="struct game::ungap::quick_sketch::QuickSketch">QuickSketch</a></h3></div><div id="impl-TakeLayers-3" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route.rs.html#33-37" title="goto source code">[src]</a></div><a href="#impl-TakeLayers-3" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="trait.TakeLayers.html" title="trait game::ungap::TakeLayers">TakeLayers</a> for <a class="struct" href="route/struct.RoutePlanner.html" title="struct game::ungap::route::RoutePlanner">RoutePlanner</a></h3></div></div><script type="text/javascript" src="../../implementors/game/ungap/trait.TakeLayers.js" async></script></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../" data-current-crate="game" data-search-index-js="../../search-index.js" data-search-js="../../search.js"></div>
}</pre></div><h2 id="required-methods" class="small-section-header">Required methods<a href="#required-methods" class="anchor"></a></h2><div class="methods"><div id="tymethod.take_layers" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/mod.rs.html#33" title="goto source code">[src]</a></div><h4 class="code-header">fn <a href="#tymethod.take_layers" class="fnname">take_layers</a>(self) -&gt; <a class="struct" href="layers/struct.Layers.html" title="struct game::ungap::layers::Layers">Layers</a></h4></div></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor"></a></h2><div class="item-list" id="implementors-list"><div id="impl-TakeLayers" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/explore.rs.html#19-23" title="goto source code">[src]</a></div><a href="#impl-TakeLayers" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="trait.TakeLayers.html" title="trait game::ungap::TakeLayers">TakeLayers</a> for <a class="struct" href="explore/struct.ExploreMap.html" title="struct game::ungap::explore::ExploreMap">ExploreMap</a></h3></div><div id="impl-TakeLayers-1" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/predict.rs.html#23-27" title="goto source code">[src]</a></div><a href="#impl-TakeLayers-1" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="trait.TakeLayers.html" title="trait game::ungap::TakeLayers">TakeLayers</a> for <a class="struct" href="predict/struct.ShowGaps.html" title="struct game::ungap::predict::ShowGaps">ShowGaps</a></h3></div><div id="impl-TakeLayers-2" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/quick_sketch.rs.html#19-23" title="goto source code">[src]</a></div><a href="#impl-TakeLayers-2" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="trait.TakeLayers.html" title="trait game::ungap::TakeLayers">TakeLayers</a> for <a class="struct" href="quick_sketch/struct.QuickSketch.html" title="struct game::ungap::quick_sketch::QuickSketch">QuickSketch</a></h3></div><div id="impl-TakeLayers-3" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/game/ungap/route/mod.rs.html#25-29" title="goto source code">[src]</a></div><a href="#impl-TakeLayers-3" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="trait.TakeLayers.html" title="trait game::ungap::TakeLayers">TakeLayers</a> for <a class="struct" href="route/struct.RoutePlanner.html" title="struct game::ungap::route::RoutePlanner">RoutePlanner</a></h3></div></div><script type="text/javascript" src="../../implementors/game/ungap/trait.TakeLayers.js" async></script></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../" data-current-crate="game" data-search-index-js="../../search-index.js" data-search-js="../../search.js"></div>
<script src="../../main.js"></script>
</body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
(function() {var implementors = {};
implementors["fifteen_min"] = [{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"map_gui/simple_app/struct.SimpleApp.html\" title=\"struct map_gui::simple_app::SimpleApp\">SimpleApp</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.55.0/std/primitive.unit.html\">()</a>&gt;&gt; for <a class=\"struct\" href=\"fifteen_min/find_amenities/struct.Results.html\" title=\"struct fifteen_min::find_amenities::Results\">Results</a>","synthetic":false,"types":["fifteen_min::find_amenities::Results"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"map_gui/simple_app/struct.SimpleApp.html\" title=\"struct map_gui::simple_app::SimpleApp\">SimpleApp</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.55.0/std/primitive.unit.html\">()</a>&gt;&gt; for <a class=\"struct\" href=\"fifteen_min/find_home/struct.FindHome.html\" title=\"struct fifteen_min::find_home::FindHome\">FindHome</a>","synthetic":false,"types":["fifteen_min::find_home::FindHome"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"map_gui/simple_app/struct.SimpleApp.html\" title=\"struct map_gui::simple_app::SimpleApp\">SimpleApp</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.55.0/std/primitive.unit.html\">()</a>&gt;&gt; for <a class=\"struct\" href=\"fifteen_min/find_home/struct.Results.html\" title=\"struct fifteen_min::find_home::Results\">Results</a>","synthetic":false,"types":["fifteen_min::find_home::Results"]}];
implementors["game"] = [{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/debug/uber_turns/struct.UberTurnPicker.html\" title=\"struct game::debug::uber_turns::UberTurnPicker\">UberTurnPicker</a>","synthetic":false,"types":["game::debug::uber_turns::UberTurnPicker"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/debug/uber_turns/struct.UberTurnViewer.html\" title=\"struct game::debug::uber_turns::UberTurnViewer\">UberTurnViewer</a>","synthetic":false,"types":["game::debug::uber_turns::UberTurnViewer"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/edit/stop_signs/struct.StopSignEditor.html\" title=\"struct game::edit::stop_signs::StopSignEditor\">StopSignEditor</a>","synthetic":false,"types":["game::edit::stop_signs::StopSignEditor"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/edit/traffic_signals/edits/struct.ChangeDuration.html\" title=\"struct game::edit::traffic_signals::edits::ChangeDuration\">ChangeDuration</a>","synthetic":false,"types":["game::edit::traffic_signals::edits::ChangeDuration"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/edit/traffic_signals/offsets/struct.ShowAbsolute.html\" title=\"struct game::edit::traffic_signals::offsets::ShowAbsolute\">ShowAbsolute</a>","synthetic":false,"types":["game::edit::traffic_signals::offsets::ShowAbsolute"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/edit/traffic_signals/offsets/struct.ShowRelative.html\" title=\"struct game::edit::traffic_signals::offsets::ShowRelative\">ShowRelative</a>","synthetic":false,"types":["game::edit::traffic_signals::offsets::ShowRelative"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/edit/traffic_signals/offsets/struct.TuneRelative.html\" title=\"struct game::edit::traffic_signals::offsets::TuneRelative\">TuneRelative</a>","synthetic":false,"types":["game::edit::traffic_signals::offsets::TuneRelative"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/sandbox/gameplay/actdev/struct.About.html\" title=\"struct game::sandbox::gameplay::actdev::About\">About</a>","synthetic":false,"types":["game::sandbox::gameplay::actdev::About"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/sandbox/gameplay/freeform/struct.ChangeScenario.html\" title=\"struct game::sandbox::gameplay::freeform::ChangeScenario\">ChangeScenario</a>","synthetic":false,"types":["game::sandbox::gameplay::freeform::ChangeScenario"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/sandbox/gameplay/play_scenario/struct.DepartureSummary.html\" title=\"struct game::sandbox::gameplay::play_scenario::DepartureSummary\">DepartureSummary</a>","synthetic":false,"types":["game::sandbox::gameplay::play_scenario::DepartureSummary"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/ungap/route/struct.RenameRoute.html\" title=\"struct game::ungap::route::RenameRoute\">RenameRoute</a>","synthetic":false,"types":["game::ungap::route::RenameRoute"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/ungap/struct.About.html\" title=\"struct game::ungap::About\">About</a>","synthetic":false,"types":["game::ungap::About"]}];
implementors["game"] = [{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/debug/uber_turns/struct.UberTurnPicker.html\" title=\"struct game::debug::uber_turns::UberTurnPicker\">UberTurnPicker</a>","synthetic":false,"types":["game::debug::uber_turns::UberTurnPicker"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/debug/uber_turns/struct.UberTurnViewer.html\" title=\"struct game::debug::uber_turns::UberTurnViewer\">UberTurnViewer</a>","synthetic":false,"types":["game::debug::uber_turns::UberTurnViewer"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/edit/stop_signs/struct.StopSignEditor.html\" title=\"struct game::edit::stop_signs::StopSignEditor\">StopSignEditor</a>","synthetic":false,"types":["game::edit::stop_signs::StopSignEditor"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/edit/traffic_signals/edits/struct.ChangeDuration.html\" title=\"struct game::edit::traffic_signals::edits::ChangeDuration\">ChangeDuration</a>","synthetic":false,"types":["game::edit::traffic_signals::edits::ChangeDuration"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/edit/traffic_signals/offsets/struct.ShowAbsolute.html\" title=\"struct game::edit::traffic_signals::offsets::ShowAbsolute\">ShowAbsolute</a>","synthetic":false,"types":["game::edit::traffic_signals::offsets::ShowAbsolute"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/edit/traffic_signals/offsets/struct.ShowRelative.html\" title=\"struct game::edit::traffic_signals::offsets::ShowRelative\">ShowRelative</a>","synthetic":false,"types":["game::edit::traffic_signals::offsets::ShowRelative"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/edit/traffic_signals/offsets/struct.TuneRelative.html\" title=\"struct game::edit::traffic_signals::offsets::TuneRelative\">TuneRelative</a>","synthetic":false,"types":["game::edit::traffic_signals::offsets::TuneRelative"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/sandbox/gameplay/actdev/struct.About.html\" title=\"struct game::sandbox::gameplay::actdev::About\">About</a>","synthetic":false,"types":["game::sandbox::gameplay::actdev::About"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/sandbox/gameplay/freeform/struct.ChangeScenario.html\" title=\"struct game::sandbox::gameplay::freeform::ChangeScenario\">ChangeScenario</a>","synthetic":false,"types":["game::sandbox::gameplay::freeform::ChangeScenario"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/sandbox/gameplay/play_scenario/struct.DepartureSummary.html\" title=\"struct game::sandbox::gameplay::play_scenario::DepartureSummary\">DepartureSummary</a>","synthetic":false,"types":["game::sandbox::gameplay::play_scenario::DepartureSummary"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/ungap/route/files/struct.RenameRoute.html\" title=\"struct game::ungap::route::files::RenameRoute\">RenameRoute</a>","synthetic":false,"types":["game::ungap::route::files::RenameRoute"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"game/app/struct.App.html\" title=\"struct game::app::App\">App</a>&gt; for <a class=\"struct\" href=\"game/ungap/struct.About.html\" title=\"struct game::ungap::About\">About</a>","synthetic":false,"types":["game::ungap::About"]}];
implementors["map_editor"] = [{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"map_editor/app/struct.App.html\" title=\"struct map_editor::app::App\">App</a>&gt; for <a class=\"struct\" href=\"map_editor/edit/struct.EditRoad.html\" title=\"struct map_editor::edit::EditRoad\">EditRoad</a>","synthetic":false,"types":["map_editor::edit::EditRoad"]}];
implementors["santa"] = [{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"map_gui/simple_app/struct.SimpleApp.html\" title=\"struct map_gui::simple_app::SimpleApp\">SimpleApp</a>&lt;<a class=\"struct\" href=\"santa/session/struct.Session.html\" title=\"struct santa::session::Session\">Session</a>&gt;&gt; for <a class=\"struct\" href=\"santa/after_level/struct.Strategize.html\" title=\"struct santa::after_level::Strategize\">Strategize</a>","synthetic":false,"types":["santa::after_level::Strategize"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"map_gui/simple_app/struct.SimpleApp.html\" title=\"struct map_gui::simple_app::SimpleApp\">SimpleApp</a>&lt;<a class=\"struct\" href=\"santa/session/struct.Session.html\" title=\"struct santa::session::Session\">Session</a>&gt;&gt; for <a class=\"struct\" href=\"santa/after_level/struct.Results.html\" title=\"struct santa::after_level::Results\">Results</a>","synthetic":false,"types":["santa::after_level::Results"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"map_gui/simple_app/struct.SimpleApp.html\" title=\"struct map_gui::simple_app::SimpleApp\">SimpleApp</a>&lt;<a class=\"struct\" href=\"santa/session/struct.Session.html\" title=\"struct santa::session::Session\">Session</a>&gt;&gt; for <a class=\"struct\" href=\"santa/title/struct.TitleScreen.html\" title=\"struct santa::title::TitleScreen\">TitleScreen</a>","synthetic":false,"types":["santa::title::TitleScreen"]},{"text":"impl SimpleState&lt;<a class=\"struct\" href=\"map_gui/simple_app/struct.SimpleApp.html\" title=\"struct map_gui::simple_app::SimpleApp\">SimpleApp</a>&lt;<a class=\"struct\" href=\"santa/session/struct.Session.html\" title=\"struct santa::session::Session\">Session</a>&gt;&gt; for <a class=\"struct\" href=\"santa/title/struct.Credits.html\" title=\"struct santa::title::Credits\">Credits</a>","synthetic":false,"types":["santa::title::Credits"]}];
if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

File diff suppressed because one or more lines are too long

View File

@ -5,7 +5,7 @@ sourcesIndex["cli"] = {"name":"","files":["augment_scenario.rs","clip_osm.rs","g
sourcesIndex["collisions"] = {"name":"","files":["lib.rs"]};
sourcesIndex["convert_osm"] = {"name":"","files":["clip.rs","elevation.rs","extract.rs","lib.rs","osm_geom.rs","parking.rs","reader.rs","split_ways.rs","transit.rs"]};
sourcesIndex["fifteen_min"] = {"name":"","files":["find_amenities.rs","find_home.rs","isochrone.rs","lib.rs","viewer.rs"]};
sourcesIndex["game"] = {"name":"","dirs":[{"name":"challenges","files":["cutscene.rs","mod.rs","prebake.rs"]},{"name":"common","files":["mod.rs","route_sketcher.rs","select.rs","warp.rs","waypoints.rs"]},{"name":"debug","files":["blocked_by.rs","floodfill.rs","mod.rs","objects.rs","path_counter.rs","polygons.rs","routes.rs","select_roads.rs","shared_row.rs","streetmix.rs","uber_turns.rs"]},{"name":"devtools","files":["collisions.rs","destinations.rs","kml.rs","mod.rs","polygon.rs","scenario.rs","story.rs"]},{"name":"edit","dirs":[{"name":"traffic_signals","files":["edits.rs","gmns.rs","mod.rs","offsets.rs","picker.rs","preview.rs"]}],"files":["heuristics.rs","mod.rs","multiple_roads.rs","roads.rs","routes.rs","stop_signs.rs","validate.rs","zones.rs"]},{"name":"info","files":["building.rs","bus.rs","debug.rs","intersection.rs","lane.rs","mod.rs","parking_lot.rs","person.rs","trip.rs"]},{"name":"layer","files":["elevation.rs","favorites.rs","map.rs","mod.rs","pandemic.rs","parking.rs","population.rs","problems.rs","traffic.rs","transit.rs"]},{"name":"ltn","files":["algorithms.rs","browse.rs","mod.rs"]},{"name":"pregame","files":["mod.rs","proposals.rs"]},{"name":"sandbox","dirs":[{"name":"dashboards","files":["commuter.rs","generic_trip_table.rs","misc.rs","mod.rs","mode_shift.rs","parking_overhead.rs","risks.rs","selector.rs","traffic_signals.rs","travel_times.rs","trip_problems.rs","trip_table.rs"]},{"name":"gameplay","dirs":[{"name":"freeform","files":["importers.rs","mod.rs","spawner.rs"]}],"files":["actdev.rs","commute.rs","fix_traffic_signals.rs","mod.rs","play_scenario.rs","tutorial.rs"]}],"files":["minimap.rs","misc_tools.rs","mod.rs","speed.rs","time_warp.rs"]},{"name":"ungap","files":["bike_network.rs","explore.rs","labels.rs","layers.rs","mod.rs","predict.rs","quick_sketch.rs","route.rs","share.rs"]}],"files":["app.rs","lib.rs"]};
sourcesIndex["game"] = {"name":"","dirs":[{"name":"challenges","files":["cutscene.rs","mod.rs","prebake.rs"]},{"name":"common","files":["mod.rs","route_sketcher.rs","select.rs","warp.rs","waypoints.rs"]},{"name":"debug","files":["blocked_by.rs","floodfill.rs","mod.rs","objects.rs","path_counter.rs","polygons.rs","routes.rs","select_roads.rs","shared_row.rs","streetmix.rs","uber_turns.rs"]},{"name":"devtools","files":["collisions.rs","destinations.rs","kml.rs","mod.rs","polygon.rs","scenario.rs","story.rs"]},{"name":"edit","dirs":[{"name":"traffic_signals","files":["edits.rs","gmns.rs","mod.rs","offsets.rs","picker.rs","preview.rs"]}],"files":["heuristics.rs","mod.rs","multiple_roads.rs","roads.rs","routes.rs","stop_signs.rs","validate.rs","zones.rs"]},{"name":"info","files":["building.rs","bus.rs","debug.rs","intersection.rs","lane.rs","mod.rs","parking_lot.rs","person.rs","trip.rs"]},{"name":"layer","files":["elevation.rs","favorites.rs","map.rs","mod.rs","pandemic.rs","parking.rs","population.rs","problems.rs","traffic.rs","transit.rs"]},{"name":"ltn","files":["algorithms.rs","browse.rs","mod.rs"]},{"name":"pregame","files":["mod.rs","proposals.rs"]},{"name":"sandbox","dirs":[{"name":"dashboards","files":["commuter.rs","generic_trip_table.rs","misc.rs","mod.rs","mode_shift.rs","parking_overhead.rs","risks.rs","selector.rs","traffic_signals.rs","travel_times.rs","trip_problems.rs","trip_table.rs"]},{"name":"gameplay","dirs":[{"name":"freeform","files":["importers.rs","mod.rs","spawner.rs"]}],"files":["actdev.rs","commute.rs","fix_traffic_signals.rs","mod.rs","play_scenario.rs","tutorial.rs"]}],"files":["minimap.rs","misc_tools.rs","mod.rs","speed.rs","time_warp.rs"]},{"name":"ungap","dirs":[{"name":"route","files":["files.rs","mod.rs","results.rs"]}],"files":["bike_network.rs","explore.rs","labels.rs","layers.rs","mod.rs","predict.rs","quick_sketch.rs","share.rs"]}],"files":["app.rs","lib.rs"]};
sourcesIndex["geom"] = {"name":"","files":["angle.rs","bounds.rs","circle.rs","distance.rs","duration.rs","find_closest.rs","gps.rs","lib.rs","line.rs","percent.rs","polygon.rs","polyline.rs","pt.rs","ring.rs","speed.rs","stats.rs","time.rs"]};
sourcesIndex["headless"] = {"name":"","files":["main.rs"]};
sourcesIndex["importer"] = {"name":"","dirs":[{"name":"soundcast","files":["mod.rs","popdat.rs","trips.rs"]}],"files":["berlin.rs","configuration.rs","generic.rs","lib.rs","seattle.rs","uk.rs","utils.rs"]};

View File

@ -175,7 +175,7 @@
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">RUSTDOC_VERSION</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">r&quot;rustdoc 1.55.0 (c8dfcfe04 2021-09-06)&quot;</span>;
<span class="attribute">#[<span class="ident">doc</span><span class="op">=</span><span class="string">r#&quot;The build time in RFC2822, UTC.&quot;#</span>]</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">dead_code</span>)]</span>
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">BUILT_TIME_UTC</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">r&quot;Mon, 27 Sep 2021 21:30:55 +0000&quot;</span>;
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">BUILT_TIME_UTC</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">r&quot;Mon, 27 Sep 2021 21:41:02 +0000&quot;</span>;
<span class="attribute">#[<span class="ident">doc</span><span class="op">=</span><span class="string">r#&quot;The target architecture, given by `CARGO_CFG_TARGET_ARCH`.&quot;#</span>]</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">dead_code</span>)]</span>
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">CFG_TARGET_ARCH</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">r&quot;x86_64&quot;</span>;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,603 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `game&#x2F;src&#x2F;ungap&#x2F;route&#x2F;files.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>files.rs - source</title><link rel="stylesheet" type="text/css" href="../../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../../../storage.js"></script><script src="../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../down-arrow.svg");}</style></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../../rust-logo.png' alt='logo'></div></a></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../../../wheel.svg"></a></div></form></nav><section id="main" class="content"><div class="example-wrap"><pre class="line-numbers"><span id="1"> 1</span>
<span id="2"> 2</span>
<span id="3"> 3</span>
<span id="4"> 4</span>
<span id="5"> 5</span>
<span id="6"> 6</span>
<span id="7"> 7</span>
<span id="8"> 8</span>
<span id="9"> 9</span>
<span id="10"> 10</span>
<span id="11"> 11</span>
<span id="12"> 12</span>
<span id="13"> 13</span>
<span id="14"> 14</span>
<span id="15"> 15</span>
<span id="16"> 16</span>
<span id="17"> 17</span>
<span id="18"> 18</span>
<span id="19"> 19</span>
<span id="20"> 20</span>
<span id="21"> 21</span>
<span id="22"> 22</span>
<span id="23"> 23</span>
<span id="24"> 24</span>
<span id="25"> 25</span>
<span id="26"> 26</span>
<span id="27"> 27</span>
<span id="28"> 28</span>
<span id="29"> 29</span>
<span id="30"> 30</span>
<span id="31"> 31</span>
<span id="32"> 32</span>
<span id="33"> 33</span>
<span id="34"> 34</span>
<span id="35"> 35</span>
<span id="36"> 36</span>
<span id="37"> 37</span>
<span id="38"> 38</span>
<span id="39"> 39</span>
<span id="40"> 40</span>
<span id="41"> 41</span>
<span id="42"> 42</span>
<span id="43"> 43</span>
<span id="44"> 44</span>
<span id="45"> 45</span>
<span id="46"> 46</span>
<span id="47"> 47</span>
<span id="48"> 48</span>
<span id="49"> 49</span>
<span id="50"> 50</span>
<span id="51"> 51</span>
<span id="52"> 52</span>
<span id="53"> 53</span>
<span id="54"> 54</span>
<span id="55"> 55</span>
<span id="56"> 56</span>
<span id="57"> 57</span>
<span id="58"> 58</span>
<span id="59"> 59</span>
<span id="60"> 60</span>
<span id="61"> 61</span>
<span id="62"> 62</span>
<span id="63"> 63</span>
<span id="64"> 64</span>
<span id="65"> 65</span>
<span id="66"> 66</span>
<span id="67"> 67</span>
<span id="68"> 68</span>
<span id="69"> 69</span>
<span id="70"> 70</span>
<span id="71"> 71</span>
<span id="72"> 72</span>
<span id="73"> 73</span>
<span id="74"> 74</span>
<span id="75"> 75</span>
<span id="76"> 76</span>
<span id="77"> 77</span>
<span id="78"> 78</span>
<span id="79"> 79</span>
<span id="80"> 80</span>
<span id="81"> 81</span>
<span id="82"> 82</span>
<span id="83"> 83</span>
<span id="84"> 84</span>
<span id="85"> 85</span>
<span id="86"> 86</span>
<span id="87"> 87</span>
<span id="88"> 88</span>
<span id="89"> 89</span>
<span id="90"> 90</span>
<span id="91"> 91</span>
<span id="92"> 92</span>
<span id="93"> 93</span>
<span id="94"> 94</span>
<span id="95"> 95</span>
<span id="96"> 96</span>
<span id="97"> 97</span>
<span id="98"> 98</span>
<span id="99"> 99</span>
<span id="100">100</span>
<span id="101">101</span>
<span id="102">102</span>
<span id="103">103</span>
<span id="104">104</span>
<span id="105">105</span>
<span id="106">106</span>
<span id="107">107</span>
<span id="108">108</span>
<span id="109">109</span>
<span id="110">110</span>
<span id="111">111</span>
<span id="112">112</span>
<span id="113">113</span>
<span id="114">114</span>
<span id="115">115</span>
<span id="116">116</span>
<span id="117">117</span>
<span id="118">118</span>
<span id="119">119</span>
<span id="120">120</span>
<span id="121">121</span>
<span id="122">122</span>
<span id="123">123</span>
<span id="124">124</span>
<span id="125">125</span>
<span id="126">126</span>
<span id="127">127</span>
<span id="128">128</span>
<span id="129">129</span>
<span id="130">130</span>
<span id="131">131</span>
<span id="132">132</span>
<span id="133">133</span>
<span id="134">134</span>
<span id="135">135</span>
<span id="136">136</span>
<span id="137">137</span>
<span id="138">138</span>
<span id="139">139</span>
<span id="140">140</span>
<span id="141">141</span>
<span id="142">142</span>
<span id="143">143</span>
<span id="144">144</span>
<span id="145">145</span>
<span id="146">146</span>
<span id="147">147</span>
<span id="148">148</span>
<span id="149">149</span>
<span id="150">150</span>
<span id="151">151</span>
<span id="152">152</span>
<span id="153">153</span>
<span id="154">154</span>
<span id="155">155</span>
<span id="156">156</span>
<span id="157">157</span>
<span id="158">158</span>
<span id="159">159</span>
<span id="160">160</span>
<span id="161">161</span>
<span id="162">162</span>
<span id="163">163</span>
<span id="164">164</span>
<span id="165">165</span>
<span id="166">166</span>
<span id="167">167</span>
<span id="168">168</span>
<span id="169">169</span>
<span id="170">170</span>
<span id="171">171</span>
<span id="172">172</span>
<span id="173">173</span>
<span id="174">174</span>
<span id="175">175</span>
<span id="176">176</span>
<span id="177">177</span>
<span id="178">178</span>
<span id="179">179</span>
<span id="180">180</span>
<span id="181">181</span>
<span id="182">182</span>
<span id="183">183</span>
<span id="184">184</span>
<span id="185">185</span>
<span id="186">186</span>
<span id="187">187</span>
<span id="188">188</span>
<span id="189">189</span>
<span id="190">190</span>
<span id="191">191</span>
<span id="192">192</span>
<span id="193">193</span>
<span id="194">194</span>
<span id="195">195</span>
<span id="196">196</span>
<span id="197">197</span>
<span id="198">198</span>
<span id="199">199</span>
<span id="200">200</span>
<span id="201">201</span>
<span id="202">202</span>
<span id="203">203</span>
<span id="204">204</span>
<span id="205">205</span>
<span id="206">206</span>
<span id="207">207</span>
<span id="208">208</span>
<span id="209">209</span>
<span id="210">210</span>
<span id="211">211</span>
<span id="212">212</span>
<span id="213">213</span>
<span id="214">214</span>
<span id="215">215</span>
<span id="216">216</span>
<span id="217">217</span>
<span id="218">218</span>
<span id="219">219</span>
<span id="220">220</span>
<span id="221">221</span>
<span id="222">222</span>
<span id="223">223</span>
<span id="224">224</span>
<span id="225">225</span>
<span id="226">226</span>
<span id="227">227</span>
<span id="228">228</span>
<span id="229">229</span>
<span id="230">230</span>
<span id="231">231</span>
<span id="232">232</span>
<span id="233">233</span>
<span id="234">234</span>
<span id="235">235</span>
<span id="236">236</span>
<span id="237">237</span>
<span id="238">238</span>
<span id="239">239</span>
<span id="240">240</span>
<span id="241">241</span>
<span id="242">242</span>
<span id="243">243</span>
<span id="244">244</span>
<span id="245">245</span>
<span id="246">246</span>
<span id="247">247</span>
<span id="248">248</span>
<span id="249">249</span>
<span id="250">250</span>
<span id="251">251</span>
<span id="252">252</span>
<span id="253">253</span>
<span id="254">254</span>
<span id="255">255</span>
<span id="256">256</span>
<span id="257">257</span>
<span id="258">258</span>
<span id="259">259</span>
<span id="260">260</span>
<span id="261">261</span>
<span id="262">262</span>
<span id="263">263</span>
<span id="264">264</span>
<span id="265">265</span>
<span id="266">266</span>
<span id="267">267</span>
<span id="268">268</span>
<span id="269">269</span>
<span id="270">270</span>
<span id="271">271</span>
<span id="272">272</span>
<span id="273">273</span>
<span id="274">274</span>
<span id="275">275</span>
<span id="276">276</span>
<span id="277">277</span>
<span id="278">278</span>
<span id="279">279</span>
<span id="280">280</span>
<span id="281">281</span>
<span id="282">282</span>
<span id="283">283</span>
<span id="284">284</span>
<span id="285">285</span>
<span id="286">286</span>
<span id="287">287</span>
<span id="288">288</span>
<span id="289">289</span>
<span id="290">290</span>
<span id="291">291</span>
<span id="292">292</span>
<span id="293">293</span>
<span id="294">294</span>
<span id="295">295</span>
<span id="296">296</span>
<span id="297">297</span>
<span id="298">298</span>
<span id="299">299</span>
</pre><pre class="rust">
<span class="kw">use</span> <span class="ident">std::collections</span>::{<span class="ident">BTreeMap</span>, <span class="ident">HashSet</span>};
<span class="kw">use</span> <span class="ident">serde</span>::{<span class="ident">Deserialize</span>, <span class="ident">Serialize</span>};
<span class="kw">use</span> <span class="ident">abstutil::Timer</span>;
<span class="kw">use</span> <span class="ident">map_gui::tools</span>::{<span class="ident">grey_out_map</span>, <span class="ident">ChooseSomething</span>};
<span class="kw">use</span> <span class="ident">sim::TripEndpoint</span>;
<span class="kw">use</span> <span class="ident">widgetry</span>::{
<span class="ident">Choice</span>, <span class="ident">Color</span>, <span class="ident">EventCtx</span>, <span class="ident">GfxCtx</span>, <span class="ident">Key</span>, <span class="ident">Line</span>, <span class="ident">Panel</span>, <span class="ident">SimpleState</span>, <span class="ident">State</span>, <span class="ident">Text</span>, <span class="ident">TextBox</span>, <span class="ident">TextExt</span>,
<span class="ident">Widget</span>,
};
<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::app</span>::{<span class="ident">App</span>, <span class="ident">Transition</span>};
<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::ungap::route::RoutePlanner</span>;
<span class="doccomment">/// Save sequences of waypoints as named routes. Basic file management -- save, load, browse. This</span>
<span class="doccomment">/// is useful to define &quot;test cases,&quot; then edit the bike network and &quot;run the tests&quot; to compare</span>
<span class="doccomment">/// results.</span>
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">RouteManagement</span> {
<span class="kw">pub</span> <span class="ident">current</span>: <span class="ident">NamedRoute</span>,
<span class="comment">// We assume the file won&#39;t change out from beneath us</span>
<span class="ident">all</span>: <span class="ident">SavedRoutes</span>,
}
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">PartialEq</span>, <span class="ident">Serialize</span>, <span class="ident">Deserialize</span>)]</span>
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">NamedRoute</span> {
<span class="ident">name</span>: <span class="ident">String</span>,
<span class="kw">pub</span> <span class="ident">waypoints</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">TripEndpoint</span><span class="op">&gt;</span>,
}
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Serialize</span>, <span class="ident">Deserialize</span>)]</span>
<span class="kw">struct</span> <span class="ident">SavedRoutes</span> {
<span class="ident">routes</span>: <span class="ident">BTreeMap</span><span class="op">&lt;</span><span class="ident">String</span>, <span class="ident">NamedRoute</span><span class="op">&gt;</span>,
}
<span class="kw">impl</span> <span class="ident">SavedRoutes</span> {
<span class="kw">fn</span> <span class="ident">load</span>(<span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">SavedRoutes</span> {
<span class="ident">abstio::maybe_read_json</span>::<span class="op">&lt;</span><span class="ident">SavedRoutes</span><span class="op">&gt;</span>(
<span class="ident">abstio::path_routes</span>(<span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">map</span>.<span class="ident">get_name</span>()),
<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">Timer::throwaway</span>(),
)
.<span class="ident">unwrap_or_else</span>(<span class="op">|</span><span class="kw">_</span><span class="op">|</span> <span class="ident">SavedRoutes</span> {
<span class="ident">routes</span>: <span class="ident">BTreeMap::new</span>(),
})
}
<span class="kw">fn</span> <span class="ident">save</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) {
<span class="ident">abstio::write_json</span>(<span class="ident">abstio::path_routes</span>(<span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">map</span>.<span class="ident">get_name</span>()), <span class="self">self</span>);
}
<span class="kw">fn</span> <span class="ident">prev</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">current</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">NamedRoute</span><span class="op">&gt;</span> {
<span class="comment">// Pretend unsaved routes are at the end of the list</span>
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">routes</span>.<span class="ident">contains_key</span>(<span class="ident">current</span>) {
<span class="self">self</span>.<span class="ident">routes</span>
.<span class="ident">range</span>(..<span class="ident">current</span>.<span class="ident">to_string</span>())
.<span class="ident">next_back</span>()
.<span class="ident">map</span>(<span class="op">|</span><span class="ident">pair</span><span class="op">|</span> <span class="ident">pair</span>.<span class="number">1</span>)
} <span class="kw">else</span> {
<span class="self">self</span>.<span class="ident">routes</span>.<span class="ident">values</span>().<span class="ident">last</span>()
}
}
<span class="kw">fn</span> <span class="ident">next</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">current</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">NamedRoute</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">routes</span>.<span class="ident">contains_key</span>(<span class="ident">current</span>) {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">iter</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">routes</span>.<span class="ident">range</span>(<span class="ident">current</span>.<span class="ident">to_string</span>()..);
<span class="ident">iter</span>.<span class="ident">next</span>();
<span class="ident">iter</span>.<span class="ident">next</span>().<span class="ident">map</span>(<span class="op">|</span><span class="ident">pair</span><span class="op">|</span> <span class="ident">pair</span>.<span class="number">1</span>)
} <span class="kw">else</span> {
<span class="prelude-val">None</span>
}
}
<span class="kw">fn</span> <span class="ident">new_name</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">String</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">i</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">routes</span>.<span class="ident">len</span>() <span class="op">+</span> <span class="number">1</span>;
<span class="kw">loop</span> {
<span class="kw">let</span> <span class="ident">name</span> <span class="op">=</span> <span class="macro">format!</span>(<span class="string">&quot;Route {}&quot;</span>, <span class="ident">i</span>);
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">routes</span>.<span class="ident">contains_key</span>(<span class="kw-2">&amp;</span><span class="ident">name</span>) {
<span class="ident">i</span> <span class="op">+</span><span class="op">=</span> <span class="number">1</span>;
} <span class="kw">else</span> {
<span class="kw">return</span> <span class="ident">name</span>;
}
}
}
}
<span class="kw">impl</span> <span class="ident">RouteManagement</span> {
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">RouteManagement</span> {
<span class="kw">let</span> <span class="ident">all</span> <span class="op">=</span> <span class="ident">SavedRoutes::load</span>(<span class="ident">app</span>);
<span class="kw">let</span> <span class="ident">current</span> <span class="op">=</span> <span class="ident">NamedRoute</span> {
<span class="ident">name</span>: <span class="ident">all</span>.<span class="ident">new_name</span>(),
<span class="ident">waypoints</span>: <span class="ident">Vec::new</span>(),
};
<span class="ident">RouteManagement</span> { <span class="ident">all</span>, <span class="ident">current</span> }
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_panel_widget</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Widget</span> {
<span class="kw">let</span> <span class="ident">current_name</span> <span class="op">=</span> <span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">current</span>.<span class="ident">name</span>;
<span class="kw">let</span> <span class="ident">can_save</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">current</span>.<span class="ident">waypoints</span>.<span class="ident">len</span>() <span class="op">&gt;</span><span class="op">=</span> <span class="number">2</span>
<span class="op">&amp;&amp;</span> <span class="prelude-val">Some</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">current</span>) <span class="op">!</span><span class="op">=</span> <span class="self">self</span>.<span class="ident">all</span>.<span class="ident">routes</span>.<span class="ident">get</span>(<span class="ident">current_name</span>);
<span class="ident">Widget::col</span>(<span class="macro">vec!</span>[
<span class="ident">Widget::row</span>(<span class="macro">vec!</span>[
<span class="ident">ctx</span>.<span class="ident">style</span>()
.<span class="ident">btn_plain</span>
.<span class="ident">btn</span>()
.<span class="ident">label_underlined_text</span>(<span class="ident">current_name</span>)
.<span class="ident">build_widget</span>(<span class="ident">ctx</span>, <span class="string">&quot;rename route&quot;</span>),
<span class="ident">ctx</span>.<span class="ident">style</span>()
.<span class="ident">btn_plain</span>
.<span class="ident">icon_text</span>(<span class="string">&quot;system/assets/tools/save.svg&quot;</span>, <span class="string">&quot;Save&quot;</span>)
.<span class="ident">disabled</span>(<span class="op">!</span><span class="ident">can_save</span>)
.<span class="ident">build_def</span>(<span class="ident">ctx</span>),
<span class="ident">ctx</span>.<span class="ident">style</span>()
.<span class="ident">btn_plain_destructive</span>
.<span class="ident">icon_text</span>(<span class="string">&quot;system/assets/tools/trash.svg&quot;</span>, <span class="string">&quot;Delete&quot;</span>)
.<span class="ident">build_def</span>(<span class="ident">ctx</span>),
]),
<span class="ident">Widget::row</span>(<span class="macro">vec!</span>[
<span class="ident">ctx</span>.<span class="ident">style</span>().<span class="ident">btn_plain</span>.<span class="ident">text</span>(<span class="string">&quot;Start new route&quot;</span>).<span class="ident">build_def</span>(<span class="ident">ctx</span>),
<span class="ident">ctx</span>.<span class="ident">style</span>()
.<span class="ident">btn_prev</span>()
.<span class="ident">hotkey</span>(<span class="ident">Key::LeftArrow</span>)
.<span class="ident">disabled</span>(<span class="self">self</span>.<span class="ident">all</span>.<span class="ident">prev</span>(<span class="ident">current_name</span>).<span class="ident">is_none</span>())
.<span class="ident">build_widget</span>(<span class="ident">ctx</span>, <span class="string">&quot;previous route&quot;</span>),
<span class="comment">// TODO Autosave first?</span>
<span class="ident">ctx</span>.<span class="ident">style</span>()
.<span class="ident">btn_plain</span>
.<span class="ident">text</span>(<span class="string">&quot;Load another route&quot;</span>)
.<span class="ident">build_def</span>(<span class="ident">ctx</span>),
<span class="ident">ctx</span>.<span class="ident">style</span>()
.<span class="ident">btn_next</span>()
.<span class="ident">hotkey</span>(<span class="ident">Key::RightArrow</span>)
.<span class="ident">disabled</span>(<span class="self">self</span>.<span class="ident">all</span>.<span class="ident">next</span>(<span class="ident">current_name</span>).<span class="ident">is_none</span>())
.<span class="ident">build_widget</span>(<span class="ident">ctx</span>, <span class="string">&quot;next route&quot;</span>),
]),
])
.<span class="ident">section</span>(<span class="ident">ctx</span>)
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">on_click</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>, <span class="ident">action</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Transition</span><span class="op">&gt;</span> {
<span class="kw">match</span> <span class="ident">action</span> {
<span class="string">&quot;Save&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">all</span>
.<span class="ident">routes</span>
.<span class="ident">insert</span>(<span class="self">self</span>.<span class="ident">current</span>.<span class="ident">name</span>.<span class="ident">clone</span>(), <span class="self">self</span>.<span class="ident">current</span>.<span class="ident">clone</span>());
<span class="self">self</span>.<span class="ident">all</span>.<span class="ident">save</span>(<span class="ident">app</span>);
<span class="prelude-val">Some</span>(<span class="ident">Transition::Keep</span>)
}
<span class="string">&quot;Delete&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">all</span>.<span class="ident">routes</span>.<span class="ident">remove</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">current</span>.<span class="ident">name</span>).<span class="ident">is_some</span>() {
<span class="self">self</span>.<span class="ident">all</span>.<span class="ident">save</span>(<span class="ident">app</span>);
}
<span class="self">self</span>.<span class="ident">current</span> <span class="op">=</span> <span class="ident">NamedRoute</span> {
<span class="ident">name</span>: <span class="self">self</span>.<span class="ident">all</span>.<span class="ident">new_name</span>(),
<span class="ident">waypoints</span>: <span class="ident">Vec::new</span>(),
};
<span class="prelude-val">Some</span>(<span class="ident">Transition::Keep</span>)
}
<span class="string">&quot;Start new route&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">current</span> <span class="op">=</span> <span class="ident">NamedRoute</span> {
<span class="ident">name</span>: <span class="self">self</span>.<span class="ident">all</span>.<span class="ident">new_name</span>(),
<span class="ident">waypoints</span>: <span class="ident">Vec::new</span>(),
};
<span class="prelude-val">Some</span>(<span class="ident">Transition::Keep</span>)
}
<span class="string">&quot;Load another route&quot;</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="ident">Transition::Push</span>(<span class="ident">ChooseSomething::new_state</span>(
<span class="ident">ctx</span>,
<span class="string">&quot;Load another route&quot;</span>,
<span class="self">self</span>.<span class="ident">all</span>.<span class="ident">routes</span>.<span class="ident">keys</span>().<span class="ident">map</span>(<span class="op">|</span><span class="ident">x</span><span class="op">|</span> <span class="ident">Choice::string</span>(<span class="ident">x</span>)).<span class="ident">collect</span>(),
<span class="ident">Box::new</span>(<span class="kw">move</span> <span class="op">|</span><span class="ident">choice</span>, <span class="kw">_</span>, <span class="kw">_</span><span class="op">|</span> {
<span class="ident">Transition::Multi</span>(<span class="macro">vec!</span>[
<span class="ident">Transition::Pop</span>,
<span class="ident">Transition::ModifyState</span>(<span class="ident">Box::new</span>(<span class="kw">move</span> <span class="op">|</span><span class="ident">state</span>, <span class="ident">ctx</span>, <span class="ident">app</span><span class="op">|</span> {
<span class="kw">let</span> <span class="ident">state</span> <span class="op">=</span> <span class="ident">state</span>.<span class="ident">downcast_mut</span>::<span class="op">&lt;</span><span class="ident">RoutePlanner</span><span class="op">&gt;</span>().<span class="ident">unwrap</span>();
<span class="ident">state</span>.<span class="ident">files</span>.<span class="ident">current</span> <span class="op">=</span> <span class="ident">state</span>.<span class="ident">files</span>.<span class="ident">all</span>.<span class="ident">routes</span>[<span class="kw-2">&amp;</span><span class="ident">choice</span>].<span class="ident">clone</span>();
<span class="ident">state</span>.<span class="ident">sync_from_file_management</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
})),
])
}),
))),
<span class="string">&quot;previous route&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">current</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">all</span>.<span class="ident">prev</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">current</span>.<span class="ident">name</span>).<span class="ident">unwrap</span>().<span class="ident">clone</span>();
<span class="prelude-val">Some</span>(<span class="ident">Transition::Keep</span>)
}
<span class="string">&quot;next route&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">current</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">all</span>.<span class="ident">next</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">current</span>.<span class="ident">name</span>).<span class="ident">unwrap</span>().<span class="ident">clone</span>();
<span class="prelude-val">Some</span>(<span class="ident">Transition::Keep</span>)
}
<span class="string">&quot;rename route&quot;</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Some</span>(<span class="ident">Transition::Push</span>(<span class="ident">RenameRoute::new_state</span>(
<span class="ident">ctx</span>,
<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">current</span>,
<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">all</span>,
))),
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">None</span>,
}
}
}
<span class="kw">struct</span> <span class="ident">RenameRoute</span> {
<span class="ident">current_name</span>: <span class="ident">String</span>,
<span class="ident">all_names</span>: <span class="ident">HashSet</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>,
}
<span class="kw">impl</span> <span class="ident">RenameRoute</span> {
<span class="kw">fn</span> <span class="ident">new_state</span>(
<span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>,
<span class="ident">current</span>: <span class="kw-2">&amp;</span><span class="ident">NamedRoute</span>,
<span class="ident">all</span>: <span class="kw-2">&amp;</span><span class="ident">SavedRoutes</span>,
) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Box</span><span class="op">&lt;</span><span class="kw">dyn</span> <span class="ident">State</span><span class="op">&lt;</span><span class="ident">App</span><span class="op">&gt;</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">panel</span> <span class="op">=</span> <span class="ident">Panel::new_builder</span>(<span class="ident">Widget::col</span>(<span class="macro">vec!</span>[
<span class="ident">Widget::row</span>(<span class="macro">vec!</span>[
<span class="ident">Line</span>(<span class="string">&quot;Name this route&quot;</span>).<span class="ident">small_heading</span>().<span class="ident">into_widget</span>(<span class="ident">ctx</span>),
<span class="ident">ctx</span>.<span class="ident">style</span>().<span class="ident">btn_close_widget</span>(<span class="ident">ctx</span>),
]),
<span class="ident">Widget::row</span>(<span class="macro">vec!</span>[
<span class="string">&quot;Name:&quot;</span>.<span class="ident">text_widget</span>(<span class="ident">ctx</span>).<span class="ident">centered_vert</span>(),
<span class="ident">TextBox::default_widget</span>(<span class="ident">ctx</span>, <span class="string">&quot;name&quot;</span>, <span class="ident">current</span>.<span class="ident">name</span>.<span class="ident">clone</span>()),
]),
<span class="ident">Text::new</span>().<span class="ident">into_widget</span>(<span class="ident">ctx</span>).<span class="ident">named</span>(<span class="string">&quot;warning&quot;</span>),
<span class="ident">ctx</span>.<span class="ident">style</span>()
.<span class="ident">btn_solid_primary</span>
.<span class="ident">text</span>(<span class="string">&quot;Rename&quot;</span>)
.<span class="ident">hotkey</span>(<span class="ident">Key::Enter</span>)
.<span class="ident">build_def</span>(<span class="ident">ctx</span>),
]))
.<span class="ident">build</span>(<span class="ident">ctx</span>);
<span class="op">&lt;</span><span class="kw">dyn</span> <span class="ident">SimpleState</span><span class="op">&lt;</span><span class="kw">_</span><span class="op">&gt;</span><span class="op">&gt;</span><span class="ident">::new_state</span>(
<span class="ident">panel</span>,
<span class="ident">Box::new</span>(<span class="ident">RenameRoute</span> {
<span class="ident">current_name</span>: <span class="ident">current</span>.<span class="ident">name</span>.<span class="ident">clone</span>(),
<span class="ident">all_names</span>: <span class="ident">all</span>.<span class="ident">routes</span>.<span class="ident">keys</span>().<span class="ident">cloned</span>().<span class="ident">collect</span>(),
}),
)
}
}
<span class="kw">impl</span> <span class="ident">SimpleState</span><span class="op">&lt;</span><span class="ident">App</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">RenameRoute</span> {
<span class="kw">fn</span> <span class="ident">on_click</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">App</span>, <span class="ident">x</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>, <span class="ident">panel</span>: <span class="kw-2">&amp;</span><span class="ident">Panel</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Transition</span> {
<span class="kw">match</span> <span class="ident">x</span> {
<span class="string">&quot;close&quot;</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">Transition::Pop</span>,
<span class="string">&quot;Rename&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">old_name</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">current_name</span>.<span class="ident">clone</span>();
<span class="kw">let</span> <span class="ident">new_name</span> <span class="op">=</span> <span class="ident">panel</span>.<span class="ident">text_box</span>(<span class="string">&quot;name&quot;</span>);
<span class="ident">Transition::Multi</span>(<span class="macro">vec!</span>[
<span class="ident">Transition::Pop</span>,
<span class="ident">Transition::ModifyState</span>(<span class="ident">Box::new</span>(<span class="kw">move</span> <span class="op">|</span><span class="ident">state</span>, <span class="ident">ctx</span>, <span class="ident">app</span><span class="op">|</span> {
<span class="kw">let</span> <span class="ident">state</span> <span class="op">=</span> <span class="ident">state</span>.<span class="ident">downcast_mut</span>::<span class="op">&lt;</span><span class="ident">RoutePlanner</span><span class="op">&gt;</span>().<span class="ident">unwrap</span>();
<span class="ident">state</span>.<span class="ident">files</span>.<span class="ident">all</span>.<span class="ident">routes</span>.<span class="ident">remove</span>(<span class="kw-2">&amp;</span><span class="ident">old_name</span>);
<span class="ident">state</span>.<span class="ident">files</span>.<span class="ident">current</span>.<span class="ident">name</span> <span class="op">=</span> <span class="ident">new_name</span>.<span class="ident">clone</span>();
<span class="ident">state</span>
.<span class="ident">files</span>
.<span class="ident">all</span>
.<span class="ident">routes</span>
.<span class="ident">insert</span>(<span class="ident">new_name</span>, <span class="ident">state</span>.<span class="ident">files</span>.<span class="ident">current</span>.<span class="ident">clone</span>());
<span class="ident">state</span>.<span class="ident">files</span>.<span class="ident">all</span>.<span class="ident">save</span>(<span class="ident">app</span>);
<span class="ident">state</span>.<span class="ident">sync_from_file_management</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
})),
])
}
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> <span class="macro">unreachable!</span>(),
}
}
<span class="kw">fn</span> <span class="ident">panel_changed</span>(
<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>,
<span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>,
<span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">App</span>,
<span class="ident">panel</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">Panel</span>,
) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Transition</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">new_name</span> <span class="op">=</span> <span class="ident">panel</span>.<span class="ident">text_box</span>(<span class="string">&quot;name&quot;</span>);
<span class="kw">let</span> <span class="ident">can_save</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident">new_name</span> <span class="op">!</span><span class="op">=</span> <span class="self">self</span>.<span class="ident">current_name</span> <span class="op">&amp;&amp;</span> <span class="self">self</span>.<span class="ident">all_names</span>.<span class="ident">contains</span>(<span class="kw-2">&amp;</span><span class="ident">new_name</span>) {
<span class="ident">panel</span>.<span class="ident">replace</span>(
<span class="ident">ctx</span>,
<span class="string">&quot;warning&quot;</span>,
<span class="ident">Line</span>(<span class="string">&quot;A route with this name already exists&quot;</span>)
.<span class="ident">fg</span>(<span class="ident">Color::hex</span>(<span class="string">&quot;#FF5E5E&quot;</span>))
.<span class="ident">into_widget</span>(<span class="ident">ctx</span>),
);
<span class="bool-val">false</span>
} <span class="kw">else</span> {
<span class="ident">panel</span>.<span class="ident">replace</span>(<span class="ident">ctx</span>, <span class="string">&quot;warning&quot;</span>, <span class="ident">Text::new</span>().<span class="ident">into_widget</span>(<span class="ident">ctx</span>));
<span class="bool-val">true</span>
};
<span class="ident">panel</span>.<span class="ident">replace</span>(
<span class="ident">ctx</span>,
<span class="string">&quot;Rename&quot;</span>,
<span class="ident">ctx</span>.<span class="ident">style</span>()
.<span class="ident">btn_solid_primary</span>
.<span class="ident">text</span>(<span class="string">&quot;Rename&quot;</span>)
.<span class="ident">hotkey</span>(<span class="ident">Key::Enter</span>)
.<span class="ident">disabled</span>(<span class="op">!</span><span class="ident">can_save</span>)
.<span class="ident">build_def</span>(<span class="ident">ctx</span>),
);
<span class="prelude-val">None</span>
}
<span class="kw">fn</span> <span class="ident">draw</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">g</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">GfxCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) {
<span class="ident">grey_out_map</span>(<span class="ident">g</span>, <span class="ident">app</span>);
}
}
</pre></div>
</section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="game" data-search-index-js="../../../../search-index.js" data-search-js="../../../../search.js"></div>
<script src="../../../../main.js"></script><script src="../../../../source-script.js"></script><script src="../../../../source-files.js"></script>
</body></html>

View File

@ -0,0 +1,337 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `game&#x2F;src&#x2F;ungap&#x2F;route&#x2F;mod.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>mod.rs - source</title><link rel="stylesheet" type="text/css" href="../../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../../../storage.js"></script><script src="../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../down-arrow.svg");}</style></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../../rust-logo.png' alt='logo'></div></a></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../../../wheel.svg"></a></div></form></nav><section id="main" class="content"><div class="example-wrap"><pre class="line-numbers"><span id="1"> 1</span>
<span id="2"> 2</span>
<span id="3"> 3</span>
<span id="4"> 4</span>
<span id="5"> 5</span>
<span id="6"> 6</span>
<span id="7"> 7</span>
<span id="8"> 8</span>
<span id="9"> 9</span>
<span id="10"> 10</span>
<span id="11"> 11</span>
<span id="12"> 12</span>
<span id="13"> 13</span>
<span id="14"> 14</span>
<span id="15"> 15</span>
<span id="16"> 16</span>
<span id="17"> 17</span>
<span id="18"> 18</span>
<span id="19"> 19</span>
<span id="20"> 20</span>
<span id="21"> 21</span>
<span id="22"> 22</span>
<span id="23"> 23</span>
<span id="24"> 24</span>
<span id="25"> 25</span>
<span id="26"> 26</span>
<span id="27"> 27</span>
<span id="28"> 28</span>
<span id="29"> 29</span>
<span id="30"> 30</span>
<span id="31"> 31</span>
<span id="32"> 32</span>
<span id="33"> 33</span>
<span id="34"> 34</span>
<span id="35"> 35</span>
<span id="36"> 36</span>
<span id="37"> 37</span>
<span id="38"> 38</span>
<span id="39"> 39</span>
<span id="40"> 40</span>
<span id="41"> 41</span>
<span id="42"> 42</span>
<span id="43"> 43</span>
<span id="44"> 44</span>
<span id="45"> 45</span>
<span id="46"> 46</span>
<span id="47"> 47</span>
<span id="48"> 48</span>
<span id="49"> 49</span>
<span id="50"> 50</span>
<span id="51"> 51</span>
<span id="52"> 52</span>
<span id="53"> 53</span>
<span id="54"> 54</span>
<span id="55"> 55</span>
<span id="56"> 56</span>
<span id="57"> 57</span>
<span id="58"> 58</span>
<span id="59"> 59</span>
<span id="60"> 60</span>
<span id="61"> 61</span>
<span id="62"> 62</span>
<span id="63"> 63</span>
<span id="64"> 64</span>
<span id="65"> 65</span>
<span id="66"> 66</span>
<span id="67"> 67</span>
<span id="68"> 68</span>
<span id="69"> 69</span>
<span id="70"> 70</span>
<span id="71"> 71</span>
<span id="72"> 72</span>
<span id="73"> 73</span>
<span id="74"> 74</span>
<span id="75"> 75</span>
<span id="76"> 76</span>
<span id="77"> 77</span>
<span id="78"> 78</span>
<span id="79"> 79</span>
<span id="80"> 80</span>
<span id="81"> 81</span>
<span id="82"> 82</span>
<span id="83"> 83</span>
<span id="84"> 84</span>
<span id="85"> 85</span>
<span id="86"> 86</span>
<span id="87"> 87</span>
<span id="88"> 88</span>
<span id="89"> 89</span>
<span id="90"> 90</span>
<span id="91"> 91</span>
<span id="92"> 92</span>
<span id="93"> 93</span>
<span id="94"> 94</span>
<span id="95"> 95</span>
<span id="96"> 96</span>
<span id="97"> 97</span>
<span id="98"> 98</span>
<span id="99"> 99</span>
<span id="100">100</span>
<span id="101">101</span>
<span id="102">102</span>
<span id="103">103</span>
<span id="104">104</span>
<span id="105">105</span>
<span id="106">106</span>
<span id="107">107</span>
<span id="108">108</span>
<span id="109">109</span>
<span id="110">110</span>
<span id="111">111</span>
<span id="112">112</span>
<span id="113">113</span>
<span id="114">114</span>
<span id="115">115</span>
<span id="116">116</span>
<span id="117">117</span>
<span id="118">118</span>
<span id="119">119</span>
<span id="120">120</span>
<span id="121">121</span>
<span id="122">122</span>
<span id="123">123</span>
<span id="124">124</span>
<span id="125">125</span>
<span id="126">126</span>
<span id="127">127</span>
<span id="128">128</span>
<span id="129">129</span>
<span id="130">130</span>
<span id="131">131</span>
<span id="132">132</span>
<span id="133">133</span>
<span id="134">134</span>
<span id="135">135</span>
<span id="136">136</span>
<span id="137">137</span>
<span id="138">138</span>
<span id="139">139</span>
<span id="140">140</span>
<span id="141">141</span>
<span id="142">142</span>
<span id="143">143</span>
<span id="144">144</span>
<span id="145">145</span>
<span id="146">146</span>
<span id="147">147</span>
<span id="148">148</span>
<span id="149">149</span>
<span id="150">150</span>
<span id="151">151</span>
<span id="152">152</span>
<span id="153">153</span>
<span id="154">154</span>
<span id="155">155</span>
<span id="156">156</span>
<span id="157">157</span>
<span id="158">158</span>
<span id="159">159</span>
<span id="160">160</span>
<span id="161">161</span>
<span id="162">162</span>
<span id="163">163</span>
<span id="164">164</span>
<span id="165">165</span>
<span id="166">166</span>
</pre><pre class="rust">
<span class="kw">use</span> <span class="ident">widgetry</span>::{<span class="ident">EventCtx</span>, <span class="ident">GfxCtx</span>, <span class="ident">Outcome</span>, <span class="ident">Panel</span>, <span class="ident">Slider</span>, <span class="ident">State</span>, <span class="ident">TextExt</span>, <span class="ident">Widget</span>};
<span class="kw">use</span> <span class="self">self</span><span class="ident">::results</span>::{<span class="ident">AltRouteResults</span>, <span class="ident">RouteResults</span>};
<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::app</span>::{<span class="ident">App</span>, <span class="ident">Transition</span>};
<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::common::InputWaypoints</span>;
<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::ungap</span>::{<span class="ident">Layers</span>, <span class="ident">Tab</span>, <span class="ident">TakeLayers</span>};
<span class="kw">mod</span> <span class="ident">files</span>;
<span class="kw">mod</span> <span class="ident">results</span>;
<span class="kw">const</span> <span class="ident">MAX_AVOID_PARAM</span>: <span class="ident">f64</span> <span class="op">=</span> <span class="number">2.0</span>;
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">RoutePlanner</span> {
<span class="ident">layers</span>: <span class="ident">Layers</span>,
<span class="ident">once</span>: <span class="ident">bool</span>,
<span class="ident">input_panel</span>: <span class="ident">Panel</span>,
<span class="ident">waypoints</span>: <span class="ident">InputWaypoints</span>,
<span class="ident">results</span>: <span class="ident">RouteResults</span>,
<span class="ident">files</span>: <span class="ident">files::RouteManagement</span>,
<span class="ident">alt_low_stress_route</span>: <span class="ident">AltRouteResults</span>,
}
<span class="kw">impl</span> <span class="ident">TakeLayers</span> <span class="kw">for</span> <span class="ident">RoutePlanner</span> {
<span class="kw">fn</span> <span class="ident">take_layers</span>(<span class="self">self</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Layers</span> {
<span class="self">self</span>.<span class="ident">layers</span>
}
}
<span class="kw">impl</span> <span class="ident">RoutePlanner</span> {
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new_state</span>(<span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>, <span class="ident">layers</span>: <span class="ident">Layers</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Box</span><span class="op">&lt;</span><span class="kw">dyn</span> <span class="ident">State</span><span class="op">&lt;</span><span class="ident">App</span><span class="op">&gt;</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">rp</span> <span class="op">=</span> <span class="ident">RoutePlanner</span> {
<span class="ident">layers</span>,
<span class="ident">once</span>: <span class="bool-val">true</span>,
<span class="ident">input_panel</span>: <span class="ident">Panel::empty</span>(<span class="ident">ctx</span>),
<span class="ident">waypoints</span>: <span class="ident">InputWaypoints::new</span>(<span class="ident">ctx</span>, <span class="ident">app</span>),
<span class="ident">results</span>: <span class="ident">RouteResults::main_route</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="ident">Vec::new</span>()).<span class="number">0</span>,
<span class="ident">files</span>: <span class="ident">files::RouteManagement::new</span>(<span class="ident">app</span>),
<span class="ident">alt_low_stress_route</span>: <span class="ident">AltRouteResults::low_stress</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="ident">Vec::new</span>()),
};
<span class="ident">rp</span>.<span class="ident">update_input_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
<span class="ident">Box::new</span>(<span class="ident">rp</span>)
}
<span class="kw">fn</span> <span class="ident">update_input_panel</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) {
<span class="kw">let</span> (<span class="ident">results</span>, <span class="ident">results_widget</span>) <span class="op">=</span>
<span class="ident">RouteResults::main_route</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="self">self</span>.<span class="ident">waypoints</span>.<span class="ident">get_waypoints</span>());
<span class="self">self</span>.<span class="ident">results</span> <span class="op">=</span> <span class="ident">results</span>;
<span class="self">self</span>.<span class="ident">alt_low_stress_route</span> <span class="op">=</span>
<span class="ident">AltRouteResults::low_stress</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="self">self</span>.<span class="ident">waypoints</span>.<span class="ident">get_waypoints</span>());
<span class="kw">let</span> <span class="ident">params</span> <span class="op">=</span> <span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">session</span>.<span class="ident">routing_params</span>;
<span class="kw">let</span> <span class="ident">col</span> <span class="op">=</span> <span class="ident">Widget::col</span>(<span class="macro">vec!</span>[
<span class="self">self</span>.<span class="ident">files</span>.<span class="ident">get_panel_widget</span>(<span class="ident">ctx</span>),
<span class="ident">Widget::col</span>(<span class="macro">vec!</span>[
<span class="ident">Widget::row</span>(<span class="macro">vec!</span>[
<span class="string">&quot;Avoid steep hills (&gt; 8% incline)&quot;</span>.<span class="ident">text_widget</span>(<span class="ident">ctx</span>),
<span class="ident">Slider::area</span>(
<span class="ident">ctx</span>,
<span class="number">100.0</span>,
<span class="ident">params</span>.<span class="ident">avoid_steep_incline_penalty</span> <span class="op">/</span> <span class="ident">MAX_AVOID_PARAM</span>,
<span class="string">&quot;avoid_steep_incline_penalty&quot;</span>,
),
]),
<span class="ident">Widget::row</span>(<span class="macro">vec!</span>[
<span class="string">&quot;Avoid high-stress roads&quot;</span>.<span class="ident">text_widget</span>(<span class="ident">ctx</span>),
<span class="ident">Slider::area</span>(
<span class="ident">ctx</span>,
<span class="number">100.0</span>,
<span class="ident">params</span>.<span class="ident">avoid_high_stress</span> <span class="op">/</span> <span class="ident">MAX_AVOID_PARAM</span>,
<span class="string">&quot;avoid_high_stress&quot;</span>,
),
]),
])
.<span class="ident">section</span>(<span class="ident">ctx</span>),
<span class="self">self</span>.<span class="ident">waypoints</span>.<span class="ident">get_panel_widget</span>(<span class="ident">ctx</span>).<span class="ident">section</span>(<span class="ident">ctx</span>),
<span class="ident">results_widget</span>.<span class="ident">section</span>(<span class="ident">ctx</span>),
]);
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">new_panel</span> <span class="op">=</span> <span class="ident">Tab::Route</span>.<span class="ident">make_left_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="ident">col</span>);
<span class="comment">// TODO After scrolling down and dragging a slider, sometimes releasing the slider</span>
<span class="comment">// registers as clicking &quot;X&quot; on the waypoints! Maybe just replace() in that case?</span>
<span class="ident">new_panel</span>.<span class="ident">restore_scroll</span>(<span class="ident">ctx</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">input_panel</span>);
<span class="self">self</span>.<span class="ident">input_panel</span> <span class="op">=</span> <span class="ident">new_panel</span>;
}
<span class="kw">fn</span> <span class="ident">sync_from_file_management</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) {
<span class="self">self</span>.<span class="ident">waypoints</span>
.<span class="ident">overwrite</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="self">self</span>.<span class="ident">files</span>.<span class="ident">current</span>.<span class="ident">waypoints</span>.<span class="ident">clone</span>());
<span class="self">self</span>.<span class="ident">update_input_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
}
}
<span class="kw">impl</span> <span class="ident">State</span><span class="op">&lt;</span><span class="ident">App</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">RoutePlanner</span> {
<span class="kw">fn</span> <span class="ident">event</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">App</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Transition</span> {
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">once</span> {
<span class="self">self</span>.<span class="ident">once</span> <span class="op">=</span> <span class="bool-val">false</span>;
<span class="ident">ctx</span>.<span class="ident">loading_screen</span>(<span class="string">&quot;apply edits&quot;</span>, <span class="op">|</span><span class="kw">_</span>, <span class="kw-2">mut</span> <span class="ident">timer</span><span class="op">|</span> {
<span class="ident">app</span>.<span class="ident">primary</span>
.<span class="ident">map</span>
.<span class="ident">recalculate_pathfinding_after_edits</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">timer</span>);
});
}
<span class="kw">let</span> <span class="ident">outcome</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">input_panel</span>.<span class="ident">event</span>(<span class="ident">ctx</span>);
<span class="kw">if</span> <span class="kw">let</span> <span class="ident">Outcome::Clicked</span>(<span class="kw-2">ref</span> <span class="ident">x</span>) <span class="op">=</span> <span class="ident">outcome</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">t</span>) <span class="op">=</span> <span class="ident">Tab::Route</span>.<span class="ident">handle_action</span>::<span class="op">&lt;</span><span class="ident">RoutePlanner</span><span class="op">&gt;</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="ident">x</span>) {
<span class="kw">return</span> <span class="ident">t</span>;
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">t</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">files</span>.<span class="ident">on_click</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="ident">x</span>) {
<span class="comment">// Bit hacky...</span>
<span class="kw">if</span> <span class="macro">matches!</span>(<span class="ident">t</span>, <span class="ident">Transition::Keep</span>) {
<span class="self">self</span>.<span class="ident">sync_from_file_management</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
}
<span class="kw">return</span> <span class="ident">t</span>;
}
}
<span class="kw">if</span> <span class="kw">let</span> <span class="ident">Outcome::Changed</span>(<span class="kw-2">ref</span> <span class="ident">x</span>) <span class="op">=</span> <span class="ident">outcome</span> {
<span class="kw">if</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;avoid_steep_incline_penalty&quot;</span> <span class="op">|</span><span class="op">|</span> <span class="ident">x</span> <span class="op">=</span><span class="op">=</span> <span class="string">&quot;avoid_high_stress&quot;</span> {
<span class="ident">app</span>.<span class="ident">session</span>.<span class="ident">routing_params</span>.<span class="ident">avoid_steep_incline_penalty</span> <span class="op">=</span> <span class="ident">MAX_AVOID_PARAM</span>
<span class="op">*</span> <span class="self">self</span>
.<span class="ident">input_panel</span>
.<span class="ident">slider</span>(<span class="string">&quot;avoid_steep_incline_penalty&quot;</span>)
.<span class="ident">get_percent</span>();
<span class="ident">app</span>.<span class="ident">session</span>.<span class="ident">routing_params</span>.<span class="ident">avoid_high_stress</span> <span class="op">=</span>
<span class="ident">MAX_AVOID_PARAM</span> <span class="op">*</span> <span class="self">self</span>.<span class="ident">input_panel</span>.<span class="ident">slider</span>(<span class="string">&quot;avoid_high_stress&quot;</span>).<span class="ident">get_percent</span>();
<span class="self">self</span>.<span class="ident">update_input_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
<span class="kw">return</span> <span class="ident">Transition::Keep</span>;
}
}
<span class="comment">// Send all other outcomes here</span>
<span class="comment">// TODO This routing of outcomes and the brittle ordering totally breaks encapsulation :(</span>
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">t</span>) <span class="op">=</span> <span class="self">self</span>
.<span class="ident">results</span>
.<span class="ident">event</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="kw-2">&amp;</span><span class="ident">outcome</span>, <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="ident">input_panel</span>)
{
<span class="kw">return</span> <span class="ident">t</span>;
}
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">waypoints</span>.<span class="ident">event</span>(<span class="ident">ctx</span>, <span class="ident">app</span>, <span class="ident">outcome</span>) {
<span class="comment">// Sync from waypoints to file management</span>
<span class="comment">// TODO Maaaybe this directly live in the InputWaypoints system?</span>
<span class="self">self</span>.<span class="ident">files</span>.<span class="ident">current</span>.<span class="ident">waypoints</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">waypoints</span>.<span class="ident">get_waypoints</span>();
<span class="self">self</span>.<span class="ident">update_input_panel</span>(<span class="ident">ctx</span>, <span class="ident">app</span>);
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">t</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">layers</span>.<span class="ident">event</span>(<span class="ident">ctx</span>, <span class="ident">app</span>) {
<span class="kw">return</span> <span class="ident">t</span>;
}
<span class="self">self</span>.<span class="ident">alt_low_stress_route</span>.<span class="ident">event</span>(<span class="ident">ctx</span>);
<span class="ident">Transition::Keep</span>
}
<span class="kw">fn</span> <span class="ident">draw</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">g</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">GfxCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) {
<span class="self">self</span>.<span class="ident">layers</span>.<span class="ident">draw</span>(<span class="ident">g</span>, <span class="ident">app</span>);
<span class="self">self</span>.<span class="ident">input_panel</span>.<span class="ident">draw</span>(<span class="ident">g</span>);
<span class="self">self</span>.<span class="ident">waypoints</span>.<span class="ident">draw</span>(<span class="ident">g</span>);
<span class="self">self</span>.<span class="ident">results</span>.<span class="ident">draw</span>(<span class="ident">g</span>, <span class="ident">app</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">input_panel</span>);
<span class="self">self</span>.<span class="ident">alt_low_stress_route</span>.<span class="ident">draw</span>(<span class="ident">g</span>, <span class="ident">app</span>);
}
}
</pre></div>
</section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="game" data-search-index-js="../../../../search-index.js" data-search-js="../../../../search.js"></div>
<script src="../../../../main.js"></script><script src="../../../../source-script.js"></script><script src="../../../../source-files.js"></script>
</body></html>

View File

@ -0,0 +1,833 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `game&#x2F;src&#x2F;ungap&#x2F;route&#x2F;results.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>results.rs - source</title><link rel="stylesheet" type="text/css" href="../../../../normalize.css"><link rel="stylesheet" type="text/css" href="../../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../ayu.css" disabled ><script id="default-settings" ></script><script src="../../../../storage.js"></script><script src="../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg"><link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../down-arrow.svg");}</style></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../game/index.html'><div class='logo-container rust-logo'><img src='../../../../rust-logo.png' alt='logo'></div></a></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input"name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../../../wheel.svg"></a></div></form></nav><section id="main" class="content"><div class="example-wrap"><pre class="line-numbers"><span id="1"> 1</span>
<span id="2"> 2</span>
<span id="3"> 3</span>
<span id="4"> 4</span>
<span id="5"> 5</span>
<span id="6"> 6</span>
<span id="7"> 7</span>
<span id="8"> 8</span>
<span id="9"> 9</span>
<span id="10"> 10</span>
<span id="11"> 11</span>
<span id="12"> 12</span>
<span id="13"> 13</span>
<span id="14"> 14</span>
<span id="15"> 15</span>
<span id="16"> 16</span>
<span id="17"> 17</span>
<span id="18"> 18</span>
<span id="19"> 19</span>
<span id="20"> 20</span>
<span id="21"> 21</span>
<span id="22"> 22</span>
<span id="23"> 23</span>
<span id="24"> 24</span>
<span id="25"> 25</span>
<span id="26"> 26</span>
<span id="27"> 27</span>
<span id="28"> 28</span>
<span id="29"> 29</span>
<span id="30"> 30</span>
<span id="31"> 31</span>
<span id="32"> 32</span>
<span id="33"> 33</span>
<span id="34"> 34</span>
<span id="35"> 35</span>
<span id="36"> 36</span>
<span id="37"> 37</span>
<span id="38"> 38</span>
<span id="39"> 39</span>
<span id="40"> 40</span>
<span id="41"> 41</span>
<span id="42"> 42</span>
<span id="43"> 43</span>
<span id="44"> 44</span>
<span id="45"> 45</span>
<span id="46"> 46</span>
<span id="47"> 47</span>
<span id="48"> 48</span>
<span id="49"> 49</span>
<span id="50"> 50</span>
<span id="51"> 51</span>
<span id="52"> 52</span>
<span id="53"> 53</span>
<span id="54"> 54</span>
<span id="55"> 55</span>
<span id="56"> 56</span>
<span id="57"> 57</span>
<span id="58"> 58</span>
<span id="59"> 59</span>
<span id="60"> 60</span>
<span id="61"> 61</span>
<span id="62"> 62</span>
<span id="63"> 63</span>
<span id="64"> 64</span>
<span id="65"> 65</span>
<span id="66"> 66</span>
<span id="67"> 67</span>
<span id="68"> 68</span>
<span id="69"> 69</span>
<span id="70"> 70</span>
<span id="71"> 71</span>
<span id="72"> 72</span>
<span id="73"> 73</span>
<span id="74"> 74</span>
<span id="75"> 75</span>
<span id="76"> 76</span>
<span id="77"> 77</span>
<span id="78"> 78</span>
<span id="79"> 79</span>
<span id="80"> 80</span>
<span id="81"> 81</span>
<span id="82"> 82</span>
<span id="83"> 83</span>
<span id="84"> 84</span>
<span id="85"> 85</span>
<span id="86"> 86</span>
<span id="87"> 87</span>
<span id="88"> 88</span>
<span id="89"> 89</span>
<span id="90"> 90</span>
<span id="91"> 91</span>
<span id="92"> 92</span>
<span id="93"> 93</span>
<span id="94"> 94</span>
<span id="95"> 95</span>
<span id="96"> 96</span>
<span id="97"> 97</span>
<span id="98"> 98</span>
<span id="99"> 99</span>
<span id="100">100</span>
<span id="101">101</span>
<span id="102">102</span>
<span id="103">103</span>
<span id="104">104</span>
<span id="105">105</span>
<span id="106">106</span>
<span id="107">107</span>
<span id="108">108</span>
<span id="109">109</span>
<span id="110">110</span>
<span id="111">111</span>
<span id="112">112</span>
<span id="113">113</span>
<span id="114">114</span>
<span id="115">115</span>
<span id="116">116</span>
<span id="117">117</span>
<span id="118">118</span>
<span id="119">119</span>
<span id="120">120</span>
<span id="121">121</span>
<span id="122">122</span>
<span id="123">123</span>
<span id="124">124</span>
<span id="125">125</span>
<span id="126">126</span>
<span id="127">127</span>
<span id="128">128</span>
<span id="129">129</span>
<span id="130">130</span>
<span id="131">131</span>
<span id="132">132</span>
<span id="133">133</span>
<span id="134">134</span>
<span id="135">135</span>
<span id="136">136</span>
<span id="137">137</span>
<span id="138">138</span>
<span id="139">139</span>
<span id="140">140</span>
<span id="141">141</span>
<span id="142">142</span>
<span id="143">143</span>
<span id="144">144</span>
<span id="145">145</span>
<span id="146">146</span>
<span id="147">147</span>
<span id="148">148</span>
<span id="149">149</span>
<span id="150">150</span>
<span id="151">151</span>
<span id="152">152</span>
<span id="153">153</span>
<span id="154">154</span>
<span id="155">155</span>
<span id="156">156</span>
<span id="157">157</span>
<span id="158">158</span>
<span id="159">159</span>
<span id="160">160</span>
<span id="161">161</span>
<span id="162">162</span>
<span id="163">163</span>
<span id="164">164</span>
<span id="165">165</span>
<span id="166">166</span>
<span id="167">167</span>
<span id="168">168</span>
<span id="169">169</span>
<span id="170">170</span>
<span id="171">171</span>
<span id="172">172</span>
<span id="173">173</span>
<span id="174">174</span>
<span id="175">175</span>
<span id="176">176</span>
<span id="177">177</span>
<span id="178">178</span>
<span id="179">179</span>
<span id="180">180</span>
<span id="181">181</span>
<span id="182">182</span>
<span id="183">183</span>
<span id="184">184</span>
<span id="185">185</span>
<span id="186">186</span>
<span id="187">187</span>
<span id="188">188</span>
<span id="189">189</span>
<span id="190">190</span>
<span id="191">191</span>
<span id="192">192</span>
<span id="193">193</span>
<span id="194">194</span>
<span id="195">195</span>
<span id="196">196</span>
<span id="197">197</span>
<span id="198">198</span>
<span id="199">199</span>
<span id="200">200</span>
<span id="201">201</span>
<span id="202">202</span>
<span id="203">203</span>
<span id="204">204</span>
<span id="205">205</span>
<span id="206">206</span>
<span id="207">207</span>
<span id="208">208</span>
<span id="209">209</span>
<span id="210">210</span>
<span id="211">211</span>
<span id="212">212</span>
<span id="213">213</span>
<span id="214">214</span>
<span id="215">215</span>
<span id="216">216</span>
<span id="217">217</span>
<span id="218">218</span>
<span id="219">219</span>
<span id="220">220</span>
<span id="221">221</span>
<span id="222">222</span>
<span id="223">223</span>
<span id="224">224</span>
<span id="225">225</span>
<span id="226">226</span>
<span id="227">227</span>
<span id="228">228</span>
<span id="229">229</span>
<span id="230">230</span>
<span id="231">231</span>
<span id="232">232</span>
<span id="233">233</span>
<span id="234">234</span>
<span id="235">235</span>
<span id="236">236</span>
<span id="237">237</span>
<span id="238">238</span>
<span id="239">239</span>
<span id="240">240</span>
<span id="241">241</span>
<span id="242">242</span>
<span id="243">243</span>
<span id="244">244</span>
<span id="245">245</span>
<span id="246">246</span>
<span id="247">247</span>
<span id="248">248</span>
<span id="249">249</span>
<span id="250">250</span>
<span id="251">251</span>
<span id="252">252</span>
<span id="253">253</span>
<span id="254">254</span>
<span id="255">255</span>
<span id="256">256</span>
<span id="257">257</span>
<span id="258">258</span>
<span id="259">259</span>
<span id="260">260</span>
<span id="261">261</span>
<span id="262">262</span>
<span id="263">263</span>
<span id="264">264</span>
<span id="265">265</span>
<span id="266">266</span>
<span id="267">267</span>
<span id="268">268</span>
<span id="269">269</span>
<span id="270">270</span>
<span id="271">271</span>
<span id="272">272</span>
<span id="273">273</span>
<span id="274">274</span>
<span id="275">275</span>
<span id="276">276</span>
<span id="277">277</span>
<span id="278">278</span>
<span id="279">279</span>
<span id="280">280</span>
<span id="281">281</span>
<span id="282">282</span>
<span id="283">283</span>
<span id="284">284</span>
<span id="285">285</span>
<span id="286">286</span>
<span id="287">287</span>
<span id="288">288</span>
<span id="289">289</span>
<span id="290">290</span>
<span id="291">291</span>
<span id="292">292</span>
<span id="293">293</span>
<span id="294">294</span>
<span id="295">295</span>
<span id="296">296</span>
<span id="297">297</span>
<span id="298">298</span>
<span id="299">299</span>
<span id="300">300</span>
<span id="301">301</span>
<span id="302">302</span>
<span id="303">303</span>
<span id="304">304</span>
<span id="305">305</span>
<span id="306">306</span>
<span id="307">307</span>
<span id="308">308</span>
<span id="309">309</span>
<span id="310">310</span>
<span id="311">311</span>
<span id="312">312</span>
<span id="313">313</span>
<span id="314">314</span>
<span id="315">315</span>
<span id="316">316</span>
<span id="317">317</span>
<span id="318">318</span>
<span id="319">319</span>
<span id="320">320</span>
<span id="321">321</span>
<span id="322">322</span>
<span id="323">323</span>
<span id="324">324</span>
<span id="325">325</span>
<span id="326">326</span>
<span id="327">327</span>
<span id="328">328</span>
<span id="329">329</span>
<span id="330">330</span>
<span id="331">331</span>
<span id="332">332</span>
<span id="333">333</span>
<span id="334">334</span>
<span id="335">335</span>
<span id="336">336</span>
<span id="337">337</span>
<span id="338">338</span>
<span id="339">339</span>
<span id="340">340</span>
<span id="341">341</span>
<span id="342">342</span>
<span id="343">343</span>
<span id="344">344</span>
<span id="345">345</span>
<span id="346">346</span>
<span id="347">347</span>
<span id="348">348</span>
<span id="349">349</span>
<span id="350">350</span>
<span id="351">351</span>
<span id="352">352</span>
<span id="353">353</span>
<span id="354">354</span>
<span id="355">355</span>
<span id="356">356</span>
<span id="357">357</span>
<span id="358">358</span>
<span id="359">359</span>
<span id="360">360</span>
<span id="361">361</span>
<span id="362">362</span>
<span id="363">363</span>
<span id="364">364</span>
<span id="365">365</span>
<span id="366">366</span>
<span id="367">367</span>
<span id="368">368</span>
<span id="369">369</span>
<span id="370">370</span>
<span id="371">371</span>
<span id="372">372</span>
<span id="373">373</span>
<span id="374">374</span>
<span id="375">375</span>
<span id="376">376</span>
<span id="377">377</span>
<span id="378">378</span>
<span id="379">379</span>
<span id="380">380</span>
<span id="381">381</span>
<span id="382">382</span>
<span id="383">383</span>
<span id="384">384</span>
<span id="385">385</span>
<span id="386">386</span>
<span id="387">387</span>
<span id="388">388</span>
<span id="389">389</span>
<span id="390">390</span>
<span id="391">391</span>
<span id="392">392</span>
<span id="393">393</span>
<span id="394">394</span>
<span id="395">395</span>
<span id="396">396</span>
<span id="397">397</span>
<span id="398">398</span>
<span id="399">399</span>
<span id="400">400</span>
<span id="401">401</span>
<span id="402">402</span>
<span id="403">403</span>
<span id="404">404</span>
<span id="405">405</span>
<span id="406">406</span>
<span id="407">407</span>
<span id="408">408</span>
<span id="409">409</span>
<span id="410">410</span>
<span id="411">411</span>
<span id="412">412</span>
<span id="413">413</span>
<span id="414">414</span>
</pre><pre class="rust">
<span class="kw">use</span> <span class="ident">std::collections::HashSet</span>;
<span class="kw">use</span> <span class="ident">geom</span>::{<span class="ident">Circle</span>, <span class="ident">Distance</span>, <span class="ident">Duration</span>, <span class="ident">FindClosest</span>, <span class="ident">PolyLine</span>};
<span class="kw">use</span> <span class="ident">map_gui::tools</span>::{<span class="ident">PopupMsg</span>, <span class="ident">ToggleZoomed</span>};
<span class="kw">use</span> <span class="ident">map_model</span>::{<span class="ident">Path</span>, <span class="ident">PathStep</span>, <span class="ident">RoutingParams</span>, <span class="ident">NORMAL_LANE_THICKNESS</span>};
<span class="kw">use</span> <span class="ident">sim</span>::{<span class="ident">TripEndpoint</span>, <span class="ident">TripMode</span>};
<span class="kw">use</span> <span class="ident">widgetry</span>::{
<span class="ident">Color</span>, <span class="ident">Drawable</span>, <span class="ident">EventCtx</span>, <span class="ident">GeomBatch</span>, <span class="ident">GfxCtx</span>, <span class="ident">Line</span>, <span class="ident">LinePlot</span>, <span class="ident">Outcome</span>, <span class="ident">Panel</span>, <span class="ident">PlotOptions</span>,
<span class="ident">Series</span>, <span class="ident">Text</span>, <span class="ident">Widget</span>,
};
<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::app</span>::{<span class="ident">App</span>, <span class="ident">Transition</span>};
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">RouteResults</span> {
<span class="comment">// It&#39;s tempting to glue together all of the paths. But since some waypoints might force the</span>
<span class="comment">// path to double back on itself, rendering the path as a single PolyLine would break.</span>
<span class="ident">paths</span>: <span class="ident">Vec</span><span class="op">&lt;</span>(<span class="ident">Path</span>, <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">PolyLine</span><span class="op">&gt;</span>)<span class="op">&gt;</span>,
<span class="comment">// Match each polyline to the index in paths</span>
<span class="ident">closest_path_segment</span>: <span class="ident">FindClosest</span><span class="op">&lt;</span><span class="ident">usize</span><span class="op">&gt;</span>,
<span class="ident">hover_on_line_plot</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span>(<span class="ident">Distance</span>, <span class="ident">Drawable</span>)<span class="op">&gt;</span>,
<span class="ident">hover_on_route_tooltip</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Text</span><span class="op">&gt;</span>,
<span class="ident">draw_route</span>: <span class="ident">ToggleZoomed</span>,
<span class="ident">draw_high_stress</span>: <span class="ident">Drawable</span>,
<span class="ident">draw_traffic_signals</span>: <span class="ident">Drawable</span>,
<span class="ident">draw_unprotected_turns</span>: <span class="ident">Drawable</span>,
}
<span class="kw">impl</span> <span class="ident">RouteResults</span> {
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">main_route</span>(
<span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>,
<span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>,
<span class="ident">waypoints</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">TripEndpoint</span><span class="op">&gt;</span>,
) <span class="op">-</span><span class="op">&gt;</span> (<span class="ident">RouteResults</span>, <span class="ident">Widget</span>) {
<span class="ident">RouteResults::new</span>(
<span class="ident">ctx</span>,
<span class="ident">app</span>,
<span class="ident">waypoints</span>,
<span class="ident">Color::CYAN</span>,
<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">session</span>.<span class="ident">routing_params</span>,
)
}
<span class="kw">fn</span> <span class="ident">new</span>(
<span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>,
<span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>,
<span class="ident">waypoints</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">TripEndpoint</span><span class="op">&gt;</span>,
<span class="ident">route_color</span>: <span class="ident">Color</span>,
<span class="ident">params</span>: <span class="kw-2">&amp;</span><span class="ident">RoutingParams</span>,
) <span class="op">-</span><span class="op">&gt;</span> (<span class="ident">RouteResults</span>, <span class="ident">Widget</span>) {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">draw_route</span> <span class="op">=</span> <span class="ident">ToggleZoomed::builder</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">draw_high_stress</span> <span class="op">=</span> <span class="ident">GeomBatch::new</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">draw_traffic_signals</span> <span class="op">=</span> <span class="ident">GeomBatch::new</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">draw_unprotected_turns</span> <span class="op">=</span> <span class="ident">GeomBatch::new</span>();
<span class="kw">let</span> <span class="ident">map</span> <span class="op">=</span> <span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">map</span>;
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">total_distance</span> <span class="op">=</span> <span class="ident">Distance::ZERO</span>;
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">total_time</span> <span class="op">=</span> <span class="ident">Duration::ZERO</span>;
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">dist_along_high_stress_roads</span> <span class="op">=</span> <span class="ident">Distance::ZERO</span>;
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">num_traffic_signals</span> <span class="op">=</span> <span class="number">0</span>;
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">num_unprotected_turns</span> <span class="op">=</span> <span class="number">0</span>;
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">elevation_pts</span>: <span class="ident">Vec</span><span class="op">&lt;</span>(<span class="ident">Distance</span>, <span class="ident">Distance</span>)<span class="op">&gt;</span> <span class="op">=</span> <span class="ident">Vec::new</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">current_dist</span> <span class="op">=</span> <span class="ident">Distance::ZERO</span>;
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">paths</span> <span class="op">=</span> <span class="ident">Vec::new</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">closest_path_segment</span> <span class="op">=</span> <span class="ident">FindClosest::new</span>(<span class="ident">map</span>.<span class="ident">get_bounds</span>());
<span class="kw">for</span> <span class="ident">pair</span> <span class="kw">in</span> <span class="ident">waypoints</span>.<span class="ident">windows</span>(<span class="number">2</span>) {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">path</span>) <span class="op">=</span> <span class="ident">TripEndpoint::path_req</span>(<span class="ident">pair</span>[<span class="number">0</span>], <span class="ident">pair</span>[<span class="number">1</span>], <span class="ident">TripMode::Bike</span>, <span class="ident">map</span>)
.<span class="ident">and_then</span>(<span class="op">|</span><span class="ident">req</span><span class="op">|</span> <span class="ident">map</span>.<span class="ident">pathfind_with_params</span>(<span class="ident">req</span>, <span class="ident">params</span>).<span class="ident">ok</span>())
{
<span class="ident">total_distance</span> <span class="op">+</span><span class="op">=</span> <span class="ident">path</span>.<span class="ident">total_length</span>();
<span class="ident">total_time</span> <span class="op">+</span><span class="op">=</span> <span class="ident">path</span>.<span class="ident">estimate_duration</span>(<span class="ident">map</span>, <span class="prelude-val">Some</span>(<span class="ident">map_model::MAX_BIKE_SPEED</span>));
<span class="kw">for</span> <span class="ident">step</span> <span class="kw">in</span> <span class="ident">path</span>.<span class="ident">get_steps</span>() {
<span class="kw">let</span> <span class="ident">this_pl</span> <span class="op">=</span> <span class="ident">step</span>.<span class="ident">as_traversable</span>().<span class="ident">get_polyline</span>(<span class="ident">map</span>);
<span class="kw">match</span> <span class="ident">step</span> {
<span class="ident">PathStep::Lane</span>(<span class="ident">l</span>) <span class="op">|</span> <span class="ident">PathStep::ContraflowLane</span>(<span class="ident">l</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="ident">map</span>.<span class="ident">get_parent</span>(<span class="kw-2">*</span><span class="ident">l</span>).<span class="ident">high_stress_for_bikes</span>(<span class="ident">map</span>) {
<span class="ident">dist_along_high_stress_roads</span> <span class="op">+</span><span class="op">=</span> <span class="ident">this_pl</span>.<span class="ident">length</span>();
<span class="comment">// TODO It&#39;d be nicer to build up contiguous subsets of the path</span>
<span class="comment">// that&#39;re stressful, and use trace</span>
<span class="ident">draw_high_stress</span>.<span class="ident">push</span>(
<span class="ident">Color::RED</span>,
<span class="ident">this_pl</span>.<span class="ident">make_polygons</span>(<span class="number">5.0</span> <span class="op">*</span> <span class="ident">NORMAL_LANE_THICKNESS</span>),
);
}
}
<span class="ident">PathStep::Turn</span>(<span class="ident">t</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">i</span> <span class="op">=</span> <span class="ident">map</span>.<span class="ident">get_i</span>(<span class="ident">t</span>.<span class="ident">parent</span>);
<span class="ident">elevation_pts</span>.<span class="ident">push</span>((<span class="ident">current_dist</span>, <span class="ident">i</span>.<span class="ident">elevation</span>));
<span class="kw">if</span> <span class="ident">i</span>.<span class="ident">is_traffic_signal</span>() {
<span class="ident">num_traffic_signals</span> <span class="op">+</span><span class="op">=</span> <span class="number">1</span>;
<span class="ident">draw_traffic_signals</span>.<span class="ident">push</span>(<span class="ident">Color::RED</span>, <span class="ident">i</span>.<span class="ident">polygon</span>.<span class="ident">clone</span>());
}
<span class="kw">if</span> <span class="ident">map</span>.<span class="ident">is_unprotected_turn</span>(
<span class="ident">t</span>.<span class="ident">src</span>.<span class="ident">road</span>,
<span class="ident">t</span>.<span class="ident">dst</span>.<span class="ident">road</span>,
<span class="ident">map</span>.<span class="ident">get_t</span>(<span class="kw-2">*</span><span class="ident">t</span>).<span class="ident">turn_type</span>,
) {
<span class="ident">num_unprotected_turns</span> <span class="op">+</span><span class="op">=</span> <span class="number">1</span>;
<span class="ident">draw_unprotected_turns</span>.<span class="ident">push</span>(<span class="ident">Color::RED</span>, <span class="ident">i</span>.<span class="ident">polygon</span>.<span class="ident">clone</span>());
}
}
}
<span class="ident">current_dist</span> <span class="op">+</span><span class="op">=</span> <span class="ident">this_pl</span>.<span class="ident">length</span>();
}
<span class="kw">let</span> <span class="ident">maybe_pl</span> <span class="op">=</span> <span class="ident">path</span>.<span class="ident">trace</span>(<span class="ident">map</span>);
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">pl</span>) <span class="op">=</span> <span class="ident">maybe_pl</span> {
<span class="kw">let</span> <span class="ident">shape</span> <span class="op">=</span> <span class="ident">pl</span>.<span class="ident">make_polygons</span>(<span class="number">5.0</span> <span class="op">*</span> <span class="ident">NORMAL_LANE_THICKNESS</span>);
<span class="ident">draw_route</span>
.<span class="ident">unzoomed</span>
.<span class="ident">push</span>(<span class="ident">route_color</span>.<span class="ident">alpha</span>(<span class="number">0.8</span>), <span class="ident">shape</span>.<span class="ident">clone</span>());
<span class="ident">draw_route</span>.<span class="ident">zoomed</span>.<span class="ident">push</span>(<span class="ident">route_color</span>.<span class="ident">alpha</span>(<span class="number">0.5</span>), <span class="ident">shape</span>);
<span class="ident">closest_path_segment</span>.<span class="ident">add</span>(<span class="ident">paths</span>.<span class="ident">len</span>(), <span class="ident">pl</span>.<span class="ident">points</span>());
}
<span class="ident">paths</span>.<span class="ident">push</span>((<span class="ident">path</span>, <span class="ident">maybe_pl</span>));
}
}
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">total_up</span> <span class="op">=</span> <span class="ident">Distance::ZERO</span>;
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">total_down</span> <span class="op">=</span> <span class="ident">Distance::ZERO</span>;
<span class="kw">for</span> <span class="ident">pair</span> <span class="kw">in</span> <span class="ident">elevation_pts</span>.<span class="ident">windows</span>(<span class="number">2</span>) {
<span class="kw">let</span> <span class="ident">dy</span> <span class="op">=</span> <span class="ident">pair</span>[<span class="number">1</span>].<span class="number">1</span> <span class="op">-</span> <span class="ident">pair</span>[<span class="number">0</span>].<span class="number">1</span>;
<span class="kw">if</span> <span class="ident">dy</span> <span class="op">&lt;</span> <span class="ident">Distance::ZERO</span> {
<span class="ident">total_down</span> <span class="op">-</span><span class="op">=</span> <span class="ident">dy</span>;
} <span class="kw">else</span> {
<span class="ident">total_up</span> <span class="op">+</span><span class="op">=</span> <span class="ident">dy</span>;
}
}
<span class="kw">let</span> <span class="ident">pct_stressful</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident">total_distance</span> <span class="op">=</span><span class="op">=</span> <span class="ident">Distance::ZERO</span> {
<span class="number">0.0</span>
} <span class="kw">else</span> {
((<span class="ident">dist_along_high_stress_roads</span> <span class="op">/</span> <span class="ident">total_distance</span>) <span class="op">*</span> <span class="number">100.0</span>).<span class="ident">round</span>()
};
<span class="kw">let</span> <span class="ident">widget</span> <span class="op">=</span> <span class="ident">Widget::col</span>(<span class="macro">vec!</span>[
<span class="ident">Line</span>(<span class="string">&quot;Route details&quot;</span>).<span class="ident">small_heading</span>().<span class="ident">into_widget</span>(<span class="ident">ctx</span>),
<span class="ident">Text::from_all</span>(<span class="macro">vec!</span>[
<span class="ident">Line</span>(<span class="string">&quot;Distance: &quot;</span>).<span class="ident">secondary</span>(),
<span class="ident">Line</span>(<span class="ident">total_distance</span>.<span class="ident">to_string</span>(<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">units</span>)),
])
.<span class="ident">into_widget</span>(<span class="ident">ctx</span>),
<span class="ident">Widget::row</span>(<span class="macro">vec!</span>[
<span class="ident">Text::from_all</span>(<span class="macro">vec!</span>[
<span class="ident">Line</span>(<span class="macro">format!</span>(
<span class="string">&quot; {} or {}%&quot;</span>,
<span class="ident">dist_along_high_stress_roads</span>.<span class="ident">to_string</span>(<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">units</span>),
<span class="ident">pct_stressful</span>
)),
<span class="ident">Line</span>(<span class="string">&quot; along &quot;</span>).<span class="ident">secondary</span>(),
])
.<span class="ident">into_widget</span>(<span class="ident">ctx</span>)
.<span class="ident">centered_vert</span>(),
<span class="ident">ctx</span>.<span class="ident">style</span>()
.<span class="ident">btn_plain</span>
.<span class="ident">btn</span>()
.<span class="ident">label_underlined_text</span>(<span class="string">&quot;high-stress roads&quot;</span>)
.<span class="ident">build_def</span>(<span class="ident">ctx</span>),
]),
<span class="ident">Text::from_all</span>(<span class="macro">vec!</span>[
<span class="ident">Line</span>(<span class="string">&quot;Estimated time: &quot;</span>).<span class="ident">secondary</span>(),
<span class="ident">Line</span>(<span class="ident">total_time</span>.<span class="ident">to_string</span>(<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">units</span>)),
])
.<span class="ident">into_widget</span>(<span class="ident">ctx</span>),
<span class="ident">Widget::row</span>(<span class="macro">vec!</span>[
<span class="ident">Line</span>(<span class="string">&quot;Traffic signals crossed: &quot;</span>)
.<span class="ident">secondary</span>()
.<span class="ident">into_widget</span>(<span class="ident">ctx</span>)
.<span class="ident">centered_vert</span>(),
<span class="ident">ctx</span>.<span class="ident">style</span>()
.<span class="ident">btn_plain</span>
.<span class="ident">btn</span>()
.<span class="ident">label_underlined_text</span>(<span class="ident">num_traffic_signals</span>.<span class="ident">to_string</span>())
.<span class="ident">build_widget</span>(<span class="ident">ctx</span>, <span class="string">&quot;traffic signals&quot;</span>),
]),
<span class="ident">Widget::row</span>(<span class="macro">vec!</span>[
<span class="ident">Line</span>(<span class="string">&quot;Unprotected left turns onto busy roads: &quot;</span>)
.<span class="ident">secondary</span>()
.<span class="ident">into_widget</span>(<span class="ident">ctx</span>)
.<span class="ident">centered_vert</span>(),
<span class="ident">ctx</span>.<span class="ident">style</span>()
.<span class="ident">btn_plain</span>
.<span class="ident">btn</span>()
.<span class="ident">label_underlined_text</span>(<span class="ident">num_unprotected_turns</span>.<span class="ident">to_string</span>())
.<span class="ident">build_widget</span>(<span class="ident">ctx</span>, <span class="string">&quot;unprotected turns&quot;</span>),
]),
<span class="ident">Text::from_all</span>(<span class="macro">vec!</span>[
<span class="ident">Line</span>(<span class="string">&quot;Elevation change: &quot;</span>).<span class="ident">secondary</span>(),
<span class="ident">Line</span>(<span class="macro">format!</span>(
<span class="string">&quot;{}↑, {}↓&quot;</span>,
<span class="ident">total_up</span>.<span class="ident">to_string</span>(<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">units</span>),
<span class="ident">total_down</span>.<span class="ident">to_string</span>(<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">units</span>)
)),
])
.<span class="ident">into_widget</span>(<span class="ident">ctx</span>),
<span class="ident">LinePlot::new_widget</span>(
<span class="ident">ctx</span>,
<span class="string">&quot;elevation&quot;</span>,
<span class="macro">vec!</span>[<span class="ident">Series</span> {
<span class="ident">label</span>: <span class="string">&quot;Elevation&quot;</span>.<span class="ident">to_string</span>(),
<span class="ident">color</span>: <span class="ident">Color::RED</span>,
<span class="ident">pts</span>: <span class="ident">elevation_pts</span>,
}],
<span class="ident">PlotOptions</span> {
<span class="ident">filterable</span>: <span class="bool-val">false</span>,
<span class="ident">max_x</span>: <span class="prelude-val">Some</span>(<span class="ident">current_dist</span>.<span class="ident">round_up_for_axis</span>()),
<span class="ident">max_y</span>: <span class="prelude-val">Some</span>(<span class="ident">map</span>.<span class="ident">max_elevation</span>().<span class="ident">round_up_for_axis</span>()),
<span class="ident">disabled</span>: <span class="ident">HashSet::new</span>(),
},
<span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">units</span>,
),
]);
(
<span class="ident">RouteResults</span> {
<span class="ident">draw_route</span>: <span class="ident">draw_route</span>.<span class="ident">build</span>(<span class="ident">ctx</span>),
<span class="ident">draw_high_stress</span>: <span class="ident">ctx</span>.<span class="ident">upload</span>(<span class="ident">draw_high_stress</span>),
<span class="ident">draw_traffic_signals</span>: <span class="ident">ctx</span>.<span class="ident">upload</span>(<span class="ident">draw_traffic_signals</span>),
<span class="ident">draw_unprotected_turns</span>: <span class="ident">ctx</span>.<span class="ident">upload</span>(<span class="ident">draw_unprotected_turns</span>),
<span class="ident">paths</span>,
<span class="ident">closest_path_segment</span>,
<span class="ident">hover_on_line_plot</span>: <span class="prelude-val">None</span>,
<span class="ident">hover_on_route_tooltip</span>: <span class="prelude-val">None</span>,
},
<span class="ident">widget</span>,
)
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">event</span>(
<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>,
<span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>,
<span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>,
<span class="ident">outcome</span>: <span class="kw-2">&amp;</span><span class="ident">Outcome</span>,
<span class="ident">panel</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">Panel</span>,
) <span class="op">-</span><span class="op">&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Transition</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="ident">Outcome::Clicked</span>(<span class="ident">x</span>) <span class="op">=</span> <span class="ident">outcome</span> {
<span class="kw">match</span> <span class="ident">x</span>.<span class="ident">as_ref</span>() {
<span class="string">&quot;high-stress roads&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition::Push</span>(<span class="ident">PopupMsg::new_state</span>(
<span class="ident">ctx</span>,
<span class="string">&quot;High-stress roads&quot;</span>,
<span class="macro">vec!</span>[
<span class="string">&quot;Roads are defined as high-stress for biking if:&quot;</span>,
<span class="string">&quot;- they&#39;re classified as arterials&quot;</span>,
<span class="string">&quot;- they lack dedicated space for biking&quot;</span>,
],
)));
}
<span class="comment">// No effect. Maybe these should be toggles, so people can pan the map around and</span>
<span class="comment">// see these in more detail?</span>
<span class="string">&quot;traffic signals&quot;</span> <span class="op">|</span> <span class="string">&quot;unprotected turns&quot;</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">Transition::Keep</span>);
}
<span class="kw">_</span> <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">return</span> <span class="prelude-val">None</span>;
}
}
}
<span class="kw">let</span> <span class="ident">current_dist_along</span> <span class="op">=</span> <span class="ident">panel</span>
.<span class="ident">find</span>::<span class="op">&lt;</span><span class="ident">LinePlot</span><span class="op">&lt;</span><span class="ident">Distance</span>, <span class="ident">Distance</span><span class="op">&gt;</span><span class="op">&gt;</span>(<span class="string">&quot;elevation&quot;</span>)
.<span class="ident">get_hovering</span>()
.<span class="ident">get</span>(<span class="number">0</span>)
.<span class="ident">map</span>(<span class="op">|</span><span class="ident">pair</span><span class="op">|</span> <span class="ident">pair</span>.<span class="number">0</span>);
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">hover_on_line_plot</span>.<span class="ident">as_ref</span>().<span class="ident">map</span>(<span class="op">|</span><span class="ident">pair</span><span class="op">|</span> <span class="ident">pair</span>.<span class="number">0</span>) <span class="op">!</span><span class="op">=</span> <span class="ident">current_dist_along</span> {
<span class="self">self</span>.<span class="ident">hover_on_line_plot</span> <span class="op">=</span> <span class="ident">current_dist_along</span>.<span class="ident">map</span>(<span class="op">|</span><span class="kw-2">mut</span> <span class="ident">dist</span><span class="op">|</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">batch</span> <span class="op">=</span> <span class="ident">GeomBatch::new</span>();
<span class="comment">// Find this position on the route</span>
<span class="kw">for</span> (<span class="ident">path</span>, <span class="ident">maybe_pl</span>) <span class="kw">in</span> <span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">paths</span> {
<span class="kw">if</span> <span class="ident">dist</span> <span class="op">&gt;</span> <span class="ident">path</span>.<span class="ident">total_length</span>() {
<span class="ident">dist</span> <span class="op">-</span><span class="op">=</span> <span class="ident">path</span>.<span class="ident">total_length</span>();
<span class="kw">continue</span>;
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">pl</span>) <span class="op">=</span> <span class="ident">maybe_pl</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Ok</span>((<span class="ident">pt</span>, <span class="kw">_</span>)) <span class="op">=</span> <span class="ident">pl</span>.<span class="ident">dist_along</span>(<span class="ident">dist</span>) {
<span class="ident">batch</span>.<span class="ident">push</span>(
<span class="ident">Color::CYAN</span>,
<span class="ident">Circle::new</span>(<span class="ident">pt</span>, <span class="ident">Distance::meters</span>(<span class="number">30.0</span>)).<span class="ident">to_polygon</span>(),
);
}
}
<span class="kw">break</span>;
}
(<span class="ident">dist</span>, <span class="ident">batch</span>.<span class="ident">upload</span>(<span class="ident">ctx</span>))
});
}
<span class="kw">if</span> <span class="ident">ctx</span>.<span class="ident">redo_mouseover</span>() {
<span class="self">self</span>.<span class="ident">hover_on_route_tooltip</span> <span class="op">=</span> <span class="prelude-val">None</span>;
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">pt</span>) <span class="op">=</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">get_cursor_in_map_space</span>() {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>((<span class="ident">idx</span>, <span class="ident">pt</span>)) <span class="op">=</span> <span class="self">self</span>
.<span class="ident">closest_path_segment</span>
.<span class="ident">closest_pt</span>(<span class="ident">pt</span>, <span class="number">10.0</span> <span class="op">*</span> <span class="ident">NORMAL_LANE_THICKNESS</span>)
{
<span class="comment">// Find the total distance along the route</span>
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">dist</span> <span class="op">=</span> <span class="ident">Distance::ZERO</span>;
<span class="kw">for</span> (<span class="ident">path</span>, <span class="kw">_</span>) <span class="kw">in</span> <span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">paths</span>[<span class="number">0</span>..<span class="ident">idx</span>] {
<span class="ident">dist</span> <span class="op">+</span><span class="op">=</span> <span class="ident">path</span>.<span class="ident">total_length</span>();
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">pl</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">paths</span>[<span class="ident">idx</span>].<span class="number">1</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>((<span class="ident">dist_here</span>, <span class="kw">_</span>)) <span class="op">=</span> <span class="ident">pl</span>.<span class="ident">dist_along_of_point</span>(<span class="ident">pt</span>) {
<span class="comment">// The LinePlot doesn&#39;t hold onto the original Series, so it can&#39;t help</span>
<span class="comment">// us figure out elevation here. Let&#39;s match this point to the original</span>
<span class="comment">// path and guess elevation ourselves...</span>
<span class="kw">let</span> <span class="ident">map</span> <span class="op">=</span> <span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">primary</span>.<span class="ident">map</span>;
<span class="kw">let</span> <span class="ident">elevation</span> <span class="op">=</span> <span class="kw">match</span> <span class="self">self</span>.<span class="ident">paths</span>[<span class="ident">idx</span>]
.<span class="number">0</span>
.<span class="ident">get_step_at_dist_along</span>(<span class="ident">map</span>, <span class="ident">dist_here</span>)
<span class="comment">// We often seem to slightly exceed the total length, so just clamp</span>
<span class="comment">// here...</span>
.<span class="ident">unwrap_or_else</span>(<span class="op">|</span><span class="kw">_</span><span class="op">|</span> <span class="self">self</span>.<span class="ident">paths</span>[<span class="ident">idx</span>].<span class="number">0</span>.<span class="ident">last_step</span>())
{
<span class="ident">PathStep::Lane</span>(<span class="ident">l</span>) <span class="op">|</span> <span class="ident">PathStep::ContraflowLane</span>(<span class="ident">l</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="comment">// TODO Interpolate</span>
<span class="ident">map</span>.<span class="ident">get_i</span>(<span class="ident">map</span>.<span class="ident">get_l</span>(<span class="ident">l</span>).<span class="ident">src_i</span>).<span class="ident">elevation</span>
}
<span class="ident">PathStep::Turn</span>(<span class="ident">t</span>) <span class="op">=</span><span class="op">&gt;</span> <span class="ident">map</span>.<span class="ident">get_i</span>(<span class="ident">t</span>.<span class="ident">parent</span>).<span class="ident">elevation</span>,
};
<span class="ident">panel</span>
.<span class="ident">find_mut</span>::<span class="op">&lt;</span><span class="ident">LinePlot</span><span class="op">&lt;</span><span class="ident">Distance</span>, <span class="ident">Distance</span><span class="op">&gt;</span><span class="op">&gt;</span>(<span class="string">&quot;elevation&quot;</span>)
.<span class="ident">set_hovering</span>(<span class="ident">ctx</span>, <span class="ident">dist</span> <span class="op">+</span> <span class="ident">dist_here</span>, <span class="ident">elevation</span>);
<span class="self">self</span>.<span class="ident">hover_on_route_tooltip</span> <span class="op">=</span> <span class="prelude-val">Some</span>(<span class="ident">Text::from</span>(<span class="ident">Line</span>(<span class="macro">format!</span>(
<span class="string">&quot;Elevation: {}&quot;</span>,
<span class="ident">elevation</span>.<span class="ident">to_string</span>(<span class="kw-2">&amp;</span><span class="ident">app</span>.<span class="ident">opts</span>.<span class="ident">units</span>)
))));
}
}
}
}
}
<span class="prelude-val">None</span>
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">draw</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">g</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">GfxCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>, <span class="ident">panel</span>: <span class="kw-2">&amp;</span><span class="ident">Panel</span>) {
<span class="self">self</span>.<span class="ident">draw_route</span>.<span class="ident">draw</span>(<span class="ident">g</span>, <span class="ident">app</span>);
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>((<span class="kw">_</span>, <span class="kw-2">ref</span> <span class="ident">draw</span>)) <span class="op">=</span> <span class="self">self</span>.<span class="ident">hover_on_line_plot</span> {
<span class="ident">g</span>.<span class="ident">redraw</span>(<span class="ident">draw</span>);
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">txt</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">hover_on_route_tooltip</span> {
<span class="ident">g</span>.<span class="ident">draw_mouse_tooltip</span>(<span class="ident">txt</span>.<span class="ident">clone</span>());
}
<span class="kw">if</span> <span class="ident">panel</span>.<span class="ident">currently_hovering</span>() <span class="op">=</span><span class="op">=</span> <span class="prelude-val">Some</span>(<span class="kw-2">&amp;</span><span class="string">&quot;high-stress roads&quot;</span>.<span class="ident">to_string</span>()) {
<span class="ident">g</span>.<span class="ident">redraw</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">draw_high_stress</span>);
}
<span class="kw">if</span> <span class="ident">panel</span>.<span class="ident">currently_hovering</span>() <span class="op">=</span><span class="op">=</span> <span class="prelude-val">Some</span>(<span class="kw-2">&amp;</span><span class="string">&quot;traffic signals&quot;</span>.<span class="ident">to_string</span>()) {
<span class="ident">g</span>.<span class="ident">redraw</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">draw_traffic_signals</span>);
}
<span class="kw">if</span> <span class="ident">panel</span>.<span class="ident">currently_hovering</span>() <span class="op">=</span><span class="op">=</span> <span class="prelude-val">Some</span>(<span class="kw-2">&amp;</span><span class="string">&quot;unprotected turns&quot;</span>.<span class="ident">to_string</span>()) {
<span class="ident">g</span>.<span class="ident">redraw</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">draw_unprotected_turns</span>);
}
}
}
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">AltRouteResults</span> {
<span class="ident">closest_path_segment</span>: <span class="ident">FindClosest</span><span class="op">&lt;</span><span class="ident">usize</span><span class="op">&gt;</span>,
<span class="ident">hovering</span>: <span class="ident">bool</span>,
<span class="ident">draw_route</span>: <span class="ident">ToggleZoomed</span>,
}
<span class="kw">impl</span> <span class="ident">AltRouteResults</span> {
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">low_stress</span>(
<span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>,
<span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>,
<span class="ident">waypoints</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">TripEndpoint</span><span class="op">&gt;</span>,
) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">AltRouteResults</span> {
<span class="kw">let</span> (<span class="ident">results</span>, <span class="kw">_</span>) <span class="op">=</span> <span class="ident">RouteResults::new</span>(
<span class="ident">ctx</span>,
<span class="ident">app</span>,
<span class="ident">waypoints</span>,
<span class="ident">Color::grey</span>(<span class="number">0.3</span>),
<span class="kw-2">&amp;</span><span class="ident">RoutingParams</span> {
<span class="ident">avoid_high_stress</span>: <span class="number">2.0</span>,
..<span class="ident">Default::default</span>()
},
);
<span class="ident">AltRouteResults</span> {
<span class="ident">closest_path_segment</span>: <span class="ident">results</span>.<span class="ident">closest_path_segment</span>,
<span class="ident">hovering</span>: <span class="bool-val">false</span>,
<span class="ident">draw_route</span>: <span class="ident">results</span>.<span class="ident">draw_route</span>,
}
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">event</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">ctx</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">EventCtx</span>) {
<span class="kw">if</span> <span class="ident">ctx</span>.<span class="ident">redo_mouseover</span>() {
<span class="self">self</span>.<span class="ident">hovering</span> <span class="op">=</span> <span class="bool-val">false</span>;
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">pt</span>) <span class="op">=</span> <span class="ident">ctx</span>.<span class="ident">canvas</span>.<span class="ident">get_cursor_in_map_space</span>() {
<span class="kw">if</span> <span class="self">self</span>
.<span class="ident">closest_path_segment</span>
.<span class="ident">closest_pt</span>(<span class="ident">pt</span>, <span class="number">10.0</span> <span class="op">*</span> <span class="ident">NORMAL_LANE_THICKNESS</span>)
.<span class="ident">is_some</span>()
{
<span class="self">self</span>.<span class="ident">hovering</span> <span class="op">=</span> <span class="bool-val">true</span>;
}
}
}
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">draw</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">g</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">GfxCtx</span>, <span class="ident">app</span>: <span class="kw-2">&amp;</span><span class="ident">App</span>) {
<span class="self">self</span>.<span class="ident">draw_route</span>.<span class="ident">draw</span>(<span class="ident">g</span>, <span class="ident">app</span>);
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">hovering</span> {
<span class="ident">g</span>.<span class="ident">draw_mouse_tooltip</span>(<span class="ident">Text::from</span>(<span class="ident">Line</span>(<span class="string">&quot;Click to try this alternate route&quot;</span>)));
}
}
}
</pre></div>
</section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="game" data-search-index-js="../../../../search-index.js" data-search-js="../../../../search.js"></div>
<script src="../../../../main.js"></script><script src="../../../../source-script.js"></script><script src="../../../../source-files.js"></script>
</body></html>