use crate::types::{Handle, Vector3};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum BlockEvalValue {
None,
Real(f64),
Point([f64; 2]),
Text(String),
Long(i32),
Handle(Handle),
Short(i16),
}
impl Default for BlockEvalValue {
fn default() -> Self {
Self::None
}
}
#[derive(Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct BlockParameterConnection {
pub code: i32,
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct BlockParameterPropertyInfo {
pub connections: Vec<BlockParameterConnection>,
}
#[derive(Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct BlockVisibilityState {
pub name: String,
pub visible_blocks: Vec<Handle>,
pub visible_params: Vec<Handle>,
}
#[derive(Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct BlockVisibilityParameter {
pub handle: Handle,
pub owner: Handle,
pub eval_parent_id: i32,
pub eval_major: i32,
pub eval_minor: i32,
pub eval_value_code: i16,
pub eval_value: BlockEvalValue,
pub eval_node_id: i32,
pub element_name: String,
pub element_major: i32,
pub element_minor: i32,
pub element_eed_1071: i32,
pub show_properties: bool,
pub chain_actions: bool,
pub name: String,
pub description: String,
pub def_point: Vector3,
pub property_info: [BlockParameterPropertyInfo; 2],
pub property_info_count: i32,
pub is_initialized: bool,
pub unknown_bool: bool,
pub all_blocks: Vec<Handle>,
pub states: Vec<BlockVisibilityState>,
}
impl BlockVisibilityParameter {
pub(crate) fn visit_handles_mut(
&mut self,
visit: &mut impl FnMut(&mut Handle),
) {
visit(&mut self.handle);
visit(&mut self.owner);
if let BlockEvalValue::Handle(handle) = &mut self.eval_value {
visit(handle);
}
for handle in &mut self.all_blocks {
visit(handle);
}
for state in &mut self.states {
for handle in &mut state.visible_blocks {
visit(handle);
}
for handle in &mut state.visible_params {
visit(handle);
}
}
}
}