use dashing::*;
use dashing::input::*;
use pretty_env_logger;
use time;
const WIDTH: u32 = 21;
const HEIGHT: u32 = 3;
struct ExampleDriver {
root_layer: graphics::drawing::SpriteLayer,
message: String,
}
impl Driver for ExampleDriver {
fn handle_input(&mut self, e: Event) -> EngineSignal {
match e {
Event::Window(WindowEvent::CloseRequested)
| Event::Window(WindowEvent::Destroyed) => EngineSignal::Halt,
_ => EngineSignal::Continue,
}
}
fn process_frame<R>(&mut self, renderer: &mut R) -> EngineSignal
where
R: dashing::graphics::render::RenderInterface,
{
self.root_layer.clear();
for (i, c) in self.message.chars().enumerate() {
self.root_layer[WIDTH as usize + 1 + i] = graphics::drawing::SpriteCell {
palette: resources::color::Palette::mono([0, 0, 0]).set(
1,
resources::color::Color::from_hsv(
time::OffsetDateTime::now_utc().millisecond() as f32 * 360.0 / 1000.0,
1.0 - (i as f32 / self.message.len() as f32) * 0.5,
1.0,
),
),
sprite: c as u32,
transparent: false,
};
}
renderer.update(self.root_layer.iter());
EngineSignal::Continue
}
}
pub fn main() {
pretty_env_logger::init();
let tex_png = include_bytes!("../src/graphics/render/testdata/12x12.png");
let mut decoder = png::Decoder::new(&tex_png[..]);
decoder.set_transformations(png::Transformations::IDENTITY);
let (info, mut reader) = decoder.read_info().unwrap();
assert!(info.color_type == png::ColorType::Indexed);
let mut imgdata = vec![0u8; reader.output_buffer_size()];
reader.next_frame(&mut imgdata[..]).unwrap();
let tex = dashing::resources::sprite::SpriteTexture::new_from_pixels(
&imgdata[..],
reader.info().size().0 as usize,
reader.info().size().1 as usize,
reader.info().size().0 as usize / 16,
reader.info().size().1 as usize / 16,
256,
)
.unwrap();
let window_builder = window::WindowBuilder::new("hello world", WIDTH, HEIGHT, &tex)
.with_clear_color((0.2, 0.2, 0.2).into())
.with_vsync(true);
let driver = ExampleDriver {
root_layer: graphics::drawing::SpriteLayer::new(WIDTH as usize, HEIGHT as usize),
message: String::from("Swash your buckles!"),
};
let engine = dashing::Engine::new(window_builder, driver).unwrap();
engine.run();
}