/* * This file is part of laurelin_client * Copyright (C) 2023 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ use bevy::{asset::{AssetLoader, LoadedAsset}, reflect::TypeUuid}; pub mod egui; mod action_to_log; pub use action_to_log::action_to_log; use crate::game_status::{GameStatus, PlayerStatus}; pub fn get_next_player<'a>(player: &'a PlayerStatus, game_status: &'a GameStatus) -> (&'a String, &'a PlayerStatus) { let next_turn_n: usize = if (player.turn_n + 1) > (game_status.players.len() - 1) { 0 } else { player.turn_n + 1 }; game_status .players .iter() .find(|np| np.1.turn_n == next_turn_n) .unwrap() } #[derive(Debug, TypeUuid)] #[uuid = "da42e27e-e968-4c6a-9892-d96e38b0e643"] pub struct YamlAsset(pub String); #[derive(Default)] pub struct YamlLoader; impl AssetLoader for YamlLoader { fn load<'a>( &'a self, bytes: &'a [u8], load_context: &'a mut bevy::asset::LoadContext, ) -> bevy::utils::BoxedFuture<'a, Result<(), bevy::asset::Error>> { Box::pin(async move { let yaml_str = std::str::from_utf8(bytes)?; let asset = YamlAsset(yaml_str.into()); load_context.set_default_asset(LoadedAsset::new(asset)); Ok(()) }) } fn extensions(&self) -> &[&str] { &["yaml"] } }