Small style cleanups after #346 (Import grouping, simplify Spinner logic)

This commit is contained in:
Dustin Carlino 2020-09-27 10:26:38 -07:00
parent 0921a4aae5
commit 4916b10190
5 changed files with 34 additions and 63 deletions

View File

@ -1,3 +1,8 @@
use crate::app::App;
use crate::edit::traffic_signals::{BundleEdits, TrafficSignalEditor};
use crate::edit::{apply_map_edits, check_sidewalk_connectivity, StopSignEditor};
use crate::game::{ChooseSomething, DrawBaselayer, State, Transition};
use crate::sandbox::GameplayMode;
use abstutil::Timer; use abstutil::Timer;
use geom::Duration; use geom::Duration;
use map_model::{ use map_model::{
@ -7,12 +12,6 @@ use widgetry::{
Btn, Checkbox, Choice, EventCtx, GfxCtx, Key, Line, Outcome, Panel, Spinner, TextExt, Widget, Btn, Checkbox, Choice, EventCtx, GfxCtx, Key, Line, Outcome, Panel, Spinner, TextExt, Widget,
}; };
use crate::app::App;
use crate::edit::traffic_signals::{BundleEdits, TrafficSignalEditor};
use crate::edit::{apply_map_edits, check_sidewalk_connectivity, StopSignEditor};
use crate::game::{ChooseSomething, DrawBaselayer, State, Transition};
use crate::sandbox::GameplayMode;
pub struct ChangeDuration { pub struct ChangeDuration {
panel: Panel, panel: Panel,
idx: usize, idx: usize,

View File

@ -1,15 +1,7 @@
use std::collections::{BTreeSet, VecDeque}; mod edits;
mod offsets;
use abstutil::Timer; mod picker;
use geom::{Distance, Duration, Line, Polygon, Pt2D}; mod preview;
use map_model::{
ControlTrafficSignal, EditCmd, EditIntersection, IntersectionID, MovementID, PhaseType, Stage,
TurnPriority,
};
use widgetry::{
lctrl, Btn, Color, Drawable, EventCtx, GeomBatch, GfxCtx, HorizontalAlignment, Key, Line,
MultiButton, Outcome, Panel, RewriteColor, Text, TextExt, VerticalAlignment, Widget,
};
use crate::app::{App, ShowEverything}; use crate::app::{App, ShowEverything};
use crate::common::{CommonState, Warping}; use crate::common::{CommonState, Warping};
@ -18,11 +10,17 @@ use crate::game::{DrawBaselayer, PopupMsg, State, Transition};
use crate::options::TrafficSignalStyle; use crate::options::TrafficSignalStyle;
use crate::render::{traffic_signal, DrawMovement, DrawOptions}; use crate::render::{traffic_signal, DrawMovement, DrawOptions};
use crate::sandbox::GameplayMode; use crate::sandbox::GameplayMode;
use abstutil::Timer;
mod edits; use geom::{Distance, Duration, Line, Polygon, Pt2D};
mod offsets; use map_model::{
mod picker; ControlTrafficSignal, EditCmd, EditIntersection, IntersectionID, MovementID, PhaseType, Stage,
mod preview; TurnPriority,
};
use std::collections::{BTreeSet, VecDeque};
use widgetry::{
lctrl, Btn, Color, Drawable, EventCtx, GeomBatch, GfxCtx, HorizontalAlignment, Key, Line,
MultiButton, Outcome, Panel, RewriteColor, Text, TextExt, VerticalAlignment, Widget,
};
// Welcome to one of the most overwhelmingly complicated parts of the UI... // Welcome to one of the most overwhelmingly complicated parts of the UI...

View File

@ -1,12 +1,10 @@
use std::collections::HashSet;
use abstutil::Timer;
use geom::Duration;
use crate::{ use crate::{
ControlTrafficSignal, IntersectionCluster, IntersectionID, Map, Movement, MovementID, ControlTrafficSignal, IntersectionCluster, IntersectionID, Map, Movement, MovementID,
PhaseType, RoadID, Stage, TurnPriority, TurnType, PhaseType, RoadID, Stage, TurnPriority, TurnType,
}; };
use abstutil::Timer;
use geom::Duration;
use std::collections::HashSet;
pub fn get_possible_policies( pub fn get_possible_policies(
map: &Map, map: &Map,
@ -63,7 +61,6 @@ pub fn get_possible_policies(
all_walk_all_yield(map, id), all_walk_all_yield(map, id),
)); ));
// TODO Automatically fix things like minimum crosswalk time
// Make sure all possible policies have a minimum crosswalk time enforced // Make sure all possible policies have a minimum crosswalk time enforced
for (_, signal) in &mut results { for (_, signal) in &mut results {
for stage in &mut signal.stages { for stage in &mut signal.stages {
@ -78,6 +75,7 @@ pub fn get_possible_policies(
} }
} }
} }
results.retain(|pair| pair.1.validate().is_ok()); results.retain(|pair| pair.1.validate().is_ok());
results results
} }

View File

@ -1,11 +1,3 @@
use std::collections::{BTreeMap, BTreeSet};
use std::convert::TryFrom;
use serde::{Deserialize, Serialize};
use abstutil::{deserialize_btreemap, retain_btreeset, serialize_btreemap, Timer};
use geom::{Distance, Duration, Speed};
use crate::make::traffic_signals::{brute_force, get_possible_policies}; use crate::make::traffic_signals::{brute_force, get_possible_policies};
use crate::objects::traffic_signals::PhaseType::{Adaptive, Fixed}; use crate::objects::traffic_signals::PhaseType::{Adaptive, Fixed};
use crate::raw::OriginalRoad; use crate::raw::OriginalRoad;
@ -13,6 +5,11 @@ use crate::{
osm, CompressedMovementID, DirectedRoadID, Direction, IntersectionID, Map, Movement, osm, CompressedMovementID, DirectedRoadID, Direction, IntersectionID, Map, Movement,
MovementID, TurnID, TurnPriority, TurnType, MovementID, TurnID, TurnPriority, TurnType,
}; };
use abstutil::{deserialize_btreemap, retain_btreeset, serialize_btreemap, Timer};
use geom::{Distance, Duration, Speed};
use serde::{Deserialize, Serialize};
use std::collections::{BTreeMap, BTreeSet};
use std::convert::TryFrom;
// The pace to use for crosswalk pace in m/s // The pace to use for crosswalk pace in m/s
// https://en.wikipedia.org/wiki/Preferred_walking_speed // https://en.wikipedia.org/wiki/Preferred_walking_speed
@ -78,6 +75,7 @@ impl ControlTrafficSignal {
pub fn brute_force(map: &Map, id: IntersectionID) { pub fn brute_force(map: &Map, id: IntersectionID) {
brute_force(map, id) brute_force(map, id)
} }
pub fn get_min_crossing_time(&self, idx: usize) -> Duration { pub fn get_min_crossing_time(&self, idx: usize) -> Duration {
let mut max_distance = Distance::meters(0.0); let mut max_distance = Distance::meters(0.0);
for movement in &self.stages[idx].protected_movements { for movement in &self.stages[idx].protected_movements {
@ -136,15 +134,6 @@ impl ControlTrafficSignal {
// Is there enough time in each stage to walk across the crosswalk // Is there enough time in each stage to walk across the crosswalk
let min_crossing_time = self.get_min_crossing_time(stage_index); let min_crossing_time = self.get_min_crossing_time(stage_index);
if stage.phase_type.simple_duration() < min_crossing_time { if stage.phase_type.simple_duration() < min_crossing_time {
// Warn/Error does not seem to be imported?
println!(
"Traffic signal does not allow enough time in stage to complete the \
crosswalk\nStage Index{}\nStage : {:?}\nTime Required: {}\nTime Given: {}",
stage_index,
stage,
min_crossing_time,
stage.phase_type.simple_duration()
);
return Err(format!( return Err(format!(
"Traffic signal does not allow enough time in stage to complete the \ "Traffic signal does not allow enough time in stage to complete the \
crosswalk\nStage Index{}\nStage : {:?}\nTime Required: {}\nTime Given: {}", crosswalk\nStage Index{}\nStage : {:?}\nTime Required: {}\nTime Given: {}",
@ -301,7 +290,7 @@ impl Stage {
} }
} }
pub fn enforce_minimum_crosswalk_time(&mut self, movement: &Movement) { pub fn enforce_minimum_crosswalk_time(&mut self, movement: &Movement) {
//Round up to an int, because it is exported as a usize // Round up to an int, because it is exported as a usize
let time = Duration::seconds( let time = Duration::seconds(
(movement.geom.length() / CROSSWALK_PACE) (movement.geom.length() / CROSSWALK_PACE)
.inner_seconds() .inner_seconds()

View File

@ -1,9 +1,8 @@
use geom::{Polygon, Pt2D};
use crate::{ use crate::{
text, Btn, Button, EventCtx, GeomBatch, GfxCtx, Line, Outcome, ScreenDims, ScreenPt, text, Btn, Button, EventCtx, GeomBatch, GfxCtx, Line, Outcome, ScreenDims, ScreenPt,
ScreenRectangle, Text, Widget, WidgetImpl, WidgetOutput, ScreenRectangle, Text, Widget, WidgetImpl, WidgetOutput,
}; };
use geom::{Polygon, Pt2D};
// TODO MAX_CHAR_WIDTH is a hardcoded nonsense value // TODO MAX_CHAR_WIDTH is a hardcoded nonsense value
const TEXT_WIDTH: f64 = 2.0 * text::MAX_CHAR_WIDTH; const TEXT_WIDTH: f64 = 2.0 * text::MAX_CHAR_WIDTH;
@ -84,14 +83,7 @@ impl WidgetImpl for Spinner {
self.up.event(ctx, output); self.up.event(ctx, output);
if let Outcome::Clicked(_) = output.outcome { if let Outcome::Clicked(_) = output.outcome {
output.outcome = Outcome::Changed; output.outcome = Outcome::Changed;
if self.current < self.high { self.current = (self.current + 1).min(self.high);
self.current += 1;
} else if self.high < self.current {
self.current = self.high;
}
if self.high < self.current {
self.current = self.high;
}
ctx.no_op_event(true, |ctx| self.up.event(ctx, output)); ctx.no_op_event(true, |ctx| self.up.event(ctx, output));
return; return;
} }
@ -99,12 +91,7 @@ impl WidgetImpl for Spinner {
self.down.event(ctx, output); self.down.event(ctx, output);
if let Outcome::Clicked(_) = output.outcome { if let Outcome::Clicked(_) = output.outcome {
output.outcome = Outcome::Changed; output.outcome = Outcome::Changed;
if self.current != self.low { self.current = (self.current - 1).max(self.low);
self.current -= 1;
}
if self.current < self.low {
self.current = self.low;
}
ctx.no_op_event(true, |ctx| self.down.event(ctx, output)); ctx.no_op_event(true, |ctx| self.down.event(ctx, output));
return; return;
} }