use std::sync::Arc;
use winit::{
event::{Event, KeyEvent, WindowEvent},
event_loop::{ControlFlow, EventLoop},
keyboard::{KeyCode, PhysicalKey},
window::WindowBuilder,
};
use rust_animation::animation::Animation;
use rust_animation::animation::EasingFunction;
use rust_animation::layer::LayoutMode;
use rust_animation::layer::Layer;
use rust_animation::play::Play;
fn main() {
let event_loop = EventLoop::new().unwrap();
let window = Arc::new(
WindowBuilder::new()
.with_title("Animation test")
.with_inner_size(winit::dpi::LogicalSize::new(1280, 720))
.build(&event_loop)
.unwrap(),
);
let window_size = window.inner_size();
let (width, height) = (window_size.width, window_size.height);
let mut play = Play::new(
"Animation test".to_string(),
width as i32,
height as i32,
LayoutMode::UserDefine,
);
play.init_wgpu_with_surface(window.clone(), width, height);
let mut stage = Layer::new("stage".to_string(), width, height, None);
stage.set_visible(true);
let mut layer_1 = Layer::new("layer_1".to_string(), 400, 225, None);
layer_1.x = 100;
layer_1.y = 100;
layer_1.set_image("examples/splash.png".to_string());
let mut animation_1 = Animation::new();
let time = 5.0;
animation_1.apply_scale(1.0, 2.0, time, EasingFunction::Linear);
animation_1.apply_translation_x(100, 1000, time, EasingFunction::EaseInOut);
animation_1.apply_translation_y(100, 300, time, EasingFunction::EaseInOut);
animation_1.apply_rotation(0, 360, time, EasingFunction::EaseInOut);
layer_1.set_animation(Some(animation_1));
let mut layer_2 = Play::new_layer("layer_2".to_string(), 120, 120, None);
layer_2.x = 100;
layer_2.y = 100;
layer_2.scale_x = 1.5;
layer_2.scale_y = 1.5;
layer_2.set_color(0.0, 0.0, 1.0);
let mut animation_2 = Animation::new();
animation_2.apply_rotation(0, 360, 5.0, EasingFunction::EaseInOut);
layer_2.set_animation(Some(animation_2));
let mut layer_3 = Play::new_layer("layer_3".to_string(), 50, 50, None);
layer_3.x = 10;
layer_3.y = 10;
layer_3.set_color(1.0, 0.0, 0.0);
layer_2.add_sub_layer(layer_3);
stage.add_sub_layer(layer_1);
stage.add_sub_layer(layer_2);
play.add_stage(stage);
event_loop
.run(move |event, elwt| {
elwt.set_control_flow(ControlFlow::Poll);
match event {
Event::WindowEvent { event, .. } => match event {
WindowEvent::CloseRequested => elwt.exit(),
WindowEvent::KeyboardInput {
event:
KeyEvent {
physical_key: PhysicalKey::Code(KeyCode::Escape),
..
},
..
} => elwt.exit(),
WindowEvent::Resized(new_size) => {
play.resize(new_size.width, new_size.height);
}
WindowEvent::RedrawRequested => {
play.render();
window.request_redraw();
}
_ => {}
},
Event::AboutToWait => {
window.request_redraw();
}
_ => {}
}
})
.unwrap();
}