library

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit bbd1c094e4d8b48036a58d4178494afcc7b69733
parent 122859620d858760d081b09e990abaea4b2be3da
Author: Bradley Gannon <bradley@bradleygannon.com>
Date:   Tue, 18 Aug 2026 21:04:42 -0400

Center player on screen

Diffstat:
Mclient/src/main.rs | 6+++---
Mclient/src/render.rs | 40++++++++++++++++++++++++++++++----------
2 files changed, 33 insertions(+), 13 deletions(-)

diff --git a/client/src/main.rs b/client/src/main.rs @@ -6,7 +6,7 @@ use macroquad::prelude::*; use crate::{ game::handle_input, net::handle_connection, - render::{Camera, follow_local_player, load_sprites, render}, + render::{Camera, Spritesheet, follow_local_player, render}, }; pub mod game; @@ -16,7 +16,7 @@ pub mod render; #[macroquad::main("Library")] async fn main() { request_new_screen_size(1280., 720.); - let spritesheet = load_sprites(); + let spritesheet = Spritesheet::load(); let (client_to_server_tx, client_to_server_rx) = channel(); let (server_to_client_tx, server_to_client_rx) = channel(); @@ -89,7 +89,7 @@ async fn main() { unresponded_actions.push_back(action); sequence_number = sequence_number.wrapping_add(1); } - follow_local_player(&mut camera, &game_state, &id); + follow_local_player(&mut camera, &game_state, &spritesheet, &id); } let interpolated_game_state = GameState::interpolate( &old_game_state, diff --git a/client/src/render.rs b/client/src/render.rs @@ -1,3 +1,5 @@ +use std::ops::Index; + use common::game::{GameState, SpriteIndex}; use macroquad::prelude::*; use uuid::Uuid; @@ -45,14 +47,26 @@ impl From<Image> for Sprite { } } -pub(crate) fn load_sprites() -> Spritesheet { - Spritesheet { - meeple: Image::from_file_with_format( - include_bytes!("../assets/meeple.png"), - Some(ImageFormat::Png), - ) - .unwrap() - .into(), +impl Spritesheet { + pub(crate) fn load() -> Spritesheet { + Spritesheet { + meeple: Image::from_file_with_format( + include_bytes!("../assets/meeple.png"), + Some(ImageFormat::Png), + ) + .unwrap() + .into(), + } + } +} + +impl Index<SpriteIndex> for Spritesheet { + type Output = Sprite; + + fn index(&self, index: SpriteIndex) -> &Self::Output { + match index { + SpriteIndex::Meeple => &self.meeple, + } } } @@ -74,9 +88,15 @@ pub(crate) fn render(camera: &Camera, game: &GameState, spritesheet: &Spriteshee } } -pub(crate) fn follow_local_player(camera: &mut Camera, game: &GameState, local_player_id: &Uuid) { +pub(crate) fn follow_local_player( + camera: &mut Camera, + game: &GameState, + spritesheet: &Spritesheet, + local_player_id: &Uuid, +) { let screen_center = Vec2::new(screen_width() / 2., screen_height() / 2.); if let Some((_, player)) = game.players.iter().find(|(id, _)| *id == local_player_id) { - camera.position = player.position - screen_center; + let player_sprite = &spritesheet[player.sprite_index]; + camera.position = player.position - screen_center + player_sprite.size / 2.; } }