a couple of attempts at players

This commit is contained in:
Max Bradbury 2022-03-12 18:35:09 +00:00
parent 2349d7365e
commit 75ca8c84ea
4 changed files with 117 additions and 14 deletions

View File

@ -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"

View File

@ -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<f64> =
PhysicalSize::new(width, height).to_logical(hidpi_factor);
// Resize, centre, and display the window
// let min_size: winit::dpi::LogicalSize<f64> =
// 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::<f64>(hidpi_factor);

88
src/bin/player2.rs Normal file
View File

@ -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
// );
}
}

Binary file not shown.