use super::super::{BoolExpr, ColorExpr, Opcode, ScalarExpr, ValueKind, VectorExpr, VisualError};
use super::VisualProgramBuilder;
impl VisualProgramBuilder {
pub fn interaction_state(&mut self, mask: u32) -> Result<BoolExpr, VisualError> {
if mask == 0 {
return Err(VisualError::MalformedProgram);
}
self.emit_at(
ValueKind::Bool,
Opcode::State,
[0; 3],
[f32::from_bits(mask), 0.0, 0.0, 0.0],
super::super::VisualStage::Entity,
)
.map(BoolExpr)
}
pub fn base_color(&mut self) -> Result<ColorExpr, VisualError> {
self.input(ValueKind::Color, 0).map(ColorExpr)
}
pub fn base_opacity(&mut self) -> Result<ScalarExpr, VisualError> {
self.input(ValueKind::Scalar, 1).map(ScalarExpr)
}
pub fn time(&mut self) -> Result<ScalarExpr, VisualError> {
self.input(ValueKind::Scalar, 2).map(ScalarExpr)
}
pub fn local_position(&mut self) -> Result<VectorExpr, VisualError> {
self.input(ValueKind::Vector, 3).map(VectorExpr)
}
pub fn world_position(&mut self) -> Result<VectorExpr, VisualError> {
self.input(ValueKind::Vector, 4).map(VectorExpr)
}
pub fn normal(&mut self) -> Result<VectorExpr, VisualError> {
self.input(ValueKind::Vector, 5).map(VectorExpr)
}
pub fn view_direction(&mut self) -> Result<VectorExpr, VisualError> {
self.input(ValueKind::Vector, 6).map(VectorExpr)
}
pub fn camera_distance(&mut self) -> Result<ScalarExpr, VisualError> {
self.input(ValueKind::Scalar, 7).map(ScalarExpr)
}
pub fn entity_index(&mut self) -> Result<ScalarExpr, VisualError> {
self.input(ValueKind::Scalar, 8).map(ScalarExpr)
}
pub fn base_roughness(&mut self) -> Result<ScalarExpr, VisualError> {
self.input(ValueKind::Scalar, 9).map(ScalarExpr)
}
pub fn base_specular(&mut self) -> Result<ScalarExpr, VisualError> {
self.input(ValueKind::Scalar, 10).map(ScalarExpr)
}
pub fn base_material_strength(&mut self) -> Result<ScalarExpr, VisualError> {
self.input(ValueKind::Scalar, 11).map(ScalarExpr)
}
}