예제 #1
0
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Private Methods

    private void instanceObjects(int object_id, int object_idx, HoudiniProgressBar progress_bar)
    {
        HAPI_ObjectInfo  object_info = prObjects[object_idx];
        HoudiniInstancer instancer   = null;

        Transform old_instancer_transform = transform.Find(object_info.name);

        if (old_instancer_transform && old_instancer_transform.gameObject.GetComponent <HoudiniInstancer>())
        {
            instancer = old_instancer_transform.gameObject.GetComponent <HoudiniInstancer>();
        }
        else
        {
            if (gameObject.GetComponent <HoudiniInstancerManager>() == null)
            {
                gameObject.AddComponent <HoudiniInstancerManager>();
            }

            GameObject main_object = new GameObject(object_info.name);
            main_object.transform.parent = transform;

            main_object.AddComponent <HoudiniInstancer>();
            prGameObjects[object_idx] = main_object;
            instancer = main_object.GetComponent <HoudiniInstancer>();

            HoudiniInstancerManager instancer_manager = gameObject.GetComponent <HoudiniInstancerManager>();
            instancer_manager.updateInstancerData(instancer);
        }

        instancer.prAsset    = this;
        instancer.prObjectId = object_id;

        instancer.instanceObjects(progress_bar);
    }
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Private

    private void drawPinnedInstances()
    {
        HoudiniInstancer instancer = myAsset.gameObject.GetComponentInChildren <HoudiniInstancer>();

        if (instancer == null)
        {
            return;
        }

        instancer.drawAllPins();
    }
예제 #3
0
    public override void OnInspectorGUI()
    {
        Object[]         selection = Selection.objects;
        HoudiniInstancer instancer = myInstance.prInstancer;

        if (selection.Length > 0)
        {
            if (!HoudiniHost.prAutoPinInstances && GUILayout.Button("Pin Selection"))
            {
                foreach (Object obj in selection)
                {
                    if (obj.GetType() == typeof(GameObject))
                    {
                        instancer.pinObject((GameObject)obj, true);
                    }
                }
            }

            if (GUILayout.Button("UnPin Selection"))
            {
                foreach (Object obj in selection)
                {
                    if (obj.GetType() == typeof(GameObject))
                    {
                        instancer.pinObject((GameObject)obj, false);
                    }
                }
            }
        }
        else if (instancer)
        {
            bool is_overridden = instancer.isPointOverridden(myInstance.prInstancePointNumber);
            if (is_overridden && GUILayout.Button("UnPin Instance"))
            {
                instancer.pinObject(myInstance.gameObject, false);
            }
            else if (!HoudiniHost.prAutoPinInstances && GUILayout.Button("Pin Instance"))
            {
                instancer.pinObject(myInstance.gameObject, true);
            }
        }
    }
예제 #4
0
	public void updateInstancerData( HoudiniInstancer instancer )
	{
		bool foundInstancer = false;
		foreach( HoudiniInstancerPersistentData persistent_data in myInstancersPersistentData )
		{
			if( persistent_data.instancerName == instancer.name )
			{
				foundInstancer = true;
				break;
			}
		}

		if( !foundInstancer )
		{
			HoudiniInstancerPersistentData instancer_data 
				= ScriptableObject.CreateInstance< HoudiniInstancerPersistentData>();
			instancer_data.instancerName = instancer.name;
			myInstancersPersistentData.Add( instancer_data );
		}
	}
    public void updateInstancerData(HoudiniInstancer instancer)
    {
        bool foundInstancer = false;

        foreach (HoudiniInstancerPersistentData persistent_data in myInstancersPersistentData)
        {
            if (persistent_data.instancerName == instancer.name)
            {
                foundInstancer = true;
                break;
            }
        }

        if (!foundInstancer)
        {
            HoudiniInstancerPersistentData instancer_data
                = ScriptableObject.CreateInstance <HoudiniInstancerPersistentData>();
            instancer_data.instancerName = instancer.name;
            myInstancersPersistentData.Add(instancer_data);
        }
    }
예제 #6
0
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Public

    public void OnSceneGUI()
    {
        HoudiniInstance instance = target as HoudiniInstance;


        HoudiniInstancer instancer = instance.prInstancer;

        if (instancer == null)
        {
            return;
        }

        bool is_overridden = instancer.isPointOverridden(instance.prInstancePointNumber);

        if (is_overridden)
        {
            instancer.drawPin(instance.prInstancePointNumber);
        }

        Event curr_event = Event.current;

        if (
            curr_event.isMouse && curr_event.type == EventType.MouseDown &&
            HoudiniHost.prAutoPinInstances)
        {
            instance.prTransformChanged = false;
        }
        else if (
            curr_event.isMouse && curr_event.type == EventType.MouseUp &&
            HoudiniHost.prAutoPinInstances && instance.prTransformChanged)
        {
            instancer.pinObject(instance.gameObject, true);
            instance.prTransformChanged = false;
            Repaint();
        }
    }
예제 #7
0
 public void reset()
 {
     myInstancePointNumber = -1;
     myTransformChanged = false;
     myInstancer = null;
 }