DEVELOPMENT ENVIRONMENT

~liljamo/deck-builder

ref: d2c89141eae4f0932cab1f98147b0085f1e07290 deck-builder/client/src/util/mod.rs -rw-r--r-- 1.4 KiB
d2c89141Jonni Liljamo feat(client): end game endpoint call 1 year, 4 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
 * This file is part of laurelin_client
 * Copyright (C) 2023 Jonni Liljamo <jonni@liljamo.com>
 *
 * 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"]
    }
}