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); }
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); }
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(); }
/// <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 += "/"; }
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()); }
public override void OnEnter(ProcedureBase last) { base.OnEnter(last); Messenger.AddListener(MessageId.UI_GAME_START, GameStart); Game.UI.OpenForm <WND_CreateCharacter>(); }
//协程初始化流程,如果不等待一帧,进入ProcedureLaunch时,初始化辅助器的操作还未完成 private IEnumerator InitProcedures(ProcedureBase[] procedures, ProcedureBase entranceProcedure) { m_ProcedureManager.Initialize(GameFrameworkEntry.GetModule <IFsmManager>(), procedures); //初始化流程管理器 yield return(UnityExtension.waitOneFrame); m_ProcedureManager.StartProcedure(entranceProcedure.GetType()); //开始入口流程 }
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)); /// }
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); }
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)); }
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(); }
/// <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()); }
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>(); }
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()); }
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); }
/// <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>(); }
/// <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); }
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); }
/// <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); }
void StartProcedure() { if (procIndex >= 0 && procIndex < procedureCount) { currentProc = procedures[procIndex]; currentProc.BeginProcedure(this); } }
/// <summary> /// 进入流程 /// </summary> public override void OnEnter(ProcedureBase lastProcedure) { #if UNITY_WEBGL && !UNITY_EDITOR RenderManager._SetTips("您可以返回并改正您的错误(如有)。"); #endif Main.m_UI.OpenUI <ProcessResult>(); 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 <StartUILogic>(); 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 <EnterExpressionUILogic>(); 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 <UncertainLearnUILogic>(); base.OnEnter(lastProcedure); }
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); }
private void Update(List <SpeechResult> updatedResults, ulong index) { if (_index != index) { _index = index; _procedure = null; //DISCARD PROCEDURE } _results = updatedResults; }