/// <summary> /// 解析配置 /// </summary> /// <param name="_guideConfig">引导配置</param> /// <param name="_referObjectConfig">参考对象配置</param> /// <param name="_styleConfig">样式配置</param> /// <param name="_conditionIndex">条件索引</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">引导状态</param> /// <returns>条件命令组</returns> protected override List <AbsGuideSubCommand_Condition> OnResolveConfig(XLS_Config_Table_UserGuideConfig _guideConfig, XLS_Config_Table_UserGuideReferObject _referObjectConfig, XLS_Config_Table_UserGuideStyle _styleConfig, int _conditionIndex, enGuideStatus _resolveStatus, enGuideStatus _status) { status = _status; List <AbsGuideSubCommand_Condition> conditions = new List <AbsGuideSubCommand_Condition>(); AbsGuideSubCommand_Condition tempCondition = null; XLS_Config_Table_UserGuideReferObject tempRefer = null; XLS_Config_Table_UserGuideStyle tempStyle = null; switch (_resolveStatus) { case enGuideStatus.WaitTrigger: #region 收集触发命令 //触发条件命令 for (int i = 0; i < _guideConfig.triggerConditionTypes.Length; i++) { tempRefer = null; tempStyle = null; if (_guideConfig.triggerConditionTypes[i] == (int)enUserGuideConfig_TriggerConditionType.ReferObject) { tempRefer = mFuncReferObject(_guideConfig.triggerReferObjectIds[i]); } tempStyle = mFuncStyle(_guideConfig.styleIds[i]); tempCondition = StrayFogGuideManager.Cmd_UserGuideConfig_TriggerConditionTypeMaping[_guideConfig.triggerConditionTypes[i]](); tempCondition.ResolveConfig(_guideConfig, tempRefer, tempStyle, i, _resolveStatus, _status); conditions.Add(tempCondition); } #endregion break; case enGuideStatus.WaitValidate: #region 收集验证命令 //验证条件命令 for (int i = 0; i < _guideConfig.validateConditionTypes.Length; i++) { tempRefer = null; tempStyle = null; if (_guideConfig.validateConditionTypes[i] == (int)enUserGuideConfig_TriggerConditionType.ReferObject) { tempRefer = mFuncReferObject(_guideConfig.validateReferObjectIds[i]); } tempStyle = mFuncStyle(_guideConfig.styleIds[i]); tempCondition = StrayFogGuideManager.Cmd_UserGuideConfig_ValidateConditionTypeMaping[_guideConfig.validateConditionTypes[i]](); tempCondition.ResolveConfig(_guideConfig, tempRefer, tempStyle, i, _resolveStatus, _status); conditions.Add(tempCondition); } #endregion break; } return(conditions); }
/// <summary> /// 执行处理 /// </summary> /// <param name="_sender">引导命令</param> /// <param name="_sponsor">执行发起者</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">当前状态</param> /// <param name="_parameters">参数</param> public void Excute(IGuideCommand _sender, IGuideMatchConditionCommand _sponsor, enGuideStatus _resolveStatus, enGuideStatus _status, params object[] _parameters) { int key = (int)(_sender == _sponsor ? _sender.status : resolveStatus); bool result = mGuideResolveMatchCommandMaping.ContainsKey(key) ? mGuideResolveMatchCommandMaping[key].Count > 0 : false; if (result) { foreach (AbsGuideResolveMatchCommand m in mGuideResolveMatchCommandMaping[key]) { m.Excute(_sender, this, _resolveStatus, _status, _parameters); } } OnExcute(_sender, _sponsor, _resolveStatus, _status, _parameters); resolveStatus = OnAfterExcuteResolveStatus(_sender, _sponsor, _resolveStatus, _status, _parameters); }
/// <summary> /// 解析配置 /// </summary> /// <param name="_guideConfig">引导配置</param> /// <param name="_referObjectConfig">参考对象配置</param> /// <param name="_styleConfig">样式配置</param> /// <param name="_conditionIndex">条件索引</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">引导状态</param> public void ResolveConfig(XLS_Config_Table_UserGuideConfig _guideConfig, XLS_Config_Table_UserGuideReferObject _referObjectConfig, XLS_Config_Table_UserGuideStyle _styleConfig, int _conditionIndex, enGuideStatus _resolveStatus, enGuideStatus _status) { guideConfig = _guideConfig; referObjectConfig = _referObjectConfig; styleConfig = _styleConfig; conditionIndex = referObjectIndex = styleIndex = _conditionIndex; if (_conditionIndex >= 0) { resolveStatus = _resolveStatus; } else { resolveStatus = _status; } OnResolveOperator(_guideConfig, _conditionIndex, _resolveStatus); int statusKey = (int)_resolveStatus; if (!mGuideResolveMatchCommandMaping.ContainsKey(statusKey)) { mGuideResolveMatchCommandMaping.Add(statusKey, new List <AbsGuideSubCommand_Condition>()); } List <AbsGuideSubCommand_Condition> conditions = OnResolveConfig(_guideConfig, _referObjectConfig, _styleConfig, _conditionIndex, _resolveStatus, _status); if (conditions != null) { foreach (AbsGuideSubCommand_Condition c in conditions) { if (_conditionIndex >= 0) { c.ResolveConfig(_guideConfig, _referObjectConfig, _styleConfig, _conditionIndex, _resolveStatus, _status); } mGuideResolveMatchCommandMaping[statusKey].Add(c); } } }
/// <summary> /// 是否满足条件 /// </summary> /// <param name="_conditions">匹配组</param> /// <param name="_sender">引导命令</param> /// <param name="_sponsor">条件匹配发起者</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">当前状态</param> /// <param name="_parameters">参数</param> /// <returns>true:满足条件,false:不满足条件</returns> protected override bool OnIsMatchCondition(IGuideCommand _sender, List <AbsGuideResolveMatchCommand> _conditions, IGuideMatchConditionCommand _sponsor, enGuideStatus _resolveStatus, enGuideStatus _status, params object[] _parameters) { //AbsUIGuideGraphic mask = _sender.guideWindow.GetUIGuideGraphic((int)enGuideStatus.WaitTrigger, conditionIndex); bool result = _sender.guideWindow != null && base.OnIsMatchCondition(_sender, _conditions, _sponsor, _resolveStatus, _status, _parameters); if (result) { result = false; if (_parameters != null) { UIGuideValidate validate = null; foreach (object v in _parameters) { if (v is UIGuideValidate) { validate = (UIGuideValidate)v; result = validate.guideId == guideConfig.id && validate.type == (int)enGuideStatus.WaitTrigger && validate.index == conditionIndex; } } } } return(result); }
/// <summary> /// 是否满足条件 /// </summary> /// <param name="_conditions">匹配组</param> /// <param name="_sender">引导命令</param> /// <param name="_sponsor">条件匹配发起者</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">当前状态</param> /// <param name="_parameters">参数</param> /// <returns>true:满足条件,false:不满足条件</returns> protected override bool OnIsMatchCondition(IGuideCommand _sender, List <AbsGuideResolveMatchCommand> _conditions, IGuideMatchConditionCommand _sponsor, enGuideStatus _resolveStatus, enGuideStatus _status, params object[] _parameters) { bool result = base.OnIsMatchCondition(_sender, _conditions, _sponsor, _resolveStatus, _status, _parameters); if (_parameters != null && mGraphicMask == null) { foreach (object p in _parameters) { if (p is AbsUIWindowView) { AbsUIWindowView w = (AbsUIWindowView)p; if (w.config.name.Equals(windowName)) { mGuideCommandSender = _sender; mControl = w.FindCtrlByNameIsSelfOrParent <UIBehaviour>(controlName); mGraphicMask = new UIGuideGraphic((int)_sender.status, w.FindCtrlByNameIsSelfOrParent <Graphic>(graphicMask), referObjectIndex); if (mControl != null) { break; } } } } } result &= mControl != null && mGraphicMask != null && mGraphicMask.graphic != null && mGraphicMask.graphic.gameObject.activeInHierarchy == mGraphicMaskActiveSelf; if (result) { UIGuideValidate validate = _sender.CreateValidateMono <UIGuideValidate>(mControl, (int)_sender.status, referObjectIndex); validate.OnEventValidate += Validate_OnEventValidate; } return(result); }
/// <summary> /// 解析配置 /// </summary> /// <param name="_guideConfig">引导配置</param> /// <param name="_referObjectConfig">参考对象配置</param> /// <param name="_styleConfig">样式配置</param> /// <param name="_conditionIndex">条件索引</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">引导状态</param> /// <returns>条件命令组</returns> protected override List <AbsGuideSubCommand_Condition> OnResolveConfig(XLS_Config_Table_UserGuideConfig _guideConfig, XLS_Config_Table_UserGuideReferObject _referObjectConfig, XLS_Config_Table_UserGuideStyle _styleConfig, int _conditionIndex, enGuideStatus _resolveStatus, enGuideStatus _status) { List <AbsGuideSubCommand_Condition> result = new List <AbsGuideSubCommand_Condition>(); result.Add(StrayFogGuideManager.Cmd_UserGuideReferObject_Refer2DTypeMaping[_referObjectConfig.refer2DType]()); result.Add(StrayFogGuideManager.Cmd_UserGuideReferObject_Refer2DTypeMaping[_referObjectConfig.refer3DType]()); return(result); }
/// <summary> /// 解析配置 /// </summary> /// <param name="_guideConfig">引导配置</param> /// <param name="_referObjectConfig">参考对象配置</param> /// <param name="_styleConfig">样式配置</param> /// <param name="_conditionIndex">条件索引</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">引导状态</param> /// <returns>条件命令组</returns> protected override List <AbsGuideSubCommand_Condition> OnResolveConfig(XLS_Config_Table_UserGuideConfig _guideConfig, XLS_Config_Table_UserGuideReferObject _referObjectConfig, XLS_Config_Table_UserGuideStyle _styleConfig, int _conditionIndex, enGuideStatus _resolveStatus, enGuideStatus _status) { base.OnResolveConfig(_guideConfig, _referObjectConfig, _styleConfig, _conditionIndex, _resolveStatus, _status); string[] values = _referObjectConfig.refer2DValue.Split(enSplitSymbol.VerticalBar); windowName = values[0]; controlName = graphicMask = values[1]; if (values.Length >= 3) { graphicMask = values[2]; } switch (_status) { case enGuideStatus.WaitTrigger: mGraphicMaskActiveSelf = Convert.ToBoolean(byte.Parse(guideConfig.triggerConditionValues[conditionIndex])); break; } return(null); }
/// <summary> /// 执行处理 /// </summary> /// <param name="_sender">引导命令</param> /// <param name="_sponsor">执行发起者</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">当前状态</param> /// <param name="_parameters">参数</param> protected override void OnExcute(IGuideCommand _sender, IGuideMatchConditionCommand _sponsor, enGuideStatus _resolveStatus, enGuideStatus _status, params object[] _parameters) { if (isMatch) { mGraphicMask.SetStyleData(styleConfig); StrayFogGamePools.uiWindowManager.OpenWindow <AbsUIGuideWindowView>(StrayFogGamePools.guideManager.guideWindowId, (wins, pars) => { _sender.guideWindow = wins[0]; _sender.guideWindow.AddGraphicMask(mGraphicMask); }); } base.OnExcute(_sender, _sponsor, _resolveStatus, _status, _parameters); }
/// <summary> /// 执行后解析状态 /// </summary> /// <returns>解析状态</returns> protected override enGuideStatus OnAfterExcuteResolveStatus(IGuideCommand _sender, IGuideMatchConditionCommand _sponsor, enGuideStatus _resolveStatus, enGuideStatus _status, params object[] _parameters) { return(status); }
/// <summary> /// 执行处理 /// </summary> /// <param name="_sender">引导命令</param> /// <param name="_sponsor">执行发起者</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">当前状态</param> /// <param name="_parameters">参数</param> protected override void OnExcute(IGuideCommand _sender, IGuideMatchConditionCommand _sponsor, enGuideStatus _resolveStatus, enGuideStatus _status, params object[] _parameters) { base.OnExcute(_sender, _sponsor, _resolveStatus, _status, _parameters); switch (_resolveStatus) { case enGuideStatus.WaitTrigger: status = enGuideStatus.WaitValidate; break; case enGuideStatus.WaitValidate: status = enGuideStatus.Finish; break; } if (status == enGuideStatus.Finish) { OnFinishGuide?.Invoke(this); } }
/// <summary> /// 执行处理 /// </summary> /// <param name="_sender">引导命令</param> /// <param name="_sponsor">执行发起者</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">当前状态</param> /// <param name="_parameters">参数</param> protected virtual void OnExcute(IGuideCommand _sender, IGuideMatchConditionCommand _sponsor, enGuideStatus _resolveStatus, enGuideStatus _status, params object[] _parameters) { }
/// <summary> /// 是否满足条件 /// </summary> /// <param name="_sender">引导命令</param> /// <param name="_conditions">条件组</param> /// <param name="_sponsor">条件匹配发起者</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">当前状态</param> /// <param name="_parameters">参数</param> /// <returns>true:满足条件,false:不满足条件</returns> protected virtual bool OnIsMatchCondition(IGuideCommand _sender, List <AbsGuideResolveMatchCommand> _conditions, IGuideMatchConditionCommand _sponsor, enGuideStatus _resolveStatus, enGuideStatus _status, params object[] _parameters) { return(true); }
/// <summary> /// 是否满足条件 /// </summary> /// <param name="_sender">引导命令</param> /// <param name="_sponsor">条件匹配发起者</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">当前状态</param> /// <param name="_parameters">参数</param> /// <returns>true:满足条件,false:不满足条件</returns> public bool isMatchCondition(IGuideCommand _sender, IGuideMatchConditionCommand _sponsor, enGuideStatus _resolveStatus, enGuideStatus _status, params object[] _parameters) { int key = (int)_resolveStatus; isMatch = true; List <AbsGuideResolveMatchCommand> matchs = new List <AbsGuideResolveMatchCommand>(); if (mGuideResolveMatchCommandMaping != null && mGuideResolveMatchCommandMaping.ContainsKey(key)) { foreach (AbsGuideResolveMatchCommand m in mGuideResolveMatchCommandMaping[key]) { isMatch &= _sender.LogicalOperator(isMatch, m.isMatchCondition(_sender, this, _resolveStatus, _status, _parameters), m.conditionOperator); matchs.Add(m); } } isMatch &= OnIsMatchCondition(_sender, matchs, _sponsor, _resolveStatus, _status, _parameters); isMatch &= resolveStatus == _resolveStatus; isMatch &= _sender.status == _status; return(isMatch); }
/// <summary> /// 解析配置 /// </summary> /// <param name="_guideConfig">引导配置</param> /// <param name="_referObjectConfig">参考对象配置</param> /// <param name="_styleConfig">样式配置</param> /// <param name="_conditionIndex">条件索引</param> /// <param name="_resolveStatus">解析状态</param> /// <param name="_status">引导状态</param> /// <returns>条件命令组</returns> protected virtual List <AbsGuideSubCommand_Condition> OnResolveConfig(XLS_Config_Table_UserGuideConfig _guideConfig, XLS_Config_Table_UserGuideReferObject _referObjectConfig, XLS_Config_Table_UserGuideStyle _styleConfig, int _conditionIndex, enGuideStatus _resolveStatus, enGuideStatus _status) { return(null); }
/// <summary> /// 解析操作符 /// </summary> /// <param name="_config">配置</param> /// <param name="_configIndex">条件索引</param> /// <param name="_resolveStatus">解析状态</param> void OnResolveOperator(XLS_Config_Table_UserGuideConfig _config, int _conditionTndex, enGuideStatus _resolveStatus) { conditionOperator = enUserGuideConfig_ConditionOperator.And; if (_conditionTndex > 0) { switch (_resolveStatus) { case enGuideStatus.WaitTrigger: conditionOperator = (enUserGuideConfig_ConditionOperator)_config.triggerConditionOperators[_conditionTndex]; break; case enGuideStatus.WaitValidate: conditionOperator = (enUserGuideConfig_ConditionOperator)_config.validateConditionOperators[_conditionTndex]; break; } } }