diff --git a/Cargo.toml b/Cargo.toml index 0915435..12aa10b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,8 +18,7 @@ hex = "^0.4.3" image = "0.23.14" log = "0.4.14" pixels = "0.3.0" -rodio = "^0.11.0" -rodio-xm = { git = "https://tinybird.dev/max/rodio-xm/", branch = "master" } +rodio-xm = "^0.1.1" serde = "^1.0.114" serde_derive = "^1.0.114" toml = "^0.5.6" diff --git a/src/bin/player.rs b/src/bin/player.rs index b4576ef..c3ac908 100644 --- a/src/bin/player.rs +++ b/src/bin/player.rs @@ -6,7 +6,7 @@ use std::path::PathBuf; use log::error; use pixels::{Error, SurfaceTexture, PixelsBuilder}; use pixels::wgpu::BackendBit; -use winit::dpi::{LogicalPosition, LogicalSize, PhysicalSize}; +use winit::dpi::{LogicalPosition, LogicalSize, PhysicalSize, Size}; use winit::event::{Event, VirtualKeyCode}; use winit::event_loop::{ControlFlow, EventLoop}; use winit_input_helper::WinitInputHelper; @@ -183,7 +183,11 @@ fn main() -> Result<(), Error> { } } - if input.key_pressed(VirtualKeyCode::Left) { + if + input.key_pressed(VirtualKeyCode::Left) + || + input.key_pressed(VirtualKeyCode::W) + { let (x, y) = state.player_position; if x > 0 { state.player_position = (x - 1, y); @@ -191,7 +195,11 @@ fn main() -> Result<(), Error> { } } - if input.key_pressed(VirtualKeyCode::Right) { + if + input.key_pressed(VirtualKeyCode::Right) + || + input.key_pressed(VirtualKeyCode::D) + { let (x, y) = state.player_position; if x < state.game.config.width as u8 - 1 { state.player_position = (x + 1, y); @@ -199,7 +207,11 @@ fn main() -> Result<(), Error> { } } - if input.key_pressed(VirtualKeyCode::Up) { + if + input.key_pressed(VirtualKeyCode::Up) + || + input.key_pressed(VirtualKeyCode::W) + { let (x, y) = state.player_position; if y > 0 { state.player_position = (x, y - 1); @@ -207,7 +219,11 @@ fn main() -> Result<(), Error> { } } - if input.key_pressed(VirtualKeyCode::Down) { + if + input.key_pressed(VirtualKeyCode::Down) + || + input.key_pressed(VirtualKeyCode::S) + { let (x, y) = state.player_position; if y < state.game.config.height as u8 - 1 { state.player_position = (x, y + 1); @@ -236,7 +252,7 @@ fn main() -> Result<(), Error> { fn window_builder(title: &str, event_loop: &EventLoop<()>) -> winit::window::Window { winit::window::WindowBuilder::new() .with_visible(false) - .with_resizable(false) + // .with_resizable(false) .with_title(title).build(&event_loop).unwrap() } @@ -247,7 +263,7 @@ fn window_builder(title: &str, event_loop: &EventLoop<()>) -> winit::window::Win winit::window::WindowBuilder::new() .with_drag_and_drop(false) .with_visible(false) - .with_resizable(false) + // .with_resizable(false) .with_title(title).build(&event_loop).unwrap() } @@ -282,21 +298,21 @@ fn create_window( let scale = (monitor_height / height * 2.0 / 3.0).round().max(1.0); - // Resize, center, and display the window - let min_size: winit::dpi::LogicalSize = - PhysicalSize::new(width, height).to_logical(hidpi_factor); + // Resize, centre, and display the window + // let min_size: winit::dpi::LogicalSize = + // PhysicalSize::new(width, height).to_logical(hidpi_factor); let default_size = LogicalSize::new(width * scale, height * scale); - let center = LogicalPosition::new( + let centre = LogicalPosition::new( (monitor_width - width * scale) / 2.0, (monitor_height - height * scale) / 2.0, ); window.set_inner_size(default_size); // window.set_min_inner_size(Some(min_size)); - window.set_outer_position(center); + window.set_outer_position(centre); window.set_visible(true); let size = default_size.to_physical::(hidpi_factor); diff --git a/src/bin/player2.rs b/src/bin/player2.rs new file mode 100644 index 0000000..0689aa2 --- /dev/null +++ b/src/bin/player2.rs @@ -0,0 +1,88 @@ +use raylib::prelude::*; +use raylib::consts::KeyboardKey; +use peachy::Colour; + +// todo state + +fn main() { + // todo load game + let game = peachy::mock::game::bitsy(); + + let (mut rl, thread) = raylib::init() + .size((game.config.width * 4) as i32, (game.config.height * 4) as i32) + .title("peachy") + .build(); + + rl.set_target_fps(30); // appropriate? + + let key_up: KeyboardKey = raylib::core::input::key_from_i32(87).unwrap(); + let key_left: KeyboardKey = raylib::core::input::key_from_i32(65).unwrap(); + let key_down: KeyboardKey = raylib::core::input::key_from_i32(83).unwrap(); + let key_right: KeyboardKey = raylib::core::input::key_from_i32(68).unwrap(); + + const SIZE: i32 = 32; + + let mut x = SIZE; + let mut y = SIZE; + + let palette = game.palettes.get(0).unwrap(); + + let avatars = game.get_entities_by_tag(&"avatar".to_string()); + let avatar = avatars.get(0).unwrap(); + let image = game.get_image_by_name(&avatar.image).unwrap().clone().into_image(palette); + + // todo how do I create a texture without a file? + let mut texture = rl.load_texture( + &thread, "src/test-resources/images/avatar.png" + ).unwrap(); + + texture.update_texture(image.as_bytes()); + + // let font = rl.load_font(&thread, "src/FuturaStd-Light.otf").unwrap(); + + let mut audio = audio::RaylibAudio::init_audio_device(); + + let mut music = raylib::audio::Music::load_music_stream( + &thread, "src/test-resources/music/another-night.xm" + ).unwrap(); + + audio.play_music_stream(&mut music); + + println!("{}", rl.window_should_close()); + + while !rl.window_should_close() { + if rl.is_key_pressed(key_up) { + y -= SIZE; + } else if rl.is_key_pressed(key_left) { + x -= SIZE; + } else if rl.is_key_pressed(key_down) { + y += SIZE; + } else if rl.is_key_pressed(key_right) { + x += SIZE; + } + + audio.update_music_stream(&mut music); + + let mut d = rl.begin_drawing(&thread); + + // d.clear_background(palette.get_colour_raylib(&0)); + d.clear_background(Color::WHITE); + + d.draw_texture_ex( + &texture, + raylib::core::math::Vector2 { x: x as f32, y: y as f32 }, + 0.0, + 4.0, + Color::WHITE + ); + + // d.draw_text_ex( + // &font, + // "hello", + // raylib::core::math::Vector2 { x: 64.0, y: 64.0 }, + // 32.0, + // 4.0, + // Color::WHITE + // ); + } +} diff --git a/src/test-resources/music/another-night.xm b/src/test-resources/music/another-night.xm new file mode 100644 index 0000000..ac6093c Binary files /dev/null and b/src/test-resources/music/another-night.xm differ