Files
cursebreaker-parser-rust/cursebreaker-parser/examples/player_houses_example.rs
2026-01-11 02:46:49 +00:00

101 lines
3.4 KiB
Rust

use cursebreaker_parser::PlayerHouseDatabase;
use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Load all player houses from XML
let cb_assets_path = env::var("CB_ASSETS_PATH").unwrap_or_else(|_| "/home/connor/repos/CBAssets".to_string());
let ph_db = PlayerHouseDatabase::load_from_xml(
&format!("{}/Data/XMLs/PlayerHouses/PlayerHouses.xml", cb_assets_path),
)?;
println!("=== Player House Database Statistics ===");
println!("Total houses: {}", ph_db.len());
println!("Visible houses: {}", ph_db.get_visible_houses().len());
println!("Hidden houses: {}", ph_db.get_hidden_houses().len());
println!();
// Show all houses sorted by price
println!("=== All Houses (sorted by price) ===");
let sorted = ph_db.get_sorted_by_price();
for house in &sorted {
let visibility = if house.hidden { "(hidden)" } else { "" };
println!(
" [{}] {} - {} gold {}",
house.id, house.name, house.price, visibility
);
}
println!();
// Show price tiers
println!("=== Houses by Price Tier ===");
println!("Free houses (tier 0):");
for house in ph_db.get_by_price_tier(0) {
println!(" - {}", house.name);
}
println!("\nCheap houses (tier 1, < 5000 gold):");
for house in ph_db.get_by_price_tier(1) {
println!(" - {} ({} gold)", house.name, house.price);
}
println!("\nModerate houses (tier 2, 5000-10000 gold):");
for house in ph_db.get_by_price_tier(2) {
println!(" - {} ({} gold)", house.name, house.price);
}
println!("\nExpensive houses (tier 3, 10000+ gold):");
for house in ph_db.get_by_price_tier(3) {
println!(" - {} ({} gold)", house.name, house.price);
}
println!();
// Show cheapest and most expensive
println!("=== Price Extremes ===");
if let Some(cheapest) = ph_db.get_cheapest() {
println!(
"Cheapest house: {} - {} gold",
cheapest.name, cheapest.price
);
}
if let Some(most_expensive) = ph_db.get_most_expensive() {
println!(
"Most expensive: {} - {} gold",
most_expensive.name, most_expensive.price
);
}
println!();
// Show houses in a specific price range
println!("=== Houses between 3000-5000 gold ===");
let mid_range = ph_db.get_by_price_range(3000, 5000);
for house in mid_range {
println!(" - {} ({} gold)", house.name, house.price);
}
println!();
// Show affordable houses
println!("=== Affordable Houses (< 5000 gold) ===");
let affordable = ph_db.get_affordable_houses();
for house in &affordable {
println!(" - {} ({} gold)", house.name, house.price);
}
println!("Total affordable: {}", affordable.len());
println!();
// Show details of a specific house
if let Some(house) = ph_db.get_by_id(8) {
println!("=== House Details (ID 8) ===");
println!("Name: {}", house.name);
println!("Description: {}", house.description);
println!("Price: {} gold", house.price);
println!("Position: {}", house.position);
if let Some((x, y, z)) = house.get_position() {
println!("Coordinates: ({:.2}, {:.2}, {:.2})", x, y, z);
}
println!("Hidden: {}", house.hidden);
println!("Price tier: {}", house.get_price_tier());
}
Ok(())
}