protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     object obj = m_Object.Value;
     string method = m_Method.Value;
     ArrayList arglist = new ArrayList();
     for (int i = 0; i < m_Args.Count; i++) {
         arglist.Add(m_Args[i].Value);
     }
     object[] args = arglist.ToArray();
     if (null != obj && !string.IsNullOrEmpty(method)) {
         Type t = obj as Type;
         if (null != t) {
             try {
                 t.InvokeMember(method, BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.NonPublic, null, null, args);
             } catch (Exception ex) {
                 GameFramework.LogSystem.Warn("Exception:{0}\n{1}", ex.Message, ex.StackTrace);
             }
         } else {
             t = obj.GetType();
             if (null != t) {
                 try {
                     t.InvokeMember(method, BindingFlags.Instance | BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.NonPublic, null, obj, args);
                 } catch (Exception ex) {
                     GameFramework.LogSystem.Warn("Exception:{0}\n{1}", ex.Message, ex.StackTrace);
                 }
             }
         }
     }
     return false;
 }
예제 #2
0
 protected override bool ExecCommand(StoryInstance instance, long delta, object iterator, object[] args)
 {
     Evaluate(instance, iterator, args);
     bool ret = true;
     while (ret) {
         if (m_CommandQueue.Count == 0) {
             if (m_Iterators.Count > 0) {
                 Prepare();
                 m_CurIterator = m_Iterators.Dequeue();
                 ret = true;
                 m_AlreadyExecute = true;
             } else {
                 ret = false;
             }
         } else {
             while (m_CommandQueue.Count > 0) {
                 IStoryCommand cmd = m_CommandQueue.Peek();
                 if (cmd.Execute(instance, delta, m_CurIterator, args)) {
                     break;
                 } else {
                     cmd.Reset();
                     m_CommandQueue.Dequeue();
                 }
             }
             ret = true;
             if (m_CommandQueue.Count > 0) {
                 break;
             }
         }
     }
     return ret;
 }
예제 #3
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     m_Format.Evaluate(instance, iterator, args);
     for (int i = 0; i < m_FormatArgs.Count; i++) {
         m_FormatArgs[i].Evaluate(instance, iterator, args);
     }
 }
예제 #4
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     if (!m_AlreadyExecute) {
         for (int i = 0; i < m_Conditions.Count; ++i) {
             m_Conditions[i].Evaluate(instance, iterator, args);
         }
     }
 }
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     string[] arglist = new string[m_MsgIds.Count];
     for (int i = 0; i < m_MsgIds.Count; i++) {
         arglist[i] = m_MsgIds[i].Value;
     }
     instance.ClearMessage(arglist);
     return false;
 }
예제 #6
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     string format = m_Format.Value;
     ArrayList arglist = new ArrayList();
     for (int i = 0; i < m_FormatArgs.Count; i++) {
         arglist.Add(m_FormatArgs[i].Value);
     }
     object[] args = arglist.ToArray();
     LogSystem.Warn(m_Format.Value, args);
     return false;
 }
예제 #7
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     if (m_Var.HaveValue && m_Value.HaveValue) {
         object obj = m_Var.Value;
         JsonData json = obj as JsonData;
         if (null != json) {
             json.Add(m_Value.Value);
         }
     }
     return false;
 }
예제 #8
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     if (m_HaveCondition && m_Condition.HaveValue && m_Condition.Value == 0) {
         return false;
     }
     int curTime = m_CurTime;
     m_CurTime += (int)delta;
     int val = m_Time.Value;
     if (curTime <= val && val < StoryValueHelper.c_MaxWaitCommandTime)
         return true;
     else
         return false;
 }
예제 #9
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     if (!m_AlreadyExecute) {
         if (m_Iterators.Count <= 0 && m_LoadedIterators.Count > 0) {
             for (int i = 0; i < m_LoadedIterators.Count; i++) {
                 m_LoadedIterators[i].Evaluate(instance, iterator, args);
             }
             for (int i = 0; i < m_LoadedIterators.Count; i++) {
                 m_Iterators.Enqueue(m_LoadedIterators[i].Value);
             }
         }
     }
 }
예제 #10
0
        public void NewCall(StoryInstance instance, object iterator, object[] args)
        {
            //command的执行不像函数,它支持类似协程的机制,允许暂时挂起,稍后继续,这意味着并非每次调用ExecCommand都对应语义上的一次过程调用
            //,因此栈的创建不能在ExecCommand里进行(事实上,在ExecCommand里无法区分本次执行是一次新的过程调用还是一次挂起后的继续执行)。

            StackElementInfo stackInfo = NewStackElementInfo();
            //调用实参部分需要在栈建立之前运算,结果需要记录在栈上
            for (int i = 0; i < m_LoadedArgs.Count; ++i) {
                stackInfo.m_Args.Add(m_LoadedArgs[i].Clone());
            }
            for (int i = 0; i < stackInfo.m_Args.Count; i++) {
                stackInfo.m_Args[i].Evaluate(instance, iterator, args);
            }
            //实参处理完,进入函数体执行,创建新的栈
            PushStack(instance, stackInfo);
        }
예제 #11
0
 protected override bool ExecCommand(StoryInstance instance, long delta, object iterator, object[] args)
 {
     bool ret = false;
     if (m_IfCommandQueue.Count == 0 && m_ElseCommandQueue.Count == 0 && !m_AlreadyExecute) {
         Evaluate(instance, iterator, args);
         bool isElse = true;
         for (int i = 0; i < m_Conditions.Count; ++i) {
             if (m_Conditions[i].Value != 0) {
                 PrepareIf(i);
                 isElse = false;
             }
         }
         if (isElse) {
             PrepareElse();
         }
         m_AlreadyExecute = true;
     }
     if (m_IfCommandQueue.Count > 0) {
         while (m_IfCommandQueue.Count > 0) {
             IStoryCommand cmd = m_IfCommandQueue.Peek();
             if (cmd.Execute(instance, delta, iterator, args)) {
                 ret = true;
                 break;
             } else {
                 cmd.Reset();
                 m_IfCommandQueue.Dequeue();
             }
         }
     }
     if (m_ElseCommandQueue.Count > 0) {
         while (m_ElseCommandQueue.Count > 0) {
             IStoryCommand cmd = m_ElseCommandQueue.Peek();
             if (cmd.Execute(instance, delta, iterator, args)) {
                 ret = true;
                 break;
             } else {
                 cmd.Reset();
                 m_ElseCommandQueue.Dequeue();
             }
         }
     }
     return ret;
 }
 protected override void Evaluate(StoryInstance instance, StoryMessageHandler handler, object iterator, object[] args)
 {
     m_FileName.Evaluate(instance, handler, iterator, args);
     m_Arguments.Evaluate(instance, handler, iterator, args);
 }
예제 #13
0
 private void PushStack(StoryInstance instance, StackElementInfo info)
 {
     if (m_Stack.Count <= 0) {
         m_TopStack = instance.StackVariables;
     }
     m_Stack.Push(info);
     instance.StackVariables = info.m_StackVariables;
 }
예제 #14
0
 protected override bool ExecCommand(StoryInstance instance, long delta, object iterator, object[] args)
 {
     bool ret = false;
     if (m_Stack.Count > 0) {
         StackElementInfo stackInfo = m_Stack.Peek();
         if (stackInfo.m_CommandQueue.Count == 0 && !stackInfo.m_AlreadyExecute) {
             Evaluate(instance, iterator, args);
             Prepare(stackInfo);
             stackInfo.m_AlreadyExecute = true;
         }
         if (stackInfo.m_CommandQueue.Count > 0) {
             while (stackInfo.m_CommandQueue.Count > 0) {
                 IStoryCommand cmd = stackInfo.m_CommandQueue.Peek();
                 if (cmd.Execute(instance, delta, iterator, args)) {
                     ret = true;
                     break;
                 } else {
                     cmd.Reset();
                     stackInfo.m_CommandQueue.Dequeue();
                 }
             }
         }
         if (!ret) {
             PopStack(instance);
             stackInfo.m_AlreadyExecute = false;
         }
     }
     return ret;
 }
예제 #15
0
 private void TryUpdateValue(StoryInstance instance)
 {
     m_HaveValue = true;
     m_Value     = UnityEngine.Time.timeScale;
 }
예제 #16
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     if (!m_AlreadyExecute) {
         if (m_Iterators.Count <= 0) {
             m_LoadedList.Evaluate(instance, iterator, args);
             foreach (object obj in m_LoadedList.Value) {
                 m_Iterators.Enqueue(obj);
             }
         }
     }
 }
예제 #17
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     if (m_Var.HaveValue && m_Key.HaveValue) {
         object obj = m_Var.Value;
         JsonData json = obj as JsonData;
         object key = m_Key.Value;
         if (null != json && null != key) {
             if (key is int && json.IsArray) {
                 IList list = json as IList;
                 if (null != list) {
                     list.RemoveAt((int)key);
                 }
             } else if (key is float && json.IsArray) {
                 IList list = json as IList;
                 if (null != list) {
                     list.RemoveAt((int)(float)key);
                 }
             } else if (key is string && json.IsObject) {
                 IDictionary dict = json as IDictionary;
                 dict.Remove((string)key);
             } else {
                 //error
             }
         }
     }
     return false;
 }
예제 #18
0
        public void Evaluate(StoryInstance instance, object iterator, object[] args)
        {
            m_HaveValue = false;
            m_Object.Evaluate(instance, iterator, args);
            m_Method.Evaluate(instance, iterator, args);

            bool canCalc = true;

            if (!m_Object.HaveValue || !m_Method.HaveValue)
            {
                canCalc = false;
            }
            if (canCalc)
            {
                m_HaveValue = true;
                object obj    = m_Object.Value;
                string method = m_Method.Value;
                if (null != obj && !string.IsNullOrEmpty(method))
                {
                    object      v    = 0;
                    IEnumerable list = obj as IEnumerable;
                    if (null != list)
                    {
                        if (method == "orderby" || method == "orderbydesc")
                        {
                            bool          desc    = method == "orderbydesc";
                            List <object> results = new List <object>();
                            IEnumerator   enumer  = list.GetEnumerator();
                            while (enumer.MoveNext())
                            {
                                object val = enumer.Current;
                                results.Add(val);
                            }
                            results.Sort((object o1, object o2) => {
                                object r1 = null;
                                for (int i = 0; i < m_Args.Count; i++)
                                {
                                    m_Args[i].Evaluate(instance, o1, args);
                                    r1 = m_Args[i].Value;
                                }
                                object r2 = null;
                                for (int i = 0; i < m_Args.Count; i++)
                                {
                                    m_Args[i].Evaluate(instance, o2, args);
                                    r2 = m_Args[i].Value;
                                }
                                string rs1 = r1 as string;
                                string rs2 = r2 as string;
                                int r      = 0;
                                if (null != rs1 && null != rs2)
                                {
                                    r = rs1.CompareTo(rs2);
                                }
                                else
                                {
                                    float rd1 = StoryValueHelper.CastTo <float>(r1);
                                    float rd2 = StoryValueHelper.CastTo <float>(r2);
                                    r         = rd1.CompareTo(rd2);
                                }
                                if (desc)
                                {
                                    r = -r;
                                }
                                return(r);
                            });
                            v = results;
                        }
                        else if (method == "where")
                        {
                            List <object> results = new List <object>();
                            IEnumerator   enumer  = list.GetEnumerator();
                            while (enumer.MoveNext())
                            {
                                object val = enumer.Current;

                                object r = null;
                                for (int i = 0; i < m_Args.Count; i++)
                                {
                                    m_Args[i].Evaluate(instance, val, args);
                                    r = m_Args[i].Value;
                                }
                                if (StoryValueHelper.CastTo <int>(r) != 0)
                                {
                                    results.Add(val);
                                }
                            }
                            v = results;
                        }
                        else if (method == "top")
                        {
                            object r = null;
                            for (int i = 0; i < m_Args.Count; i++)
                            {
                                m_Args[i].Evaluate(instance, iterator, args);
                                r = m_Args[i].Value;
                            }
                            int           ct      = StoryValueHelper.CastTo <int>(r);
                            List <object> results = new List <object>();
                            IEnumerator   enumer  = list.GetEnumerator();
                            while (enumer.MoveNext())
                            {
                                object val = enumer.Current;
                                if (ct > 0)
                                {
                                    results.Add(val);
                                    --ct;
                                }
                            }
                            v = results;
                        }
                    }
                    m_Value = v;
                }
                else
                {
                    m_Value = null;
                }
            }

            for (int i = 0; i < m_Args.Count; i++)
            {
                m_Args[i].Evaluate(instance, iterator, args);
            }
        }
예제 #19
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     string _namespace = instance.Namespace;
     if (string.IsNullOrEmpty(_namespace)) {
         for (int i = 0; i < m_MsgIds.Count; i++) {
             instance.PauseMessageHandler(m_MsgIds[i].Value, false);
         }
     } else {
         for (int i = 0; i < m_MsgIds.Count; i++) {
             instance.PauseMessageHandler(string.Format("{0}:{1}", _namespace, m_MsgIds[i].Value), false);
         }
     }
     return false;
 }
 private void TryUpdateValue(StoryInstance instance)
 {
     m_HaveValue = true;
     m_Value     = 0;
 }
        protected override bool ExecCommand(StoryInstance instance, StoryMessageHandler handler, long delta)
        {
            object    obj       = m_Object.Value;
            object    methodObj = m_Method.Value;
            string    method    = methodObj as string;
            ArrayList arglist   = new ArrayList();

            for (int i = 0; i < m_Args.Count; i++)
            {
                arglist.Add(m_Args[i].Value);
            }
            object[] args = arglist.ToArray();
            if (null != obj)
            {
                if (null != method)
                {
                    IDictionary dict = obj as IDictionary;
                    if (null != dict && null == obj.GetType().GetMethod(method, BindingFlags.Instance | BindingFlags.Static | BindingFlags.SetField | BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.NonPublic))
                    {
                        dict[method] = args[0];
                    }
                    else
                    {
                        Type t = obj as Type;
                        if (null != t)
                        {
                            try {
                                BindingFlags flags = BindingFlags.Static | BindingFlags.SetField | BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.NonPublic;
                                GameFramework.Converter.CastArgsForSet(t, method, flags, args);
                                t.InvokeMember(method, flags, null, null, args);
                            } catch (Exception ex) {
                                GameFramework.LogSystem.Warn("DotnetSet {0}.{1} Exception:{2}\n{3}", t.Name, method, ex.Message, ex.StackTrace);
                            }
                        }
                        else
                        {
                            t = obj.GetType();
                            if (null != t)
                            {
                                try {
                                    BindingFlags flags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.SetField | BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.NonPublic;
                                    GameFramework.Converter.CastArgsForSet(t, method, flags, args);
                                    t.InvokeMember(method, flags, null, obj, args);
                                } catch (Exception ex) {
                                    GameFramework.LogSystem.Warn("DotnetSet {0}.{1} Exception:{2}\n{3}", t.Name, method, ex.Message, ex.StackTrace);
                                }
                            }
                        }
                    }
                }
                else
                {
                    IDictionary dict = obj as IDictionary;
                    if (null != dict && dict.Contains(methodObj))
                    {
                        dict[methodObj] = args[0];
                    }
                    else
                    {
                        IList list = obj as IList;
                        if (null != list && methodObj is int)
                        {
                            int index = (int)methodObj;
                            if (index >= 0 && index < list.Count)
                            {
                                list[index] = args[0];
                            }
                        }
                    }
                }
            }
            return(false);
        }
예제 #22
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     int ct = 0;
     string _namespace = instance.Namespace;
     if (string.IsNullOrEmpty(_namespace)) {
         for (int i = 0; i < m_MsgIds.Count; i++) {
             ct += instance.CountMessage(m_MsgIds[i].Value);
         }
     } else {
         for (int i = 0; i < m_MsgIds.Count; i++) {
             ct += instance.CountMessage(string.Format("{0}:{1}", _namespace, m_MsgIds[i].Value));
         }
     }
     bool ret = false;
     if (ct <= 0) {
         string varName = m_SetVar.Value;
         object varVal = m_SetVal.Value;
         instance.SetVariable(varName, varVal);
     } else {
         int curTime = m_CurTime;
         m_CurTime += (int)delta;
         if (curTime <= m_TimeoutVal.Value) {
             ret = true;
         } else {
             string varName = m_TimeoutSetVar.Value;
             object varVal = m_TimeoutSetVal.Value;
             instance.SetVariable(varName, varVal);
         }
     }
     return ret;
 }
예제 #23
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     for (int i = 0; i < m_MsgIds.Count; i++) {
         m_MsgIds[i].Evaluate(instance, iterator, args);
     }
     if (m_HaveSet) {
         m_SetVar.Evaluate(instance, iterator, args);
         m_SetVal.Evaluate(instance, iterator, args);
         m_TimeoutVal.Evaluate(instance, iterator, args);
         m_TimeoutSetVar.Evaluate(instance, iterator, args);
         m_TimeoutSetVal.Evaluate(instance, iterator, args);
     }
 }
예제 #24
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     if (m_StartTime <= 0) {
         long startTime = GameFramework.TimeUtility.GetLocalMilliseconds();
         m_StartTime = startTime;
     }
     bool triggered = false;
     string _namespace = instance.Namespace;
     if (string.IsNullOrEmpty(_namespace)) {
         for (int i = 0; i < m_MsgIds.Count; i++) {
             long time = instance.GetMessageTriggerTime(m_MsgIds[i].Value);
             if (time > m_StartTime) {
                 triggered = true;
                 break;
             }
         }
     } else {
         for (int i = 0; i < m_MsgIds.Count; i++) {
             long time = instance.GetMessageTriggerTime(string.Format("{0}:{1}", _namespace, m_MsgIds[i].Value));
             if (time > m_StartTime) {
                 triggered = true;
                 break;
             }
         }
     }
     bool ret = false;
     if (triggered) {
         string varName = m_SetVar.Value;
         object varVal = m_SetVal.Value;
         instance.SetVariable(varName, varVal);
     } else {
         int curTime = m_CurTime;
         m_CurTime += (int)delta;
         if (curTime <= m_TimeoutVal.Value) {
             ret = true;
         } else {
             string varName = m_TimeoutSetVar.Value;
             object varVal = m_TimeoutSetVal.Value;
             instance.SetVariable(varName, varVal);
         }
     }
     return ret;
 }
예제 #25
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     int ct = 0;
     for (int i = 0; i < m_MsgIds.Count; i++) {
         ct += instance.CountMessage(m_MsgIds[i].Value);
     }
     bool ret = false;
     if (ct <= 0) {
         string varName = m_SetVar.Value;
         object varVal = m_SetVal.Value;
         instance.SetVariable(varName, varVal);
     } else {
         int curTime = m_CurTime;
         m_CurTime += (int)delta;
         if (curTime <= m_TimeoutVal.Value) {
             ret = true;
         } else {
             string varName = m_TimeoutSetVar.Value;
             object varVal = m_TimeoutSetVal.Value;
             instance.SetVariable(varName, varVal);
         }
     }
     return ret;
 }
예제 #26
0
 private void TryUpdateValue(StoryInstance instance)
 {
     m_HaveValue = true;
     m_Value     = ClientInfo.Instance.RoleData.HeroId;
 }
예제 #27
0
 public void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     m_HaveValue = false;
     m_String.Evaluate(instance, iterator, args);
     TryUpdateValue();
 }
        protected override bool ExecCommand(StoryInstance instance, StoryMessageHandler handler, long delta)
        {
            object    obj       = m_Object.Value;
            object    methodObj = m_Method.Value;
            string    method    = methodObj as string;
            ArrayList arglist   = new ArrayList();

            for (int i = 0; i < m_Args.Count; i++)
            {
                arglist.Add(m_Args[i].Value);
            }
            object[] args = arglist.ToArray();
            if (null != obj)
            {
                if (null != method)
                {
                    IDictionary dict = obj as IDictionary;
                    if (null != dict && dict.Contains(method) && dict[method] is Delegate)
                    {
                        var d = dict[method] as Delegate;
                        if (null != d)
                        {
                            d.DynamicInvoke(args);
                        }
                    }
                    else
                    {
                        Type t = obj as Type;
                        if (null != t)
                        {
                            try {
                                BindingFlags flags = BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.NonPublic;
                                GameFramework.Converter.CastArgsForCall(t, method, flags, args);
                                t.InvokeMember(method, flags, null, null, args);
                            } catch (Exception ex) {
                                GameFramework.LogSystem.Warn("DotnetExec {0}.{1} Exception:{2}\n{3}", t.Name, method, ex.Message, ex.StackTrace);
                            }
                        }
                        else
                        {
                            t = obj.GetType();
                            if (null != t)
                            {
                                try {
                                    BindingFlags flags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.NonPublic;
                                    GameFramework.Converter.CastArgsForCall(t, method, flags, args);
                                    t.InvokeMember(method, flags, null, obj, args);
                                } catch (Exception ex) {
                                    GameFramework.LogSystem.Warn("DotnetExec {0}.{1} Exception:{2}\n{3}", t.Name, method, ex.Message, ex.StackTrace);
                                }
                            }
                        }
                    }
                }
                else
                {
                    IDictionary dict = obj as IDictionary;
                    if (null != dict && dict.Contains(methodObj))
                    {
                        var d = dict[methodObj] as Delegate;
                        if (null != d)
                        {
                            d.DynamicInvoke(args);
                        }
                    }
                    else
                    {
                        IEnumerable enumer = obj as IEnumerable;
                        if (null != enumer && methodObj is int)
                        {
                            int index = (int)methodObj;
                            var e     = enumer.GetEnumerator();
                            for (int i = 0; i <= index; ++i)
                            {
                                e.MoveNext();
                            }
                            var d = e.Current as Delegate;
                            if (null != d)
                            {
                                d.DynamicInvoke(args);
                            }
                        }
                    }
                }
            }
            return(false);
        }
예제 #29
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     if (m_Var.HaveValue && m_Key.HaveValue && m_Value.HaveValue) {
         object obj = m_Var.Value;
         JsonData json = obj as JsonData;
         object key = m_Key.Value;
         if (null != json && null != key) {
             if (key is int) {
                 json[(int)key] = ToJsonData(m_Value.Value);
             } else if (key is float) {
                 json[(int)(float)key] = ToJsonData(m_Value.Value);
             } else if (key is string) {
                 json[(string)key] = ToJsonData(m_Value.Value);
             } else {
                 //error
             }
         }
     }
     return false;
 }
예제 #30
0
        public void Evaluate(StoryInstance instance, object iterator, object[] args)
        {
            m_HaveValue = false;

            TryUpdateValue(instance);
        }
예제 #31
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     m_Var.Evaluate(instance, iterator, args);
     m_Key.Evaluate(instance, iterator, args);
 }
예제 #32
0
 public void Analyze(StoryInstance instance)
 {
 }
예제 #33
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     if (!m_AlreadyExecute) {
         m_Count.Evaluate(instance, iterator, args);
     }
 }
예제 #34
0
 public void Evaluate(StoryInstance instance, StoryMessageHandler handler, object iterator, object[] args)
 {
     m_HaveValue = false;
     m_X.Evaluate(instance, handler, iterator, args);
     TryUpdateValue();
 }
예제 #35
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     m_Cmd.NewCall(instance, iterator, args);
 }
예제 #36
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     if (m_VarName.StartsWith("@@"))
     {
         if (null != instance.GlobalVariables)
         {
             if (instance.GlobalVariables.ContainsKey(m_VarName))
             {
                 object oval = instance.GlobalVariables[m_VarName];
                 if (oval is int)
                 {
                     int ov = StoryValueHelper.CastTo <int>(oval);
                     if (m_ParamNum > 1 && m_Value.HaveValue)
                     {
                         int v = StoryValueHelper.CastTo <int>(m_Value.Value);
                         ov += v;
                         instance.GlobalVariables[m_VarName] = ov;
                     }
                     else
                     {
                         ++ov;
                         instance.GlobalVariables[m_VarName] = ov;
                     }
                 }
                 else
                 {
                     float ov = StoryValueHelper.CastTo <float>(oval);
                     if (m_ParamNum > 1 && m_Value.HaveValue)
                     {
                         float v = StoryValueHelper.CastTo <float>(m_Value.Value);
                         ov += v;
                         instance.GlobalVariables[m_VarName] = ov;
                     }
                     else
                     {
                         ++ov;
                         instance.GlobalVariables[m_VarName] = ov;
                     }
                 }
             }
         }
     }
     else if (m_VarName.StartsWith("@"))
     {
         if (instance.LocalVariables.ContainsKey(m_VarName))
         {
             object oval = instance.LocalVariables[m_VarName];
             if (oval is int)
             {
                 int ov = StoryValueHelper.CastTo <int>(oval);
                 if (m_ParamNum > 1 && m_Value.HaveValue)
                 {
                     int v = StoryValueHelper.CastTo <int>(m_Value.Value);
                     ov += v;
                     instance.LocalVariables[m_VarName] = ov;
                 }
                 else
                 {
                     ++ov;
                     instance.LocalVariables[m_VarName] = ov;
                 }
             }
             else
             {
                 float ov = StoryValueHelper.CastTo <float>(oval);
                 if (m_ParamNum > 1 && m_Value.HaveValue)
                 {
                     float v = StoryValueHelper.CastTo <float>(m_Value.Value);
                     ov += v;
                     instance.LocalVariables[m_VarName] = ov;
                 }
                 else
                 {
                     ++ov;
                     instance.LocalVariables[m_VarName] = ov;
                 }
             }
         }
     }
     else if (m_VarName.StartsWith("$"))
     {
         if (instance.StackVariables.ContainsKey(m_VarName))
         {
             object oval = instance.StackVariables[m_VarName];
             if (oval is int)
             {
                 int ov = StoryValueHelper.CastTo <int>(oval);
                 if (m_ParamNum > 1 && m_Value.HaveValue)
                 {
                     int v = StoryValueHelper.CastTo <int>(m_Value.Value);
                     ov += v;
                     instance.StackVariables[m_VarName] = ov;
                 }
                 else
                 {
                     ++ov;
                     instance.StackVariables[m_VarName] = ov;
                 }
             }
             else
             {
                 float ov = StoryValueHelper.CastTo <float>(oval);
                 if (m_ParamNum > 1 && m_Value.HaveValue)
                 {
                     float v = StoryValueHelper.CastTo <float>(m_Value.Value);
                     ov += v;
                     instance.StackVariables[m_VarName] = ov;
                 }
                 else
                 {
                     ++ov;
                     instance.StackVariables[m_VarName] = ov;
                 }
             }
         }
     }
     return(false);
 }
예제 #37
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     if (m_Stack.Count > 0) {
         StackElementInfo stackInfo = m_Stack.Peek();
         for (int i = 0; i < m_ArgNames.Count && i < stackInfo.m_Args.Count; ++i) {
             instance.SetVariable(m_ArgNames[i], stackInfo.m_Args[i].Value);
         }
     }
 }
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     m_FileName.Evaluate(instance, iterator, args);
     m_Arguments.Evaluate(instance, iterator, args);
 }
예제 #39
0
 private void PopStack(StoryInstance instance)
 {
     if (m_Stack.Count > 0) {
         m_Stack.Pop();
         if (m_Stack.Count > 0) {
             StackElementInfo info = m_Stack.Peek();
             instance.StackVariables = info.m_StackVariables;
         } else {
             instance.StackVariables = m_TopStack;
         }
     }
 }
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     try {
         Process.Start(m_FileName.Value, m_Arguments.Value);
     } catch (Exception ex) {
         GameFramework.LogSystem.Warn("Exception:{0}\n{1}", ex.Message, ex.StackTrace);
     }
     return false;
 }
예제 #41
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     m_Cmd.NewCall(instance, iterator, args);
 }
예제 #42
0
        protected override void Evaluate(StoryInstance instance, StoryMessageHandler handler, object iterator, object[] args)
        {
            m_Var.Evaluate(instance, handler, iterator, args);

        }
예제 #43
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     m_Time.Evaluate(instance, iterator, args);
     if (m_HaveCondition)
         m_Condition.Evaluate(instance, iterator, args);
 }
예제 #44
0
 private void TryUpdateValue(StoryInstance instance)
 {
     m_HaveValue = true;
     m_Value     = ClientInfo.Instance.RoleData.Members.Count;
 }
예제 #45
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     instance.IsTerminated = true;
     return false;
 }
예제 #46
0
 protected override void Evaluate(StoryInstance instance, object iterator, object[] args)
 {
     m_Value.Evaluate(instance, iterator, args);
 }