/// <summary>
        /// 构造函数
        /// </summary>
        public ProcedureComponent()
        {
            m_ProcedureManager = GameFrameworkEntry.GetModule <IProcedureManager>();
            if (m_ProcedureManager == null)
            {
                Log.Fatal("Procedure manager is invalid.");
                return;
            }

            //初始化  所有的流程
            List <ProcedureBase> procedures = new List <ProcedureBase>();

            Type[] types = GameEntry.HotfixTypes;
            foreach (var item in types)
            {
                if (item.IsAbstract)
                {
                    continue;
                }
                object[] objs = item.GetCustomAttributes(typeof(GfProcedureAttribute), false);
                if (objs.Length == 0)
                {
                    continue;
                }
                Debug.Log("创建物体:" + objs[0] + "----" + item.FullName);
                GfProcedureAttribute obj = (GfProcedureAttribute)objs[0];
                if (obj.ProceType == ProcedureType.Ignore)
                {
                    continue;
                }
                ProcedureBase procedure = (ProcedureBase)Activator.CreateInstance(item);
                if (procedure != null)
                {
                    procedures.Add(procedure);
                    if (obj.ProceType == ProcedureType.Start)
                    {
                        m_EntranceProcedure = procedure;
                    }
                }
                else
                {
                    Log.Error("流程没有继承:ProcedureBase----" + item);
                }
            }
            Debug.Log("初始流程Type:" + m_EntranceProcedure.GetType().FullName);
            m_ProcedureManager.Initialize(GameFrameworkEntry.GetModule <IFsmManager>(), procedures.ToArray());
            // 开始流程
            m_ProcedureManager.StartProcedure(m_EntranceProcedure.GetType());

            //   WaitToRunProcedure();
        }
Ejemplo n.º 2
0
    void Awake()
    {
        if (activeGame != null)
        {
            DestroyImmediate(this);
        }
        else
        {
            activeGame = this;
        }

        InitAllModel();

        // 设置运行形后第一个进入的流程
        System.Type type = System.Type.GetType(typeName);
        if (startProcedure != null)
        {
            ProcedureManager.Instance.UpdateProcedure(startProcedure);
            ProcedureManager.Instance.ChangeProcedure(startProcedure.GetType());
        }
        else
        {
            Debug.LogError("当前工程还没有任何流程");
        }

        DontDestroyOnLoad(this);
    }
Ejemplo n.º 3
0
        //协程初始化流程,如果不等待一帧,进入ProcedureLaunch时,初始化辅助器的操作还未完成
        private IEnumerator InitProcedures(ProcedureBase[] procedures, ProcedureBase entranceProcedure)
        {
            m_ProcedureManager.Initialize(GameFrameworkEntry.GetModule <IFsmManager>(), procedures);    //初始化流程管理器
            yield return(UnityExtension.waitOneFrame);

            m_ProcedureManager.StartProcedure(entranceProcedure.GetType());   //开始入口流程
        }
Ejemplo n.º 4
0
        internal void StartProcedure()
        {
            if (m_FirstProcedure == null)
            {
                throw new GameFrameworkException("First procedure is invalid.");
            }

            m_ProcedureManager.StartProcedure(m_FirstProcedure.GetType());
        }
 public void CreateProceduresFsm()
 {
     m_ProcedeureFsm = m_FsmManager.CreateFsm(this, "", m_procedures.ToArray());
     if (m_EntranceProcedure == null)
     {
         Debug.LogError("The entry process is empty and cannot start the process.");
     }
     m_ProcedeureFsm.Start(m_EntranceProcedure.GetType());
 }
Ejemplo n.º 6
0
        private static SpeechResponse IgnoreResponse(ProcedureBase procedure)
        {
            var resp = new SpeechResponse {
                res = "ignored"
            };

            if (procedure != null)
            {
                resp.procedure = procedure.GetType().Name;
            }
            return(resp);
        }
Ejemplo n.º 7
0
    /// <summary>
    /// 根据存储的byte数值给流程赋值
    /// </summary>
    /// <param name="procedure"></param>
    public void DeSerialize(ProcedureBase procedure)
    {
        System.Type type = procedure.GetType();
        string      path = Application.persistentDataPath + "/" + UnityEngine.SceneManagement.SceneManager.GetActiveScene().name + "Procedure/" + type.Name;

        if (!System.IO.File.Exists(path))
        {
            return;
        }

        ProtocolBytes p = new ProtocolBytes(System.IO.File.ReadAllBytes(path));

        if (p.GetString() != type.Name)
        {
            Debug.LogError("类型不匹配");
            return;
        }

        p.DeSerialize(procedure);
    }
        private IEnumerator Start()
        {
            IFsmManager fsmManager = GameFrameworkEntry.GetModule <IFsmManager>();

            ProcedureBase[] procedures = new ProcedureBase[m_AvailableProcedureTypeNames.Length];
            for (int i = 0; i < m_AvailableProcedureTypeNames.Length; i++)
            {
                Type procedureType = Utility.Assembly.GetTypeWithinLoadedAssemblies(m_AvailableProcedureTypeNames[i]);
                if (procedureType == null)
                {
                    Log.Error("Can not find procedure type '{0}'.", m_AvailableProcedureTypeNames[i]);
                    yield break;
                }

                procedures[i] = Activator.CreateInstance(procedureType) as ProcedureBase;
                if (procedures[i] == null)
                {
                    Log.Error("Can not create procedure instance '{0}'.", m_AvailableProcedureTypeNames[i]);
                    yield break;
                }

                if (m_EntranceProcedureTypeName == m_AvailableProcedureTypeNames[i])
                {
                    m_EntranceProcedure = procedures[i];
                }
            }

            if (m_EntranceProcedure == null)
            {
                Log.Error("Entrance procedure is invalid.");
                yield break;
            }

            m_ProcedureManager.Initialize(fsmManager, procedures);

            yield return(new WaitForEndOfFrame());

            m_ProcedureManager.StartProcedure(m_EntranceProcedure.GetType());
        }
Ejemplo n.º 9
0
        private static SpeechResponse HandleSpeechResult(SpeechMessageSchema data,
                                                         IWebSocketConnection clientConn)
        {
            if (_handler != null)
            {
                _handler.Update(data.results, data.result_index);
            }
            else
            {
                _handler = new MessageHandler(data.results, data.result_index);
            }

            bool          executed  = _handler.Execute(clientConn);
            ProcedureBase procedure = _handler.GetProcedure();

            if (!executed)
            {
                var resp = new SpeechResponse {
                    res = "ignored"
                };
                if (procedure != null)
                {
                    resp.procedure = procedure.GetType().Name;
                }
                return(resp);
            }

            if (procedure == null)
            {
                _handler = null;
            }
            Console.WriteLine("Command executed, sending response to client");
            return(new SpeechResponse {
                res = "executed", index = data.result_index
            });
        }