Add custom fields to object export
parent
8ae402d037
commit
90cee2d998
|
@ -94,10 +94,9 @@ pub fn run_command() -> Result<(), Box<dyn Error>> {
|
|||
|
||||
let symbol_ids = all_symbols;
|
||||
let sprite_ids = all_sprites;
|
||||
// TODO: will be used when custom object fields are implemented
|
||||
let _fields: Vec<&str> = fields.split( "," ).collect();
|
||||
let fields: Vec<&str> = fields.split( "," ).collect();
|
||||
|
||||
let tiled_file = get_tiled_tilemap( &input_file )?;
|
||||
let tiled_file = get_tiled_tilemap( &input_file, &fields )?;
|
||||
|
||||
// Get tile and palette files
|
||||
let ( all_tiles, palettes ) = get_tiles( &tiled_file )?;
|
||||
|
|
|
@ -211,7 +211,7 @@ fn get_tiles( tileset: Node, first_gid: usize, working_directory: &str ) -> Resu
|
|||
Ok( TiledTileset { first_gid, image, palettes, tile_order, sprite_metadata } )
|
||||
}
|
||||
|
||||
pub fn get_objs( node: &Node ) -> Result<Vec<Object>, Box<dyn Error>> {
|
||||
pub fn get_objs( node: &Node, object_fields: &Vec<&str> ) -> Result<Vec<Object>, Box<dyn Error>> {
|
||||
let mut result = Vec::new();
|
||||
|
||||
let objects = node.descendants().filter( | node | node.tag_name() == "object".into() );
|
||||
|
@ -233,7 +233,17 @@ pub fn get_objs( node: &Node ) -> Result<Vec<Object>, Box<dyn Error>> {
|
|||
attributes.insert( "x".trim().to_owned(), x );
|
||||
attributes.insert( "y".trim().to_owned(), y );
|
||||
|
||||
// TODO: Custom object fields
|
||||
// Custom object fields - push these in order into the LinkedHashMap
|
||||
for field in object_fields {
|
||||
let property = properties.descendants().find( | node | node.attribute( "name" ) == Some( &format!( "reskit-field[{}]", field ) ) );
|
||||
if let Some( property ) = property {
|
||||
let value = property.attribute( "value" ).ok_or( "invalid file: property has no value attribute" )?.to_owned();
|
||||
attributes.insert( field.to_string(), value );
|
||||
} else {
|
||||
print_warning( &format!( "object {} does not define a value for struct field \"{}\", this field will be filled in with 0x00 at export", id, field ) );
|
||||
attributes.insert( field.to_string(), "0".to_owned() );
|
||||
}
|
||||
}
|
||||
|
||||
result.push( Object { id, attributes } );
|
||||
} else {
|
||||
|
@ -247,7 +257,7 @@ pub fn get_objs( node: &Node ) -> Result<Vec<Object>, Box<dyn Error>> {
|
|||
Ok( result )
|
||||
}
|
||||
|
||||
pub fn get_tiled_tilemap( path: &str ) -> Result<TiledTilemap, Box<dyn Error>> {
|
||||
pub fn get_tiled_tilemap( path: &str, object_fields: &Vec<&str> ) -> Result<TiledTilemap, Box<dyn Error>> {
|
||||
let file = read_to_string( path )?;
|
||||
let document = roxmltree::Document::parse( &file )?;
|
||||
let working_directory = {
|
||||
|
@ -341,7 +351,7 @@ pub fn get_tiled_tilemap( path: &str ) -> Result<TiledTilemap, Box<dyn Error>> {
|
|||
// Get the entity-component system
|
||||
let object_group = map.descendants().find( | node | node.tag_name() == "objectgroup".into() );
|
||||
let objects = if let Some( object_group ) = object_group {
|
||||
get_objs( &object_group )?
|
||||
get_objs( &object_group, object_fields )?
|
||||
} else {
|
||||
Vec::new()
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue