use fancy_slice::FancySlice;
use crate::resources;
use crate::resources::Resource;
#[derive(Clone, Debug)]
pub struct Definitions {
pub values: Vec<Definition>,
}
impl Definitions {
pub fn compile(&self) -> Vec<u8> {
let mut output = vec![];
let resources_size =
(self.values.len() + 1) * resources::RESOURCE_SIZE + resources::RESOURCE_HEADER_SIZE; output.extend(i32::to_be_bytes(resources_size as i32));
output.extend(i32::to_be_bytes(self.values.len() as i32));
output.extend([
0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
]);
for _definition in &self.values {
}
output
}
}
#[rustfmt::skip]
pub(crate) fn definitions(data: FancySlice, resources: Vec<Resource>) -> Definitions {
let mut definitions = vec!();
for resource in resources {
let data = data.relative_fancy_slice(resource.data_offset as usize ..);
let name = resource.string;
let mut offset = 0;
let mut draw_calls = vec!();
while data.u8(offset) == 4 {
let material = data.u16_be(offset + 0x01);
let object = data.u16_be(offset + 0x03);
let visibility_bone_node = data.u16_be(offset + 0x05);
let draw_order = data.u8 (offset + 0x07);
draw_calls.push(DrawCall { material, object, visibility_bone_node, draw_order });
offset += DEFINITION_SIZE;
}
definitions.push(Definition { name, draw_calls });
}
Definitions { values: definitions }
}
impl Definition {
pub fn compile(&self) -> Vec<u8> {
let output = vec![];
output
}
}
const DEFINITION_SIZE: usize = 0x8;
#[derive(Clone, Debug)]
pub struct Definition {
pub name: String,
pub draw_calls: Vec<DrawCall>,
}
#[derive(Clone, Debug)]
pub struct DrawCall {
pub material: u16,
pub object: u16,
pub visibility_bone_node: u16,
pub draw_order: u8,
}