2023-11-08 06:52:20 +01:00
|
|
|
use std::cmp::{max, min};
|
|
|
|
use crate::position::Position;
|
|
|
|
|
|
|
|
pub struct Player {
|
|
|
|
name: String,
|
|
|
|
position: Position,
|
|
|
|
life: i16,
|
|
|
|
max_life: i16,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Player {
|
|
|
|
pub fn new(name: &str, max_life: i16) -> Player {
|
|
|
|
Player {
|
|
|
|
name: name.to_string(),
|
2023-11-27 19:21:10 +01:00
|
|
|
position: Position::new(0, 0, 0),
|
2023-11-08 06:52:20 +01:00
|
|
|
life: max_life,
|
|
|
|
max_life,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pub fn get_name(&self) -> String {
|
|
|
|
return self.name.clone();
|
|
|
|
}
|
|
|
|
pub fn change_life(&mut self, by: i16) {
|
|
|
|
self.life = max(0, min(self.max_life, self.life + by));
|
|
|
|
}
|
2023-11-26 20:14:33 +01:00
|
|
|
pub fn get_life(&self) -> i16 {
|
|
|
|
self.life
|
|
|
|
}
|
2023-11-27 19:21:10 +01:00
|
|
|
pub fn get_position(&mut self) -> &mut Position {
|
|
|
|
&mut self.position
|
|
|
|
}
|
2023-11-08 06:52:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_get_name() {
|
|
|
|
let p = Player {
|
|
|
|
name: "Teddy Tester".to_string(),
|
|
|
|
position: Position::new(0, 1, 1),
|
|
|
|
life: 5,
|
|
|
|
max_life: 10,
|
|
|
|
};
|
|
|
|
assert_eq!(p.get_name(), "Teddy Tester");
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_change_life() {
|
|
|
|
let mut p = Player {
|
|
|
|
name: "Teddy Tester".to_string(),
|
|
|
|
position: Position::new(0, 1, 1),
|
|
|
|
life: 5,
|
|
|
|
max_life: 10,
|
|
|
|
};
|
|
|
|
assert_eq!(p.life, 5);
|
|
|
|
p.change_life(-2);
|
|
|
|
assert_eq!(p.life, 3);
|
|
|
|
p.change_life(10);
|
|
|
|
assert_eq!(p.life, 10);
|
|
|
|
p.change_life(-12);
|
|
|
|
assert_eq!(p.life, 0);
|
2023-11-27 19:21:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn player_can_move() {
|
|
|
|
let mut p = Player::new("Teddy Tester", 10);
|
|
|
|
assert_eq!(p.get_position(), &Position::new(0, 0, 0));
|
|
|
|
p.get_position().change(1, 2);
|
|
|
|
assert_eq!(p.get_position(), &Position::new(0, 1, 2));
|
|
|
|
p.get_position().change(2, 1);
|
|
|
|
assert_eq!(p.get_position(), &Position::new(0, 3, 3));
|
|
|
|
p.get_position().set(1, 2, 3);
|
|
|
|
p.get_position().change(2, 1);
|
|
|
|
assert_eq!(p.get_position(), &Position::new(1, 4, 4));
|
|
|
|
}
|