예제 #1
0
        public IStoryValue <object> Clone()
        {
            StoryValue obj = new StoryValue();

            obj.m_ArgIndex   = m_ArgIndex;
            obj.m_LocalName  = m_LocalName;
            obj.m_GlobalName = m_GlobalName;
            if (null != m_Proxy)
            {
                obj.m_Proxy = m_Proxy.Clone();
            }
            obj.m_HaveValue = m_HaveValue;
            obj.m_Value     = m_Value;
            return(obj);
        }
 public bool Init(ScriptableData.ScriptableDataInfo config)
 {
     bool ret = false;
     ScriptableData.FunctionData story = config.First;
     if (story != null && (story.GetId() == "story" || story.GetId() == "script"))
     {
         ret = true;
         //参数
         ScriptableData.CallData callData = story.Call;
         if (callData != null && callData.HaveParam())
         {
             //第一个参数是剧情的id
             m_iStoryId = int.Parse(callData.GetParamId(0));
         }
         foreach (var info in story.Statements)
         {
             if (info.GetId() == "local")
             {
                 ScriptableData.FunctionData sectionData = info as ScriptableData.FunctionData;
                 if (null != sectionData)
                 {
                     foreach (ScriptableData.ISyntaxComponent def in sectionData.Statements)
                     {
                         ScriptableData.CallData defData = def as ScriptableData.CallData;
                         if (null != defData && defData.HaveId() && defData.HaveParam())
                         {
                             string id = defData.GetId();
                             if (id.StartsWith("@") && !id.StartsWith("@@"))
                             {
                                 StoryValue val = new StoryValue();
                                 val.InitFromDsl(defData.GetParam(0));
                                 if (!m_dicLocalVariables.ContainsKey(id))
                                 {
                                     m_dicLocalVariables.Add(id, val.Value);
                                 }
                                 else
                                 {
                                     m_dicLocalVariables[id] = val.Value;
                                 }
                             }
                         }
                     }
                 }
                 else
                 {
                     Debug.LogError("剧情" + m_iStoryId + "DSL语法,必须是个函数");
                 }
             }
             else if (info.GetId() == "onmessage")
             {
                 ScriptableData.FunctionData sectionData = info as ScriptableData.FunctionData;
                 if (null != sectionData)
                 {
                     StoryMessageHandler handler = new StoryMessageHandler();
                     handler.Load(sectionData);
                     m_listMessageHandlers.Add(handler);
                 }
                 else
                 {
                     Debug.LogError("剧情" + m_iStoryId + "DSL语法,必须是个函数");
                 }
             }
             else
             {
                 Debug.LogError("StoryInstance::Init,不知道DSL语法部分:" + info.GetId());
             }
         }
     }
     else
     {
         Debug.LogError("StoryInstance::Init,不是一个DSL语法");
     }
     return ret;
 }