manage time
This commit is contained in:
parent
71a166c927
commit
9e08b23ec7
|
@ -45,6 +45,7 @@ pub struct UciEngine<Fi: Read, Fo: Write> {
|
||||||
game: Game,
|
game: Game,
|
||||||
/// white (total, incr), black (total, incr)
|
/// white (total, incr), black (total, incr)
|
||||||
timer: [(Option<Duration>, Option<Duration>); 2],
|
timer: [(Option<Duration>, Option<Duration>); 2],
|
||||||
|
initial_timer: [(Option<Duration>, Option<Duration>); 2],
|
||||||
/// white, black
|
/// white, black
|
||||||
player: [Player; 2],
|
player: [Player; 2],
|
||||||
}
|
}
|
||||||
|
@ -78,6 +79,7 @@ impl<Fi: Read, Fo: Write> UciEngine<Fi, Fo> {
|
||||||
initial: Board::default(),
|
initial: Board::default(),
|
||||||
game: Game::new(),
|
game: Game::new(),
|
||||||
timer: [DEFAULT_TIME; 2],
|
timer: [DEFAULT_TIME; 2],
|
||||||
|
initial_timer: [DEFAULT_TIME; 2],
|
||||||
player: [Player::Human { elo: None }; 2],
|
player: [Player::Human { elo: None }; 2],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,21 +92,23 @@ impl<Fi: Read, Fo: Write> UciEngine<Fi, Fo> {
|
||||||
color,
|
color,
|
||||||
value: self.timer[color.to_index()].0,
|
value: self.timer[color.to_index()].0,
|
||||||
};
|
};
|
||||||
self.timer[color.to_index()].0 = value
|
self.timer[color.to_index()].0 = value;
|
||||||
|
self.initial_timer[color.to_index()].0 = value;
|
||||||
}
|
}
|
||||||
GameOption::Increment { color, value } => {
|
GameOption::Increment { color, value } => {
|
||||||
old_value = GameOption::Increment {
|
old_value = GameOption::Increment {
|
||||||
color,
|
color,
|
||||||
value: self.timer[color.to_index()].1,
|
value: self.timer[color.to_index()].1,
|
||||||
};
|
};
|
||||||
self.timer[color.to_index()].1 = value
|
self.timer[color.to_index()].1 = value;
|
||||||
|
self.initial_timer[color.to_index()].1 = value;
|
||||||
}
|
}
|
||||||
GameOption::Player { color, value } => {
|
GameOption::Player { color, value } => {
|
||||||
old_value = GameOption::Player {
|
old_value = GameOption::Player {
|
||||||
color,
|
color,
|
||||||
value: self.player[color.to_index()],
|
value: self.player[color.to_index()],
|
||||||
};
|
};
|
||||||
self.player[color.to_index()] = value
|
self.player[color.to_index()] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,9 +138,14 @@ impl<Fi: Read, Fo: Write> UciEngine<Fi, Fo> {
|
||||||
/// Set a new board internally and tell the engine
|
/// Set a new board internally and tell the engine
|
||||||
pub fn new_game(&mut self) {
|
pub fn new_game(&mut self) {
|
||||||
self.initial = Board::default();
|
self.initial = Board::default();
|
||||||
|
self.timer = self.initial_timer;
|
||||||
self.game = Game::new_with_board(self.initial);
|
self.game = Game::new_with_board(self.initial);
|
||||||
self.push(GuiCommand::Stop);
|
self.push(GuiCommand::Stop);
|
||||||
self.push(GuiCommand::UciNewGame);
|
self.push(GuiCommand::UciNewGame);
|
||||||
|
self.push(GuiCommand::Position {
|
||||||
|
position: Some(self.initial),
|
||||||
|
moves: self.game.actions().to_vec(),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Play a move
|
/// Play a move
|
||||||
|
@ -404,7 +413,7 @@ impl<Fi: Read, Fo: Write> UciEngine<Fi, Fo> {
|
||||||
self.timer[index] =
|
self.timer[index] =
|
||||||
match self.timer[index] {
|
match self.timer[index] {
|
||||||
(Some(base), None) => (Some(base - elapsed), None),
|
(Some(base), None) => (Some(base - elapsed), None),
|
||||||
(Some(base), Some(incr)) => (Some(base - elapsed + incr), Some(incr)),
|
(Some(base), Some(incr)) if base >= elapsed => (Some(base - elapsed + incr), Some(incr)),
|
||||||
_ => (None, None)
|
_ => (None, None)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue