Skip to main content

play_polaris/
lib.rs

1use std::{collections::HashSet, fs, path::PathBuf};
2use ratatui::{
3    layout::{Alignment, Rect}, style::{Color, Style}, text::{Span}, widgets::{Block, BorderType, Borders, Paragraph}, Frame
4};
5pub mod constellations;
6pub mod menu;
7pub mod game;
8pub mod planetarium;
9
10
11pub fn draw_border(frame: &mut Frame, area: Rect) {
12    if area.width < 10 || area.height < 3 {
13        let warning = Paragraph::new("Terminal too small!")
14            .alignment(Alignment::Center)
15            .style(Style::default().fg(Color::Yellow));
16        frame.render_widget(warning, area);
17        return;
18    }
19    let block = Block::new()
20        .border_type(BorderType::Rounded)
21        .borders(Borders::ALL)
22        .border_style(Style::default().fg(Color::White));
23    frame.render_widget(block, area);
24}
25
26pub fn draw_exit_instructions(frame: &mut Frame, area: Rect) {
27    let instructions = Span::styled("< Esc", Style::default().fg(Color::Yellow));
28    let paragraph = Paragraph::new(instructions);
29    frame.render_widget(paragraph, area);
30}
31
32fn storage_path() -> PathBuf {
33    let mut path = dirs::home_dir().expect("Cannt find home directory");
34    path.push(".polaris.json");
35    path
36}
37
38pub fn load_data() -> HashSet<String> {
39    let path = storage_path();
40    if let Ok(data) = fs::read_to_string(&path) {
41        serde_json::from_str(&data).unwrap_or_default()
42    } else {
43        HashSet::new()
44    }
45}
46
47pub fn save_data(data: &HashSet<String>) {
48    let path = storage_path();
49    let data = serde_json::to_string_pretty(data).unwrap();
50    fs::write(path, data).unwrap();
51}