Secure the cockpit
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
Isaac Mills 2025-07-22 16:45:08 -06:00
parent cec70bc43b
commit d2a5f139de
Signed by: fnmain
GPG key ID: B67D7410F33A0F61

View file

@ -26,7 +26,6 @@ pub struct App {
binary_search_hint: BinarySearchHint, binary_search_hint: BinarySearchHint,
tab: Tab, tab: Tab,
current_effect: Effect, current_effect: Effect,
failed_guesses: usize,
} }
const SPLASH: &str = r#" const SPLASH: &str = r#"
@ -70,7 +69,6 @@ impl App {
number_guess_responses: String::new(), number_guess_responses: String::new(),
tab: Tab::Passcode, tab: Tab::Passcode,
current_effect: fx::fade_from_fg(Color::Black, (200000, Interpolation::CircIn)), current_effect: fx::fade_from_fg(Color::Black, (200000, Interpolation::CircIn)),
failed_guesses: 0,
} }
} }
@ -134,8 +132,8 @@ impl App {
let layout = Layout::new( let layout = Layout::new(
Direction::Vertical, Direction::Vertical,
[ [
Constraint::Length(2), Constraint::Length(1),
Constraint::Length(2), Constraint::Length(3),
Constraint::Length(3), Constraint::Length(3),
Constraint::Length(1), Constraint::Length(1),
Constraint::Min(0), Constraint::Min(0),
@ -179,7 +177,7 @@ impl App {
block, block,
); );
} }
if self.failed_guesses >= 10 { if self.binary_search_hint.failed_guesses >= 20 {
frame.render_widget( frame.render_widget(
Paragraph::new("Search the binary") Paragraph::new("Search the binary")
.alignment(ratatui::layout::Alignment::Center) .alignment(ratatui::layout::Alignment::Center)
@ -241,7 +239,7 @@ impl App {
self.binary_search_hint.guess_hint = Some((number, guess_hint)); self.binary_search_hint.guess_hint = Some((number, guess_hint));
self.binary_search_hint.numbers_guessed.clear(); self.binary_search_hint.numbers_guessed.clear();
self.binary_search_hint.number_to_guess += 1; self.binary_search_hint.number_to_guess += 1;
self.failed_guesses += 1; self.binary_search_hint.failed_guesses += 1;
if self.binary_search_hint.number_to_guess == NUMBERS.len() { if self.binary_search_hint.number_to_guess == NUMBERS.len() {
self.binary_search_hint.number_to_guess = 0; self.binary_search_hint.number_to_guess = 0;
} }
@ -294,6 +292,7 @@ struct BinarySearchHint {
guess_hint: Option<(u32, u32)>, guess_hint: Option<(u32, u32)>,
range: Range<u32>, range: Range<u32>,
number_to_guess: usize, number_to_guess: usize,
failed_guesses: usize,
} }
impl Default for BinarySearchHint { impl Default for BinarySearchHint {
@ -303,6 +302,7 @@ impl Default for BinarySearchHint {
range: 0..10, range: 0..10,
guess_hint: None, guess_hint: None,
number_to_guess: OsRng.unwrap_err().random_range(0..2), number_to_guess: OsRng.unwrap_err().random_range(0..2),
failed_guesses: 0,
} }
} }
} }
@ -324,7 +324,7 @@ impl Widget for &BinarySearchHint {
if !self.range.contains(&number_on) { if !self.range.contains(&number_on) {
style = style.fg(Color::Rgb(117, 97, 42)); style = style.fg(Color::Rgb(117, 97, 42));
} }
buf.set_string(x, area.y, measures, style); buf.set_string(x, area.y + 1, measures, style);
} }
for number_guessed in &self.numbers_guessed { for number_guessed in &self.numbers_guessed {
@ -332,21 +332,33 @@ impl Widget for &BinarySearchHint {
let style = Style::default() let style = Style::default()
.fg(Color::Rgb(226, 190, 89)) .fg(Color::Rgb(226, 190, 89))
.bg(PASSWORD_BACKGROUND); .bg(PASSWORD_BACKGROUND);
buf.set_string(number_x, area.y, "|", style); buf.set_string(number_x, area.y + 1, "|", style);
match NUMBERS[self.number_to_guess].cmp(number_guessed) { if self.failed_guesses >= 30 {
Ordering::Less => buf.set_string(number_x, area.y + 1, "<", style), buf.set_string(number_x, area.y, format!("{}", *number_guessed), style);
Ordering::Greater => buf.set_string(number_x, area.y + 1, ">", style),
Ordering::Equal => buf.set_string(number_x, area.y + 1, "=", style),
} }
match NUMBERS[self.number_to_guess].cmp(number_guessed) {
Ordering::Less => buf.set_string(number_x, area.y + 2, "<", style),
Ordering::Greater => buf.set_string(number_x, area.y + 2, ">", style),
Ordering::Equal => buf.set_string(number_x, area.y + 2, "=", style),
}
}
if self.failed_guesses >= 30 {
let guess_hint = self.range.start + ((self.range.end - self.range.start) / 2);
let number_x = area.x + (guess_hint as f64 / ruler_scale) as u16;
let style = Style::default()
.fg(Color::Rgb(226, 190, 89))
.bg(PASSWORD_BACKGROUND);
buf.set_string(number_x, area.y + 2, "", style);
} }
if let Some((last_guessed, guess_hint)) = self.guess_hint { if let Some((last_guessed, guess_hint)) = self.guess_hint {
let number_x = area.x + (last_guessed as f64 / ruler_scale) as u16; let number_x = area.x + (last_guessed as f64 / ruler_scale) as u16;
let style = Style::default().fg(Color::Red).bg(PASSWORD_BACKGROUND); let style = Style::default().fg(Color::Red).bg(PASSWORD_BACKGROUND);
buf.set_string(number_x, area.y, "", style); buf.set_string(number_x, area.y + 1, "", style);
let number_x = area.x + (guess_hint as f64 / ruler_scale) as u16; let number_x = area.x + (guess_hint as f64 / ruler_scale) as u16;
let style = Style::default().fg(Color::Green).bg(PASSWORD_BACKGROUND); let style = Style::default().fg(Color::Green).bg(PASSWORD_BACKGROUND);
buf.set_string(number_x, area.y, "", style); buf.set_string(number_x, area.y + 1, "", style);
} }
} }
} }