Esempio n. 1
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);
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
        public void Evaluate(StoryInstance instance, StoryMessageHandler handler, BoxedValue iterator, BoxedValueList args)
        {
            var stackInfo = StoryLocalInfo.New();
            var runtime   = StoryRuntime.New();

            //调用实参部分需要在栈建立之前运算,结果需要记录在栈上
            for (int i = 0; i < m_LoadedArgs.Count; ++i)
            {
                stackInfo.Args.Add(m_LoadedArgs[i].Clone());
            }
            foreach (var pair in m_LoadedOptArgs)
            {
                stackInfo.OptArgs.Add(pair.Key, pair.Value.Clone());
            }
            runtime.Arguments          = instance.NewBoxedValueList();
            runtime.Arguments.Capacity = stackInfo.Args.Count;
            for (int i = 0; i < stackInfo.Args.Count; i++)
            {
                stackInfo.Args[i].Evaluate(instance, handler, iterator, args);
                runtime.Arguments.Add(stackInfo.Args[i].Value);
            }
            runtime.Iterator = stackInfo.Args.Count;
            foreach (var pair in stackInfo.OptArgs)
            {
                pair.Value.Evaluate(instance, handler, iterator, args);
            }
            //实参处理完,进入函数体执行,创建新的栈
            PushStack(instance, handler, stackInfo, runtime);
            try {
                for (int i = 0; i < m_ArgNames.Count; ++i)
                {
                    if (i < stackInfo.Args.Count)
                    {
                        instance.SetVariable(m_ArgNames[i], stackInfo.Args[i].Value);
                    }
                    else
                    {
                        instance.SetVariable(m_ArgNames[i], BoxedValue.NullObject);
                    }
                }
                foreach (var pair in stackInfo.OptArgs)
                {
                    instance.SetVariable(pair.Key, pair.Value.Value);
                }
                Prepare(runtime);
                stackInfo.HaveValue = true;
                runtime.Tick(instance, handler, long.MaxValue);
                BoxedValue val;
                instance.TryGetVariable(m_ReturnName, out val);
                stackInfo.Value = val;
            } finally {
                instance.RecycleBoxedValueList(runtime.Arguments);
                PopStack(instance, handler);
            }
        }
        protected override bool ExecCommand(StoryInstance instance, long delta)
        {
            bool   triggered = false;
            string name      = m_Name.Value;
            float  radius    = m_Radius.Value;
            string type      = m_Type.Value;
            string eventName = m_EventName.Value;

            UnityEngine.GameObject obj = UnityEngine.GameObject.Find(name);
            if (null != obj)
            {
                UnityEngine.Vector3 pos = obj.transform.position;
                if (type == "myself")
                {
                    EntityViewModel view = EntityController.Instance.GetEntityViewById(ClientModule.Instance.LeaderID);
                    if (null != view && null != view.Actor)
                    {
                        if ((view.Actor.transform.position - pos).sqrMagnitude < radius * radius)
                        {
                            GfxStorySystem.Instance.SendMessage(eventName, name, radius, type);
                            triggered = true;
                        }
                    }
                }
                else if (type == "anyenemy" || type == "anyfriend")
                {
                    EntityInfo myself = ClientModule.Instance.GetEntityById(ClientModule.Instance.LeaderID);
                    ClientModule.Instance.KdTree.Query(pos.x, pos.y, pos.z, radius, (float distSqr, KdTreeObject kdObj) => {
                        if (type == "anyenemy" && EntityInfo.GetRelation(myself, kdObj.Object) == CharacterRelation.RELATION_ENEMY ||
                            type == "anyfriend" && EntityInfo.GetRelation(myself, kdObj.Object) == CharacterRelation.RELATION_FRIEND)
                        {
                            GfxStorySystem.Instance.SendMessage(eventName, name, radius, type);
                            triggered = true;
                            return(false);
                        }
                        return(true);
                    });
                }
            }
            string varName = m_SetVar.Value;
            object varVal  = m_SetVal.Value;
            object elseVal = m_ElseSetVal.Value;

            if (triggered)
            {
                instance.SetVariable(varName, varVal);
            }
            else
            {
                instance.SetVariable(varName, elseVal);
            }
            return(false);
        }
Esempio n. 5
0
        protected override bool ExecCommand(StoryInstance instance, StoryMessageHandler handler, long delta, BoxedValue iterator, BoxedValueList args)
        {
            var runtime = handler.PeekRuntime();

            if (runtime.CompositeReentry)
            {
                return(false);
            }
            bool ret       = false;
            var  stackInfo = handler.PeekLocalInfo();

            for (int i = 0; i < m_ArgNames.Count; ++i)
            {
                if (i < stackInfo.Args.Count)
                {
                    instance.SetVariable(m_ArgNames[i], stackInfo.Args[i].Value);
                }
                else
                {
                    instance.SetVariable(m_ArgNames[i], BoxedValue.NullObject);
                }
            }
            foreach (var pair in stackInfo.OptArgs)
            {
                instance.SetVariable(pair.Key, pair.Value.Value);
            }
            Prepare(handler);
            runtime                    = handler.PeekRuntime();
            runtime.Arguments          = instance.NewBoxedValueList();
            runtime.Arguments.Capacity = stackInfo.Args.Count;
            for (int i = 0; i < stackInfo.Args.Count; i++)
            {
                runtime.Arguments.Add(stackInfo.Args[i].Value);
            }
            runtime.Iterator = stackInfo.Args.Count;
            //没有wait之类命令直接执行
            runtime.Tick(instance, handler, delta);
            instance.RecycleBoxedValueList(runtime.Arguments);
            if (runtime.CommandQueue.Count == 0)
            {
                handler.PopRuntime(instance);
            }
            else
            {
                //遇到wait命令,跳出执行,之后直接在StoryMessageHandler里执行栈顶的命令队列(降低开销)
                ret = true;
            }
            return(ret);
        }
Esempio n. 6
0
        protected override bool ExecCommand(StoryInstance instance, StoryMessageHandler handler, long delta)
        {
            Scene scene = instance.Context as Scene;

            if (null != scene)
            {
                bool    triggered = false;
                Vector3 pos       = m_Pos.Value;
                float   radius    = m_Radius.Value;
                string  type      = m_Type.Value;
                string  eventName = m_EventName.Value;
                if (type == "user")
                {
                    scene.KdTree.QueryWithFunc(pos, radius, (float distSqr, KdTreeObject kdObj) => {
                        if (kdObj.Object.EntityType != (int)EntityTypeEnum.Hero)
                        {
                            scene.StorySystem.SendMessage(eventName, pos, radius, type);
                            triggered = true;
                            return(false);
                        }
                        return(true);
                    });
                }
                else if (type == "npc")
                {
                    scene.KdTree.QueryWithFunc(pos, radius, (float distSqr, KdTreeObject kdObj) => {
                        if (kdObj.Object.EntityType != (int)EntityTypeEnum.Hero)
                        {
                            scene.StorySystem.SendMessage(eventName, pos, radius, type);
                            triggered = true;
                            return(false);
                        }
                        return(true);
                    });
                }
                string varName = m_SetVar.Value;
                var    varVal  = m_SetVal.Value;
                var    elseVal = m_ElseSetVal.Value;
                if (triggered)
                {
                    instance.SetVariable(varName, varVal);
                }
                else
                {
                    instance.SetVariable(varName, elseVal);
                }
            }
            return(false);
        }
Esempio n. 7
0
        public void Evaluate(StoryInstance instance, object iterator, object[] args)
        {
            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);
            try {
                for (int i = 0; i < m_ArgNames.Count && i < stackInfo.m_Args.Count; ++i)
                {
                    instance.SetVariable(m_ArgNames[i], stackInfo.m_Args[i].Value);
                }
                Prepare(stackInfo);
                stackInfo.m_HaveValue = true;
                for (int i = 0; i < stackInfo.m_Commands.Count; ++i)
                {
                    //函数调用命令需要忽略其中的wait指令(从而不会出现“挂起-恢复”行为),所以这里传的delta值是一个很大的值,目的是为了让wait直接结束
                    stackInfo.m_Commands[i].Execute(instance, StoryValueHelper.c_MaxWaitCommandTime, iterator, args);
                }
                instance.TryGetVariable(m_ReturnName, out stackInfo.m_Value);
            } finally {
                PopStack(instance);
            }
        }
Esempio n. 8
0
 protected override bool ExecCommand(StoryInstance instance, StoryMessageHandler handler, long delta)
 {
     if (m_Value.HaveValue)
     {
         instance.SetVariable(m_VarName, m_Value.Value);
     }
     return(false);
 }
        protected override bool ExecCommand(StoryInstance instance, StoryMessageHandler handler, long delta)
        {
            bool       ret        = false;
            UserThread userThread = instance.Context as UserThread;

            if (null != userThread)
            {
                if (m_StartTime <= 0)
                {
                    long startTime = GameFramework.TimeUtility.GetLocalMilliseconds();
                    m_StartTime = startTime;
                }
                bool triggered = false;
                for (int i = 0; i < m_MsgIds.Count; i++)
                {
                    long time = instance.GetMessageTriggerTime(m_MsgIds[i].Value);
                    if (time > m_StartTime)
                    {
                        triggered = true;
                        break;
                    }
                }
                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);
        }
Esempio n. 10
0
 protected override bool ExecCommand(StoryInstance instance, long delta)
 {
     if (m_VarName.HaveValue && m_Value.HaveValue)
     {
         string varName = m_VarName.Value;
         instance.SetVariable(varName, m_Value.Value);
     }
     return(false);
 }
Esempio n. 11
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)
         {
             if (i < stackInfo.m_Args.Count)
             {
                 instance.SetVariable(m_ArgNames[i], stackInfo.m_Args[i].Value);
             }
             else
             {
                 instance.SetVariable(m_ArgNames[i], null);
             }
         }
     }
 }
Esempio n. 12
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);
        }
        protected override bool ExecCommand(StoryInstance instance, StoryMessageHandler handler, long delta)
        {
            bool       ret        = false;
            UserThread userThread = instance.Context as UserThread;

            if (null != userThread)
            {
                int ct = 0;
                for (int i = 0; i < m_MsgIds.Count; i++)
                {
                    ct += userThread.StorySystem.CountMessage(m_MsgIds[i].Value);
                }
                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);
        }
 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;
 }
 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;
 }
 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;
 }
 private static void AddVariable(StoryInstance instance, string name, UnityEngine.GameObject control)
 {
     instance.SetVariable(name, control);
     UnityEngine.UI.Text text = control.GetComponent <UnityEngine.UI.Text>();
     if (null != text)
     {
         instance.SetVariable(string.Format("{0}_Text", name), text);
     }
     UnityEngine.UI.Image image = control.GetComponent <UnityEngine.UI.Image>();
     if (null != image)
     {
         instance.SetVariable(string.Format("{0}_Image", name), image);
     }
     UnityEngine.UI.RawImage rawImage = control.GetComponent <UnityEngine.UI.RawImage>();
     if (null != rawImage)
     {
         instance.SetVariable(string.Format("{0}_RawImage", name), rawImage);
     }
     UnityEngine.UI.Button button = control.GetComponent <UnityEngine.UI.Button>();
     if (null != button)
     {
         instance.SetVariable(string.Format("{0}_Button", name), button);
     }
     UnityEngine.UI.Dropdown dropdown = control.GetComponent <UnityEngine.UI.Dropdown>();
     if (null != dropdown)
     {
         instance.SetVariable(string.Format("{0}_Dropdown", name), dropdown);
     }
     UnityEngine.UI.InputField inputField = control.GetComponent <UnityEngine.UI.InputField>();
     if (null != inputField)
     {
         instance.SetVariable(string.Format("{0}_Input", name), inputField);
     }
     UnityEngine.UI.Slider slider = control.GetComponent <UnityEngine.UI.Slider>();
     if (null != inputField)
     {
         instance.SetVariable(string.Format("{0}_Slider", name), slider);
     }
     UnityEngine.UI.Toggle toggle = control.GetComponent <UnityEngine.UI.Toggle>();
     if (null != toggle)
     {
         instance.SetVariable(string.Format("{0}_Toggle", name), toggle);
     }
     UnityEngine.UI.ToggleGroup toggleGroup = control.GetComponent <UnityEngine.UI.ToggleGroup>();
     if (null != toggleGroup)
     {
         instance.SetVariable(string.Format("{0}_ToggleGroup", name), toggleGroup);
     }
     UnityEngine.UI.Scrollbar scrollbar = control.GetComponent <UnityEngine.UI.Scrollbar>();
     if (null != scrollbar)
     {
         instance.SetVariable(string.Format("{0}_Scrollbar", name), scrollbar);
     }
 }
Esempio n. 18
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);
         }
     }
 }