[Refactor] Move Moon phase calculation to a new clock module
This commit is contained in:
parent
3d4224b560
commit
1d485c824b
9
src/clock.rs
Normal file
9
src/clock.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
use chrono::prelude::Local;
|
||||||
|
|
||||||
|
pub fn get_moon_phase() -> f32 {
|
||||||
|
let local_timestamp = Local::now();
|
||||||
|
let unixtime = suncalc::Timestamp(local_timestamp.timestamp_millis());
|
||||||
|
let moon_illumination = suncalc::moon_illumination(unixtime);
|
||||||
|
|
||||||
|
moon_illumination.phase as f32 * 28.0
|
||||||
|
}
|
@ -6,6 +6,7 @@ use sctk::shm::AutoMemPool;
|
|||||||
use sctk::window::{Event as WEvent, FallbackFrame};
|
use sctk::window::{Event as WEvent, FallbackFrame};
|
||||||
use svg::node::element::path::Data as PathData;
|
use svg::node::element::path::Data as PathData;
|
||||||
|
|
||||||
|
mod clock;
|
||||||
mod config;
|
mod config;
|
||||||
mod svg_clock;
|
mod svg_clock;
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ use svg::{
|
|||||||
};
|
};
|
||||||
use usvg::Tree;
|
use usvg::Tree;
|
||||||
|
|
||||||
|
use crate::clock::get_moon_phase;
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
|
|
||||||
const HOUR_NAMES: [&str; 24] = [
|
const HOUR_NAMES: [&str; 24] = [
|
||||||
@ -296,16 +297,16 @@ fn get_range_path(radius: f32, range_name: &str, start_time: i32, end_time: i32)
|
|||||||
Path::new().set("class", range_name).set("d", path_data)
|
Path::new().set("class", range_name).set("d", path_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_moon_path(radius: f32, moon_phase: f64) -> Path {
|
fn get_moon_path(radius: f32, moon_phase: f32) -> Path {
|
||||||
let handle_x_pos = radius as f64 * 1.34;
|
let handle_x_pos = radius * 1.34;
|
||||||
let handle_y_pos = radius * 0.88;
|
let handle_y_pos = radius * 0.88;
|
||||||
let min_x = IMAGE_WIDTH as f64 / 2.0 - handle_x_pos;
|
let min_x = IMAGE_WIDTH as f32 / 2.0 - handle_x_pos;
|
||||||
let max_x = min_x + 2.0 * handle_x_pos;
|
let max_x = min_x + 2.0 * handle_x_pos;
|
||||||
let top_y = IMAGE_WIDTH as f32 / 2.0 - handle_y_pos;
|
let top_y = IMAGE_WIDTH as f32 / 2.0 - handle_y_pos;
|
||||||
let bottom_y = IMAGE_WIDTH as f32 / 2.0 + handle_y_pos;
|
let bottom_y = IMAGE_WIDTH as f32 / 2.0 + handle_y_pos;
|
||||||
|
|
||||||
let h1_x: f64;
|
let h1_x: f32;
|
||||||
let h2_x: f64;
|
let h2_x: f32;
|
||||||
|
|
||||||
if moon_phase < 14.0 {
|
if moon_phase < 14.0 {
|
||||||
h1_x = min_x + 2.0 * handle_x_pos * (1.0 - moon_phase / 14.0);
|
h1_x = min_x + 2.0 * handle_x_pos * (1.0 - moon_phase / 14.0);
|
||||||
@ -345,16 +346,15 @@ pub fn gen_svg(
|
|||||||
let local_hour = local_timestamp.time().hour();
|
let local_hour = local_timestamp.time().hour();
|
||||||
let local_minute = local_timestamp.time().minute();
|
let local_minute = local_timestamp.time().minute();
|
||||||
let local_second = local_timestamp.time().second();
|
let local_second = local_timestamp.time().second();
|
||||||
|
let unixtime = suncalc::Timestamp(local_timestamp.timestamp_millis());
|
||||||
|
|
||||||
let utc_offset = local_timestamp.offset().local_minus_utc();
|
let utc_offset = local_timestamp.offset().local_minus_utc();
|
||||||
let local_time = local_timestamp.time().num_seconds_from_midnight() as i32;
|
let local_time = local_timestamp.time().num_seconds_from_midnight() as i32;
|
||||||
let utc_rotation = seconds_to_degrees(utc_offset);
|
let utc_rotation = seconds_to_degrees(utc_offset);
|
||||||
|
let moon_radius = IMAGE_WIDTH as f32 * 0.071428571;
|
||||||
|
|
||||||
// Calculate the Moon phase
|
// Calculate the Moon phase
|
||||||
let unixtime = suncalc::Timestamp(local_timestamp.timestamp_millis());
|
let moon_phase = get_moon_phase();
|
||||||
let moon_illumination = suncalc::moon_illumination(unixtime);
|
|
||||||
let moon_radius = IMAGE_WIDTH as f32 * 0.071428571;
|
|
||||||
let moon_phase = moon_illumination.phase * 28.0;
|
|
||||||
|
|
||||||
let local_hour_font_size = IMAGE_WIDTH as f32 * 0.02357;
|
let local_hour_font_size = IMAGE_WIDTH as f32 * 0.02357;
|
||||||
let sun_radius = IMAGE_WIDTH as f32 * 0.0142871;
|
let sun_radius = IMAGE_WIDTH as f32 * 0.0142871;
|
||||||
|
Loading…
Reference in New Issue
Block a user