mirror of
https://github.com/redstrate/Physis.git
synced 2025-04-26 06:07:45 +00:00
Add common functions for converting bool back and forth from u8/16
Sort of unnecessary, but these are also tested.
This commit is contained in:
parent
eeb877288f
commit
f067b653b1
6 changed files with 49 additions and 10 deletions
|
@ -6,6 +6,7 @@ use std::io::{BufWriter, Cursor};
|
||||||
use binrw::{BinRead, BinWrite};
|
use binrw::{BinRead, BinWrite};
|
||||||
use binrw::binrw;
|
use binrw::binrw;
|
||||||
use crate::{ByteBuffer, ByteSpan};
|
use crate::{ByteBuffer, ByteSpan};
|
||||||
|
use crate::common_file_operations::{read_bool_from, write_bool_as};
|
||||||
|
|
||||||
use crate::race::{Gender, Race, Subrace};
|
use crate::race::{Gender, Race, Subrace};
|
||||||
|
|
||||||
|
@ -136,8 +137,8 @@ pub struct CharacterData { // version 4
|
||||||
pub hair: u8,
|
pub hair: u8,
|
||||||
|
|
||||||
/// If hair highlights are enabled for this character.
|
/// If hair highlights are enabled for this character.
|
||||||
#[br(map = | x: u8 | x != 0 )]
|
#[br(map = read_bool_from::<u8>)]
|
||||||
#[bw(map = | x: &bool | if *x { 1u8 } else { 0u8 } )]
|
#[bw(map = write_bool_as::<u8>)]
|
||||||
pub enable_highlights: bool,
|
pub enable_highlights: bool,
|
||||||
|
|
||||||
/// The character's skin tone.
|
/// The character's skin tone.
|
||||||
|
|
33
src/common_file_operations.rs
Normal file
33
src/common_file_operations.rs
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
// SPDX-FileCopyrightText: 2024 Joshua Goins <josh@redstrate.com>
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
pub(crate) fn read_bool_from<T: std::convert::From<u8> + std::cmp::PartialEq>(x: T) -> bool {
|
||||||
|
x == T::from(1u8)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn write_bool_as<T: std::convert::From<u8>>(x: &bool) -> T {
|
||||||
|
if *x { T::from(1u8) } else { T::from(0u8) }
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use std::io::Cursor;
|
||||||
|
use crate::common_file_operations::{read_bool_from, write_bool_as};
|
||||||
|
use crate::model::MDL;
|
||||||
|
|
||||||
|
const DATA: [u8; 2] = [0u8, 1u8];
|
||||||
|
|
||||||
|
// TODO: add tests for u16
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn read_bool_u8() {
|
||||||
|
assert!(!read_bool_from::<u8>(DATA[0]));
|
||||||
|
assert!(read_bool_from::<u8>(DATA[1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn write_bool_u8() {
|
||||||
|
assert_eq!(write_bool_as::<u8>(&false), DATA[0]);
|
||||||
|
assert_eq!(write_bool_as::<u8>(&true), DATA[1]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,6 +12,7 @@ use crate::ByteBuffer;
|
||||||
#[cfg(feature = "visual_data")]
|
#[cfg(feature = "visual_data")]
|
||||||
use crate::model::ModelFileHeader;
|
use crate::model::ModelFileHeader;
|
||||||
use crate::sqpack::read_data_block;
|
use crate::sqpack::read_data_block;
|
||||||
|
use crate::common_file_operations::read_bool_from;
|
||||||
|
|
||||||
#[binrw]
|
#[binrw]
|
||||||
#[brw(repr = i32)]
|
#[brw(repr = i32)]
|
||||||
|
@ -94,10 +95,10 @@ pub struct ModelFileBlock {
|
||||||
pub material_num: u16,
|
pub material_num: u16,
|
||||||
pub num_lods: u8,
|
pub num_lods: u8,
|
||||||
|
|
||||||
#[br(map = | x: u8 | x != 0)]
|
#[br(map = read_bool_from::<u8>)]
|
||||||
pub index_buffer_streaming_enabled: bool,
|
pub index_buffer_streaming_enabled: bool,
|
||||||
#[brw(pad_after = 1)]
|
#[brw(pad_after = 1)]
|
||||||
#[br(map = | x: u8 | x != 0)]
|
#[br(map = read_bool_from::<u8>)]
|
||||||
pub edge_geometry_enabled: bool,
|
pub edge_geometry_enabled: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -119,5 +119,7 @@ pub mod lgb;
|
||||||
#[cfg(feature = "visual_data")]
|
#[cfg(feature = "visual_data")]
|
||||||
pub mod tera;
|
pub mod tera;
|
||||||
|
|
||||||
|
mod common_file_operations;
|
||||||
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub const PHYSIS_VERSION: &str = env!("CARGO_PKG_VERSION");
|
pub const PHYSIS_VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||||
|
|
|
@ -8,6 +8,7 @@ use binrw::{binrw, BinWrite, BinWriterExt};
|
||||||
use binrw::BinRead;
|
use binrw::BinRead;
|
||||||
use binrw::BinReaderExt;
|
use binrw::BinReaderExt;
|
||||||
use crate::{ByteBuffer, ByteSpan};
|
use crate::{ByteBuffer, ByteSpan};
|
||||||
|
use crate::common_file_operations::{read_bool_from, write_bool_as};
|
||||||
use crate::model_vertex_declarations::{vertex_element_parser, VERTEX_ELEMENT_SIZE, vertex_element_writer, VertexDeclaration, VertexType, VertexUsage};
|
use crate::model_vertex_declarations::{vertex_element_parser, VERTEX_ELEMENT_SIZE, vertex_element_writer, VertexDeclaration, VertexType, VertexUsage};
|
||||||
|
|
||||||
pub const NUM_VERTICES: u32 = 17;
|
pub const NUM_VERTICES: u32 = 17;
|
||||||
|
@ -31,11 +32,11 @@ pub struct ModelFileHeader {
|
||||||
|
|
||||||
pub lod_count: u8,
|
pub lod_count: u8,
|
||||||
|
|
||||||
#[br(map = | x: u8 | x != 0)]
|
#[br(map = read_bool_from::<u8>)]
|
||||||
#[bw(map = | x: & bool | -> u8 { if * x { 1 } else { 0 } })]
|
#[bw(map = write_bool_as::<u8>)]
|
||||||
pub index_buffer_streaming_enabled: bool,
|
pub index_buffer_streaming_enabled: bool,
|
||||||
#[br(map = | x: u8 | x != 0)]
|
#[br(map = read_bool_from::<u8>)]
|
||||||
#[bw(map = | x: & bool | -> u8 { if * x { 1 } else { 0 } })]
|
#[bw(map = write_bool_as::<u8>)]
|
||||||
#[brw(pad_after = 1)]
|
#[brw(pad_after = 1)]
|
||||||
pub has_edge_geometry: bool,
|
pub has_edge_geometry: bool,
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ use tracing::{debug, warn};
|
||||||
|
|
||||||
use crate::common::{get_platform_string, Platform, Region};
|
use crate::common::{get_platform_string, Platform, Region};
|
||||||
use crate::sqpack::read_data_block_patch;
|
use crate::sqpack::read_data_block_patch;
|
||||||
|
use crate::common_file_operations::read_bool_from;
|
||||||
|
|
||||||
#[binread]
|
#[binread]
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -269,7 +270,7 @@ struct SqpkTargetInfo {
|
||||||
#[br(pad_before = 3)]
|
#[br(pad_before = 3)]
|
||||||
platform: Platform,
|
platform: Platform,
|
||||||
region: Region,
|
region: Region,
|
||||||
#[br(map = | x : u16 | x == 1)]
|
#[br(map = read_bool_from::<u16>)]
|
||||||
is_debug: bool,
|
is_debug: bool,
|
||||||
version: u16,
|
version: u16,
|
||||||
#[br(little)]
|
#[br(little)]
|
||||||
|
@ -292,7 +293,7 @@ enum SqpkIndexCommand {
|
||||||
#[br(big)]
|
#[br(big)]
|
||||||
struct SqpkIndex {
|
struct SqpkIndex {
|
||||||
command: SqpkIndexCommand,
|
command: SqpkIndexCommand,
|
||||||
#[br(map = | x : u8 | x == 1)]
|
#[br(map = read_bool_from::<u8>)]
|
||||||
is_synonym: bool,
|
is_synonym: bool,
|
||||||
|
|
||||||
#[br(pad_before = 1)]
|
#[br(pad_before = 1)]
|
||||||
|
|
Loading…
Add table
Reference in a new issue