Add methods to manipulate robe tier and color
This commit is contained in:
parent
23b5050811
commit
b1676babe9
@ -54,7 +54,7 @@ pub struct Savefile {
|
||||
#[br(count = 8)]
|
||||
_unknown0: Vec<u8>,
|
||||
|
||||
pub robe: u32,
|
||||
robe: u32,
|
||||
|
||||
pub symbol: u32,
|
||||
|
||||
@ -164,12 +164,33 @@ impl Savefile {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_robe_color(&mut self, color: RobeColor) {
|
||||
self.robe = match (self.robe_color(), color) {
|
||||
(RobeColor::Red, RobeColor::White) => self.robe + 4,
|
||||
(RobeColor::White, RobeColor::Red) => self.robe - 4,
|
||||
_ => return,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn robe_tier(&self) -> u32 {
|
||||
match self.robe_color() {
|
||||
RobeColor::Red => self.robe + 1,
|
||||
RobeColor::White => self.robe - 2,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_robe_tier(&mut self, tier: u32) {
|
||||
if tier < 1 || tier > 4 {
|
||||
return;
|
||||
}
|
||||
|
||||
self.robe = match self.robe_color() {
|
||||
RobeColor::Red => tier - 1,
|
||||
// There can't be a tier 1 white robe, setting it to the lowers possible tier
|
||||
RobeColor::White if tier == 1 => 4,
|
||||
RobeColor::White => tier + 2,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[binrw::parser(reader, endian)]
|
||||
|
@ -149,6 +149,58 @@ fn murals() {
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn change_robe_color() {
|
||||
let mut savefile = savefile();
|
||||
|
||||
// lowest tier
|
||||
savefile.robe = 0;
|
||||
|
||||
savefile.set_robe_color(RobeColor::White);
|
||||
assert_eq!(savefile.robe_color(), RobeColor::White);
|
||||
|
||||
savefile.set_robe_color(RobeColor::Red);
|
||||
assert_eq!(savefile.robe_color(), RobeColor::Red);
|
||||
|
||||
// highest tier
|
||||
savefile.robe = 3;
|
||||
|
||||
savefile.set_robe_color(RobeColor::White);
|
||||
assert_eq!(savefile.robe_color(), RobeColor::White);
|
||||
|
||||
savefile.set_robe_color(RobeColor::Red);
|
||||
assert_eq!(savefile.robe_color(), RobeColor::Red);
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn change_robe_tier() {
|
||||
let mut savefile = savefile();
|
||||
|
||||
savefile.set_robe_tier(1);
|
||||
assert_eq!(savefile.robe_tier(), 1);
|
||||
assert_eq!(savefile.robe_color(), RobeColor::Red);
|
||||
|
||||
savefile.set_robe_tier(4);
|
||||
assert_eq!(savefile.robe_tier(), 4);
|
||||
assert_eq!(savefile.robe_color(), RobeColor::Red);
|
||||
|
||||
savefile.set_robe_color(RobeColor::White);
|
||||
|
||||
savefile.set_robe_tier(2);
|
||||
assert_eq!(savefile.robe_tier(), 2);
|
||||
assert_eq!(savefile.robe_color(), RobeColor::White);
|
||||
|
||||
savefile.set_robe_tier(1);
|
||||
assert_eq!(savefile.robe_tier(), 2);
|
||||
assert_eq!(savefile.robe_color(), RobeColor::White);
|
||||
|
||||
savefile.set_robe_tier(4);
|
||||
assert_eq!(savefile.robe_tier(), 4);
|
||||
assert_eq!(savefile.robe_color(), RobeColor::White);
|
||||
}
|
||||
|
||||
|
||||
fn savefile() -> Savefile {
|
||||
const TEST_FILE: &[u8] = include_bytes!("../test.bin");
|
||||
let mut savefile = Cursor::new(TEST_FILE);
|
||||
|
Loading…
Reference in New Issue
Block a user