implement CLI for read-nested and write-nested
This commit is contained in:
parent
130c200376
commit
b5a73fb148
1 changed files with 51 additions and 12 deletions
63
src/main.rs
63
src/main.rs
|
|
@ -6,7 +6,7 @@ use std::path::Path;
|
|||
|
||||
mod fot;
|
||||
use fot::attributes::Attributes;
|
||||
use fot::esh::ESHValue;
|
||||
use fot::esh::{ESH, ESHValue};
|
||||
use fot::entity::Entity;
|
||||
use fot::entitylist::EntityList;
|
||||
use fot::save::Save;
|
||||
|
|
@ -56,6 +56,16 @@ enum Commands {
|
|||
name: String,
|
||||
value: String
|
||||
},
|
||||
/// Read nested ESH value from entity's ESH
|
||||
ReadNested {
|
||||
nested: String
|
||||
},
|
||||
/// Write ESH "value" on "name" into nested ESH at "nested" in entity's ESH
|
||||
WriteNested {
|
||||
nested: String,
|
||||
name: String,
|
||||
value: String
|
||||
},
|
||||
/// List entity attributes (like special stats and skills)
|
||||
ListAttributes,
|
||||
/// List entity modifiers (buffs/debuffs for attributes)
|
||||
|
|
@ -195,25 +205,24 @@ fn get_entities_mut(
|
|||
}
|
||||
}
|
||||
|
||||
fn list_values(ent: &Entity) {
|
||||
fn log_esh(esh: &ESH) {
|
||||
let mut bf = BufWriter::new(stdout().lock());
|
||||
let esh = match ent.esh.as_ref() {
|
||||
Some(esh) => esh,
|
||||
None => {
|
||||
write!(bf, "<no ESH>\n").expect("stdout");
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
for (name, value) in &esh.props {
|
||||
write!(bf, "{}\t{}\n", name, value).expect("stdout");
|
||||
}
|
||||
write!(bf, "\n").expect("stdout");
|
||||
}
|
||||
|
||||
fn write_value(ent: &mut Entity, name: &String, value: &String) {
|
||||
let esh = ent.get_esh_mut().expect("failed to get esh");
|
||||
fn list_values(ent: &Entity) {
|
||||
let esh = match ent.esh.as_ref() {
|
||||
Some(esh) => esh,
|
||||
None => return
|
||||
};
|
||||
|
||||
log_esh(esh);
|
||||
}
|
||||
|
||||
fn write_esh(esh: &mut ESH, name: &String, value: &String) {
|
||||
use ESHValue as EV;
|
||||
match esh.props.get_mut(name.as_str()).unwrap() {
|
||||
EV::Bool(val) => *val = value.parse().expect("parse"),
|
||||
|
|
@ -222,10 +231,29 @@ fn write_value(ent: &mut Entity, name: &String, value: &String) {
|
|||
EV::String(val) => val.str = value.clone(),
|
||||
EV::Sprite(val) => val.str = value.clone(),
|
||||
EV::Enum(val) => val.str = value.clone(),
|
||||
EV::EntityFlags(val) => val.entity_id = value.parse().expect("parse"),
|
||||
_ => panic!("unsupported ESH type input")
|
||||
}
|
||||
}
|
||||
|
||||
fn write_value(ent: &mut Entity, name: &String, value: &String) {
|
||||
let esh = ent.get_esh_mut().expect("failed to get esh");
|
||||
write_esh(esh, name, value);
|
||||
}
|
||||
|
||||
fn read_nested(ent: &Entity, nested: &String) {
|
||||
let esh = ent.get_esh().expect("failed to get esh");
|
||||
let nested_esh = esh.get_nested(nested.as_str()).expect("failed to get nested");
|
||||
log_esh(&nested_esh);
|
||||
}
|
||||
|
||||
fn write_nested(ent: &mut Entity, nested: &String, name: &String, value: &String) {
|
||||
let esh = ent.get_esh_mut().expect("failed to get esh");
|
||||
let mut nested_esh = esh.get_nested(nested.as_str()).expect("failed to get nested");
|
||||
write_esh(&mut nested_esh, name, value);
|
||||
esh.set_nested(nested.as_str(), nested_esh).expect("failed to set nested esh");
|
||||
}
|
||||
|
||||
fn log_attributes(attrs: Attributes) {
|
||||
let mut bf = BufWriter::new(stdout().lock());
|
||||
|
||||
|
|
@ -328,6 +356,17 @@ fn do_save(cli: Cli) {
|
|||
}
|
||||
save.save(Path::new(&cli.output)).expect("failed to save");
|
||||
}
|
||||
Commands::ReadNested { nested } => {
|
||||
for (_, ent) in get_entities(entlist, cli.ids, cli.find) {
|
||||
read_nested(ent, &nested)
|
||||
}
|
||||
}
|
||||
Commands::WriteNested { nested, name, value } => {
|
||||
for (_, ent) in get_entities_mut(&mut save.world.entlist, cli.ids, cli.find) {
|
||||
write_nested(ent, &nested, &name, &value)
|
||||
}
|
||||
save.save(Path::new(&cli.output)).expect("failed to save");
|
||||
}
|
||||
Commands::ListAttributes => {
|
||||
for (_, ent) in get_entities(entlist, cli.ids, cli.find) {
|
||||
list_attributes(ent);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue