polygon struct and draw polygons
This commit is contained in:
38
src/main.rs
38
src/main.rs
@@ -1,17 +1,18 @@
|
||||
mod polygon_draw;
|
||||
|
||||
use iced::{
|
||||
Task,
|
||||
Settings, Task, Theme,
|
||||
time::{self, Duration},
|
||||
widget::{button, canvas, column, row, text},
|
||||
};
|
||||
use polygon_draw::PolygonFrame;
|
||||
use polygon_draw::{Polygon, PolygonFrame};
|
||||
|
||||
use std::f32::consts::PI;
|
||||
use std::time::Instant;
|
||||
|
||||
fn main() -> iced::Result {
|
||||
iced::application("My App", MyApp::update, MyApp::view)
|
||||
.theme(|_| Theme::Dark)
|
||||
.subscription(MyApp::subscription)
|
||||
.run_with(MyApp::new)
|
||||
}
|
||||
@@ -26,18 +27,18 @@ enum Message {
|
||||
struct MyApp {
|
||||
polys: PolygonFrame,
|
||||
time_last_frame: Instant,
|
||||
revo_per_sec: u32,
|
||||
nb_sec_for_rev: u32,
|
||||
}
|
||||
|
||||
impl MyApp {
|
||||
fn new() -> (Self, Task<Message>) {
|
||||
(
|
||||
Self {
|
||||
revo_per_sec: 1,
|
||||
nb_sec_for_rev: 4,
|
||||
time_last_frame: Instant::now(),
|
||||
polys: PolygonFrame {
|
||||
radius: 128.0,
|
||||
teta: 0.0,
|
||||
polygons: vec![Polygon::triangle(0.0), Polygon::triangle(PI / 2.0)],
|
||||
},
|
||||
},
|
||||
Task::none(),
|
||||
@@ -45,17 +46,17 @@ impl MyApp {
|
||||
}
|
||||
fn update(&mut self, message: Message) {
|
||||
match message {
|
||||
Message::ButtonPressedIncrement => self.revo_per_sec += 1,
|
||||
Message::ButtonPressedIncrement => self.nb_sec_for_rev += 1,
|
||||
Message::ButtonPressedDecrement => {
|
||||
if self.revo_per_sec > 1 {
|
||||
self.revo_per_sec -= 1
|
||||
if self.nb_sec_for_rev > 1 {
|
||||
self.nb_sec_for_rev -= 1
|
||||
}
|
||||
}
|
||||
Message::Tick => {
|
||||
let time_btw = Instant::now().duration_since(self.time_last_frame);
|
||||
self.polys.teta += 2.0
|
||||
* PI
|
||||
* (1.0 / self.revo_per_sec as f32)
|
||||
* (1.0 / self.nb_sec_for_rev as f32)
|
||||
* (time_btw.as_millis() as f32 / 1_000.0);
|
||||
self.polys.teta %= 2.0 * PI;
|
||||
//println!("Teta : {}", self.polys.teta);
|
||||
@@ -65,18 +66,23 @@ impl MyApp {
|
||||
}
|
||||
|
||||
fn view(&self) -> iced::Element<Message> {
|
||||
let txt_nb_rev = format!("Revolution per second : {}", self.revo_per_sec);
|
||||
let txt_nb_rev = format!("Revolution per second : {}", self.nb_sec_for_rev);
|
||||
column![
|
||||
text(txt_nb_rev),
|
||||
text("Polymusic").size(32.0),
|
||||
row![
|
||||
button("Increment").on_press(Message::ButtonPressedIncrement),
|
||||
button("Decrement").on_press(Message::ButtonPressedDecrement),
|
||||
],
|
||||
canvas(&self.polys).height(500).width(500),
|
||||
canvas(&self.polys).height(500).width(500),
|
||||
column![
|
||||
text(txt_nb_rev),
|
||||
row![
|
||||
button("Increment").on_press(Message::ButtonPressedIncrement),
|
||||
button("Decrement").on_press(Message::ButtonPressedDecrement),
|
||||
],
|
||||
],
|
||||
]
|
||||
]
|
||||
.into()
|
||||
}
|
||||
fn subscription(&self) -> iced::Subscription<Message> {
|
||||
time::every(Duration::from_millis(16)).map(|_| Message::Tick)
|
||||
time::every(Duration::from_millis(1)).map(|_| Message::Tick)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user