Beispiel #1
0
        public void CheckImediateActionsForPort(TemplateMultiPassMasterNode owner, int portId)
        {
            if (portId != m_portId)
            {
                return;
            }

            InputPort port = null;

            if (m_portId > -1)
            {
                port = owner.GetInputPortByUniqueId(m_portId);
            }
            else
            {
                port = owner.InputPorts.Find(x => x.Name.Equals(m_options.Name));
            }

            if (port != null)
            {
                int optionId = port.HasOwnOrLinkConnection ? 0 : 1;
                for (int i = 0; i < m_options.ActionsPerOption[optionId].Length; i++)
                {
                    switch (m_options.ActionsPerOption[optionId][i].ActionType)
                    {
                    case AseOptionsActionType.SetPortName:
                    {
                        port.Name         = m_options.ActionsPerOption[optionId][i].ActionData;
                        owner.SizeIsDirty = true;
                    }
                    break;
                    }
                }
            }
        }
		bool SetTemplate( MasterNode newMasterNode )
		{
			if( m_containerGraph.MultiPassMasterNodes.NodesList.Count > 0 )
			{
				m_multiPassMode = true:
				TemplateMultiPassMasterNode templateMasterNode = ( newMasterNode as TemplateMultiPassMasterNode ):
				if( templateMasterNode != null )
				{
					m_templateMPData = templateMasterNode.CurrentTemplate:
					UpdateSubShaderAmount():
					FetchShaderProperties():
					return true:
				}
			}
			else
			{
				m_multiPassMode = false:
				TemplateMasterNode templateMasterNode = ( newMasterNode as TemplateMasterNode ):
				if( templateMasterNode != null )
				{
					m_shaderProperties = templateMasterNode.CurrentTemplate.AvailableShaderProperties:
					return true:
				}
			}
			return false:
		}
        public void FillDataCollector(TemplateMultiPassMasterNode owner, ref MasterNodeDataCollector dataCollector)
        {
            if (m_portId > -1)
            {
                InputPort port = owner.GetInputPortByUniqueId(m_portId);
                if (port != null)
                {
                    int optionId = port.IsConnected ? 0 : 1;
                    for (int i = 0; i < m_options.ActionsPerOption[optionId].Length; i++)
                    {
                        switch (m_options.ActionsPerOption[optionId][i].ActionType)
                        {
                        case AseOptionsActionType.SetDefine:
                        {
                            dataCollector.AddToDefines(-1, m_options.ActionsPerOption[optionId][i].ActionData);
                        }
                        break;

                        case AseOptionsActionType.UnsetDefine:
                        {
                            dataCollector.AddToDefines(-1, m_options.ActionsPerOption[optionId][i].ActionData, false);
                        }
                        break;
                        }
                    }
                }
            }
        }
Beispiel #4
0
 public void CheckImediateActionsForPort(TemplateMultiPassMasterNode masterNode, int portId)
 {
     for (int i = 0; i < m_passCustomOptionsPorts.Count; i++)
     {
         m_passCustomOptionsPorts[i].CheckImediateActionsForPort(masterNode, portId);
     }
 }
        public void FillDataCollector(TemplateMultiPassMasterNode owner, ref MasterNodeDataCollector dataCollector)
        {
            InputPort port = null;

            if (m_portId > -1)
            {
                port = owner.GetInputPortByUniqueId(m_portId);
            }
            else
            {
                port = owner.InputPorts.Find(x => x.Name.Equals(m_options.Name));
            }

            if (port != null)
            {
                int optionId = port.HasOwnOrLinkConnection ? 0 : 1;
                for (int i = 0; i < m_options.ActionsPerOption[optionId].Length; i++)
                {
                    switch (m_options.ActionsPerOption[optionId][i].ActionType)
                    {
                    case AseOptionsActionType.SetDefine:
                    {
                        dataCollector.AddToDefines(-1, m_options.ActionsPerOption[optionId][i].ActionData);
                    }
                    break;

                    case AseOptionsActionType.SetUndefine:
                    {
                        dataCollector.AddToDefines(-1, m_options.ActionsPerOption[optionId][i].ActionData, false);
                    }
                    break;
                    }
                }
            }
        }
Beispiel #6
0
 public void DrawCustomOptions(TemplateMultiPassMasterNode owner)
 {
     m_owner = owner;
     if (m_passCustomOptionsSizeCheck > 0)
     {
         NodeUtils.DrawNestedPropertyGroup(ref m_passCustomOptionsFoldout, m_passCustomOptionsLabel, DrawCustomOptionsBlock);
     }
 }
Beispiel #7
0
        public void FillDataCollector(TemplateMultiPassMasterNode owner, ref MasterNodeDataCollector dataCollector)
        {
            InputPort port = null;

            if (m_portId > -1)
            {
                port = owner.GetInputPortByUniqueId(m_portId);
            }
            else
            {
                port = owner.InputPorts.Find(x => x.Name.Equals(m_options.Name));
            }

            if (port != null)
            {
                int optionId = port.HasOwnOrLinkConnection ? 0 : 1;
                for (int i = 0; i < m_options.ActionsPerOption[optionId].Length; i++)
                {
                    switch (m_options.ActionsPerOption[optionId][i].ActionType)
                    {
                    case AseOptionsActionType.SetDefine:
                    {
                        List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.GetMultiPassMasterNodes(owner.LODIndex);
                        int count = nodes.Count;
                        for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                        {
                            nodes[nodeIdx].OptionsDefineContainer.AddDefine("#define " + m_options.ActionsPerOption[optionId][i].ActionData, false);
                        }
                        //dataCollector.AddToDefines( -1, m_options.ActionsPerOption[ optionId ][ i ].ActionData );
                    }
                    break;

                    case AseOptionsActionType.SetUndefine:
                    {
                        List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.GetMultiPassMasterNodes(owner.LODIndex);
                        int count = nodes.Count;
                        for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                        {
                            nodes[nodeIdx].OptionsDefineContainer.AddDefine("#undef " + m_options.ActionsPerOption[optionId][i].ActionData, false);
                        }
                        //dataCollector.AddToDefines( -1, m_options.ActionsPerOption[ optionId ][ i ].ActionData, false );
                    }
                    break;

                    case AseOptionsActionType.SetShaderProperty:
                    {
                        TemplateShaderPropertyData data = owner.CurrentTemplate.GetShaderPropertyData(m_options.ActionsPerOption[optionId][i].ActionData);
                        if (data != null)
                        {
                            string newPropertyValue = data.CreatePropertyForValue(m_options.ActionsPerOption[optionId][i].ActionBuffer);
                            owner.CurrentTemplate.IdManager.SetReplacementText(data.FullValue, newPropertyValue);
                        }
                    }
                    break;
                    }
                }
            }
        }
        public TemplateOptionPortItem(TemplateMultiPassMasterNode owner, TemplateOptionsItem options)
        {
            m_options = options;
            InputPort port = owner.InputPorts.Find(x => x.Name.Equals(options.Name));

            if (port != null)
            {
                m_portId = port.PortId;
            }
        }
        public override void OnNodeLayout(DrawInfo drawInfo)
        {
            if (m_isInvisible)
            {
                return;
            }

            if (!IsMainOutputNode)
            {
                if (Docking)
                {
                    m_useSquareNodeTitle = true;
                    TemplateMultiPassMasterNode master = ContainerGraph.CurrentMasterNode as TemplateMultiPassMasterNode;
                    m_position        = master.TruePosition;
                    m_position.height = 32;
                    int masterIndex = ContainerGraph.MultiPassMasterNodes.NodesList.IndexOf(master);
                    int index       = ContainerGraph.MultiPassMasterNodes.GetNodeRegisterIdx(UniqueId);
                    if (index > masterIndex)
                    {
                        int backTracking = 0;
                        for (int i = index - 1; i > masterIndex; i--)
                        {
                            if (ContainerGraph.MultiPassMasterNodes.NodesList[i].Docking)
                            {
                                backTracking++;
                            }
                        }
                        m_position.y = master.TruePosition.yMax + 1 + 33 * (backTracking);                          // ContainerGraph.MultiPassMasterNodes.NodesList[ index - 1 ].TruePosition.yMax;
                        base.OnNodeLayout(drawInfo);
                    }
                    else
                    {
                        int forwardTracking = 1;
                        for (int i = index + 1; i < masterIndex; i++)
                        {
                            if (ContainerGraph.MultiPassMasterNodes.NodesList[i].Docking)
                            {
                                forwardTracking++;
                            }
                        }
                        m_position.y = master.TruePosition.y - 33 * (forwardTracking);                          // ContainerGraph.MultiPassMasterNodes.NodesList[ index - 1 ].TruePosition.yMax;
                        base.OnNodeLayout(drawInfo);
                    }
                }
                else
                {
                    m_useSquareNodeTitle = false;
                    base.OnNodeLayout(drawInfo);
                }
            }
            else
            {
                base.OnNodeLayout(drawInfo);
            }
        }
Beispiel #10
0
        public void SubShaderFillDataCollector(TemplateMultiPassMasterNode owner, ref MasterNodeDataCollector dataCollector)
        {
            //TemplateMultiPassMasterNode targetNode = string.IsNullOrEmpty(m_options.Id) ? owner:owner.ContainerGraph.GetMasterNodeOfPass( m_options.Id , owner.LODIndex );
            TemplateMultiPassMasterNode targetNode = string.IsNullOrEmpty(m_options.Id) ?
                                                     owner.ContainerGraph.GetMainMasterNodeOfLOD(owner.LODIndex) :
                                                     owner.ContainerGraph.GetMasterNodeOfPass(m_options.Id, owner.LODIndex);

            InputPort port = null;

            if (m_portId > -1)
            {
                port = targetNode.GetInputPortByUniqueId(m_portId);
            }
            else
            {
                port = targetNode.InputPorts.Find(x => x.Name.Equals(m_options.Name));
            }

            if (port != null)
            {
                int optionId = port.HasOwnOrLinkConnection ? 0 : 1;
                for (int i = 0; i < m_options.ActionsPerOption[optionId].Length; i++)
                {
                    if (string.IsNullOrEmpty(m_options.ActionsPerOption[optionId][i].PassName) ||
                        m_options.ActionsPerOption[optionId][i].PassName.Equals(owner.PassName))
                    {
                        switch (m_options.ActionsPerOption[optionId][i].ActionType)
                        {
                        case AseOptionsActionType.SetDefine:
                        {
                            owner.OptionsDefineContainer.AddDefine("#define " + m_options.ActionsPerOption[optionId][i].ActionData, true);
                        }
                        break;

                        case AseOptionsActionType.SetUndefine:
                        {
                            owner.OptionsDefineContainer.AddDefine("#undef " + m_options.ActionsPerOption[optionId][i].ActionData, true);
                        }
                        break;

                        case AseOptionsActionType.SetShaderProperty:
                        {
                            TemplateShaderPropertyData data = owner.CurrentTemplate.GetShaderPropertyData(m_options.ActionsPerOption[optionId][i].ActionData);
                            if (data != null)
                            {
                                string newPropertyValue = data.CreatePropertyForValue(m_options.ActionsPerOption[optionId][i].ActionBuffer);
                                owner.CurrentTemplate.IdManager.SetReplacementText(data.FullValue, newPropertyValue);
                            }
                        }
                        break;
                        }
                    }
                }
            }
        }
Beispiel #11
0
		public void SetCustomOptionsPortsInfo( TemplateMultiPassMasterNode masterNode, ref MasterNodeDataCollector dataCollector )
		{
			if( masterNode == null )
				return:

			for( int i = 0: i < m_passCustomOptionsPorts.Count: i++ )
			{
				if( string.IsNullOrEmpty( m_passCustomOptionsPorts[ i ].Options.Id ) ||
					masterNode.PassUniqueName.Equals( m_passCustomOptionsPorts[ i ].Options.Id ) )
				{
					m_passCustomOptionsPorts[ i ].FillDataCollector( masterNode, ref dataCollector ):
				}
			}
		}
Beispiel #12
0
		public void SetCustomOptionsInfo( TemplateMultiPassMasterNode masterNode, ref MasterNodeDataCollector dataCollector )
		{
			if( masterNode == null )
				return:

			for( int i = 0: i < m_passCustomOptionsUI.Count: i++ )
			{
				m_passCustomOptionsUI[ i ].FillDataCollector( ref dataCollector ):
			}

			for( int i = 0: i < m_passCustomOptionsPorts.Count: i++ )
			{
				m_passCustomOptionsPorts[ i ].FillDataCollector( masterNode, ref dataCollector ):
			}
		}
        public void FillDataCollector(TemplateMultiPassMasterNode owner, ref MasterNodeDataCollector dataCollector)
        {
            InputPort port = null;

            if (m_portId > -1)
            {
                port = owner.GetInputPortByUniqueId(m_portId);
            }
            else
            {
                port = owner.InputPorts.Find(x => x.Name.Equals(m_options.Name));
            }

            if (port != null)
            {
                int optionId = port.HasOwnOrLinkConnection ? 0 : 1;
                for (int i = 0; i < m_options.ActionsPerOption[optionId].Length; i++)
                {
                    switch (m_options.ActionsPerOption[optionId][i].ActionType)
                    {
                    case AseOptionsActionType.SetDefine:
                    {
                        List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.MultiPassMasterNodes.NodesList;
                        int count = nodes.Count;
                        for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                        {
                            nodes[nodeIdx].OptionsDefineContainer.AddDefine("#define " + m_options.ActionsPerOption[optionId][i].ActionData, false);
                        }
                        //dataCollector.AddToDefines( -1, m_options.ActionsPerOption[ optionId ][ i ].ActionData );
                    }
                    break;

                    case AseOptionsActionType.SetUndefine:
                    {
                        List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.MultiPassMasterNodes.NodesList;
                        int count = nodes.Count;
                        for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                        {
                            nodes[nodeIdx].OptionsDefineContainer.AddDefine("#undef " + m_options.ActionsPerOption[optionId][i].ActionData, false);
                        }
                        //dataCollector.AddToDefines( -1, m_options.ActionsPerOption[ optionId ][ i ].ActionData, false );
                    }
                    break;
                    }
                }
            }
        }
        public void SubShaderFillDataCollector(TemplateMultiPassMasterNode owner, ref MasterNodeDataCollector dataCollector)
        {
            TemplateMultiPassMasterNode targetNode = string.IsNullOrEmpty(m_options.Id) ? owner:owner.ContainerGraph.GetMasterNodeOfPass(m_options.Id);
            InputPort port = null;

            if (m_portId > -1)
            {
                port = targetNode.GetInputPortByUniqueId(m_portId);
            }
            else
            {
                port = targetNode.InputPorts.Find(x => x.Name.Equals(m_options.Name));
            }


            if (port != null)
            {
                int optionId = port.HasOwnOrLinkConnection ? 0 : 1;
                for (int i = 0; i < m_options.ActionsPerOption[optionId].Length; i++)
                {
                    if (string.IsNullOrEmpty(m_options.ActionsPerOption[optionId][i].PassName) ||
                        m_options.ActionsPerOption[optionId][i].PassName.Equals(owner.PassName))
                    {
                        switch (m_options.ActionsPerOption[optionId][i].ActionType)
                        {
                        case AseOptionsActionType.SetDefine:
                        {
                            owner.OptionsDefineContainer.AddDefine("#define " + m_options.ActionsPerOption[optionId][i].ActionData, true);
                        }
                        break;

                        case AseOptionsActionType.SetUndefine:
                        {
                            owner.OptionsDefineContainer.AddDefine("#undef " + m_options.ActionsPerOption[optionId][i].ActionData, true);
                        }
                        break;
                        }
                    }
                }
            }
        }
        public void Draw(TemplateMultiPassMasterNode owner)
        {
            if (m_currentPasses.Length < 2)
            {
                return;
            }

            NodeUtils.DrawNestedPropertyGroup(ref m_foldout, Label, () =>
            {
                for (int i = 0; i < m_currentPasses.Length; i++)
                {
                    EditorGUI.BeginChangeCheck();
                    m_currentPasses[i].Visible = owner.EditorGUILayoutToggleLeft(m_currentPasses[i].Name, m_currentPasses[i].Visible);
                    if (EditorGUI.EndChangeCheck())
                    {
                        owner.ContainerGraph.GetMultiPassMasterNodes(owner.LODIndex)[m_currentPasses[i].Idx].IsInvisible = !m_currentPasses[i].Visible;
                    }
                }
                EditorGUILayout.Space();
            });
        }
Beispiel #16
0
        public void SetSubShaderCustomOptionsPortsInfo(TemplateMultiPassMasterNode masterNode, ref MasterNodeDataCollector dataCollector)
        {
            if (masterNode == null)
            {
                return;
            }


            //for( int i = 0; i < m_passCustomOptionsPorts.Count; i++ )
            //{
            //	if( string.IsNullOrEmpty( m_passCustomOptionsPorts[ i ].Options.Id ) ||
            //		masterNode.PassUniqueName.Equals( m_passCustomOptionsPorts[ i ].Options.Id ) )
            //	{
            //		m_passCustomOptionsPorts[ i ].FillDataCollector( masterNode, ref dataCollector );
            //	}
            //}

            for (int i = 0; i < m_passCustomOptionsPorts.Count; i++)
            {
                m_passCustomOptionsPorts[i].SubShaderFillDataCollector(masterNode, ref dataCollector);
            }
        }
        public void OnCustomOptionSelected(bool actionFromUser, bool isRefreshing, bool invertAction, TemplateMultiPassMasterNode owner, TemplateOptionUIItem uiItem, params TemplateActionItem[] validActions)
        {
            uiItem.CheckOnExecute = false;
            for (int i = 0; i < validActions.Length; i++)
            {
                AseOptionsActionType actionType = validActions[i].ActionType;
                if (invertAction)
                {
                    if (!TemplateOptionsToolsHelper.InvertAction(validActions[i].ActionType, ref actionType))
                    {
                        continue;
                    }
                }


                switch (actionType)
                {
                case AseOptionsActionType.ShowOption:
                {
                    TemplateOptionUIItem item = m_passCustomOptionsUI.Find(x => (x.Options.Name.Equals(validActions[i].ActionData)));
                    if (item != null)
                    {
                        if (isRefreshing)
                        {
                            string optionId = validActions[i].PassName + validActions[i].ActionData + "Option";
                            owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, true);
                        }

                        // this prevents options from showing up when loading by checking if they were hidden by another option
                        // it works on the assumption that an option that may possible hide this one is checked first
                        if (!isRefreshing)
                        {
                            item.IsVisible = true;
                        }
                        else if (item.WasVisible)
                        {
                            item.IsVisible = true;
                        }

                        if (!invertAction && validActions[i].ActionDataIdx > -1)
                        {
                            item.CurrentOption = validActions[i].ActionDataIdx;
                        }

                        item.CheckEnDisable(actionFromUser);
                    }
                    else
                    {
                        Debug.LogFormat("Could not find Option {0} for action {1}", validActions[i].ActionData, validActions[i].ActionType);
                    }
                }
                break;

                case AseOptionsActionType.HideOption:
                {
                    TemplateOptionUIItem item = m_passCustomOptionsUI.Find(x => (x.Options.Name.Equals(validActions[i].ActionData)));
                    if (item != null)
                    {
                        bool flag = false;
                        if (isRefreshing)
                        {
                            string optionId = validActions[i].PassName + validActions[i].ActionData + "Option";
                            flag = owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, false);
                        }

                        item.IsVisible = false || flag;
                        if (!invertAction && validActions[i].ActionDataIdx > -1)
                        {
                            item.CurrentOption = validActions[i].ActionDataIdx;
                        }

                        item.CheckEnDisable(actionFromUser);
                    }
                    else
                    {
                        Debug.LogFormat("Could not find Option {0} for action {1}", validActions[i].ActionData, validActions[i].ActionType);
                    }
                }
                break;

                case AseOptionsActionType.SetOption:
                {
                    if (!uiItem.IsVisible)
                    {
                        break;
                    }

                    TemplateOptionUIItem item = m_passCustomOptionsUI.Find(x => (x.Options.Name.Equals(validActions[i].ActionData)));
                    if (item != null)
                    {
                        item.CurrentOption = validActions[i].ActionDataIdx;
                        item.Refresh();
                    }
                    else
                    {
                        Debug.LogFormat("Could not find Option {0} for action {1}", validActions[i].ActionData, validActions[i].ActionType);
                    }
                }
                break;

                case AseOptionsActionType.HidePort:
                {
                    TemplateMultiPassMasterNode passMasterNode = owner;
                    if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName, owner.LODIndex);
                    }

                    if (passMasterNode != null)
                    {
                        InputPort port = validActions[i].ActionDataIdx > -1 ?
                                         passMasterNode.GetInputPortByUniqueId(validActions[i].ActionDataIdx) :
                                         passMasterNode.InputPorts.Find(x => x.Name.Equals(validActions[i].ActionData));
                        if (port != null)
                        {
                            if (isRefreshing)
                            {
                                string optionId = validActions[i].PassName + port.Name;
                                owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, port.IsConnected);
                                port.Visible = port.IsConnected;
                            }
                            else
                            {
                                port.Visible = false;
                            }
                            passMasterNode.SizeIsDirty = true;
                        }
                        else
                        {
                            Debug.LogFormat("Could not find port {0},{1} for action {2}", validActions[i].ActionDataIdx, validActions[i].ActionData, validActions[i].ActionType);
                        }
                    }
                    else
                    {
                        Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                    }
                }
                break;

                case AseOptionsActionType.ShowPort:
                {
                    if (!uiItem.IsVisible)
                    {
                        break;
                    }

                    TemplateMultiPassMasterNode passMasterNode = owner;
                    if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName, owner.LODIndex);
                    }

                    if (passMasterNode != null)
                    {
                        InputPort port = validActions[i].ActionDataIdx > -1 ?
                                         passMasterNode.GetInputPortByUniqueId(validActions[i].ActionDataIdx) :
                                         passMasterNode.InputPorts.Find(x => x.Name.Equals(validActions[i].ActionData));
                        if (port != null)
                        {
                            if (isRefreshing)
                            {
                                string optionId = validActions[i].PassName + port.Name;
                                owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, true);
                            }

                            port.Visible = true;
                            passMasterNode.SizeIsDirty = true;
                        }
                        else
                        {
                            Debug.LogFormat("Could not find port {0},{1} for action {2}", validActions[i].ActionDataIdx, validActions[i].ActionData, validActions[i].ActionType);
                        }
                    }
                    else
                    {
                        Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                    }
                }
                break;

                case AseOptionsActionType.SetPortName:
                {
                    if (!uiItem.IsVisible)
                    {
                        break;
                    }

                    TemplateMultiPassMasterNode passMasterNode = owner;
                    if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName, owner.LODIndex);
                    }

                    if (passMasterNode != null)
                    {
                        InputPort port = passMasterNode.GetInputPortByUniqueId(validActions[i].ActionDataIdx);
                        if (port != null)
                        {
                            port.Name = validActions[i].ActionData;
                            passMasterNode.SizeIsDirty = true;
                        }
                        else
                        {
                            Debug.LogFormat("Could not find port {0},{1} for action {2}", validActions[i].ActionDataIdx, validActions[i].ActionData, validActions[i].ActionType);
                        }
                    }
                    else
                    {
                        Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                    }
                }
                break;

                case AseOptionsActionType.SetDefine:
                {
                    if (!uiItem.IsVisible)
                    {
                        uiItem.CheckOnExecute = true;
                        break;
                    }

                    //Debug.Log( "DEFINE " + validActions[ i ].ActionData );
                    if (validActions[i].AllPasses)
                    {
                        string actionData  = validActions[i].ActionData;
                        string defineValue = string.Empty;
                        bool   isPragma    = false;
                        if (actionData.StartsWith("pragma"))
                        {
                            defineValue = "#" + actionData;
                            isPragma    = true;
                        }
                        else
                        {
                            defineValue = "#define " + validActions[i].ActionData;
                        }
                        if (isRefreshing)
                        {
                            owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(defineValue, true);
                        }
                        List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.GetMultiPassMasterNodes(owner.LODIndex);
                        int count = nodes.Count;
                        for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                        {
                            nodes[nodeIdx].OptionsDefineContainer.AddDirective(defineValue, false, isPragma);
                        }
                    }
                    else if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        TemplateMultiPassMasterNode passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName, owner.LODIndex);
                        if (passMasterNode != null)
                        {
                            string actionData  = validActions[i].ActionData;
                            string defineValue = string.Empty;
                            bool   isPragma    = false;
                            if (actionData.StartsWith("pragma"))
                            {
                                defineValue = "#" + actionData;
                                isPragma    = true;
                            }
                            else
                            {
                                defineValue = "#define " + validActions[i].ActionData;
                            }
                            if (isRefreshing)
                            {
                                string optionsId = validActions[i].PassName + defineValue;
                                owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionsId, true);
                            }
                            passMasterNode.OptionsDefineContainer.AddDirective(defineValue, false, isPragma);
                        }
                        else
                        {
                            Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                        }
                    }
                    else
                    {
                        uiItem.CheckOnExecute = true;
                    }
                }
                break;

                case AseOptionsActionType.RemoveDefine:
                {
                    //Debug.Log( "UNDEFINE " + validActions[ i ].ActionData );
                    if (validActions[i].AllPasses)
                    {
                        string actionData  = validActions[i].ActionData;
                        string defineValue = string.Empty;
                        if (actionData.StartsWith("pragma"))
                        {
                            defineValue = "#" + actionData;
                        }
                        else
                        {
                            defineValue = "#define " + validActions[i].ActionData;
                        }

                        bool flag = false;
                        if (isRefreshing)
                        {
                            flag = owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(defineValue, false);
                        }

                        if (!flag)
                        {
                            List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.GetMultiPassMasterNodes(owner.LODIndex);
                            int count = nodes.Count;
                            for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                            {
                                nodes[nodeIdx].OptionsDefineContainer.RemoveDirective(defineValue);
                            }
                        }
                    }
                    else if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        TemplateMultiPassMasterNode passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName, owner.LODIndex);
                        if (passMasterNode != null)
                        {
                            string actionData  = validActions[i].ActionData;
                            string defineValue = string.Empty;
                            if (actionData.StartsWith("pragma"))
                            {
                                defineValue = "#" + actionData;
                            }
                            else
                            {
                                defineValue = "#define " + validActions[i].ActionData;
                            }
                            bool flag = false;
                            if (isRefreshing)
                            {
                                string optionId = validActions[i].PassName + defineValue;
                                flag = owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, false);
                            }
                            if (!flag)
                            {
                                passMasterNode.OptionsDefineContainer.RemoveDirective(defineValue);
                            }
                        }
                        else
                        {
                            Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                        }
                    }
                    else
                    {
                        uiItem.CheckOnExecute = false;
                    }
                }
                break;

                case AseOptionsActionType.SetUndefine:
                {
                    if (!uiItem.IsVisible)
                    {
                        uiItem.CheckOnExecute = true;
                        break;
                    }

                    if (validActions[i].AllPasses)
                    {
                        string defineValue = "#undef " + validActions[i].ActionData;
                        if (isRefreshing)
                        {
                            owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(defineValue, true);
                        }
                        List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.GetMultiPassMasterNodes(owner.LODIndex);
                        int count = nodes.Count;
                        for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                        {
                            nodes[nodeIdx].OptionsDefineContainer.AddDirective(defineValue, false);
                        }
                    }
                    else if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        TemplateMultiPassMasterNode passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName, owner.LODIndex);
                        if (passMasterNode != null)
                        {
                            string defineValue = "#undef " + validActions[i].ActionData;
                            if (isRefreshing)
                            {
                                string optionsId = validActions[i].PassName + defineValue;
                                owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionsId, true);
                            }
                            passMasterNode.OptionsDefineContainer.AddDirective(defineValue, false);
                        }
                        else
                        {
                            Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                        }
                    }
                    else
                    {
                        uiItem.CheckOnExecute = true;
                    }
                }
                break;

                case AseOptionsActionType.RemoveUndefine:
                {
                    if (validActions[i].AllPasses)
                    {
                        string defineValue = "#undef " + validActions[i].ActionData;
                        bool   flag        = false;
                        if (isRefreshing)
                        {
                            flag = owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(defineValue, false);
                        }

                        if (!flag)
                        {
                            List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.GetMultiPassMasterNodes(owner.LODIndex);
                            int count = nodes.Count;
                            for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                            {
                                nodes[nodeIdx].OptionsDefineContainer.RemoveDirective(defineValue);
                            }
                        }
                    }
                    else if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        TemplateMultiPassMasterNode passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName, owner.LODIndex);
                        if (passMasterNode != null)
                        {
                            bool   flag        = false;
                            string defineValue = "#undef " + validActions[i].ActionData;
                            if (isRefreshing)
                            {
                                string optionId = validActions[i].PassName + defineValue;
                                flag = owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, false);
                            }

                            if (!flag)
                            {
                                passMasterNode.OptionsDefineContainer.RemoveDirective(defineValue);
                            }
                        }
                        else
                        {
                            Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                        }
                    }
                    else
                    {
                        uiItem.CheckOnExecute = false;
                    }
                }
                break;

                case AseOptionsActionType.ExcludePass:
                {
                    string optionId = validActions[i].ActionData + "Pass";
                    bool   flag     = isRefreshing ? owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, false) : false;
                    if (!flag)
                    {
                        owner.SetPassVisible(validActions[i].ActionData, false);
                    }
                }
                break;

                case AseOptionsActionType.IncludePass:
                {
                    if (!uiItem.IsVisible)
                    {
                        break;
                    }

                    string optionId = validActions[i].ActionData + "Pass";
                    owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, true);
                    owner.SetPassVisible(validActions[i].ActionData, true);
                }
                break;

                case AseOptionsActionType.SetPropertyOnPass:
                {
                    //Debug.Log( "PASSPROP " + validActions[ i ].ActionData );
                    //Refresh happens on hotcode reload and shader load and in those situation
                    // The property own serialization handles its setup
                    if (isRefreshing)
                    {
                        continue;
                    }

                    if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        TemplateMultiPassMasterNode passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName, owner.LODIndex);
                        if (passMasterNode != null)
                        {
                            passMasterNode.SetPropertyActionFromItem(actionFromUser, passMasterNode.PassModule, validActions[i]);
                        }
                        else
                        {
                            Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                        }
                    }
                    else
                    {
                        owner.SetPropertyActionFromItem(actionFromUser, owner.PassModule, validActions[i]);
                    }
                }
                break;

                case AseOptionsActionType.SetPropertyOnSubShader:
                {
                    //Refresh happens on hotcode reload and shader load and in those situation
                    // The property own serialization handles its setup
                    if (isRefreshing)
                    {
                        continue;
                    }

                    owner.SetPropertyActionFromItem(actionFromUser, owner.SubShaderModule, validActions[i]);
                }
                break;

                case AseOptionsActionType.SetShaderProperty:
                {
                    //This action is only check when shader is compiled over
                    //the TemplateMultiPassMasterNode via the on CheckPropertyChangesOnOptions() method
                }
                break;

                case AseOptionsActionType.ExcludeAllPassesBut:
                {
                    //This action is only check when shader is compiled over
                    //the TemplateMultiPassMasterNode via the on CheckExcludeAllPassOptions() method
                }
                break;

                case AseOptionsActionType.SetMaterialProperty:
                {
                    if (isRefreshing)
                    {
                        continue;
                    }

                    if (!uiItem.IsVisible)
                    {
                        break;
                    }

                    if (owner.ContainerGraph.CurrentMaterial != null)
                    {
                        string prop = validActions[i].ActionData;
                        if (owner.ContainerGraph.CurrentMaterial.HasProperty(prop))
                        {
                            if (uiItem.Options.UIWidget == AseOptionsUIWidget.Float || uiItem.Options.UIWidget == AseOptionsUIWidget.FloatRange)
                            {
                                owner.ContainerGraph.CurrentMaterial.SetFloat(prop, uiItem.CurrentFieldValue);
                            }
                            else
                            {
                                owner.ContainerGraph.CurrentMaterial.SetInt(prop, (int)uiItem.CurrentFieldValue);
                            }

                            if (ASEMaterialInspector.Instance != null)
                            {
                                ASEMaterialInspector.Instance.Repaint();
                            }
                        }
                    }
                }
                break;
                }
            }
        }
Beispiel #18
0
        public void OnCustomOptionSelected(bool isRefreshing, bool invertAction, TemplateMultiPassMasterNode owner, TemplateOptionUIItem uiItem, params TemplateActionItem[] validActions)
        {
            uiItem.CheckOnExecute = false;
            for (int i = 0; i < validActions.Length; i++)
            {
                AseOptionsActionType actionType = validActions[i].ActionType;
                if (invertAction)
                {
                    if (!TemplateOptionsToolsHelper.InvertAction(validActions[i].ActionType, ref actionType))
                    {
                        continue;
                    }
                }

                switch (actionType)
                {
                case AseOptionsActionType.ShowOption:
                {
                    TemplateOptionUIItem item = m_passCustomOptionsUI.Find(x => (x.Options.Name.Equals(validActions[i].ActionData)));
                    if (item != null)
                    {
                        if (isRefreshing)
                        {
                            string optionId = validActions[i].PassName + validActions[i].ActionData + "Option";
                            owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, true);
                        }
                        item.IsVisible = true;
                        if (!invertAction && validActions[i].ActionDataIdx > -1)
                        {
                            item.CurrentOption = validActions[i].ActionDataIdx;
                        }
                    }
                    else
                    {
                        Debug.LogFormat("Could not find Option {0} for action {1}", validActions[i].ActionData, validActions[i].ActionType);
                    }
                }
                break;

                case AseOptionsActionType.HideOption:
                {
                    TemplateOptionUIItem item = m_passCustomOptionsUI.Find(x => (x.Options.Name.Equals(validActions[i].ActionData)));
                    if (item != null)
                    {
                        bool flag = false;
                        if (isRefreshing)
                        {
                            string optionId = validActions[i].PassName + validActions[i].ActionData + "Option";
                            flag = owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, false);
                        }

                        item.IsVisible = false || flag;
                        if (!invertAction && validActions[i].ActionDataIdx > -1)
                        {
                            item.CurrentOption = validActions[i].ActionDataIdx;
                        }
                    }
                    else
                    {
                        Debug.LogFormat("Could not find Option {0} for action {1}", validActions[i].ActionData, validActions[i].ActionType);
                    }
                }
                break;

                case AseOptionsActionType.SetOption:
                {
                    TemplateOptionUIItem item = m_passCustomOptionsUI.Find(x => (x.Options.Name.Equals(validActions[i].ActionData)));
                    if (item != null)
                    {
                        item.CurrentOption = validActions[i].ActionDataIdx;
                    }
                    else
                    {
                        Debug.LogFormat("Could not find Option {0} for action {1}", validActions[i].ActionData, validActions[i].ActionType);
                    }
                }
                break;

                case AseOptionsActionType.HidePort:
                {
                    TemplateMultiPassMasterNode passMasterNode = owner;
                    if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName);
                    }

                    if (passMasterNode != null)
                    {
                        InputPort port = validActions[i].ActionDataIdx > -1 ?
                                         passMasterNode.GetInputPortByUniqueId(validActions[i].ActionDataIdx) :
                                         passMasterNode.InputPorts.Find(x => x.Name.Equals(validActions[i].ActionData));
                        if (port != null)
                        {
                            bool flag = false;
                            if (isRefreshing)
                            {
                                string optionId = validActions[i].PassName + port.Name;
                                flag = owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, false || port.IsConnected);
                            }

                            port.Visible = false || flag;
                            passMasterNode.SizeIsDirty = true;
                        }
                        else
                        {
                            Debug.LogFormat("Could not find port {0},{1} for action {2}", validActions[i].ActionDataIdx, validActions[i].ActionData, validActions[i].ActionType);
                        }
                    }
                    else
                    {
                        Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                    }
                }
                break;

                case AseOptionsActionType.ShowPort:
                {
                    TemplateMultiPassMasterNode passMasterNode = owner;
                    if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName);
                    }

                    if (passMasterNode != null)
                    {
                        InputPort port = validActions[i].ActionDataIdx > -1 ?
                                         passMasterNode.GetInputPortByUniqueId(validActions[i].ActionDataIdx) :
                                         passMasterNode.InputPorts.Find(x => x.Name.Equals(validActions[i].ActionData));
                        if (port != null)
                        {
                            if (isRefreshing)
                            {
                                string optionId = validActions[i].PassName + port.Name;
                                owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, true);
                            }

                            port.Visible = true;
                            passMasterNode.SizeIsDirty = true;
                        }
                        else
                        {
                            Debug.LogFormat("Could not find port {0},{1} for action {2}", validActions[i].ActionDataIdx, validActions[i].ActionData, validActions[i].ActionType);
                        }
                    }
                    else
                    {
                        Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                    }
                }
                break;

                case AseOptionsActionType.SetPortName:
                {
                    TemplateMultiPassMasterNode passMasterNode = owner;
                    if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName);
                    }

                    if (passMasterNode != null)
                    {
                        InputPort port = passMasterNode.GetInputPortByUniqueId(validActions[i].ActionDataIdx);
                        if (port != null)
                        {
                            port.Name = validActions[i].ActionData;
                            passMasterNode.SizeIsDirty = true;
                        }
                        else
                        {
                            Debug.LogFormat("Could not find port {0},{1} for action {2}", validActions[i].ActionDataIdx, validActions[i].ActionData, validActions[i].ActionType);
                        }
                    }
                    else
                    {
                        Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                    }
                }
                break;

                case AseOptionsActionType.SetDefine:
                {
                    //Debug.Log( "DEFINE "+validActions[ i ].ActionData );
                    if (validActions[i].AllPasses)
                    {
                        string defineValue = "#define " + validActions[i].ActionData;
                        if (isRefreshing)
                        {
                            owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(defineValue, true);
                        }
                        List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.MultiPassMasterNodes.NodesList;
                        int count = nodes.Count;
                        for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                        {
                            nodes[nodeIdx].OptionsDefineContainer.AddDefine(defineValue, false);
                        }
                    }
                    else if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        TemplateMultiPassMasterNode passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName);
                        if (passMasterNode != null)
                        {
                            string defineValue = "#define " + validActions[i].ActionData;
                            if (isRefreshing)
                            {
                                string optionsId = validActions[i].PassName + defineValue;
                                owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionsId, true);
                            }
                            passMasterNode.OptionsDefineContainer.AddDefine(defineValue, false);
                        }
                        else
                        {
                            Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                        }
                    }
                    else
                    {
                        uiItem.CheckOnExecute = true;
                    }
                }
                break;

                case AseOptionsActionType.RemoveDefine:
                {
                    //Debug.Log( "UNDEFINE " + validActions[ i ].ActionData );
                    if (validActions[i].AllPasses)
                    {
                        string defineValue = "#define " + validActions[i].ActionData;

                        bool flag = false;
                        if (isRefreshing)
                        {
                            flag = owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(defineValue, false);
                        }

                        if (!flag)
                        {
                            List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.MultiPassMasterNodes.NodesList;
                            int count = nodes.Count;
                            for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                            {
                                nodes[nodeIdx].OptionsDefineContainer.RemoveDefine(defineValue);
                            }
                        }
                    }
                    else if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        TemplateMultiPassMasterNode passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName);
                        if (passMasterNode != null)
                        {
                            string defineValue = "#define " + validActions[i].ActionData;
                            bool   flag        = false;
                            if (isRefreshing)
                            {
                                string optionId = validActions[i].PassName + defineValue;
                                flag = owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, false);
                            }
                            if (!flag)
                            {
                                passMasterNode.OptionsDefineContainer.RemoveDefine(defineValue);
                            }
                        }
                        else
                        {
                            Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                        }
                    }
                    else
                    {
                        uiItem.CheckOnExecute = false;
                    }
                }
                break;

                case AseOptionsActionType.SetUndefine:
                {
                    if (validActions[i].AllPasses)
                    {
                        string defineValue = "#undef " + validActions[i].ActionData;
                        if (isRefreshing)
                        {
                            owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(defineValue, true);
                        }
                        List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.MultiPassMasterNodes.NodesList;
                        int count = nodes.Count;
                        for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                        {
                            nodes[nodeIdx].OptionsDefineContainer.AddDefine(defineValue, false);
                        }
                    }
                    else if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        TemplateMultiPassMasterNode passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName);
                        if (passMasterNode != null)
                        {
                            string defineValue = "#undef " + validActions[i].ActionData;
                            if (isRefreshing)
                            {
                                string optionsId = validActions[i].PassName + defineValue;
                                owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionsId, true);
                            }
                            passMasterNode.OptionsDefineContainer.AddDefine(defineValue, false);
                        }
                        else
                        {
                            Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                        }
                    }
                    else
                    {
                        uiItem.CheckOnExecute = true;
                    }
                }
                break;

                case AseOptionsActionType.RemoveUndefine:
                {
                    if (validActions[i].AllPasses)
                    {
                        string defineValue = "#undef " + validActions[i].ActionData;
                        bool   flag        = false;
                        if (isRefreshing)
                        {
                            flag = owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(defineValue, false);
                        }

                        if (!flag)
                        {
                            List <TemplateMultiPassMasterNode> nodes = owner.ContainerGraph.MultiPassMasterNodes.NodesList;
                            int count = nodes.Count;
                            for (int nodeIdx = 0; nodeIdx < count; nodeIdx++)
                            {
                                nodes[nodeIdx].OptionsDefineContainer.RemoveDefine(defineValue);
                            }
                        }
                    }
                    else if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        TemplateMultiPassMasterNode passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName);
                        if (passMasterNode != null)
                        {
                            bool   flag        = false;
                            string defineValue = "#undef " + validActions[i].ActionData;
                            if (isRefreshing)
                            {
                                string optionId = validActions[i].PassName + defineValue;
                                flag = owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, false);
                            }

                            if (!flag)
                            {
                                passMasterNode.OptionsDefineContainer.RemoveDefine(defineValue);
                            }
                        }
                        else
                        {
                            Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                        }
                    }
                    else
                    {
                        uiItem.CheckOnExecute = false;
                    }
                }
                break;

                case AseOptionsActionType.ExcludePass:
                {
                    string optionId = validActions[i].ActionData + "Pass";
                    bool   flag     = isRefreshing ? owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, false) : false;
                    if (!flag)
                    {
                        owner.SetPassVisible(validActions[i].ActionData, false);
                    }
                }
                break;

                case AseOptionsActionType.IncludePass:
                {
                    string optionId = validActions[i].ActionData + "Pass";
                    owner.ContainerGraph.ParentWindow.TemplatesManagerInstance.SetOptionsValue(optionId, true);
                    owner.SetPassVisible(validActions[i].ActionData, true);
                }
                break;

                case AseOptionsActionType.SetPropertyOnPass:
                {
                    //Refresh happens on hotcode reload and shader load and in those situation
                    // The property own serialization handles its setup
                    if (isRefreshing)
                    {
                        continue;
                    }

                    if (!string.IsNullOrEmpty(validActions[i].PassName))
                    {
                        TemplateMultiPassMasterNode passMasterNode = owner.ContainerGraph.GetMasterNodeOfPass(validActions[i].PassName);
                        if (passMasterNode != null)
                        {
                            passMasterNode.SetPropertyActionFromItem(passMasterNode.PassModule, validActions[i]);
                        }
                        else
                        {
                            Debug.LogFormat("Could not find pass {0} for action {1} on {2}", validActions[i].PassName, validActions[i].ActionType, validActions[i].ActionData);
                        }
                    }
                    else
                    {
                        owner.SetPropertyActionFromItem(owner.PassModule, validActions[i]);
                    }
                }
                break;

                case AseOptionsActionType.SetPropertyOnSubShader:
                {
                    //Refresh happens on hotcode reload and shader load and in those situation
                    // The property own serialization handles its setup
                    if (isRefreshing)
                    {
                        continue;
                    }

                    owner.SetPropertyActionFromItem(owner.SubShaderModule, validActions[i]);
                }
                break;

                case AseOptionsActionType.SetShaderProperty:
                {
                    //This action is only check when shader is compiled over
                    //the TemplateMultiPassMasterNode via the on CheckPropertyChangesOnOptions() method
                }
                break;
                }
            }
        }
Beispiel #19
0
        public void SetupCustomOptionsFromTemplate(TemplateMultiPassMasterNode owner, bool newTemplate)
        {
            TemplateOptionsContainer customOptionsContainer = m_isSubShader ? owner.SubShader.CustomOptionsContainer : owner.Pass.CustomOptionsContainer;

            if (!newTemplate && customOptionsContainer.Body.Length == m_passCustomOptionsSizeCheck)
            {
                for (int i = 0; i < m_passCustomOptionsUI.Count; i++)
                {
                    if (m_passCustomOptionsUI[i].EmptyEvent)
                    {
                        if (m_isSubShader)
                        {
                            m_passCustomOptionsUI[i].OnActionPerformedEvt += owner.OnCustomSubShaderOptionSelected;
                        }
                        else
                        {
                            m_passCustomOptionsUI[i].OnActionPerformedEvt += owner.OnCustomPassOptionSelected;
                        }
                    }
                }
                return;
            }

            m_passCustomOptionsLabel = string.IsNullOrEmpty(customOptionsContainer.Name) ? CustomOptionsLabel : " " + customOptionsContainer.Name;

            for (int i = 0; i < m_passCustomOptionsUI.Count; i++)
            {
                m_passCustomOptionsUI[i].Destroy();
            }

            m_passCustomOptionsUI.Clear();
            m_passCustomOptionsUIDict.Clear();
            m_passCustomOptionsPorts.Clear();

            if (customOptionsContainer.Enabled)
            {
                m_passCustomOptionsSizeCheck = customOptionsContainer.Body.Length;
                for (int i = 0; i < customOptionsContainer.Options.Length; i++)
                {
                    switch (customOptionsContainer.Options[i].Type)
                    {
                    case AseOptionsType.Option:
                    {
                        TemplateOptionUIItem item = new TemplateOptionUIItem(customOptionsContainer.Options[i]);
                        if (m_isSubShader)
                        {
                            item.OnActionPerformedEvt += owner.OnCustomSubShaderOptionSelected;
                        }
                        else
                        {
                            item.OnActionPerformedEvt += owner.OnCustomPassOptionSelected;
                        }

                        m_passCustomOptionsUI.Add(item);
                        m_passCustomOptionsUIDict.Add(customOptionsContainer.Options[i].Id, item);
                    }
                    break;

                    case AseOptionsType.Port:
                    {
                        TemplateOptionPortItem item = new TemplateOptionPortItem(owner, customOptionsContainer.Options[i]);
                        m_passCustomOptionsPorts.Add(item);
                        //if( m_isSubShader )
                        //{
                        //	if( string.IsNullOrEmpty( customOptionsContainer.Options[ i ].Id ) )
                        //	{
                        //		//No pass name selected. inject on all passes
                        //		TemplateOptionPortItem item = new TemplateOptionPortItem( owner, customOptionsContainer.Options[ i ] );
                        //		m_passCustomOptionsPorts.Add( item );
                        //	}
                        //	else if( customOptionsContainer.Options[ i ].Id.Equals( owner.PassName ) )
                        //	{
                        //		TemplateOptionPortItem item = new TemplateOptionPortItem( owner, customOptionsContainer.Options[ i ] );
                        //		m_passCustomOptionsPorts.Add( item );
                        //	}
                        //}
                        //else
                        //{
                        //	TemplateOptionPortItem item = new TemplateOptionPortItem( owner, customOptionsContainer.Options[ i ] );
                        //	m_passCustomOptionsPorts.Add( item );
                        //}
                    }
                    break;
                    }
                }
            }
            else
            {
                m_passCustomOptionsSizeCheck = 0;
            }
        }