pub struct Adj {
pub entries: Vec<AdjEntry>,
pub index_buffer: Vec<i16>,
}
Expand description
Mesh adjacency data for model.adjb files.
Fields§
§entries: Vec<AdjEntry>
A collection containing an entry for each MeshObject with adjacency information in index_buffer
index_buffer: Vec<i16>
A flattened list of adjacent vertex indices for entries
Each vertex for each MeshObject stores the indices for vertices from adjacent faces in the corresponding section of the buffer. The shared vertex for the adjacent face is not explicitly stored, so an adjacent triangle can be encoded as just two index values.
The section of adjacent vertices for each vertex is padded with the value -1
.
to ensure all vertices have an equal number of buffer elements.
The shared vertex of each face is implied.
For example, the vertex with index 0 is adjacent to the triangle face with vertex indices (0, 1, 2).
This would be encoded in the buffer as [1, 2, -1, -1, ...]
.
Smash Ultimate uses 18 elements for each vertex. This allows for 9 adjacent triangle faces instead of 6 since we omit the shared vertex.
Implementations§
source§impl Adj
impl Adj
sourcepub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self, Box<dyn Error>>
pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self, Box<dyn Error>>
Tries to read the type from path
.
The entire file is buffered for performance.
sourcepub fn read<R: Read + Seek>(reader: &mut R) -> Result<Self, Box<dyn Error>>
pub fn read<R: Read + Seek>(reader: &mut R) -> Result<Self, Box<dyn Error>>
Tries to read the type from reader
.
For best performance when opening from a file, use from_file
instead.
Trait Implementations§
source§impl BinRead for Adj
impl BinRead for Adj
source§fn read_options<R: Read + Seek>(
__binrw_generated_var_reader: &mut R,
__binrw_generated_var_endian: Endian,
__binrw_generated_var_arguments: Self::Args<'_>
) -> BinResult<Self>
fn read_options<R: Read + Seek>( __binrw_generated_var_reader: &mut R, __binrw_generated_var_endian: Endian, __binrw_generated_var_arguments: Self::Args<'_> ) -> BinResult<Self>
source§fn read_be<R>(reader: &mut R) -> Result<Self, Error>
fn read_be<R>(reader: &mut R) -> Result<Self, Error>
Self
from the reader using default arguments and assuming
big-endian byte order. Read moresource§fn read_le<R>(reader: &mut R) -> Result<Self, Error>
fn read_le<R>(reader: &mut R) -> Result<Self, Error>
Self
from the reader using default arguments and assuming
little-endian byte order. Read moresource§fn read_ne<R>(reader: &mut R) -> Result<Self, Error>
fn read_ne<R>(reader: &mut R) -> Result<Self, Error>
T
from the reader assuming native-endian byte order. Read moresource§fn read_be_args<R>(reader: &mut R, args: Self::Args<'_>) -> Result<Self, Error>
fn read_be_args<R>(reader: &mut R, args: Self::Args<'_>) -> Result<Self, Error>
Self
from the reader, assuming big-endian byte order, using the
given arguments. Read moresource§impl SsbhWrite for Adj
impl SsbhWrite for Adj
source§fn ssbh_write<W: Write + Seek>(
&self,
writer: &mut W,
data_ptr: &mut u64
) -> Result<()>
fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, data_ptr: &mut u64 ) -> Result<()>
self
to writer
.
data_ptr
is assumed to be the absolute offset where the next data stored behind an offset will be written.
Struct that contains no offsets as fields can skip updating data_ptr
. Read moresource§fn write<W>(&self, writer: &mut W) -> Result<(), Error>
fn write<W>(&self, writer: &mut W) -> Result<(), Error>
self
to writer
.
This is a convenience method for ssbh_write that handles initializing the data pointer.