Generate visual parameter and foliage catalogs (#48)
This commit is contained in:
471
crates/libremetaverse/src/foliage_catalog.rs
Normal file
471
crates/libremetaverse/src/foliage_catalog.rs
Normal file
@@ -0,0 +1,471 @@
|
||||
// @generated by libremetaverse-codegen; DO NOT EDIT.
|
||||
// Regenerate: cargo run -p libremetaverse-codegen -- generate
|
||||
// Generator: foliage
|
||||
// Source: codegen/inputs/trees.xml sha256=f54e626b00bd2c4fec9f59a574a45860f209e4440bbb02b81d27050b9df8ffba license=BSD-3-Clause
|
||||
// Source: codegen/inputs/grass.xml sha256=90015f9768afe3cfee761d04239bf9e284b2739b095b7ab8331966fa1fbfcb4e license=BSD-3-Clause
|
||||
|
||||
#![allow(clippy::missing_errors_doc, clippy::must_use_candidate, clippy::too_many_lines)]
|
||||
use std::sync::OnceLock;
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub struct TreeDefinition {
|
||||
name: String,
|
||||
species_id: i32,
|
||||
texture_id: libremetaverse_types::UUID,
|
||||
droop: f32,
|
||||
twist: f32,
|
||||
branches: f32,
|
||||
depth: i32,
|
||||
scale_step: f32,
|
||||
trunk_depth: f32,
|
||||
branch_length: f32,
|
||||
trunk_length: f32,
|
||||
leaf_scale: f32,
|
||||
billboard_scale: f32,
|
||||
billboard_ratio: f32,
|
||||
trunk_aspect: f32,
|
||||
branch_aspect: f32,
|
||||
leaf_rotate: f32,
|
||||
noise_mag: f32,
|
||||
noise_scale: f32,
|
||||
taper: f32,
|
||||
repeat_z: i32,
|
||||
}
|
||||
impl TreeDefinition {
|
||||
pub fn name(&self) -> String {
|
||||
self.name.clone()
|
||||
}
|
||||
pub fn set_name(&mut self, value: String) {
|
||||
self.name = value;
|
||||
}
|
||||
pub fn species_id(&self) -> i32 {
|
||||
self.species_id
|
||||
}
|
||||
pub fn set_species_id(&mut self, value: i32) {
|
||||
self.species_id = value;
|
||||
}
|
||||
pub fn texture_id(&self) -> libremetaverse_types::UUID {
|
||||
self.texture_id
|
||||
}
|
||||
pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) {
|
||||
self.texture_id = value;
|
||||
}
|
||||
pub fn droop(&self) -> f32 {
|
||||
self.droop
|
||||
}
|
||||
pub fn set_droop(&mut self, value: f32) {
|
||||
self.droop = value;
|
||||
}
|
||||
pub fn twist(&self) -> f32 {
|
||||
self.twist
|
||||
}
|
||||
pub fn set_twist(&mut self, value: f32) {
|
||||
self.twist = value;
|
||||
}
|
||||
pub fn branches(&self) -> f32 {
|
||||
self.branches
|
||||
}
|
||||
pub fn set_branches(&mut self, value: f32) {
|
||||
self.branches = value;
|
||||
}
|
||||
pub fn scale_step(&self) -> f32 {
|
||||
self.scale_step
|
||||
}
|
||||
pub fn set_scale_step(&mut self, value: f32) {
|
||||
self.scale_step = value;
|
||||
}
|
||||
pub fn trunk_depth(&self) -> f32 {
|
||||
self.trunk_depth
|
||||
}
|
||||
pub fn set_trunk_depth(&mut self, value: f32) {
|
||||
self.trunk_depth = value;
|
||||
}
|
||||
pub fn branch_length(&self) -> f32 {
|
||||
self.branch_length
|
||||
}
|
||||
pub fn set_branch_length(&mut self, value: f32) {
|
||||
self.branch_length = value;
|
||||
}
|
||||
pub fn trunk_length(&self) -> f32 {
|
||||
self.trunk_length
|
||||
}
|
||||
pub fn set_trunk_length(&mut self, value: f32) {
|
||||
self.trunk_length = value;
|
||||
}
|
||||
pub fn leaf_scale(&self) -> f32 {
|
||||
self.leaf_scale
|
||||
}
|
||||
pub fn set_leaf_scale(&mut self, value: f32) {
|
||||
self.leaf_scale = value;
|
||||
}
|
||||
pub fn billboard_scale(&self) -> f32 {
|
||||
self.billboard_scale
|
||||
}
|
||||
pub fn set_billboard_scale(&mut self, value: f32) {
|
||||
self.billboard_scale = value;
|
||||
}
|
||||
pub fn billboard_ratio(&self) -> f32 {
|
||||
self.billboard_ratio
|
||||
}
|
||||
pub fn set_billboard_ratio(&mut self, value: f32) {
|
||||
self.billboard_ratio = value;
|
||||
}
|
||||
pub fn trunk_aspect(&self) -> f32 {
|
||||
self.trunk_aspect
|
||||
}
|
||||
pub fn set_trunk_aspect(&mut self, value: f32) {
|
||||
self.trunk_aspect = value;
|
||||
}
|
||||
pub fn branch_aspect(&self) -> f32 {
|
||||
self.branch_aspect
|
||||
}
|
||||
pub fn set_branch_aspect(&mut self, value: f32) {
|
||||
self.branch_aspect = value;
|
||||
}
|
||||
pub fn leaf_rotate(&self) -> f32 {
|
||||
self.leaf_rotate
|
||||
}
|
||||
pub fn set_leaf_rotate(&mut self, value: f32) {
|
||||
self.leaf_rotate = value;
|
||||
}
|
||||
pub fn noise_mag(&self) -> f32 {
|
||||
self.noise_mag
|
||||
}
|
||||
pub fn set_noise_mag(&mut self, value: f32) {
|
||||
self.noise_mag = value;
|
||||
}
|
||||
pub fn noise_scale(&self) -> f32 {
|
||||
self.noise_scale
|
||||
}
|
||||
pub fn set_noise_scale(&mut self, value: f32) {
|
||||
self.noise_scale = value;
|
||||
}
|
||||
pub fn taper(&self) -> f32 {
|
||||
self.taper
|
||||
}
|
||||
pub fn set_taper(&mut self, value: f32) {
|
||||
self.taper = value;
|
||||
}
|
||||
pub fn depth(&self) -> i32 {
|
||||
self.depth
|
||||
}
|
||||
pub fn set_depth(&mut self, value: i32) {
|
||||
self.depth = value;
|
||||
}
|
||||
pub fn repeat_z(&self) -> i32 {
|
||||
self.repeat_z
|
||||
}
|
||||
pub fn set_repeat_z(&mut self, value: i32) {
|
||||
self.repeat_z = value;
|
||||
}
|
||||
}
|
||||
fn generated_trees() -> &'static [TreeDefinition] {
|
||||
static TREES: OnceLock<Vec<TreeDefinition>> = OnceLock::new();
|
||||
TREES
|
||||
.get_or_init(|| {
|
||||
vec![
|
||||
TreeDefinition { name : "Pine 1".to_owned(), species_id : 0, texture_id :
|
||||
libremetaverse_types::UUID::parse("0187babf-6c0d-5891-ebed-4ecab1426683"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 60.0_f32, twist :
|
||||
5.0_f32, branches : 5.0_f32, depth : 1, scale_step : 0.7_f32, trunk_depth
|
||||
: 6.0_f32, branch_length : 8.0_f32, trunk_length : 11.5_f32, leaf_scale :
|
||||
22.0_f32, billboard_scale : 39.5_f32, billboard_ratio : 1.1_f32,
|
||||
trunk_aspect : 0.1_f32, branch_aspect : 0.05_f32, leaf_rotate : 20.0_f32,
|
||||
noise_mag : 0.5_f32, noise_scale : 2.5_f32, taper : 0.8_f32, repeat_z : 3
|
||||
}, TreeDefinition { name : "Oak".to_owned(), species_id : 1, texture_id :
|
||||
libremetaverse_types::UUID::parse("8a515889-eac9-fb55-8eba-d2dc09eb32c8"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 35.0_f32, twist :
|
||||
3.0_f32, branches : 4.0_f32, depth : 3, scale_step : 0.7_f32, trunk_depth
|
||||
: 0.0_f32, branch_length : 3.0_f32, trunk_length : 3.8_f32, leaf_scale :
|
||||
7.0_f32, billboard_scale : 10.25_f32, billboard_ratio : 1.0_f32,
|
||||
trunk_aspect : 0.15_f32, branch_aspect : 0.07_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 1.2_f32, noise_scale : 4.0_f32, taper : 0.3_f32, repeat_z : 4
|
||||
}, TreeDefinition { name : "Tropical Bush 1".to_owned(), species_id : 2,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("5bc11cd6-2f40-071e-a8da-0903394204f9"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 10.0_f32, twist :
|
||||
0.0_f32, branches : 6.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth
|
||||
: 1.0_f32, branch_length : 0.5_f32, trunk_length : 0.15_f32, leaf_scale :
|
||||
7.5_f32, billboard_scale : 5.0_f32, billboard_ratio : 1.25_f32,
|
||||
trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1
|
||||
}, TreeDefinition { name : "Palm 1".to_owned(), species_id : 3,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("ca4e8c27-473c-eb1c-2f5d-50ee3f07d85c"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist :
|
||||
0.0_f32, branches : 3.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth
|
||||
: 0.0_f32, branch_length : 0.7_f32, trunk_length : 9.0_f32, leaf_scale :
|
||||
10.0_f32, billboard_scale : 13.25_f32, billboard_ratio : 1.0_f32,
|
||||
trunk_aspect : 0.035_f32, branch_aspect : 0.03_f32, leaf_rotate :
|
||||
0.0_f32, noise_mag : 0.2_f32, noise_scale : 6.0_f32, taper : 0.7_f32,
|
||||
repeat_z : 10 }, TreeDefinition { name : "Dogwood".to_owned(), species_id
|
||||
: 4, texture_id :
|
||||
libremetaverse_types::UUID::parse("64367bd1-697e-b3e6-0b65-3f862a577366"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 30.0_f32, twist :
|
||||
0.0_f32, branches : 3.0_f32, depth : 2, scale_step : 0.7_f32, trunk_depth
|
||||
: 1.0_f32, branch_length : 2.75_f32, trunk_length : 4.0_f32, leaf_scale :
|
||||
5.5_f32, billboard_scale : 10.0_f32, billboard_ratio : 1.0_f32,
|
||||
trunk_aspect : 0.06_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 1.5_f32, noise_scale : 2.0_f32, taper : 0.8_f32, repeat_z : 3
|
||||
}, TreeDefinition { name : "Tropical Bush 2".to_owned(), species_id : 5,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("cdd9a9fc-6d0b-f90d-8416-c72b6019bca8"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 10.0_f32, twist :
|
||||
0.0_f32, branches : 3.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth
|
||||
: 1.0_f32, branch_length : 0.5_f32, trunk_length : 0.15_f32, leaf_scale :
|
||||
6.0_f32, billboard_scale : 4.5_f32, billboard_ratio : 0.9_f32,
|
||||
trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1
|
||||
}, TreeDefinition { name : "Palm 2".to_owned(), species_id : 6,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("2d784476-d0db-9979-0cff-9408745a7cf3"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist :
|
||||
0.0_f32, branches : 3.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth
|
||||
: 0.0_f32, branch_length : 0.7_f32, trunk_length : 10.0_f32, leaf_scale :
|
||||
7.5_f32, billboard_scale : 13.5_f32, billboard_ratio : 1.0_f32,
|
||||
trunk_aspect : 0.035_f32, branch_aspect : 0.03_f32, leaf_rotate :
|
||||
0.0_f32, noise_mag : 0.2_f32, noise_scale : 6.0_f32, taper : 0.6_f32,
|
||||
repeat_z : 12 }, TreeDefinition { name : "Cypress 1".to_owned(),
|
||||
species_id : 7, texture_id :
|
||||
libremetaverse_types::UUID::parse("fb2ae204-3fd1-df33-594f-c9f882830e66"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 30.0_f32, twist :
|
||||
0.0_f32, branches : 3.0_f32, depth : 4, scale_step : 0.5_f32, trunk_depth
|
||||
: 0.0_f32, branch_length : 10.0_f32, trunk_length : 10.0_f32, leaf_scale
|
||||
: 70.0_f32, billboard_scale : 22.5_f32, billboard_ratio : 1.0_f32,
|
||||
trunk_aspect : 0.05_f32, branch_aspect : 0.03_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 1.2_f32, noise_scale : 1.0_f32, taper : 0.5_f32, repeat_z : 6
|
||||
}, TreeDefinition { name : "Cypress 2".to_owned(), species_id : 8,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("30047cec-269d-408e-0c30-b2603b887268"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 30.0_f32, twist :
|
||||
0.0_f32, branches : 3.0_f32, depth : 4, scale_step : 0.6_f32, trunk_depth
|
||||
: 3.0_f32, branch_length : 7.5_f32, trunk_length : 10.0_f32, leaf_scale :
|
||||
35.0_f32, billboard_scale : 25.0_f32, billboard_ratio : 0.8_f32,
|
||||
trunk_aspect : 0.05_f32, branch_aspect : 0.04_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 1.2_f32, noise_scale : 1.0_f32, taper : 0.5_f32, repeat_z : 5
|
||||
}, TreeDefinition { name : "Pine 2".to_owned(), species_id : 9,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("d691a01c-13b7-578d-57c0-5caef0b4e7e1"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 50.0_f32, twist :
|
||||
7.5_f32, branches : 4.0_f32, depth : 2, scale_step : 0.7_f32, trunk_depth
|
||||
: 6.0_f32, branch_length : 6.0_f32, trunk_length : 10.0_f32, leaf_scale :
|
||||
15.5_f32, billboard_scale : 33.0_f32, billboard_ratio : 1.35_f32,
|
||||
trunk_aspect : 0.1_f32, branch_aspect : 0.08_f32, leaf_rotate : 5.0_f32,
|
||||
noise_mag : 0.5_f32, noise_scale : 2.5_f32, taper : 0.7_f32, repeat_z : 3
|
||||
}, TreeDefinition { name : "Plumeria".to_owned(), species_id : 10,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("6de37e4e-7029-61f5-54b8-f5e63f983f58"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 8.0_f32, twist :
|
||||
7.0_f32, branches : 3.0_f32, depth : 2, scale_step : 0.6_f32, trunk_depth
|
||||
: 0.0_f32, branch_length : 3.0_f32, trunk_length : 0.1_f32, leaf_scale :
|
||||
20.0_f32, billboard_scale : 10.0_f32, billboard_ratio : 1.35_f32,
|
||||
trunk_aspect : 0.1_f32, branch_aspect : 0.075_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 0.0_f32, noise_scale : 0.0_f32, taper : 0.85_f32, repeat_z :
|
||||
2 }, TreeDefinition { name : "Winter Pine 1".to_owned(), species_id : 11,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("10d2a01a-0818-84b9-4b96-c2eb63256519"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 90.0_f32, twist :
|
||||
2.5_f32, branches : 6.0_f32, depth : 1, scale_step : 0.66_f32,
|
||||
trunk_depth : 8.0_f32, branch_length : 0.0_f32, trunk_length : 4.0_f32,
|
||||
leaf_scale : 6.75_f32, billboard_scale : 12.5_f32, billboard_ratio :
|
||||
0.6_f32, trunk_aspect : 0.1_f32, branch_aspect : 0.05_f32, leaf_rotate :
|
||||
0.0_f32, noise_mag : 0.0_f32, noise_scale : 2.5_f32, taper : 0.85_f32,
|
||||
repeat_z : 2 }, TreeDefinition { name : "Winter Aspen".to_owned(),
|
||||
species_id : 12, texture_id :
|
||||
libremetaverse_types::UUID::parse("7c0cf89b-44b1-1ce2-dd74-07102a98ac2a"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 85.0_f32, twist :
|
||||
3.0_f32, branches : 5.0_f32, depth : 1, scale_step : 0.6_f32, trunk_depth
|
||||
: 8.0_f32, branch_length : 3.0_f32, trunk_length : 4.5_f32, leaf_scale :
|
||||
8.0_f32, billboard_scale : 12.0_f32, billboard_ratio : 0.675_f32,
|
||||
trunk_aspect : 0.06_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 0.75_f32, noise_scale : 2.5_f32, taper : 0.8_f32, repeat_z :
|
||||
2 }, TreeDefinition { name : "Winter Pine 2".to_owned(), species_id : 13,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("67931331-0c02-4876-1255-28770896c6a2"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 140.0_f32, twist :
|
||||
5.0_f32, branches : 6.0_f32, depth : 1, scale_step : 0.6_f32, trunk_depth
|
||||
: 7.0_f32, branch_length : 0.0_f32, trunk_length : 3.0_f32, leaf_scale :
|
||||
5.0_f32, billboard_scale : 7.5_f32, billboard_ratio : 0.5_f32,
|
||||
trunk_aspect : 0.1_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 0.75_f32, noise_scale : 2.5_f32, taper : 0.5_f32, repeat_z :
|
||||
2 }, TreeDefinition { name : "Eucalyptus".to_owned(), species_id : 14,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("a6162133-724b-54df-a12f-51cd070ad6f3"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 20.0_f32, twist :
|
||||
5.0_f32, branches : 3.6_f32, depth : 4, scale_step : 0.6_f32, trunk_depth
|
||||
: 0.0_f32, branch_length : 12.0_f32, trunk_length : 8.0_f32, leaf_scale :
|
||||
33.0_f32, billboard_scale : 24.0_f32, billboard_ratio : 1.3_f32,
|
||||
trunk_aspect : 0.15_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 0.0_f32, noise_scale : 0.0_f32, taper : 0.675_f32, repeat_z :
|
||||
3 }, TreeDefinition { name : "Fern".to_owned(), species_id : 15,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("8872f2b8-31db-42d8-580a-b3e4a91262de"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 12.0_f32, twist :
|
||||
0.0_f32, branches : 7.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth
|
||||
: 0.1_f32, branch_length : 0.01_f32, trunk_length : 0.0_f32, leaf_scale :
|
||||
4.0_f32, billboard_scale : 3.5_f32, billboard_ratio : 0.85_f32,
|
||||
trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1
|
||||
}, TreeDefinition { name : "Eelgrass".to_owned(), species_id : 16,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("96b4de31-f4fa-337d-ec78-451e3609769e"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist :
|
||||
0.0_f32, branches : 5.0_f32, depth : 1, scale_step : 0.5_f32, trunk_depth
|
||||
: 1.0_f32, branch_length : 0.5_f32, trunk_length : 0.15_f32, leaf_scale :
|
||||
5.0_f32, billboard_scale : 3.0_f32, billboard_ratio : 1.0_f32,
|
||||
trunk_aspect : 1.0_f32, branch_aspect : 0.08_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 1.0_f32, noise_scale : 1.0_f32, taper : 0.2_f32, repeat_z : 1
|
||||
}, TreeDefinition { name : "Sea Sword".to_owned(), species_id : 17,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("5894e2e7-ab8d-edfa-e61c-18cf16854ba3"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist :
|
||||
0.0_f32, branches : 6.0_f32, depth : 1, scale_step : 0.7_f32, trunk_depth
|
||||
: 1.0_f32, branch_length : 0.0_f32, trunk_length : 0.0_f32, leaf_scale :
|
||||
2.0_f32, billboard_scale : 2.0_f32, billboard_ratio : 1.0_f32,
|
||||
trunk_aspect : 1.0_f32, branch_aspect : 1.0_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 0.5_f32, noise_scale : 0.0_f32, taper : 0.0_f32, repeat_z : 1
|
||||
}, TreeDefinition { name : "Kelp 1".to_owned(), species_id : 18,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("2caf1179-7861-6ff3-4b7d-46e17780bdfa"
|
||||
.to_owned()).expect("validated tree UUID"), droop : - 15.0_f32, twist :
|
||||
0.0_f32, branches : 1.0_f32, depth : 1, scale_step : 1.0_f32, trunk_depth
|
||||
: 3.0_f32, branch_length : 2.5_f32, trunk_length : 0.75_f32, leaf_scale :
|
||||
1.85_f32, billboard_scale : 4.9_f32, billboard_ratio : 1.0_f32,
|
||||
trunk_aspect : 0.04_f32, branch_aspect : 0.05_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 1.0_f32, noise_scale : 2.0_f32, taper : 0.8_f32, repeat_z : 2
|
||||
}, TreeDefinition { name : "Beach Grass 1".to_owned(), species_id : 19,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("18fb888b-e8f1-dce7-7da7-321d651ea6b0"
|
||||
.to_owned()).expect("validated tree UUID"), droop : 0.0_f32, twist :
|
||||
0.0_f32, branches : 4.0_f32, depth : 1, scale_step : 0.7_f32, trunk_depth
|
||||
: 1.0_f32, branch_length : 0.0_f32, trunk_length : 0.0_f32, leaf_scale :
|
||||
4.0_f32, billboard_scale : 2.5_f32, billboard_ratio : 1.2_f32,
|
||||
trunk_aspect : 1.0_f32, branch_aspect : 1.0_f32, leaf_rotate : 0.0_f32,
|
||||
noise_mag : 0.5_f32, noise_scale : 0.0_f32, taper : 0.0_f32, repeat_z : 1
|
||||
}, TreeDefinition { name : "Kelp 2".to_owned(), species_id : 20,
|
||||
texture_id :
|
||||
libremetaverse_types::UUID::parse("2a4880b6-b7a3-690a-2049-bfbe38eafb9f"
|
||||
.to_owned()).expect("validated tree UUID"), droop : - 15.0_f32, twist :
|
||||
0.0_f32, branches : 1.0_f32, depth : 1, scale_step : 1.0_f32, trunk_depth
|
||||
: 3.0_f32, branch_length : 2.5_f32, trunk_length : 1.35_f32, leaf_scale :
|
||||
2.0_f32, billboard_scale : 4.9_f32, billboard_ratio : 1.0_f32,
|
||||
trunk_aspect : 0.025_f32, branch_aspect : 0.05_f32, leaf_rotate :
|
||||
0.0_f32, noise_mag : 1.0_f32, noise_scale : 2.0_f32, taper : 0.8_f32,
|
||||
repeat_z : 2 },
|
||||
]
|
||||
})
|
||||
.as_slice()
|
||||
}
|
||||
pub struct TreeDefinitions;
|
||||
impl TreeDefinitions {
|
||||
pub fn all() -> Vec<TreeDefinition> {
|
||||
generated_trees().to_vec()
|
||||
}
|
||||
pub fn get(species: crate::Tree) -> Result<TreeDefinition, crate::Error> {
|
||||
generated_trees().get(species as usize).cloned().ok_or(crate::Error::Argument)
|
||||
}
|
||||
}
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub struct GrassDefinition {
|
||||
name: String,
|
||||
species_id: i32,
|
||||
texture_id: libremetaverse_types::UUID,
|
||||
blade_size_x: f32,
|
||||
blade_size_y: f32,
|
||||
}
|
||||
impl GrassDefinition {
|
||||
pub fn name(&self) -> String {
|
||||
self.name.clone()
|
||||
}
|
||||
pub fn set_name(&mut self, value: String) {
|
||||
self.name = value;
|
||||
}
|
||||
pub fn species_id(&self) -> i32 {
|
||||
self.species_id
|
||||
}
|
||||
pub fn set_species_id(&mut self, value: i32) {
|
||||
self.species_id = value;
|
||||
}
|
||||
pub fn texture_id(&self) -> libremetaverse_types::UUID {
|
||||
self.texture_id
|
||||
}
|
||||
pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) {
|
||||
self.texture_id = value;
|
||||
}
|
||||
pub fn blade_size_x(&self) -> f32 {
|
||||
self.blade_size_x
|
||||
}
|
||||
pub fn set_blade_size_x(&mut self, value: f32) {
|
||||
self.blade_size_x = value;
|
||||
}
|
||||
pub fn blade_size_y(&self) -> f32 {
|
||||
self.blade_size_y
|
||||
}
|
||||
pub fn set_blade_size_y(&mut self, value: f32) {
|
||||
self.blade_size_y = value;
|
||||
}
|
||||
}
|
||||
fn generated_grasses() -> &'static [GrassDefinition] {
|
||||
static GRASSES: OnceLock<Vec<GrassDefinition>> = OnceLock::new();
|
||||
GRASSES
|
||||
.get_or_init(|| {
|
||||
vec![
|
||||
GrassDefinition { name : "Grass 0".to_owned(), species_id : 0, texture_id
|
||||
:
|
||||
libremetaverse_types::UUID::parse("6c4727b8-ac79-ba44-3b81-f9aa887b47eb"
|
||||
.to_owned()).expect("validated grass UUID"), blade_size_x : 1.35_f32,
|
||||
blade_size_y : 1.35_f32 }, GrassDefinition { name : "Grass 1".to_owned(),
|
||||
species_id : 1, texture_id :
|
||||
libremetaverse_types::UUID::parse("79504bf5-c3ec-0763-6563-d843de66d0a1"
|
||||
.to_owned()).expect("validated grass UUID"), blade_size_x : 1.0_f32,
|
||||
blade_size_y : 0.66_f32 }, GrassDefinition { name : "Grass 2".to_owned(),
|
||||
species_id : 2, texture_id :
|
||||
libremetaverse_types::UUID::parse("6c4727b8-ac79-ba44-3b81-f9aa887b47eb"
|
||||
.to_owned()).expect("validated grass UUID"), blade_size_x : 1.8_f32,
|
||||
blade_size_y : 1.8_f32 }, GrassDefinition { name : "Grass 3".to_owned(),
|
||||
species_id : 3, texture_id :
|
||||
libremetaverse_types::UUID::parse("99bd60a2-3250-efc9-2e39-2fbcadefbecc"
|
||||
.to_owned()).expect("validated grass UUID"), blade_size_x : 1.0_f32,
|
||||
blade_size_y : 1.0_f32 }, GrassDefinition { name : "Grass 4".to_owned(),
|
||||
species_id : 4, texture_id :
|
||||
libremetaverse_types::UUID::parse("7a2b3a4a-53c2-53ac-5716-aac7d743c020"
|
||||
.to_owned()).expect("validated grass UUID"), blade_size_x : 2.25_f32,
|
||||
blade_size_y : 2.25_f32 }, GrassDefinition { name : "undergrowth_1"
|
||||
.to_owned(), species_id : 5, texture_id :
|
||||
libremetaverse_types::UUID::parse("8f458549-173b-23ff-d4ff-bfaa5ea2371b"
|
||||
.to_owned()).expect("validated grass UUID"), blade_size_x : 2.0_f32,
|
||||
blade_size_y : 2.0_f32 },
|
||||
]
|
||||
})
|
||||
.as_slice()
|
||||
}
|
||||
pub struct GrassDefinitions;
|
||||
impl GrassDefinitions {
|
||||
pub fn all() -> Vec<GrassDefinition> {
|
||||
generated_grasses().to_vec()
|
||||
}
|
||||
pub fn get(species: crate::Grass) -> Result<GrassDefinition, crate::Error> {
|
||||
grass_by_id(species as u8)
|
||||
}
|
||||
}
|
||||
pub(crate) fn grass_by_id(species: u8) -> Result<GrassDefinition, crate::Error> {
|
||||
generated_grasses().get(usize::from(species)).cloned().ok_or(crate::Error::Argument)
|
||||
}
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
#[test]
|
||||
fn golden_foliage_shape_and_values() {
|
||||
let trees = TreeDefinitions::all();
|
||||
assert_eq!(trees.len(), 21);
|
||||
assert_eq!(trees[0].name(), "Pine 1");
|
||||
assert_eq!(trees[0].species_id(), crate ::Tree::Pine1 as i32);
|
||||
assert_eq!(trees[20].name(), "Kelp 2");
|
||||
assert_eq!(TreeDefinitions::get(crate ::Tree::Oak).unwrap(), trees[1]);
|
||||
let grass = GrassDefinitions::all();
|
||||
assert_eq!(grass.len(), 6);
|
||||
assert_eq!(grass[5].name(), "undergrowth_1");
|
||||
assert_eq!(
|
||||
GrassDefinitions::get(crate ::Grass::Undergrowth1).unwrap(), grass[5]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -5500,13 +5500,15 @@ pub struct Avatar {
|
||||
impl Avatar {
|
||||
/// C# member: `M:LibreMetaverse.Avatar.#ctor`.
|
||||
pub fn new() -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Avatar.#ctor")
|
||||
crate::visual_catalog::new_avatar()
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Avatar.DecodeVisualParams`.
|
||||
pub fn decode_visual_params(
|
||||
&self,
|
||||
) -> Result<std::collections::HashMap<i32, f32>, crate::Error> {
|
||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Avatar.DecodeVisualParams")
|
||||
Ok(crate::visual_catalog::decode_visual_params(
|
||||
&self.visual_parameters,
|
||||
))
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Avatar.FromOSD(LibreMetaverse.StructuredData.OSD)`.
|
||||
pub fn from_osd(
|
||||
@@ -5745,7 +5747,9 @@ impl AvatarAnimationEventArgs {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.AvatarAppearanceEventArgs`.
|
||||
pub struct AvatarAppearanceEventArgs;
|
||||
pub struct AvatarAppearanceEventArgs {
|
||||
stored_visual_params: Vec<u8>,
|
||||
}
|
||||
impl AvatarAppearanceEventArgs {
|
||||
/// C# member: `M:LibreMetaverse.AvatarAppearanceEventArgs.#ctor(LibreMetaverse.Simulator,LibreMetaverse.UUID,System.Boolean,LibreMetaverse.Primitive.TextureEntryFace,LibreMetaverse.Primitive.TextureEntryFace[],System.Collections.Generic.List{System.Byte},System.Byte,System.Int32,LibreMetaverse.AppearanceFlags,System.Int32)`.
|
||||
pub fn new(
|
||||
@@ -5760,17 +5764,17 @@ impl AvatarAppearanceEventArgs {
|
||||
appearance_flags: libremetaverse::AppearanceFlags,
|
||||
child_count: i32,
|
||||
) -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.AvatarAppearanceEventArgs.#ctor(LibreMetaverse.Simulator,LibreMetaverse.UUID,System.Boolean,LibreMetaverse.Primitive.TextureEntryFace,LibreMetaverse.Primitive.TextureEntryFace[],System.Collections.Generic.List{System.Byte},System.Byte,System.Int32,LibreMetaverse.AppearanceFlags,System.Int32)",
|
||||
)
|
||||
Ok(Self {
|
||||
stored_visual_params: visual_params,
|
||||
})
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.AvatarAppearanceEventArgs.DecodeVisualParams`.
|
||||
pub fn decode_visual_params(
|
||||
&self,
|
||||
) -> Result<std::collections::HashMap<i32, f32>, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.AvatarAppearanceEventArgs.DecodeVisualParams",
|
||||
)
|
||||
Ok(crate::visual_catalog::decode_visual_params(
|
||||
&self.stored_visual_params,
|
||||
))
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.AvatarAppearanceEventArgs.AppearanceFlags`.
|
||||
pub fn appearance_flags(&self) -> libremetaverse::AppearanceFlags {
|
||||
@@ -5828,9 +5832,7 @@ impl AvatarAppearanceEventArgs {
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.AvatarAppearanceEventArgs.VisualParams`.
|
||||
pub fn visual_params(&self) -> Vec<u8> {
|
||||
libremetaverse_types::unimplemented_api!(
|
||||
"P:LibreMetaverse.AvatarAppearanceEventArgs.VisualParams"
|
||||
)
|
||||
self.stored_visual_params.clone()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8952,35 +8954,14 @@ impl DisposalHelperDisposalGuard {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.DrivenParamInfo`.
|
||||
pub struct DrivenParamInfo {
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.HasRange`.
|
||||
pub has_range: bool,
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.Max1`.
|
||||
pub max1: f32,
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.Max2`.
|
||||
pub max2: f32,
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.Min1`.
|
||||
pub min1: f32,
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.Min2`.
|
||||
pub min2: f32,
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.ParamID`.
|
||||
pub param_id: i32,
|
||||
}
|
||||
impl DrivenParamInfo {
|
||||
/// C# member: `M:LibreMetaverse.DrivenParamInfo.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Single,System.Boolean)`.
|
||||
pub fn new(
|
||||
param_id: i32,
|
||||
min1: f32,
|
||||
max1: f32,
|
||||
max2: f32,
|
||||
min2: f32,
|
||||
has_range: bool,
|
||||
) -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.DrivenParamInfo.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Single,System.Boolean)",
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.HasRange`.
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.Max1`.
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.Max2`.
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.Min1`.
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.Min2`.
|
||||
/// C# member: `F:LibreMetaverse.DrivenParamInfo.ParamID`.
|
||||
/// C# member: `M:LibreMetaverse.DrivenParamInfo.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Single,System.Boolean)`.
|
||||
pub use crate::visual_catalog::DrivenParamInfo;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.EffectType`.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
@@ -11054,66 +11035,17 @@ pub enum Grass {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.GrassDefinition`.
|
||||
pub struct GrassDefinition;
|
||||
impl GrassDefinition {
|
||||
/// C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeX`.
|
||||
pub fn blade_size_x(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.BladeSizeX")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeX`.
|
||||
pub fn set_blade_size_x(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.BladeSizeX")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeY`.
|
||||
pub fn blade_size_y(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.BladeSizeY")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeY`.
|
||||
pub fn set_blade_size_y(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.BladeSizeY")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.GrassDefinition.Name`.
|
||||
pub fn name(&self) -> String {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.Name")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.GrassDefinition.Name`.
|
||||
pub fn set_name(&mut self, value: String) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.Name")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.GrassDefinition.SpeciesId`.
|
||||
pub fn species_id(&self) -> i32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.SpeciesId")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.GrassDefinition.SpeciesId`.
|
||||
pub fn set_species_id(&mut self, value: i32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.SpeciesId")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.GrassDefinition.TextureId`.
|
||||
pub fn texture_id(&self) -> libremetaverse_types::UUID {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.TextureId")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.GrassDefinition.TextureId`.
|
||||
pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.GrassDefinition.TextureId")
|
||||
}
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeX`.
|
||||
/// C# member: `P:LibreMetaverse.GrassDefinition.BladeSizeY`.
|
||||
/// C# member: `P:LibreMetaverse.GrassDefinition.Name`.
|
||||
/// C# member: `P:LibreMetaverse.GrassDefinition.SpeciesId`.
|
||||
/// C# member: `P:LibreMetaverse.GrassDefinition.TextureId`.
|
||||
pub use crate::foliage_catalog::GrassDefinition;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.GrassDefinitions`.
|
||||
pub struct GrassDefinitions;
|
||||
impl GrassDefinitions {
|
||||
/// C# member: `F:LibreMetaverse.GrassDefinitions.All`.
|
||||
pub fn all() -> Vec<libremetaverse::GrassDefinition> {
|
||||
libremetaverse_types::unimplemented_api!("F:LibreMetaverse.GrassDefinitions.All")
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.GrassDefinitions.Get(LibreMetaverse.Grass)`.
|
||||
pub fn get(
|
||||
species: libremetaverse::Grass,
|
||||
) -> Result<libremetaverse::GrassDefinition, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.GrassDefinitions.Get(LibreMetaverse.Grass)",
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.GrassDefinitions.All`.
|
||||
/// C# member: `M:LibreMetaverse.GrassDefinitions.Get(LibreMetaverse.Grass)`.
|
||||
pub use crate::foliage_catalog::GrassDefinitions;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.GridClient`.
|
||||
pub struct GridClient;
|
||||
@@ -23556,7 +23488,7 @@ impl Primitive {
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Primitive.GetGrassDefinition`.
|
||||
pub fn get_grass_definition(&self) -> Result<libremetaverse::GrassDefinition, crate::Error> {
|
||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Primitive.GetGrassDefinition")
|
||||
crate::foliage_catalog::grass_by_id(self.prim_data.state)
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Primitive.GetHashCode`.
|
||||
pub fn get_hash_code(&self) -> i32 {
|
||||
@@ -23568,7 +23500,7 @@ impl Primitive {
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Primitive.GetTreeDefinition`.
|
||||
pub fn get_tree_definition(&self) -> Result<libremetaverse::TreeDefinition, crate::Error> {
|
||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Primitive.GetTreeDefinition")
|
||||
crate::foliage_catalog::TreeDefinitions::get(self.tree_species)
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Primitive.PackBeginCut(System.Single)`.
|
||||
pub fn pack_begin_cut(begin_cut: f32) -> Result<u16, crate::Error> {
|
||||
@@ -24550,9 +24482,7 @@ impl PrimitiveTextureEntryFace {
|
||||
pub fn new(
|
||||
default_texture: Option<libremetaverse::PrimitiveTextureEntryFace>,
|
||||
) -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.Primitive.TextureEntryFace.#ctor(LibreMetaverse.Primitive.TextureEntryFace)",
|
||||
)
|
||||
crate::visual_catalog::new_texture_entry_face()
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.Primitive.TextureEntryFace.Clone`.
|
||||
pub fn clone(&self) -> Result<libremetaverse_types::compat::Object, crate::Error> {
|
||||
@@ -26641,29 +26571,12 @@ impl SimulatorFeatures {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.SkeletalBoneInfo`.
|
||||
pub struct SkeletalBoneInfo {
|
||||
/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.BoneName`.
|
||||
pub bone_name: String,
|
||||
/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.HasPositionDeformation`.
|
||||
pub has_position_deformation: bool,
|
||||
/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.PositionDeformation`.
|
||||
pub position_deformation: libremetaverse_types::Vector3,
|
||||
/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.ScaleDeformation`.
|
||||
pub scale_deformation: libremetaverse_types::Vector3,
|
||||
}
|
||||
impl SkeletalBoneInfo {
|
||||
/// C# member: `M:LibreMetaverse.SkeletalBoneInfo.#ctor(System.String,LibreMetaverse.Vector3,LibreMetaverse.Vector3,System.Boolean)`.
|
||||
pub fn new(
|
||||
bone_name: String,
|
||||
scale_deformation: libremetaverse_types::Vector3,
|
||||
position_deformation: libremetaverse_types::Vector3,
|
||||
has_position_deformation: bool,
|
||||
) -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.SkeletalBoneInfo.#ctor(System.String,LibreMetaverse.Vector3,LibreMetaverse.Vector3,System.Boolean)",
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.BoneName`.
|
||||
/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.HasPositionDeformation`.
|
||||
/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.PositionDeformation`.
|
||||
/// C# member: `F:LibreMetaverse.SkeletalBoneInfo.ScaleDeformation`.
|
||||
/// C# member: `M:LibreMetaverse.SkeletalBoneInfo.#ctor(System.String,LibreMetaverse.Vector3,LibreMetaverse.Vector3,System.Boolean)`.
|
||||
pub use crate::visual_catalog::SkeletalBoneInfo;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.SlappCommand`.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
@@ -28134,194 +28047,33 @@ pub enum Tree {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.TreeDefinition`.
|
||||
pub struct TreeDefinition;
|
||||
impl TreeDefinition {
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.BillboardRatio`.
|
||||
pub fn billboard_ratio(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BillboardRatio")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.BillboardRatio`.
|
||||
pub fn set_billboard_ratio(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BillboardRatio")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.BillboardScale`.
|
||||
pub fn billboard_scale(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BillboardScale")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.BillboardScale`.
|
||||
pub fn set_billboard_scale(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BillboardScale")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.BranchAspect`.
|
||||
pub fn branch_aspect(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BranchAspect")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.BranchAspect`.
|
||||
pub fn set_branch_aspect(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BranchAspect")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.BranchLength`.
|
||||
pub fn branch_length(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BranchLength")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.BranchLength`.
|
||||
pub fn set_branch_length(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.BranchLength")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Branches`.
|
||||
pub fn branches(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Branches")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Branches`.
|
||||
pub fn set_branches(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Branches")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Depth`.
|
||||
pub fn depth(&self) -> i32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Depth")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Depth`.
|
||||
pub fn set_depth(&mut self, value: i32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Depth")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Droop`.
|
||||
pub fn droop(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Droop")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Droop`.
|
||||
pub fn set_droop(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Droop")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.LeafRotate`.
|
||||
pub fn leaf_rotate(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.LeafRotate")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.LeafRotate`.
|
||||
pub fn set_leaf_rotate(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.LeafRotate")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.LeafScale`.
|
||||
pub fn leaf_scale(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.LeafScale")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.LeafScale`.
|
||||
pub fn set_leaf_scale(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.LeafScale")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Name`.
|
||||
pub fn name(&self) -> String {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Name")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Name`.
|
||||
pub fn set_name(&mut self, value: String) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Name")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.NoiseMag`.
|
||||
pub fn noise_mag(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.NoiseMag")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.NoiseMag`.
|
||||
pub fn set_noise_mag(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.NoiseMag")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.NoiseScale`.
|
||||
pub fn noise_scale(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.NoiseScale")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.NoiseScale`.
|
||||
pub fn set_noise_scale(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.NoiseScale")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.RepeatZ`.
|
||||
pub fn repeat_z(&self) -> i32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.RepeatZ")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.RepeatZ`.
|
||||
pub fn set_repeat_z(&mut self, value: i32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.RepeatZ")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.ScaleStep`.
|
||||
pub fn scale_step(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.ScaleStep")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.ScaleStep`.
|
||||
pub fn set_scale_step(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.ScaleStep")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.SpeciesId`.
|
||||
pub fn species_id(&self) -> i32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.SpeciesId")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.SpeciesId`.
|
||||
pub fn set_species_id(&mut self, value: i32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.SpeciesId")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Taper`.
|
||||
pub fn taper(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Taper")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Taper`.
|
||||
pub fn set_taper(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Taper")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.TextureId`.
|
||||
pub fn texture_id(&self) -> libremetaverse_types::UUID {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TextureId")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.TextureId`.
|
||||
pub fn set_texture_id(&mut self, value: libremetaverse_types::UUID) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TextureId")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.TrunkAspect`.
|
||||
pub fn trunk_aspect(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkAspect")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.TrunkAspect`.
|
||||
pub fn set_trunk_aspect(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkAspect")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.TrunkDepth`.
|
||||
pub fn trunk_depth(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkDepth")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.TrunkDepth`.
|
||||
pub fn set_trunk_depth(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkDepth")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.TrunkLength`.
|
||||
pub fn trunk_length(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkLength")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.TrunkLength`.
|
||||
pub fn set_trunk_length(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.TrunkLength")
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Twist`.
|
||||
pub fn twist(&self) -> f32 {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Twist")
|
||||
}
|
||||
/// Setter for C# member: `P:LibreMetaverse.TreeDefinition.Twist`.
|
||||
pub fn set_twist(&mut self, value: f32) {
|
||||
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.TreeDefinition.Twist")
|
||||
}
|
||||
}
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.BillboardRatio`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.BillboardScale`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.BranchAspect`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.BranchLength`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Branches`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Depth`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Droop`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.LeafRotate`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.LeafScale`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Name`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.NoiseMag`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.NoiseScale`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.RepeatZ`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.ScaleStep`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.SpeciesId`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Taper`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.TextureId`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.TrunkAspect`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.TrunkDepth`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.TrunkLength`.
|
||||
/// C# member: `P:LibreMetaverse.TreeDefinition.Twist`.
|
||||
pub use crate::foliage_catalog::TreeDefinition;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.TreeDefinitions`.
|
||||
pub struct TreeDefinitions;
|
||||
impl TreeDefinitions {
|
||||
/// C# member: `F:LibreMetaverse.TreeDefinitions.All`.
|
||||
pub fn all() -> Vec<libremetaverse::TreeDefinition> {
|
||||
libremetaverse_types::unimplemented_api!("F:LibreMetaverse.TreeDefinitions.All")
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.TreeDefinitions.Get(LibreMetaverse.Tree)`.
|
||||
pub fn get(
|
||||
species: libremetaverse::Tree,
|
||||
) -> Result<libremetaverse::TreeDefinition, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.TreeDefinitions.Get(LibreMetaverse.Tree)",
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.TreeDefinitions.All`.
|
||||
/// C# member: `M:LibreMetaverse.TreeDefinitions.Get(LibreMetaverse.Tree)`.
|
||||
pub use crate::foliage_catalog::TreeDefinitions;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.UDPBase`.
|
||||
pub struct UDPBase;
|
||||
@@ -28652,29 +28404,12 @@ pub enum ViewerUriType {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.VisualAlphaParam`.
|
||||
pub struct VisualAlphaParam {
|
||||
/// C# member: `F:LibreMetaverse.VisualAlphaParam.Domain`.
|
||||
pub domain: f32,
|
||||
/// C# member: `F:LibreMetaverse.VisualAlphaParam.MultiplyBlend`.
|
||||
pub multiply_blend: bool,
|
||||
/// C# member: `F:LibreMetaverse.VisualAlphaParam.SkipIfZero`.
|
||||
pub skip_if_zero: bool,
|
||||
/// C# member: `F:LibreMetaverse.VisualAlphaParam.TGAFile`.
|
||||
pub tga_file: String,
|
||||
}
|
||||
impl VisualAlphaParam {
|
||||
/// C# member: `M:LibreMetaverse.VisualAlphaParam.#ctor(System.Single,System.String,System.Boolean,System.Boolean)`.
|
||||
pub fn new(
|
||||
domain: f32,
|
||||
tga_file: String,
|
||||
skip_if_zero: bool,
|
||||
multiply_blend: bool,
|
||||
) -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.VisualAlphaParam.#ctor(System.Single,System.String,System.Boolean,System.Boolean)",
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.VisualAlphaParam.Domain`.
|
||||
/// C# member: `F:LibreMetaverse.VisualAlphaParam.MultiplyBlend`.
|
||||
/// C# member: `F:LibreMetaverse.VisualAlphaParam.SkipIfZero`.
|
||||
/// C# member: `F:LibreMetaverse.VisualAlphaParam.TGAFile`.
|
||||
/// C# member: `M:LibreMetaverse.VisualAlphaParam.#ctor(System.Single,System.String,System.Boolean,System.Boolean)`.
|
||||
pub use crate::visual_catalog::VisualAlphaParam;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.VisualColorOperation`.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
@@ -28689,137 +28424,46 @@ pub enum VisualColorOperation {
|
||||
}
|
||||
|
||||
/// C# type: `T:LibreMetaverse.VisualColorParam`.
|
||||
pub struct VisualColorParam {
|
||||
/// C# member: `F:LibreMetaverse.VisualColorParam.Colors`.
|
||||
pub colors: Vec<libremetaverse_types::Color4>,
|
||||
/// C# member: `F:LibreMetaverse.VisualColorParam.Operation`.
|
||||
pub operation: libremetaverse::VisualColorOperation,
|
||||
}
|
||||
impl VisualColorParam {
|
||||
/// C# member: `M:LibreMetaverse.VisualColorParam.#ctor(LibreMetaverse.VisualColorOperation,LibreMetaverse.Color4[])`.
|
||||
pub fn new(
|
||||
operation: libremetaverse::VisualColorOperation,
|
||||
colors: Vec<libremetaverse_types::Color4>,
|
||||
) -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.VisualColorParam.#ctor(LibreMetaverse.VisualColorOperation,LibreMetaverse.Color4[])",
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.VisualColorParam.Colors`.
|
||||
/// C# member: `F:LibreMetaverse.VisualColorParam.Operation`.
|
||||
/// C# member: `M:LibreMetaverse.VisualColorParam.#ctor(LibreMetaverse.VisualColorOperation,LibreMetaverse.Color4[])`.
|
||||
pub use crate::visual_catalog::VisualColorParam;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.VisualParam`.
|
||||
pub struct VisualParam {
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.AlphaParams`.
|
||||
pub alpha_params: Option<Option<libremetaverse::VisualAlphaParam>>,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.ColorParams`.
|
||||
pub color_params: Option<Option<libremetaverse::VisualColorParam>>,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.DefaultValue`.
|
||||
pub default_value: f32,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.DrivenParams`.
|
||||
pub driven_params: Option<Vec<libremetaverse::DrivenParamInfo>>,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.Drivers`.
|
||||
pub drivers: Option<Vec<i32>>,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.Group`.
|
||||
pub group: i32,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.IsBumpAttribute`.
|
||||
pub is_bump_attribute: bool,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.Label`.
|
||||
pub label: String,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.LabelMax`.
|
||||
pub label_max: String,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.LabelMin`.
|
||||
pub label_min: String,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.MaxValue`.
|
||||
pub max_value: f32,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.MinValue`.
|
||||
pub min_value: f32,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.Name`.
|
||||
pub name: String,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.ParamID`.
|
||||
pub param_id: i32,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.SkeletalDistortions`.
|
||||
pub skeletal_distortions: Option<Vec<libremetaverse::SkeletalBoneInfo>>,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.VolumeMorphs`.
|
||||
pub volume_morphs: Option<Vec<libremetaverse::VolumeMorphInfo>>,
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.Wearable`.
|
||||
pub wearable: Option<String>,
|
||||
}
|
||||
impl VisualParam {
|
||||
/// C# member: `M:LibreMetaverse.VisualParam.#ctor(System.Int32,System.String,System.Int32,System.String,System.String,System.String,System.String,System.Single,System.Single,System.Single,System.Boolean,System.Int32[],System.Nullable{LibreMetaverse.VisualAlphaParam},System.Nullable{LibreMetaverse.VisualColorParam},LibreMetaverse.DrivenParamInfo[],LibreMetaverse.SkeletalBoneInfo[],LibreMetaverse.VolumeMorphInfo[])`.
|
||||
pub fn new(
|
||||
param_id: i32,
|
||||
name: String,
|
||||
group: i32,
|
||||
wearable: Option<String>,
|
||||
label: String,
|
||||
label_min: String,
|
||||
label_max: String,
|
||||
def_: f32,
|
||||
min: f32,
|
||||
max: f32,
|
||||
is_bump_attribute: bool,
|
||||
drivers: Option<Vec<i32>>,
|
||||
alpha: Option<Option<libremetaverse::VisualAlphaParam>>,
|
||||
color_params: Option<Option<libremetaverse::VisualColorParam>>,
|
||||
driven_params: Option<Vec<libremetaverse::DrivenParamInfo>>,
|
||||
skeletal_distortions: Option<Vec<libremetaverse::SkeletalBoneInfo>>,
|
||||
volume_morphs: Option<Vec<libremetaverse::VolumeMorphInfo>>,
|
||||
) -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.VisualParam.#ctor(System.Int32,System.String,System.Int32,System.String,System.String,System.String,System.String,System.Single,System.Single,System.Single,System.Boolean,System.Int32[],System.Nullable{LibreMetaverse.VisualAlphaParam},System.Nullable{LibreMetaverse.VisualColorParam},LibreMetaverse.DrivenParamInfo[],LibreMetaverse.SkeletalBoneInfo[],LibreMetaverse.VolumeMorphInfo[])",
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.AlphaParams`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.ColorParams`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.DefaultValue`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.DrivenParams`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.Drivers`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.Group`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.IsBumpAttribute`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.Label`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.LabelMax`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.LabelMin`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.MaxValue`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.MinValue`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.Name`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.ParamID`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.SkeletalDistortions`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.VolumeMorphs`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParam.Wearable`.
|
||||
/// C# member: `M:LibreMetaverse.VisualParam.#ctor(System.Int32,System.String,System.Int32,System.String,System.String,System.String,System.String,System.Single,System.Single,System.Single,System.Boolean,System.Int32[],System.Nullable{LibreMetaverse.VisualAlphaParam},System.Nullable{LibreMetaverse.VisualColorParam},LibreMetaverse.DrivenParamInfo[],LibreMetaverse.SkeletalBoneInfo[],LibreMetaverse.VolumeMorphInfo[])`.
|
||||
pub use crate::visual_catalog::VisualParam;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.VisualParams`.
|
||||
pub struct VisualParams;
|
||||
impl VisualParams {
|
||||
/// C# member: `F:LibreMetaverse.VisualParams.Group0ParamIds`.
|
||||
pub fn group0_param_ids() -> Vec<i32> {
|
||||
libremetaverse_types::unimplemented_api!("F:LibreMetaverse.VisualParams.Group0ParamIds")
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.VisualParams.Params`.
|
||||
pub fn params() -> libremetaverse_types::compat::SortedList<i32, libremetaverse::VisualParam> {
|
||||
libremetaverse_types::unimplemented_api!("F:LibreMetaverse.VisualParams.Params")
|
||||
}
|
||||
/// C# member: `M:LibreMetaverse.VisualParams.Find(System.String,System.String)`.
|
||||
pub fn find(
|
||||
name: String,
|
||||
wearable: Option<String>,
|
||||
) -> Result<libremetaverse::VisualParam, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.VisualParams.Find(System.String,System.String)",
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.VisualParams.Group0ParamIds`.
|
||||
/// C# member: `F:LibreMetaverse.VisualParams.Params`.
|
||||
/// C# member: `M:LibreMetaverse.VisualParams.Find(System.String,System.String)`.
|
||||
pub use crate::visual_catalog::VisualParams;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.VolumeMorphInfo`.
|
||||
pub struct VolumeMorphInfo {
|
||||
/// C# member: `F:LibreMetaverse.VolumeMorphInfo.BoneName`.
|
||||
pub bone_name: String,
|
||||
/// C# member: `F:LibreMetaverse.VolumeMorphInfo.HasPosition`.
|
||||
pub has_position: bool,
|
||||
/// C# member: `F:LibreMetaverse.VolumeMorphInfo.HasScale`.
|
||||
pub has_scale: bool,
|
||||
/// C# member: `F:LibreMetaverse.VolumeMorphInfo.PositionDelta`.
|
||||
pub position_delta: libremetaverse_types::Vector3,
|
||||
/// C# member: `F:LibreMetaverse.VolumeMorphInfo.ScaleDelta`.
|
||||
pub scale_delta: libremetaverse_types::Vector3,
|
||||
}
|
||||
impl VolumeMorphInfo {
|
||||
/// C# member: `M:LibreMetaverse.VolumeMorphInfo.#ctor(System.String,LibreMetaverse.Vector3,System.Boolean,LibreMetaverse.Vector3,System.Boolean)`.
|
||||
pub fn new(
|
||||
bone_name: String,
|
||||
scale_delta: libremetaverse_types::Vector3,
|
||||
has_scale: bool,
|
||||
position_delta: libremetaverse_types::Vector3,
|
||||
has_position: bool,
|
||||
) -> Result<Self, crate::Error> {
|
||||
libremetaverse_types::not_implemented(
|
||||
"M:LibreMetaverse.VolumeMorphInfo.#ctor(System.String,LibreMetaverse.Vector3,System.Boolean,LibreMetaverse.Vector3,System.Boolean)",
|
||||
)
|
||||
}
|
||||
}
|
||||
/// C# member: `F:LibreMetaverse.VolumeMorphInfo.BoneName`.
|
||||
/// C# member: `F:LibreMetaverse.VolumeMorphInfo.HasPosition`.
|
||||
/// C# member: `F:LibreMetaverse.VolumeMorphInfo.HasScale`.
|
||||
/// C# member: `F:LibreMetaverse.VolumeMorphInfo.PositionDelta`.
|
||||
/// C# member: `F:LibreMetaverse.VolumeMorphInfo.ScaleDelta`.
|
||||
/// C# member: `M:LibreMetaverse.VolumeMorphInfo.#ctor(System.String,LibreMetaverse.Vector3,System.Boolean,LibreMetaverse.Vector3,System.Boolean)`.
|
||||
pub use crate::visual_catalog::VolumeMorphInfo;
|
||||
|
||||
/// C# type: `T:LibreMetaverse.Vote`.
|
||||
pub struct Vote {
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
extern crate self as libremetaverse;
|
||||
|
||||
mod bit_pack;
|
||||
#[rustfmt::skip] // Deterministic machine output is formatted by the pinned generator.
|
||||
mod foliage_catalog;
|
||||
mod generated;
|
||||
mod j2k;
|
||||
mod message_codec;
|
||||
@@ -10,6 +12,8 @@ mod message_codec;
|
||||
pub mod packet_catalog;
|
||||
mod packet_wire;
|
||||
mod targa;
|
||||
#[rustfmt::skip] // Deterministic machine output is formatted by the pinned generator.
|
||||
mod visual_catalog;
|
||||
|
||||
#[cfg(test)]
|
||||
mod appearance_baker_semantics;
|
||||
|
||||
23378
crates/libremetaverse/src/visual_catalog.rs
Normal file
23378
crates/libremetaverse/src/visual_catalog.rs
Normal file
File diff suppressed because it is too large
Load Diff
282
crates/libremetaverse/tests/generated_catalogs.rs
Normal file
282
crates/libremetaverse/tests/generated_catalogs.rs
Normal file
@@ -0,0 +1,282 @@
|
||||
//! Golden fixtures for the native visual-parameter and foliage generators.
|
||||
|
||||
#![allow(clippy::float_cmp)] // Golden XML values must retain their exact f32 representation.
|
||||
|
||||
use libremetaverse::{
|
||||
DrivenParamInfo, Grass, GrassDefinitions, SkeletalBoneInfo, Tree, TreeDefinitions,
|
||||
VisualAlphaParam, VisualColorOperation, VisualColorParam, VisualParam, VisualParams,
|
||||
VolumeMorphInfo,
|
||||
};
|
||||
use libremetaverse_types::{Color4, UUID, Vector3};
|
||||
|
||||
#[test]
|
||||
fn visual_catalog_matches_the_pinned_character_fixture() {
|
||||
let params = VisualParams::params();
|
||||
let transmitted = VisualParams::group0_param_ids();
|
||||
|
||||
assert_eq!(params.0.len(), 672);
|
||||
assert_eq!(transmitted.len(), 253);
|
||||
assert_eq!(transmitted.first(), Some(&1));
|
||||
assert_eq!(transmitted.last(), Some(&11_001));
|
||||
assert!(transmitted.windows(2).all(|ids| ids[0] < ids[1]));
|
||||
assert!(transmitted.iter().all(|id| {
|
||||
params
|
||||
.0
|
||||
.get(id)
|
||||
.is_some_and(|param| matches!(param.group, 0 | 3))
|
||||
}));
|
||||
|
||||
assert_eq!(
|
||||
params
|
||||
.0
|
||||
.values()
|
||||
.filter(|param| param.alpha_params.is_some())
|
||||
.count(),
|
||||
94
|
||||
);
|
||||
assert_eq!(
|
||||
params
|
||||
.0
|
||||
.values()
|
||||
.filter(|param| param.color_params.is_some())
|
||||
.count(),
|
||||
104
|
||||
);
|
||||
assert_eq!(
|
||||
params
|
||||
.0
|
||||
.values()
|
||||
.filter(|param| param.driven_params.is_some())
|
||||
.count(),
|
||||
130
|
||||
);
|
||||
assert_eq!(
|
||||
params
|
||||
.0
|
||||
.values()
|
||||
.filter(|param| param.skeletal_distortions.is_some())
|
||||
.count(),
|
||||
82
|
||||
);
|
||||
assert_eq!(
|
||||
params
|
||||
.0
|
||||
.values()
|
||||
.filter(|param| param.volume_morphs.is_some())
|
||||
.count(),
|
||||
30
|
||||
);
|
||||
|
||||
let height = VisualParams::find("Height".to_owned(), Some("shape".to_owned())).unwrap();
|
||||
assert_eq!(height.param_id, 33);
|
||||
assert_eq!(height.group, 0);
|
||||
assert_eq!(height.label_min, "Short");
|
||||
assert_eq!(height.label_max, "Tall");
|
||||
assert_eq!(height.default_value, 0.0);
|
||||
assert_eq!(height.min_value, -2.3);
|
||||
assert_eq!(height.max_value, 2.0);
|
||||
assert_eq!(height.skeletal_distortions.as_ref().unwrap().len(), 35);
|
||||
|
||||
let missing = VisualParams::find("missing".to_owned(), None).unwrap();
|
||||
assert_eq!(missing, VisualParam::default());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn visual_metadata_constructors_preserve_every_argument() {
|
||||
let alpha = VisualAlphaParam::new(0.25, "mask.tga".to_owned(), true, false).unwrap();
|
||||
assert_eq!(alpha.domain, 0.25);
|
||||
assert_eq!(alpha.tga_file, "mask.tga");
|
||||
assert!(alpha.skip_if_zero);
|
||||
assert!(!alpha.multiply_blend);
|
||||
|
||||
let colors = vec![Color4 {
|
||||
r: 0.1,
|
||||
g: 0.2,
|
||||
b: 0.3,
|
||||
a: 0.4,
|
||||
}];
|
||||
let color = VisualColorParam::new(VisualColorOperation::Blend, colors.clone()).unwrap();
|
||||
assert_eq!(color.operation, VisualColorOperation::Blend);
|
||||
assert_eq!(color.colors, colors);
|
||||
|
||||
let driven = DrivenParamInfo::new(91, 0.1, 0.2, 0.8, 0.9, true).unwrap();
|
||||
assert_eq!(driven.param_id, 91);
|
||||
assert_eq!(driven.min1, 0.1);
|
||||
assert_eq!(driven.max1, 0.2);
|
||||
assert_eq!(driven.max2, 0.8);
|
||||
assert_eq!(driven.min2, 0.9);
|
||||
assert!(driven.has_range);
|
||||
|
||||
let scale = Vector3 {
|
||||
x: 1.0,
|
||||
y: 2.0,
|
||||
z: 3.0,
|
||||
};
|
||||
let position = Vector3 {
|
||||
x: 4.0,
|
||||
y: 5.0,
|
||||
z: 6.0,
|
||||
};
|
||||
let skeletal = SkeletalBoneInfo::new("mBone".to_owned(), scale, position, true).unwrap();
|
||||
assert_eq!(skeletal.bone_name, "mBone");
|
||||
assert_eq!(skeletal.scale_deformation, scale);
|
||||
assert_eq!(skeletal.position_deformation, position);
|
||||
assert!(skeletal.has_position_deformation);
|
||||
|
||||
let volume = VolumeMorphInfo::new("BELLY".to_owned(), scale, true, position, true).unwrap();
|
||||
assert_eq!(volume.bone_name, "BELLY");
|
||||
assert_eq!(volume.scale_delta, scale);
|
||||
assert_eq!(volume.position_delta, position);
|
||||
assert!(volume.has_scale);
|
||||
assert!(volume.has_position);
|
||||
|
||||
let param = VisualParam::new(
|
||||
7,
|
||||
"Test".to_owned(),
|
||||
3,
|
||||
Some("shape".to_owned()),
|
||||
"Label".to_owned(),
|
||||
"Low".to_owned(),
|
||||
"High".to_owned(),
|
||||
0.5,
|
||||
-1.0,
|
||||
2.0,
|
||||
true,
|
||||
Some(vec![91]),
|
||||
Some(Some(alpha.clone())),
|
||||
Some(Some(color.clone())),
|
||||
Some(vec![driven.clone()]),
|
||||
Some(vec![skeletal.clone()]),
|
||||
Some(vec![volume.clone()]),
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(param.param_id, 7);
|
||||
assert_eq!(param.name, "Test");
|
||||
assert_eq!(param.group, 3);
|
||||
assert_eq!(param.wearable.as_deref(), Some("shape"));
|
||||
assert_eq!(param.label, "Label");
|
||||
assert_eq!(param.label_min, "Low");
|
||||
assert_eq!(param.label_max, "High");
|
||||
assert_eq!(param.default_value, 0.5);
|
||||
assert_eq!(param.min_value, -1.0);
|
||||
assert_eq!(param.max_value, 2.0);
|
||||
assert!(param.is_bump_attribute);
|
||||
assert_eq!(param.drivers.as_deref(), Some([91].as_slice()));
|
||||
assert_eq!(param.alpha_params, Some(Some(alpha)));
|
||||
assert_eq!(param.color_params, Some(Some(color)));
|
||||
assert_eq!(param.driven_params, Some(vec![driven]));
|
||||
assert_eq!(param.skeletal_distortions, Some(vec![skeletal]));
|
||||
assert_eq!(param.volume_morphs, Some(vec![volume]));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn tree_catalog_matches_every_pine_one_field() {
|
||||
let trees = TreeDefinitions::all();
|
||||
assert_eq!(trees.len(), 21);
|
||||
for (species_id, tree) in trees.iter().enumerate() {
|
||||
assert_eq!(tree.species_id(), i32::try_from(species_id).unwrap());
|
||||
}
|
||||
|
||||
let pine = TreeDefinitions::get(Tree::Pine1).unwrap();
|
||||
assert_eq!(pine.name(), "Pine 1");
|
||||
assert_eq!(pine.species_id(), 0);
|
||||
assert_eq!(
|
||||
pine.texture_id(),
|
||||
UUID::parse("0187babf-6c0d-5891-ebed-4ecab1426683".to_owned()).unwrap()
|
||||
);
|
||||
assert_eq!(pine.droop(), 60.0);
|
||||
assert_eq!(pine.twist(), 5.0);
|
||||
assert_eq!(pine.branches(), 5.0);
|
||||
assert_eq!(pine.depth(), 1);
|
||||
assert_eq!(pine.scale_step(), 0.7);
|
||||
assert_eq!(pine.trunk_depth(), 6.0);
|
||||
assert_eq!(pine.branch_length(), 8.0);
|
||||
assert_eq!(pine.trunk_length(), 11.5);
|
||||
assert_eq!(pine.leaf_scale(), 22.0);
|
||||
assert_eq!(pine.billboard_scale(), 39.5);
|
||||
assert_eq!(pine.billboard_ratio(), 1.1);
|
||||
assert_eq!(pine.trunk_aspect(), 0.1);
|
||||
assert_eq!(pine.branch_aspect(), 0.05);
|
||||
assert_eq!(pine.leaf_rotate(), 20.0);
|
||||
assert_eq!(pine.noise_mag(), 0.5);
|
||||
assert_eq!(pine.noise_scale(), 2.5);
|
||||
assert_eq!(pine.taper(), 0.8);
|
||||
assert_eq!(pine.repeat_z(), 3);
|
||||
|
||||
let replacement_texture =
|
||||
UUID::parse("00000000-0000-0000-0000-000000000001".to_owned()).unwrap();
|
||||
let mut changed = pine;
|
||||
changed.set_name("Changed".to_owned());
|
||||
changed.set_species_id(42);
|
||||
changed.set_texture_id(replacement_texture);
|
||||
changed.set_droop(1.0);
|
||||
changed.set_twist(2.0);
|
||||
changed.set_branches(3.0);
|
||||
changed.set_depth(4);
|
||||
changed.set_scale_step(5.0);
|
||||
changed.set_trunk_depth(6.0);
|
||||
changed.set_branch_length(7.0);
|
||||
changed.set_trunk_length(8.0);
|
||||
changed.set_leaf_scale(9.0);
|
||||
changed.set_billboard_scale(10.0);
|
||||
changed.set_billboard_ratio(11.0);
|
||||
changed.set_trunk_aspect(12.0);
|
||||
changed.set_branch_aspect(13.0);
|
||||
changed.set_leaf_rotate(14.0);
|
||||
changed.set_noise_mag(15.0);
|
||||
changed.set_noise_scale(16.0);
|
||||
changed.set_taper(17.0);
|
||||
changed.set_repeat_z(18);
|
||||
assert_eq!(changed.name(), "Changed");
|
||||
assert_eq!(changed.species_id(), 42);
|
||||
assert_eq!(changed.texture_id(), replacement_texture);
|
||||
assert_eq!(changed.droop(), 1.0);
|
||||
assert_eq!(changed.twist(), 2.0);
|
||||
assert_eq!(changed.branches(), 3.0);
|
||||
assert_eq!(changed.depth(), 4);
|
||||
assert_eq!(changed.scale_step(), 5.0);
|
||||
assert_eq!(changed.trunk_depth(), 6.0);
|
||||
assert_eq!(changed.branch_length(), 7.0);
|
||||
assert_eq!(changed.trunk_length(), 8.0);
|
||||
assert_eq!(changed.leaf_scale(), 9.0);
|
||||
assert_eq!(changed.billboard_scale(), 10.0);
|
||||
assert_eq!(changed.billboard_ratio(), 11.0);
|
||||
assert_eq!(changed.trunk_aspect(), 12.0);
|
||||
assert_eq!(changed.branch_aspect(), 13.0);
|
||||
assert_eq!(changed.leaf_rotate(), 14.0);
|
||||
assert_eq!(changed.noise_mag(), 15.0);
|
||||
assert_eq!(changed.noise_scale(), 16.0);
|
||||
assert_eq!(changed.taper(), 17.0);
|
||||
assert_eq!(changed.repeat_z(), 18);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn grass_catalog_matches_the_pinned_fixture_and_properties_are_mutable() {
|
||||
let grasses = GrassDefinitions::all();
|
||||
assert_eq!(grasses.len(), 6);
|
||||
for (species_id, grass) in grasses.iter().enumerate() {
|
||||
assert_eq!(grass.species_id(), i32::try_from(species_id).unwrap());
|
||||
}
|
||||
|
||||
let mut undergrowth = GrassDefinitions::get(Grass::Undergrowth1).unwrap();
|
||||
assert_eq!(undergrowth.name(), "undergrowth_1");
|
||||
assert_eq!(
|
||||
undergrowth.texture_id(),
|
||||
UUID::parse("8f458549-173b-23ff-d4ff-bfaa5ea2371b".to_owned()).unwrap()
|
||||
);
|
||||
assert_eq!(undergrowth.blade_size_x(), 2.0);
|
||||
assert_eq!(undergrowth.blade_size_y(), 2.0);
|
||||
|
||||
undergrowth.set_name("custom".to_owned());
|
||||
undergrowth.set_species_id(12);
|
||||
let replacement_texture =
|
||||
UUID::parse("00000000-0000-0000-0000-000000000002".to_owned()).unwrap();
|
||||
undergrowth.set_texture_id(replacement_texture);
|
||||
undergrowth.set_blade_size_x(3.5);
|
||||
undergrowth.set_blade_size_y(4.5);
|
||||
assert_eq!(undergrowth.name(), "custom");
|
||||
assert_eq!(undergrowth.species_id(), 12);
|
||||
assert_eq!(undergrowth.texture_id(), replacement_texture);
|
||||
assert_eq!(undergrowth.blade_size_x(), 3.5);
|
||||
assert_eq!(undergrowth.blade_size_y(), 4.5);
|
||||
}
|
||||
Reference in New Issue
Block a user