UI和场景跳转步骤区分设置

This commit is contained in:
“CongG” 2025-01-02 14:13:47 +08:00
parent f7e683d099
commit 49dc7f114f
2 changed files with 92 additions and 130 deletions

View File

@ -22,8 +22,7 @@ namespace ZXK.LouDiXvMuNiu
private List<Transform> _curModuleToolArray = new List<Transform>();//当前步骤需要用到的所有工具 private List<Transform> _curModuleToolArray = new List<Transform>();//当前步骤需要用到的所有工具
//动画交互 //动画交互
private NiuData _curStep;//为了方便做对比,临时保存当前步骤 public NiuData _CurSceneStep;//为了方便做对比,临时保存当前步骤
private NiuData _previousStep;//为了方便做对比,临时保存当前步骤
private Dictionary<bool, List<GameObject>> _curStepUseBTDic;//当前步骤要点击的所有物体true表示正确选项false表示错误选项 private Dictionary<bool, List<GameObject>> _curStepUseBTDic;//当前步骤要点击的所有物体true表示正确选项false表示错误选项
private List<OutLineRender> _currentHighlights = new List<OutLineRender>(); private List<OutLineRender> _currentHighlights = new List<OutLineRender>();
private PlayableDirector _curTimeLine = null; private PlayableDirector _curTimeLine = null;
@ -67,7 +66,6 @@ namespace ZXK.LouDiXvMuNiu
_curTimeLine = GetComponent<PlayableDirector>(); _curTimeLine = GetComponent<PlayableDirector>();
_curTimeLineCtrl = GetComponent<TimelineDirectorCtrl>(); _curTimeLineCtrl = GetComponent<TimelineDirectorCtrl>();
GameManager.Instance._DataNiuHandler.CurNiuHandler.OnValueChanged += OnValueChanged;
GameManager.Instance._EventManager.AddListener<ClickToolArgs>(OnClickToolEvent); GameManager.Instance._EventManager.AddListener<ClickToolArgs>(OnClickToolEvent);
} }
private void Start() private void Start()
@ -87,84 +85,26 @@ namespace ZXK.LouDiXvMuNiu
{ {
if (tempData[i].TaskType == ConstCtrl.TASKTYPE_ShowGeo) if (tempData[i].TaskType == ConstCtrl.TASKTYPE_ShowGeo)
{ {
_curStep = tempData[i]; _CurSceneStep = tempData[i];
_previousStep = tempData[i];
break; break;
} }
} }
} }
else else
{ {
_curStep = tempData[0]; _CurSceneStep = tempData[0];
_previousStep = tempData[0];
} }
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = _curStep; GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = _CurSceneStep;
}
/// <summary>
/// 步骤放生变化调用
/// </summary>
/// <param name="obj"></param>
private void OnValueChanged(NiuData obj)
{
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Anim))
{
if (_curStep != obj)
{//区分是否是点击UI直接进行的步骤跳转
JumpTimeline(obj, true);
}
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{
List<GameObject> tempToolArray = GetNeedClickTools(obj);
OnlyShowBTGeo(tempToolArray.ToArray());
}
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
if (string.IsNullOrEmpty(obj.Question))
{
GetNeedClickTools(obj);
}
else
{
AnswerSystemInStep(obj);
}
}
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_ChoiceVideoQuestion))
{
if (_curStep != obj)
{//区分是否是点击UI直接进行的步骤跳转
JumpTimeline(obj, true);
}
bool isExam = GameManager.Instance._StateContext.GetState().Name.Equals("ExamState");
string[] answers = obj.OptionsAll.Split("|");
if (answers.Length % 2 != 0)
{
PopUpMng.ThreeVideoChoicePanel(obj.Question, answers, answers, GetOptionIndex(obj.OptionRight), isExam, () =>
{
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep();
});
}
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_ChoicePicQuestion))
{
if (_curStep != obj)
{//区分是否是点击UI直接进行的步骤跳转
JumpTimeline(obj, true);
}
ChoiceImgInStep(obj.ModelBT.Split("|"));
}
_previousStep = obj;
_curStep = obj;
} }
private void Update() private void Update()
{ {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit rayHit; RaycastHit rayHit;
if (PopUpMng._TriAble&& _curStep!=null) if (PopUpMng._TriAble&& _CurSceneStep != null)
{ {
if (_curStep.TaskType.Equals(ConstCtrl.TASKTYPE_ShowGeo)) if (_CurSceneStep.TaskType.Equals(ConstCtrl.TASKTYPE_ShowGeo))
{//工具物品展示 {//工具物品展示
UI_Manage.Instance.HidePanel("TooltipBoxTip"); UI_Manage.Instance.HidePanel("TooltipBoxTip");
if (Physics.Raycast(ray, out rayHit, Mathf.Infinity)) if (Physics.Raycast(ray, out rayHit, Mathf.Infinity))
@ -177,7 +117,7 @@ namespace ZXK.LouDiXvMuNiu
} }
} }
} }
else if (_curStep.TaskType.Equals(ConstCtrl.TASKTYPE_Anim)) else if (_CurSceneStep.TaskType.Equals(ConstCtrl.TASKTYPE_Anim))
{//timeline动画 {//timeline动画
if (Input.GetMouseButtonUp(0) && Physics.Raycast(ray, out rayHit, Mathf.Infinity)) if (Input.GetMouseButtonUp(0) && Physics.Raycast(ray, out rayHit, Mathf.Infinity))
{ {
@ -187,47 +127,24 @@ namespace ZXK.LouDiXvMuNiu
}); });
ClickToolCallInExamState(rayHit.transform.gameObject, () => ClickToolCallInExamState(rayHit.transform.gameObject, () =>
{ {
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_curStep.QNextNum), false); JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum), false);
}); });
} }
} }
else if (_curStep.TaskType.Equals(ConstCtrl.TASKTYPE_Video)) else if (_CurSceneStep.TaskType.Equals(ConstCtrl.TASKTYPE_Video))
{ {
if (Input.GetMouseButtonUp(0) && Physics.Raycast(ray, out rayHit, Mathf.Infinity)) if (Input.GetMouseButtonUp(0) && Physics.Raycast(ray, out rayHit, Mathf.Infinity))
{ {
ClickToolCallInTrainState(rayHit.transform.gameObject, () => ClickToolCallInTrainState(rayHit.transform.gameObject, () =>
{ {
GameObject videoGeo = UI_Manage.Instance.ShowPanel("VideoShowPanel", Type.GetType("ZXK.LouDiXvMuNiu.VideoShowPanel"), UIGroup.Tip); GameObject videoGeo = UI_Manage.Instance.ShowPanel("VideoShowPanel", Type.GetType("ZXK.LouDiXvMuNiu.VideoShowPanel"), UIGroup.Tip);
videoGeo.GetComponent<VideoShowPanel>().PlayVideoClip(_curStep.VideoPath, () => videoGeo.GetComponent<VideoShowPanel>().PlayVideoClip(_CurSceneStep.VideoPath, () =>
{ {
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep(); GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep();
}); });
}); });
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState")) if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{ {
//bool addScoreTemp = true;
//if (_curStepUseBTs.Contains(rayHit.transform.name))
//{
// _curStepUseBTs.Remove(rayHit.transform.name);
//}
//else
//{
// PopUpMng.PopChoseErrowToast(_curStep.ExamEvvr, 2.0f);
// addScoreTemp = false;
//}
//if (_curStepUseBTs.Count == 0)
//{
// if (addScoreTemp)
// {
// GameManager.Instance._DataNiuHandler.AddScore(_curStep.ModuleName, _curStep.ThreeTaskName, _curStep.Score);
// }
// for (int i = 0; i < _curSignArray.Count; i++)
// {
// _curSignArray[i].SetActive(false);
// }
// _curSignArray.Clear();
// JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_curStep.QNextNum), false);
//}
} }
} }
@ -238,13 +155,11 @@ namespace ZXK.LouDiXvMuNiu
private void OnDestroy() private void OnDestroy()
{ {
_curTimeLineCtrl?.Stop(); _curTimeLineCtrl?.Stop();
GameManager.Instance._DataNiuHandler.CurNiuHandler.OnValueChanged -= OnValueChanged;
GameManager.Instance._EventManager.RemoveListener<ClickToolArgs>(OnClickToolEvent); GameManager.Instance._EventManager.RemoveListener<ClickToolArgs>(OnClickToolEvent);
} }
private void OnClickToolEvent(ClickToolArgs e) private void OnClickToolEvent(ClickToolArgs e)
{ {
WDebug.Log("点击到:" + e.SelectTool);
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState")) if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{ {
GameObject toolGeo = UtilitiesMng.GetGeoByName(new Transform[1] { _toolContain }, e.SelectTool, true); GameObject toolGeo = UtilitiesMng.GetGeoByName(new Transform[1] { _toolContain }, e.SelectTool, true);
@ -508,7 +423,7 @@ namespace ZXK.LouDiXvMuNiu
} }
else else
{ {
PopUpMng.PopChoseErrowToast(_curStep.ExamEvvr, 2.0f); PopUpMng.PopChoseErrowToast(_CurSceneStep.ExamEvvr, 2.0f);
addScoreTemp = false; addScoreTemp = false;
} }
@ -525,7 +440,7 @@ namespace ZXK.LouDiXvMuNiu
if (addScoreTemp) if (addScoreTemp)
{ {
GameManager.Instance._DataNiuHandler.AddScore(_curStep.ModuleName, _curStep.ThreeTaskName, _curStep.Score); GameManager.Instance._DataNiuHandler.AddScore(_CurSceneStep.ModuleName, _CurSceneStep.ThreeTaskName, _CurSceneStep.Score);
} }
clickFinishCall?.Invoke(); clickFinishCall?.Invoke();
@ -541,7 +456,7 @@ namespace ZXK.LouDiXvMuNiu
string[] answers = step.OptionsAll.Split("|"); string[] answers = step.OptionsAll.Split("|");
PopUpMng.PopAnswerQuestions(step.Question, answers, GetOptionIndex(step.OptionRight), () => PopUpMng.PopAnswerQuestions(step.Question, answers, GetOptionIndex(step.OptionRight), () =>
{ {
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_curStep.QNextNum), false); JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum), false);
}); });
} }
/// <summary> /// <summary>
@ -564,7 +479,7 @@ namespace ZXK.LouDiXvMuNiu
} }
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState")) else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{ {
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep(_curStep.QNextNum); GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum);
} }
_IsPlayAnm = true; _IsPlayAnm = true;
}); });
@ -588,7 +503,7 @@ namespace ZXK.LouDiXvMuNiu
} }
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState")) else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{ {
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_curStep.QNextNum), false); JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum), false);
} }
float durTime = step.TimelineLength / 60.0f; float durTime = step.TimelineLength / 60.0f;
@ -599,7 +514,7 @@ namespace ZXK.LouDiXvMuNiu
/// 目前只有胚胎选择最后一步需要 /// 目前只有胚胎选择最后一步需要
/// </summary> /// </summary>
/// <param name="temp"></param> /// <param name="temp"></param>
private void ChoiceImgInStep(string[] temp) public void ChoiceImgInStep(string[] temp)
{ {
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState")) if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{ {
@ -659,40 +574,40 @@ namespace ZXK.LouDiXvMuNiu
/// <param name="partData"></param> /// <param name="partData"></param>
public void JumpTimeline(NiuData partData,bool jumpStepAble) public void JumpTimeline(NiuData partData,bool jumpStepAble)
{ {
if (_curStep == null) _curStep = partData; if (_CurSceneStep == null) _CurSceneStep = partData;
if (_curStep.id == partData.id) if (_CurSceneStep.id == partData.id)
{//相同步骤不跳转 {//相同步骤不跳转
} }
else else
{//跳转不同步骤,可能是点击上下步产生的,每次点击上下步对应的跳转是上下步里面的第一个小步骤 {//跳转不同步骤,可能是点击上下步产生的,每次点击上下步对应的跳转是上下步里面的第一个小步骤
_IsPlayAnm = true; _IsPlayAnm = true;
if (_curStep.id > partData.id) if (_CurSceneStep.id > partData.id)
{//逆序跳转,倒播 {//逆序跳转,倒播
if (!jumpStepAble) if (!jumpStepAble)
{ {
_curTimeLineCtrl.ContinuePlayBackwardByPausePoint(GetPlayTime(partData), () => _curTimeLineCtrl.ContinuePlayBackwardByPausePoint(GetPlayTime(partData, jumpStepAble), () =>
{ {
NegativeJumpStep(partData); NegativeJumpStep(partData);
}); });
} }
else else
{ {
_curTimeLineCtrl.StopInTime(GetPlayTime(partData)); _curTimeLineCtrl.StopInTime(GetPlayTime(partData, jumpStepAble));
NegativeJumpStep(partData); NegativeJumpStep(partData);
} }
} }
else if (_curStep.id < partData.id) else if (_CurSceneStep.id < partData.id)
{//顺序跳转,正播 {//顺序跳转,正播
if (!jumpStepAble) if (!jumpStepAble)
{ {
_curTimeLineCtrl.ContinuePlayForwardByPausePoint(GetPlayTime(partData), () => _curTimeLineCtrl.ContinuePlayForwardByPausePoint(GetPlayTime(partData, jumpStepAble), () =>
{ {
PositiveJumpStep(partData); PositiveJumpStep(partData);
}); });
} }
else else
{ {
_curTimeLineCtrl.StopInTime(GetPlayTime(partData)); _curTimeLineCtrl.StopInTime(GetPlayTime(partData, jumpStepAble));
PositiveJumpStep(partData); PositiveJumpStep(partData);
} }
} }
@ -705,7 +620,7 @@ namespace ZXK.LouDiXvMuNiu
private void PositiveJumpStep(NiuData partData) private void PositiveJumpStep(NiuData partData)
{ {
_IsPlayAnm = false; _IsPlayAnm = false;
_curStep = partData; _CurSceneStep = partData;
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = partData; GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = partData;
} }
/// <summary> /// <summary>
@ -715,7 +630,7 @@ namespace ZXK.LouDiXvMuNiu
private void NegativeJumpStep(NiuData partData) private void NegativeJumpStep(NiuData partData)
{ {
_IsPlayAnm = false; _IsPlayAnm = false;
_curStep = partData; _CurSceneStep = partData;
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = partData; GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = partData;
} }
/// <summary> /// <summary>
@ -723,33 +638,33 @@ namespace ZXK.LouDiXvMuNiu
/// </summary> /// </summary>
/// <param name="step"></param> /// <param name="step"></param>
/// <returns></returns> /// <returns></returns>
private float GetPlayTime(NiuData step) private float GetPlayTime(NiuData step, bool jumpStepAble)
{ {
int allFrame = 0; int allFrame = 0;
List<NiuData> modelInfos = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType]; List<NiuData> modelInfos = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType];
string addAbleTaskName = null; string addAbleTaskName = null;
for (int a = 0; a < modelInfos.Count; a++) if (jumpStepAble)
{ {
if (step.id == modelInfos[a].id) addAbleTaskName = step.TaskName;
}
else
{
for (int a = 0; a < modelInfos.Count; a++)
{ {
//if(step.TaskName!= modelInfos[a - 1].TaskName) if (step.id == modelInfos[a].id)
//{
// addAbleTaskName = modelInfos[a - 1].TaskName;
//}
//else
{ {
addAbleTaskName = step.TaskName; if (step.TaskName != modelInfos[a - 1].TaskName)
{
addAbleTaskName = modelInfos[a - 1].TaskName;
}
else
{
addAbleTaskName = step.TaskName;
}
} }
} }
} }
//if (_curStep != null && step.TaskName != _curStep.TaskName)
//{
// addAbleTaskName = _curStep.TaskName;
//}
//else
//{
// addAbleTaskName = step.TaskName;
//}
for (int a = 0; a < modelInfos.Count; a++) for (int a = 0; a < modelInfos.Count; a++)
{ {
if (modelInfos[a].TaskName.Equals(addAbleTaskName) && modelInfos[a].id < step.id) if (modelInfos[a].TaskName.Equals(addAbleTaskName) && modelInfos[a].id < step.id)
@ -760,7 +675,7 @@ namespace ZXK.LouDiXvMuNiu
return allFrame / 60.0f; return allFrame / 60.0f;
} }
private int GetOptionIndex(string OptionMsg) public int GetOptionIndex(string OptionMsg)
{ {
switch (OptionMsg) switch (OptionMsg)
{ {

View File

@ -207,7 +207,7 @@ namespace ZXK.LouDiXvMuNiu
{//前后任务名字不同 {//前后任务名字不同
NiuSceneMng._Instance.InitPlayAnmState(obj, GameManager.Instance._DataNiuHandler.CurNiuHandler.PreviousValue); NiuSceneMng._Instance.InitPlayAnmState(obj, GameManager.Instance._DataNiuHandler.CurNiuHandler.PreviousValue);
} }
else if(obj.ThreeTaskName != GameManager.Instance._DataNiuHandler.CurNiuHandler.PreviousValue.ThreeTaskName) if(obj.ThreeTaskName != GameManager.Instance._DataNiuHandler.CurNiuHandler.PreviousValue.ThreeTaskName)
{//前后三级人物名字不同 {//前后三级人物名字不同
_defaultCameraTRTog.isOn = true; _defaultCameraTRTog.isOn = true;
@ -289,6 +289,53 @@ namespace ZXK.LouDiXvMuNiu
/// <param name="obj"></param> /// <param name="obj"></param>
private void UpdateTaskType(NiuData obj) private void UpdateTaskType(NiuData obj)
{ {
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Anim))
{
if (NiuSceneMng._Instance._CurSceneStep != obj)
{//区分是否是点击UI直接进行的步骤跳转
NiuSceneMng._Instance.JumpTimeline(obj, true);
}
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{
List<GameObject> tempToolArray = NiuSceneMng._Instance.GetNeedClickTools(obj);
NiuSceneMng._Instance.OnlyShowBTGeo(tempToolArray.ToArray());
}
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
if (string.IsNullOrEmpty(obj.Question))
{
NiuSceneMng._Instance.GetNeedClickTools(obj);
}
else
{
NiuSceneMng._Instance.AnswerSystemInStep(obj);
}
}
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_ChoiceVideoQuestion))
{
if (NiuSceneMng._Instance._CurSceneStep != obj)
{//区分是否是点击UI直接进行的步骤跳转
NiuSceneMng._Instance.JumpTimeline(obj, true);
}
bool isExam = GameManager.Instance._StateContext.GetState().Name.Equals("ExamState");
string[] answers = obj.OptionsAll.Split("|");
if (answers.Length % 2 != 0)
{
PopUpMng.ThreeVideoChoicePanel(obj.Question, answers, answers, NiuSceneMng._Instance.GetOptionIndex(obj.OptionRight), isExam, () =>
{
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep();
});
}
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_ChoicePicQuestion))
{
if (NiuSceneMng._Instance._CurSceneStep != obj)
{//区分是否是点击UI直接进行的步骤跳转
NiuSceneMng._Instance.JumpTimeline(obj, true);
}
NiuSceneMng._Instance.ChoiceImgInStep(obj.ModelBT.Split("|"));
}
if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Video)) if (obj.TaskType.Equals(ConstCtrl.TASKTYPE_Video))
{ {
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState")) if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))