Ejemplo n.º 1
0
        private void Start()
        {
            ProcedureBase[] procedures = new ProcedureBase[m_AvailableProcedureTypeNames.Length];
            for (int i = 0; i < m_AvailableProcedureTypeNames.Length; i++)
            {
                //遍历创建流程
                Type procedureType = Utility.Assembly.GetType(m_AvailableProcedureTypeNames[i]);
                if (procedureType == null)
                {
                    Log.Error("[ProcedureComponent.Start] Can not find procedure type '{0}'.", m_AvailableProcedureTypeNames[i]);
                    return;
                }
                procedures[i] = (ProcedureBase)Activator.CreateInstance(procedureType);
                if (procedures[i] == null)
                {
                    Log.Error("[ProcedureComponent.Start] Can not create procedure instance '{0}'.", m_AvailableProcedureTypeNames[i]);
                    return;
                }

                //保存入口流程
                if (m_EntranceProcedureTypeName == m_AvailableProcedureTypeNames[i])
                {
                    m_EntranceProcedure = procedures[i];
                }
            }

            if (m_EntranceProcedure == null)
            {
                Log.Error("[ProcedureComponent.Start] Entrance procedure is invalid.");
                return;
            }
            StartInitProcedure(procedures, m_EntranceProcedure);
        }
Ejemplo n.º 2
0
    void Awake()
    {
        if (GameObject.FindObjectsOfType <Game>().Length > 1)
        {
            DestroyImmediate(this);
            return;
        }

        InitAllModel();
        Refresh();

        // 设置运行形后第一个进入的流程
        System.Type type = System.Type.GetType(TypeName);
        if (type != null)
        {
            ProcedureModule.StartProcedure(type);

            ProcedureBase procedure = ProcedureModule.GetCurrentProcedure();
            DeSerialize(procedure);
        }
        else
        {
            Debug.LogError("当前工程还没有任何流程");
        }

        DontDestroyOnLoad(this);
    }
Ejemplo n.º 3
0
        private IEnumerator Start()
        {
            IFsmManager fsmManager = GameFrameworkEntry.GetModule <IFsmManager>();

            ProcedureBase[] procedures = new ProcedureBase[m_ProcedureClassNames.Count];
            for (int i = 0; i < m_ProcedureClassNames.Count; i++)
            {
                Type procedureType = Utility.Assembly.GetTypeWithinLoadedAssemblies(m_ProcedureClassNames[i]);
                if (procedureType == null)
                {
                    throw new GameFrameworkException(string.Format("Can not find procedure type '{0}'.", m_ProcedureClassNames[i]));
                }

                procedures[i] = Activator.CreateInstance(procedureType) as ProcedureBase;
                if (procedures[i] == null)
                {
                    throw new GameFrameworkException(string.Format("Can not create procedure instance '{0}'.", m_ProcedureClassNames[i]));
                }

                if (m_ProcedureClassNames[i] == m_FirstProcedureClassName)
                {
                    m_FirstProcedure = procedures[i];
                }
            }

            m_ProcedureManager.Initialize(fsmManager, procedures);

            yield return(new WaitForEndOfFrame());

            StartProcedure();
        }
Ejemplo n.º 4
0
    /// <summary>
    /// 根据上一次操作初始化流程参数
    /// </summary>
    private void Awake()
    {
        entranceProcedureIndex = EditorPrefs.GetInt("index", 0);

        typeNames = typeof(ProcedureBase).GetSonNames();
        if (typeNames.Length == 0)
        {
            return;
        }

        if (entranceProcedureIndex > typeNames.Length - 1)
        {
            entranceProcedureIndex = 0;
        }

        game          = target as Game;
        game.TypeName = typeNames[entranceProcedureIndex];

        startPrcedureTemplate = Utility.Reflection.CreateInstance <ProcedureBase>(GetType(typeNames[entranceProcedureIndex]));
        game.DeSerialize(startPrcedureTemplate);

        savePath = Application.persistentDataPath + "/" + UnityEngine.SceneManagement.SceneManager.GetActiveScene().name + "Procedure";

        if (!Directory.Exists(savePath))
        {
            Directory.CreateDirectory(savePath);
        }
        savePath += "/";
    }
Ejemplo n.º 5
0
        private bool Execute(WebSocket clientConn)
        {
            if (_procedure == null)
            {
                var matchingProcedures = ProcedureBase.MatchProcedures(_results);

                if (matchingProcedures.Count < 1)                //no procedure matches result
                {
                    return(false);
                }

                //Console.WriteLine(matchingProcedures.Count);

                if (matchingProcedures.Count > 1)
                {
                    Console.WriteLine("More than one procedure has been matched in single result:");
                    foreach (ProcedureBase proc in matchingProcedures)
                    {
                        Console.WriteLine(proc.ToString());
                    }
                    return(false);
                }

                _procedure             = matchingProcedures.First();
                _procedure.OnSendData += data => {
                    clientConn.WriteString(JsonConvert.SerializeObject(data));
                };
            }

            _procedure.Update(_results);

            return(_procedure.IsFinished());
        }
Ejemplo n.º 6
0
    public override void OnEnter(ProcedureBase last)
    {
        base.OnEnter(last);
        Messenger.AddListener(MessageId.UI_GAME_START, GameStart);

        Game.UI.OpenForm <WND_CreateCharacter>();
    }
Ejemplo n.º 7
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.º 8
0
        static void Main(string[] args)
        {
            ///
            // 测试如何通过获得接口类型(没有使用autofac的情况下)
            // 第一次 GameFrameworkEntry.GetModule<T>方法中
            // Utility.Text.Format("{0}.{1}", interfaceType.Namespace, interfaceType.Name.Substring(1)); 获得接口名的对应实体
            // 最后使用反射找到对应类
            GameFrameworkEntry.GetModule <IDataTableManager>();


            ///
            // 测试using ProcedureOwner = GameFramework.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>; 这句执行后的副作用
            // ProcedureExample procedureExample = new ProcedureExample();  不需要显式的实例化
            var m_ProcedureManager = GameFrameworkEntry.GetModule <IProcedureManager>();

            ProcedureBase[] procedures = new ProcedureBase[1];
            procedures[0] = (ProcedureBase)Activator.CreateInstance(typeof(ProcedureExample));
            // 代码初始化的过程中会先在Fsm状态机中添加Procedure流程集合
            // 以及初始化有限状态机管理器(如果没有初始化的话)
            m_ProcedureManager.Initialize(GameFrameworkEntry.GetModule <IFsmManager>(), procedures);
            var getProcedure     = m_ProcedureManager.GetProcedure <ProcedureExample>(); // 获取流程不会切换流程
            var currentProcedure = m_ProcedureManager.CurrentProcedure;

            m_ProcedureManager.StartProcedure <ProcedureExample>();  // 开始一个流程才会切换当前流程
            currentProcedure = m_ProcedureManager.CurrentProcedure;

            // 使用Assembly反射的方式获得基于ProcedureBase 的个数
            // 这个是GF框架查找流程的方法  ProcedureComponentInspector 类中 Type.GetTypeNames(typeof(ProcedureBase));
            var m_ProcedureTypeNames = TypeHelper.GetTypeNames(typeof(ProcedureBase));


            ///
        }
Ejemplo n.º 9
0
 static IEnumerator ChangingProcedure(ProcedureBase next, object userdata)
 {
     if (isChanging)
     {
         yield break;
     }
     isChanging = true;
     helper.StartCoroutine(next.OnInit(userdata));
     while (next.Progress < 1.0f && next.Progress >= 0f)
     {
         yield return(null);
     }
     if (next.Progress < 0f)
     {
         isChanging = false;
         Messenger.Broadcast(MessageId.GAME_INIT_PROCEDURE_FAILED, next);
         yield break;
     }
     Messenger.Broadcast(MessageId.GAME_INIT_PROCEDURE_SUCCESS, next);
     if (current != null)
     {
         current.OnExit(next);
     }
     next.OnEnter(current);
     current    = next;
     isChanging = false;
 }
 /// <summary>
 /// 进入流程
 /// </summary>
 /// <param name="lastProcedure">上一个离开的流程</param>
 public override void OnEnter(ProcedureBase lastProcedure)
 {
     //此处指定位置为左上角,后续会开放至所有桌子
     RenderManager.Instance.Show();
     MainThread.Instance.DelayAndRun(1000, () =>
     {
         var Position = NearChair.Instance.transform.position;
         Main.m_Event.Throw(this, Main.m_ReferencePool.Spawn <SitdownEventHandler>().Fill(Position.x, Position.y, Position.z));
         GameManager.Instance.SwitchProcedure <OnChairProcedure>();
     });
     return;
     //GameManager.Instance.FPSable = true;
     //showed = false;
     //Main.m_UI.OpenTemporaryUI<DatatableUILogic>();
     //Main.m_UI.OpenResidentUI<GameButtonUILogic>();
     //KeyboardManager.Instance.Register(KeyCode.T, () =>
     //{
     //    if (showed)
     //        UIAPI.Instance.HideDataTable();
     //    else
     //        UIAPI.Instance.ShowDataTable();
     //    showed = !showed;
     //});
     //base.OnEnter(lastProcedure);
 }
Ejemplo n.º 11
0
        public Statement Call(ProcedureBase callee, int retSizeOnStack)
        {
            var c  = new ProcedureConstant(PrimitiveType.Pointer32, callee);
            var ci = new CallInstruction(c, new CallSite(retSizeOnStack, 0));

            return(Emit(ci));
        }
Ejemplo n.º 12
0
    public void LoadProcedure(int index)
    {
        if (index < 0 || index >= procedureCount)
        {
            return;
        }

        //stop current or deal with start message
        if (currentProc != null && currentProc.Running)
        {
            //stop procedure
            currentProc.Stop();
        }
        else
        {
            if (procIndex + 1 >= 0 && procIndex + 1 < startSequences.Count)
            {
                startSequences[procIndex + 1].Finish();
            }
        }

        //ensure we disable start screen
        startScreen.SetActive(false);

        //prepare vars for new proc
        procIndex   = index - 1;
        currentProc = null;

        ShowStartMessage();
    }
Ejemplo n.º 13
0
        /// <summary>
        /// 加载所有流程 并初始化流程管理器 以及启动入口流程
        /// </summary>
        /// <returns></returns>
        private IEnumerator Start()
        {
            //存储所有的流程类型
            ProcedureBase[] procedures = new ProcedureBase[this.m_AvailableProcedureTypeNames.Length];
            for (int i = 0; i < this.m_AvailableProcedureTypeNames.Length; i++)
            {
                Type procedureType = Utility.Assembly.GetType(this.m_AvailableProcedureTypeNames[i]);
                if (procedureType == null)
                {
                    Log.Error("Can not find procedure type '{0}.'", this.m_AvailableProcedureTypeNames[i]);
                    yield break;
                }
                procedures[i] = (ProcedureBase)Activator.CreateInstance(procedureType);
                if (procedures[i] == null)
                {
                    Log.Error("Can not create procedure instance '{0}.'", this.m_AvailableProcedureTypeNames[i]);
                    yield break;
                }

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

            if (this.m_EntranceProcedure == null)
            {
                Log.Error("Entrance procedure in invalid.");
                yield break;
            }
            this.m_ProcedureManager.Initialize(GameFrameworkEntry.GetModule <IFsmManager>(), procedures);
            yield return(new WaitForEndOfFrame());

            this.m_ProcedureManager.StartProcedure(this.m_EntranceProcedure.GetType());
        }
Ejemplo n.º 14
0
 public override void OnExit(ProcedureBase next)
 {
     base.OnExit(next);
     Messenger.RemoveListener(MessageId.UI_GAME_START, GameStart);
     Messenger.RemoveListener(MessageId.UI_GAME_CREATE_CHARACTER, CreateCharacter);
     Game.UI.CloseForm <WND_Login>();
 }
Ejemplo n.º 15
0
        private bool Execute(IWebSocketConnection clientConn)
        {
            if (_procedure == null)
            {
                var matchingProcedures = ProcedureBase.MatchProcedures(_results);

                if (matchingProcedures.Count < 1)                //no procedure matches result
                {
                    return(false);
                }

                //Console.WriteLine(matchingProcedures.Count);

                if (matchingProcedures.Count > 1)
                {
                    Console.WriteLine("More than one procedure has been matched in single result");
                    //TODO: list those procedure names
                    return(false);
                }

                _procedure             = matchingProcedures.First();
                _procedure.OnSendData += data => {
                    clientConn.Send(JsonConvert.SerializeObject(data));
                };
            }

            _procedure.Update(_results);

            return(_procedure.IsFinished());
        }
Ejemplo n.º 16
0
    void Awake()
    {
        if (activeGame != null)
        {
            DestroyImmediate(this);
        }
        else
        {
            activeGame = this;
        }

        InitAllModel();
        Refresh();

        // 设置运行形后第一个进入的流程
        System.Type type = System.Type.GetType(TypeName);
        if (type != null)
        {
            ProcedureModule.ChangeProcedure(type);

            ProcedureBase procedure = ProcedureModule.GetCurrentProcedure();
            DeSerialize(procedure);
        }
        else
        {
            Debug.LogError("当前工程还没有任何流程");
        }

        DontDestroyOnLoad(this);
    }
Ejemplo n.º 17
0
    /// <summary>
    /// 进入流程
    /// </summary>
    /// <param name="lastProcedure">上一个离开的流程</param>
    public override void OnEnter(ProcedureBase lastProcedure)
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        RenderManager._SetTips("");
#endif
        base.OnEnter(lastProcedure);
        Main.m_UI.OpenUI <ProcessExplain>();
    }
Ejemplo n.º 18
0
    /// <summary>
    /// 进入流程
    /// </summary>
    /// <param name="lastProcedure">上一个离开的流程</param>
    public override void OnEnter(ProcedureBase lastProcedure)
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        RenderManager._SetTips("进入实验室后,仍可点击左上角的选项,更改实验目标。");
#endif
        Main.m_UI.OpenUI <PreviewUILogic>();
        base.OnEnter(lastProcedure);
    }
    /// <summary>
    /// 进入流程
    /// </summary>
    /// <param name="lastProcedure">上一个离开的流程</param>
    public override void OnEnter(ProcedureBase lastProcedure)
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        RenderManager._SetTips("您可以自定义实验,或者选择我们的预制实验。");
#endif
        Main.m_UI.OpenUI <ChooseExpUILogic>();
        base.OnEnter(lastProcedure);
    }
Ejemplo n.º 20
0
            public static MapFormParams Create(UIFormLogic uIForm, Game.Stage stage, ProcedureBase procedure = null)
            {
                MapFormParams param = ReferencePool.Acquire <MapFormParams>();

                param.UIForm = uIForm;
                param.Stage  = stage;
                return(param);
            }
Ejemplo n.º 21
0
    /// <summary>
    /// 进入流程
    /// </summary>
    /// <param name="lastProcedure">上一个离开的流程</param>
    public override void OnEnter(ProcedureBase lastProcedure)
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        RenderManager._SetTips("请添加至少一个直接测量的物理量。");
#endif
        Main.m_UI.OpenUI <AddValueUILogic>();
        base.OnEnter(lastProcedure);
    }
    /// <summary>
    /// 进入流程
    /// </summary>
    /// <param name="lastProcedure">上一个离开的流程</param>
    public override void OnEnter(ProcedureBase lastProcedure)
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        RenderManager._SetTips("合成量传递数据处理部分。");
#endif
        Main.m_UI.OpenUI <ComplexDataUILogic>();
        base.OnEnter(lastProcedure);
    }
Ejemplo n.º 23
0
 void StartProcedure()
 {
     if (procIndex >= 0 && procIndex < procedureCount)
     {
         currentProc = procedures[procIndex];
         currentProc.BeginProcedure(this);
     }
 }
Ejemplo n.º 24
0
    /// <summary>
    /// 进入流程
    /// </summary>
    public override void OnEnter(ProcedureBase lastProcedure)
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        RenderManager._SetTips("您可以返回并改正您的错误(如有)。");
#endif
        Main.m_UI.OpenUI <ProcessResult>();
        base.OnEnter(lastProcedure);
    }
Ejemplo n.º 25
0
    /// <summary>
    /// 进入流程
    /// </summary>
    /// <param name="lastProcedure">上一个离开的流程</param>
    public override void OnEnter(ProcedureBase lastProcedure)
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        RenderManager._SetTips("点击新实验,开始一个实验。");
#endif
        Main.m_UI.OpenUI <StartUILogic>();
        base.OnEnter(lastProcedure);
    }
Ejemplo n.º 26
0
    /// <summary>
    /// 进入流程
    /// </summary>
    /// <param name="lastProcedure">上一个离开的流程</param>
    public override void OnEnter(ProcedureBase lastProcedure)
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        RenderManager._SetTips("请输入您测量目标的合成表达式。点击左侧可插入符号。");
#endif
        Main.m_UI.OpenUI <EnterExpressionUILogic>();
        base.OnEnter(lastProcedure);
    }
Ejemplo n.º 27
0
    /// <summary>
    /// 进入流程
    /// </summary>
    /// <param name="lastProcedure">上一个离开的流程</param>
    public override void OnEnter(ProcedureBase lastProcedure)
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        RenderManager._SetTips("输入要计算的表达式,再输入您自己的计算结果。");
#endif
        Main.m_UI.OpenUI <UncertainLearnUILogic>();
        base.OnEnter(lastProcedure);
    }
Ejemplo n.º 28
0
 public override void OnExit(ProcedureBase next)
 {
     base.OnExit(next);
     Game.UI.CloseForm <UIMapInfo>();
     Game.UI.CloseForm <UIMenu>();
     MapMgr.Instance.MyMapPlayer.Save();
     MapMgr.Instance.Clear();
 }
 public void AddProcedure(ProcedureBase procedure)
 {
     if (procedure == null)
     {
         Debug.Log("The process to be added is empty");
         return;
     }
     m_procedures.Add(procedure);
 }
Ejemplo n.º 30
0
 private void Update(List <SpeechResult> updatedResults, ulong index)
 {
     if (_index != index)
     {
         _index     = index;
         _procedure = null;                //DISCARD PROCEDURE
     }
     _results = updatedResults;
 }