void CIntProxy::OnBind( void *pC_BaseEntity ) { Assert( m_pSrc1 && m_pResult ); MaterialVarType_t resultType; int vecSize; ComputeResultType( resultType, vecSize ); switch( resultType ) { case MATERIAL_VAR_TYPE_VECTOR: { Vector a; m_pSrc1->GetVecValue( a.Base(), vecSize ); a[0] = ( float )( int )a[0]; a[1] = ( float )( int )a[1]; a[2] = ( float )( int )a[2]; m_pResult->SetVecValue( a.Base(), vecSize ); } break; case MATERIAL_VAR_TYPE_FLOAT: { float a = m_pSrc1->GetFloatValue(); a = ( float )( int )a; SetFloatResult( a ); } break; case MATERIAL_VAR_TYPE_INT: // don't do anything besides assignment! m_pResult->SetIntValue( m_pSrc1->GetIntValue() ); break; } }
void CSubtractProxy::OnBind( void *pC_BaseEntity ) { Assert( m_pSrc1 && m_pSrc2 && m_pResult ); MaterialVarType_t resultType; int vecSize; ComputeResultType( resultType, vecSize ); switch( resultType ) { case MATERIAL_VAR_TYPE_VECTOR: { Vector a, b, c; m_pSrc1->GetVecValue( a.Base(), vecSize ); m_pSrc2->GetVecValue( b.Base(), vecSize ); VectorSubtract( a, b, c ); m_pResult->SetVecValue( c.Base(), vecSize ); } break; case MATERIAL_VAR_TYPE_FLOAT: SetFloatResult( m_pSrc1->GetFloatValue() - m_pSrc2->GetFloatValue() ); break; case MATERIAL_VAR_TYPE_INT: m_pResult->SetFloatValue( m_pSrc1->GetIntValue() - m_pSrc2->GetIntValue() ); break; } if ( ToolsEnabled() ) { ToolFramework_RecordMaterialParams( GetMaterial() ); } }
void CEqualsProxy::OnBind( void *pC_BaseEntity ) { Assert( m_pSrc1 && m_pResult ); MaterialVarType_t resultType; int vecSize; ComputeResultType( resultType, vecSize ); switch( resultType ) { case MATERIAL_VAR_TYPE_VECTOR: { Vector a; m_pSrc1->GetVecValue( a.Base(), vecSize ); m_pResult->SetVecValue( a.Base(), vecSize ); } break; case MATERIAL_VAR_TYPE_FLOAT: SetFloatResult( m_pSrc1->GetFloatValue() ); break; case MATERIAL_VAR_TYPE_INT: m_pResult->SetIntValue( m_pSrc1->GetIntValue() ); break; } }
void CClampProxy::OnBind( void *pC_BaseEntity ) { Assert( m_pSrc1 && m_pResult ); MaterialVarType_t resultType; int vecSize; ComputeResultType( resultType, vecSize ); float flMin = m_Min.GetFloat(); float flMax = m_Max.GetFloat(); if (flMin > flMax) { float flTemp = flMin; flMin = flMax; flMax = flTemp; } switch( resultType ) { case MATERIAL_VAR_TYPE_VECTOR: { Vector a; m_pSrc1->GetVecValue( a.Base(), vecSize ); for (int i = 0; i < vecSize; ++i) { if (a[i] < flMin) a[i] = flMin; else if (a[i] > flMax) a[i] = flMax; } m_pResult->SetVecValue( a.Base(), vecSize ); } break; case MATERIAL_VAR_TYPE_FLOAT: { float src = m_pSrc1->GetFloatValue(); if (src < flMin) src = flMin; else if (src > flMax) src = flMax; SetFloatResult( src ); } break; case MATERIAL_VAR_TYPE_INT: { int src = m_pSrc1->GetIntValue(); if (src < flMin) src = flMin; else if (src > flMax) src = flMax; m_pResult->SetIntValue( src ); } break; } }
void CSelectFirstIfNonZeroProxy::OnBind( void *pC_BaseEntity ) { Assert( m_pSrc1 && m_pSrc2 && m_pResult ); MaterialVarType_t resultType; int vecSize; ComputeResultType( resultType, vecSize ); switch( resultType ) { case MATERIAL_VAR_TYPE_VECTOR: { Vector a, b; m_pSrc1->GetVecValue( a.Base(), vecSize ); m_pSrc2->GetVecValue( b.Base(), vecSize ); if ( !a.IsZero() ) { m_pResult->SetVecValue( a.Base(), vecSize ); } else { m_pResult->SetVecValue( b.Base(), vecSize ); } } break; case MATERIAL_VAR_TYPE_FLOAT: if ( m_pSrc1->GetFloatValue() ) { SetFloatResult( m_pSrc1->GetFloatValue() ); } else { SetFloatResult( m_pSrc2->GetFloatValue() ); } break; case MATERIAL_VAR_TYPE_INT: if ( m_pSrc1->GetIntValue() ) { m_pResult->SetFloatValue( m_pSrc1->GetIntValue() ); } else { m_pResult->SetFloatValue( m_pSrc2->GetIntValue() ); } break; } if ( ToolsEnabled() ) { ToolFramework_RecordMaterialParams( GetMaterial() ); } }
void CDivideProxy::OnBind( void *pC_BaseEntity ) { Assert( m_pSrc1 && m_pSrc2 && m_pResult ); MaterialVarType_t resultType; int vecSize; ComputeResultType( resultType, vecSize ); switch( resultType ) { case MATERIAL_VAR_TYPE_VECTOR: { Vector a, b, c; m_pSrc1->GetVecValue( a.Base(), vecSize ); m_pSrc2->GetVecValue( b.Base(), vecSize ); VectorDivide( a, b, c ); m_pResult->SetVecValue( c.Base(), vecSize ); } break; case MATERIAL_VAR_TYPE_FLOAT: if (m_pSrc2->GetFloatValue() != 0) { SetFloatResult( m_pSrc1->GetFloatValue() / m_pSrc2->GetFloatValue() ); } else { SetFloatResult( m_pSrc1->GetFloatValue() ); } break; case MATERIAL_VAR_TYPE_INT: if (m_pSrc2->GetIntValue() != 0) { m_pResult->SetFloatValue( m_pSrc1->GetIntValue() / m_pSrc2->GetIntValue() ); } else { m_pResult->SetFloatValue( m_pSrc1->GetIntValue() ); } break; } }
virtual void OnBind( C_BaseEntity *pC_BaseEntity ) { C_BaseAnimating *pBaseAnimating = pC_BaseEntity ? pC_BaseEntity->GetBaseAnimating() : NULL; if ( pBaseAnimating ) { float fCycle = pBaseAnimating->GetCycle(); float f = RemapValClamped( fCycle, m_fStart, m_fEnd, 0.0f, 1.0f ); if ( m_bEaseIn && m_bEaseOut ) { f = SimpleSpline( f ); } else if ( m_bEaseIn ) { f = sin( M_PI * f * 0.5f ); } else if ( m_bEaseOut ) { f = 1.0f - sin( M_PI * f * 0.5f + 0.5f * M_PI ); } MaterialVarType_t resultType; int vecSize; ComputeResultType( resultType, vecSize ); switch( resultType ) { case MATERIAL_VAR_TYPE_VECTOR: { Vector4D vec( f, f, f, f ); m_pResult->SetVecValue( vec.Base(), vecSize ); } break; case MATERIAL_VAR_TYPE_FLOAT: case MATERIAL_VAR_TYPE_INT: default: m_pResult->SetFloatValue( f ); break; } } }
TypedResult<TypeSpecifier> BinaryExpression::GetTypeSpecifier( const shared_ptr<ExecutionContext> execution_context, AliasResolution resolution) const { return ComputeResultType(m_left, m_right, m_operator, execution_context); }