예제 #1
0
        NodeBase CreateActionNode(XMLRules.ActionType action)
        {
            NodeBase result = null;

            if (action.HasChangeState())
            {
                NodeBase rhsNode = CreateArithmeticNode(action.GetChangeState().GetExpression());

                result = new SetNode(m_Container);
                ((SetNode)result).m_VariableName = action.GetChangeState().GetVariable().GetName().Value;
                result.AddChild(rhsNode);
            }
            else if (action.HasCallScript())
            {
                result = new CallNode(m_Container);

                string scriptName = action.GetCallScript().GetScriptName().Value;

                List <ScriptDescriptor> actionList = ScriptManager.GetScriptsByType(typeof(BaseAction));

                foreach (ScriptDescriptor script in actionList)
                {
                    if (scriptName == script.m_Type.ToString())
                    {
                        BaseScript newScript = null;
                        BaseScript.Load(action.GetCallScript(), m_Container.m_Editor.m_TargetObject, out newScript);

                        ((CallNode)result).m_Script = (BaseAction)newScript;
                        break;
                    }
                }
            }

            return(result);
        }
예제 #2
0
        public XMLRules.ActionType MakeCallScriptAction(CallNode callNode)
        {
            XMLRules.ActionType action = new XMLRules.ActionType();

            ScriptReference scriptReference;

            BaseScript.Save(callNode.m_Script, out scriptReference);

            action.AddCallScript(scriptReference);

            return(action);
        }
예제 #3
0
        XMLRules.ActionType MakeAction(NodeBase node)
        {
            if (node.m_NodeType == NodeType.SETVARIABLE)
            {
                SetNode setNode = (SetNode)node;

                if (m_State != null)
                {
                    Variable variable;

                    if (setNode.m_Children.Count >= 1)
                    {
                        if (m_State.GetVariable(setNode.m_VariableName, out variable))
                        {
                            ArithmeticExpression value = CreateArithmeticExpression(setNode.m_Children[0]);
                            return(m_RuleMaker.MakeStateChangeAction(setNode.m_VariableName, variable.m_Type, value));
                        }
                        else
                        {
                            Debug.LogError("Invalid assignment: variable " + setNode.m_VariableName + " not found");
                        }
                    }
                    else
                    {
                        Debug.LogError("Invalid assignment: no value was specified");
                    }
                }
            }
            else if (node.m_NodeType == NodeType.CALLSCRIPT)
            {
                CallNode callNode = (CallNode)node;
                return(m_RuleMaker.MakeCallScriptAction(callNode));
            }

            return(null);
        }
예제 #4
0
		NodeBase CreateActionNode(XMLRules.ActionType action)
		{
			NodeBase result = null;

			if (action.HasChangeState()) 
			{
				NodeBase rhsNode = CreateArithmeticNode(action.GetChangeState().GetExpression());

				result = new SetNode(m_Container);
				((SetNode)result).m_VariableName = action.GetChangeState().GetVariable().GetName().Value;
				result.AddChild(rhsNode);
			} 
			else if (action.HasCallScript()) 
			{
				result = new CallNode(m_Container);

				string scriptName = action.GetCallScript().GetScriptName().Value;

				List<ScriptDescriptor> actionList = ScriptManager.GetScriptsByType(typeof(BaseAction));

                foreach (ScriptDescriptor script in actionList)
				{
					if (scriptName == script.m_Type.ToString())
					{
                        BaseScript newScript = null;
                        BaseScript.Load(action.GetCallScript(), m_Container.m_Editor.m_TargetObject, out newScript);

                        ((CallNode)result).m_Script = (BaseAction)newScript;
						break;
					}
				}
			}

			return result;
		}
예제 #5
0
		public XMLRules.ActionType MakeCallScriptAction(CallNode callNode)
        {
			XMLRules.ActionType action = new XMLRules.ActionType();
            
            ScriptReference scriptReference;

            BaseScript.Save(callNode.m_Script, out scriptReference);
            
            action.AddCallScript(scriptReference);

            return action;
        }