Exemplo n.º 1
0
    public void reset()
    {
        // Please keep these in the same order and grouping as their declarations at the top.

        // Assets -------------------------------------------------------------------------------------------------------

        prControl						= null;

        // Parameters -----------------------------------------------------------------------------------------------

        prEditable						= true;

        prParmCount 					= 0;
        prParmIntValueCount 			= 0;
        prParmFloatValueCount 			= 0;
        prParmStringValueCount 			= 0;
        prParmChoiceCount 				= 0;

        prParms 						= null;
        prParmIntValues 				= new int[ 0 ];
        prParmFloatValues 				= new float[ 0 ];
        prParmStringValues 				= new HAPI_StringHandle[ 0 ];
        prParmChoiceLists 				= new HAPI_ParmChoiceInfo[ 0 ];

        prLastChangedParmId 			= -1;

        myParmsUndoInfo					= null;

        prFolderListSelections 			= new List< int >();
        prFolderListSelectionIds 		= new List< int >();
        prFolderListSelections.Add( 0 );
        prFolderListSelectionIds.Add( -1 );

        // Control -------------------------------------------------------------------------------------------------

        myPostSerialization = true;
        myValuesEqualToHoudini = false;
    }
Exemplo n.º 2
0
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Private

    private void performUndo()
    {
        HoudiniParmsUndoInfo undo_info =
            ScriptableObject.Instantiate(myParms.prParmsUndoInfo) as HoudiniParmsUndoInfo;

        // First find all multiparms and add/remove instances as necessary.
        foreach (HAPI_ParmInfo parm in myParms.prParms)
        {
            if (
                parm.type == HAPI_ParmType.HAPI_PARMTYPE_MULTIPARMLIST &&
                undo_info.parmNames.Contains(parm.name))
            {
                // Get value of multiparm from undo info.
                int new_value_index = undo_info.parmIndices[undo_info.parmNames.IndexOf(parm.name)];
                int new_value       = undo_info.parmIntValues[new_value_index];

                // get current value of multiparm
                int current_value = myParms.prParmIntValues[parm.intValuesIndex];

                // Add/Remove number of instances from current parameters to match number
                // of parameters from undo info.
                int difference = new_value - current_value;
                if (difference > 0)
                {
                    myParms.appendMultiparmInstances(parm, difference);
                }
                else if (difference < 0)
                {
                    myParms.removeMultiparmInstances(parm, -difference);
                }
                else
                {
                    continue;
                }

                myParms.getParameterValues();
                myParmChanges = true;
            }
        }

        // Next loop through all parameters and copy changed values over from undo info.
        foreach (HAPI_ParmInfo parm in myParms.prParms)
        {
            if (!undo_info.parmNames.Contains(parm.name))
            {
                continue;
            }

            if (parm.isInt())
            {
                int new_value_index = undo_info.parmIndices[undo_info.parmNames.IndexOf(parm.name)];

                bool is_different = false;
                for (int idx = 0; idx < parm.size; ++idx)
                {
                    is_different |=
                        undo_info.parmIntValues[new_value_index + idx] !=
                        myParms.prParmIntValues[parm.intValuesIndex + idx];
                }

                if (is_different && parm.type != HAPI_ParmType.HAPI_PARMTYPE_MULTIPARMLIST)
                {
                    myParmChanges = true;

                    int[] values = new int[parm.size];
                    Array.Copy(undo_info.parmIntValues, new_value_index, values, 0, parm.size);
                    HoudiniHost.setParmIntValues(
                        myParms.prControl.prNodeId, values,
                        parm.intValuesIndex, parm.size);
                }
            }
            else if (parm.isFloat())
            {
                int new_value_index = undo_info.parmIndices[undo_info.parmNames.IndexOf(parm.name)];

                bool is_different = false;
                for (int idx = 0; idx < parm.size; ++idx)
                {
                    is_different |=
                        undo_info.parmFloatValues[new_value_index + idx] !=
                        myParms.prParmFloatValues[parm.floatValuesIndex + idx];
                }

                if (is_different)
                {
                    myParmChanges = true;

                    float[] values = new float[parm.size];
                    Array.Copy(undo_info.parmFloatValues, new_value_index, values, 0, parm.size);
                    HoudiniHost.setParmFloatValues(
                        myParms.prControl.prNodeId, values,
                        parm.floatValuesIndex, parm.size);
                }
            }
            else if (parm.isString())
            {
                string[] current_string_values = new string[parm.size];
                current_string_values = myParms.getParmStrings(parm);

                for (int i = 0; i < parm.size; i++)
                {
                    int    new_value_index      = undo_info.parmIndices[undo_info.parmNames.IndexOf(parm.name)];
                    string new_string_value     = undo_info.parmStringValues[new_value_index + i];
                    string current_string_value = current_string_values[i];

                    if (string.Compare(current_string_value, new_string_value) != 0)
                    {
                        myParmChanges = true;

                        HoudiniHost.setParmStringValue(
                            myParms.prControl.prNodeId,
                            new_string_value, parm.id, i);
                    }
                }
            }
            else if (parm.isNode())
            {
                // TODO
            }     // By type of parm.
        }         // For all parms.
    }
Exemplo n.º 3
0
    public void getParameterValues()
    {
        if ( prControl == null )
            return;
        if ( prControl.prAsset == null )
            return;
        if ( prControl.prAssetId < 0 )
            return;

        if ( myPostSerialization )
            myValuesEqualToHoudini = areValuesEqualToHoudini();
        else
            myValuesEqualToHoudini = true;

        // Create undo info if it hasn't been created already
        if ( myParmsUndoInfo == null )
            myParmsUndoInfo = ScriptableObject.CreateInstance< HoudiniParmsUndoInfo >();

        // Get the node info again
        HAPI_NodeInfo node_info	= HoudiniHost.getNodeInfo( prControl.prNodeId );

        prParmCount 			= node_info.parmCount;
        prParmIntValueCount		= node_info.parmIntValueCount;
        prParmFloatValueCount	= node_info.parmFloatValueCount;
        prParmStringValueCount	= node_info.parmStringValueCount;
        prParmChoiceCount		= node_info.parmChoiceCount;

        // Get all parameters.
        prParms = new HAPI_ParmInfo[ prParmCount ];
        HoudiniAssetUtility.getArray1Id( prControl.prNodeId, HoudiniHost.getParameters, prParms, prParmCount );

        // Get parameter int values.
        prParmIntValues = new int[ prParmIntValueCount ];
        HoudiniAssetUtility.getArray1Id(
            prControl.prNodeId, HoudiniHost.getParmIntValues, prParmIntValues, prParmIntValueCount );

        myParmsUndoInfo.parmIntValues = new int[ prParmIntValueCount ];
        Array.Copy( prParmIntValues, myParmsUndoInfo.parmIntValues, prParmIntValueCount );

        // Get parameter float values.
        prParmFloatValues = new float[ prParmFloatValueCount ];
        HoudiniAssetUtility.getArray1Id(
            prControl.prNodeId, HoudiniHost.getParmFloatValues, prParmFloatValues, prParmFloatValueCount );

        myParmsUndoInfo.parmFloatValues = new float[ prParmFloatValueCount ];
        Array.Copy( prParmFloatValues, myParmsUndoInfo.parmFloatValues, prParmFloatValueCount );

        // Get parameter string (handle) values.
        prParmStringValues = new int[ prParmStringValueCount ];
        HoudiniAssetUtility.getArray1Id(
            prControl.prNodeId, HoudiniHost.getParmStringValues, prParmStringValues, prParmStringValueCount );

        // Get parameter choice lists.
        prParmChoiceLists = new HAPI_ParmChoiceInfo[ prParmChoiceCount ];
        HoudiniAssetUtility.getArray1Id(
            prControl.prNodeId, HoudiniHost.getParmChoiceLists, prParmChoiceLists, prParmChoiceCount );

        // Build the map of parm id -> parm
        for ( int i = 0; i < prParms.Length; ++i )
            myParmMap[ prParms[ i ].id ] = prParms[ i ];

        cacheStringsFromHost();

        // Go through parameters and set index map and multiparm map for undo info
        myParmsUndoInfo.parmNames.Clear();
        myParmsUndoInfo.parmIndices.Clear();

        foreach ( HAPI_ParmInfo parm in prParms )
        {
            // Need to check the index values are greater or equal to 0
            // for now because there is a bug where some parameters are
            // being set to have an integer parameter type, a size of
            // zero, and an index value of -1
            if ( parm.isInt() && parm.intValuesIndex >= 0 )
                myParmsUndoInfo.parmIndices.Add( parm.intValuesIndex );
            else if ( parm.isFloat() && parm.floatValuesIndex >= 0 )
                myParmsUndoInfo.parmIndices.Add( parm.floatValuesIndex );
            else if ( parm.isString() && parm.stringValuesIndex >= 0 )
                myParmsUndoInfo.parmIndices.Add( parm.stringValuesIndex );
            else
                continue;

            myParmsUndoInfo.parmNames.Add( parm.name );
        }

        #if UNITY_EDITOR
        // Set which parameter values have been overridden (only needed for a prefab instance)
        if ( prControl && prControl.isPrefabInstance() && gameObject.GetComponent< HoudiniAsset >() != null )
        {
            HoudiniAsset prefab_asset = prControl.prAsset.getParentPrefabAsset();
            if ( prefab_asset && prefab_asset.prParms != null &&
                prefab_asset.prParms.prParms != null &&
                !prefab_asset.isApplyingChangesToPrefab() )
            {
                // loop through parameter values and determine which ones have been
                // overridden (ie. changed from corresponding parameter value on prefab)
                for ( int i = 0; i < prParms.Length; ++i )
                {
                    myOverriddenParmsMap[ prParms[ i ].id ] = !isParmSameInPrefab( prParms[ i ].id, prefab_asset.prParms );
                }
            }

            // This tells Unity that parameter values have been overridden for this prefab instance
            PrefabUtility.RecordPrefabInstancePropertyModifications( this );
        }
        #endif // UNITY_EDITOR
    }