1
// This file is part of hnefatafl-copenhagen.
2
//
3
// hnefatafl-copenhagen is free software: you can redistribute it and/or modify
4
// it under the terms of the GNU Affero General Public License as published by
5
// the Free Software Foundation, either version 3 of the License, or
6
// (at your option) any later version.
7
//
8
// hnefatafl-copenhagen is distributed in the hope that it will be useful,
9
// but WITHOUT ANY WARRANTY; without even the implied warranty of
10
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
// GNU Affero General Public License for more details.
12
//
13
// You should have received a copy of the GNU Affero General Public License
14
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
15
//
16
// SPDX-License-Identifier: AGPL-3.0-or-later
17
// SPDX-FileCopyrightText: 2025 David Campbell <david@hnefatafl.org>
18

            
19
use serde::{Deserialize, Serialize};
20

            
21
pub const MAX_VOLUME: u32 = 8;
22

            
23
#[derive(Debug, Deserialize, Serialize)]
24
pub(crate) struct Volume(pub u32);
25

            
26
impl Default for Volume {
27
    fn default() -> Self {
28
        Self(4)
29
    }
30
}
31

            
32
impl Volume {
33
    pub fn volume(&self) -> f32 {
34
        match self.0 {
35
            0 => 0.25,
36
            1 => 0.375,
37
            2 => 0.5,
38
            3 => 0.75,
39
            4 => 1.0,
40
            5 => 1.5,
41
            6 => 2.0,
42
            7 => 3.0,
43
            MAX_VOLUME => 4.0,
44
            _ => unreachable!(),
45
        }
46
    }
47
}