1142 lines
50 KiB
C#
Raw Normal View History

2025-01-02 12:15:45 +08:00
using CG.UTility;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using UnityEngine.Playables;
using CG.Framework;
using System;
using UnityEngine.UI;
using KinematicCharacterController;
using KinematicCharacterController.Examples;
2025-01-02 12:15:45 +08:00
/*******************************************************************************
*Create By CG
*Function
*******************************************************************************/
namespace ZXK.LouDiXvMuNiu
{
public class NiuSceneMng : MonoBehaviour
{
public static NiuSceneMng _Instance = null;
//<2F><>Ʒչʾ
[SerializeField]
private Transform[] _toolContain = null;
[SerializeField]//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
private GameObject[] _signTrans = null;
2025-01-02 12:15:45 +08:00
private List<Transform> _curModuleToolArray = new List<Transform>();//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-01-02 14:13:47 +08:00
public NiuData _CurSceneStep;//Ϊ<>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Աȣ<D4B1><C8A3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>浱ǰ<E6B5B1><C7B0><EFBFBD><EFBFBD>
private Dictionary<bool, List<GameObject>> _curStepUseBTDic;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壬true<75><65>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嶼Ҫ<E5B6BC>㣬false<73><65>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public Dictionary<bool, List<GameObject>> _CurStepUseBtDic { get => _curStepUseBTDic; }
2025-01-02 12:15:45 +08:00
private List<OutLineRender> _currentHighlights = new List<OutLineRender>();
private PlayableDirector _curTimeLine = null;
private TimelineDirectorCtrl _curTimeLineCtrl = null;
[SerializeField]
private PlayableAsset _peoplePlanTimeLineClip = null;
[SerializeField]
private PlayableAsset _CSPLCLTimeLineClip = null;
[SerializeField]
private PlayableAsset _TQFQCLTimeLineClip = null;
[SerializeField]
private PlayableAsset _JZLVJCTimeLineClip = null;
[SerializeField]
private PlayableAsset _RGSJTimeLineClip = null;
[SerializeField]
private PlayableAsset _CPTimeLineClip = null;
[SerializeField]
private PlayableAsset _PTXZTimeLineClip = null;
[SerializeField]
private PlayableAsset _PTYZTimeLineClip = null;
[SerializeField]
private PlayableAsset _YYZDTimeLineClip = null;
[SerializeField]
private Transform _TQFQTran = null;
[SerializeField]
private Transform _CSPLTran = null;
[SerializeField]
private Transform _RGSJTran = null;
[SerializeField]
private Transform _CPTran = null;
2025-01-07 20:14:22 +08:00
[SerializeField]
private Transform _YYZDTran = null;
[SerializeField]
private Transform _PTYZTran = null;
2025-01-02 12:15:45 +08:00
private KinematicCharacterMotor kinematic = null;
private ExampleCharacterCamera characterCamera = null;
public bool _isNearCameraTR = false;
2025-01-02 12:15:45 +08:00
[ReadOnly]//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>Ŷ<EFBFBD><C5B6><EFBFBD>
public bool _IsPlayAnm = false;
private void Awake()
{
if (_Instance == null)
{
_Instance = this;
}
_curTimeLine = GetComponent<PlayableDirector>();
_curTimeLineCtrl = GetComponent<TimelineDirectorCtrl>();
kinematic = Camera.main.GetComponent<CameraControl>()._CameraCtrl.transform.GetComponent<KinematicCharacterMotor>();
characterCamera = Camera.main.GetComponent<ExampleCharacterCamera>();
2025-01-02 12:15:45 +08:00
GameManager.Instance._EventManager.AddListener<ClickToolArgs>(OnClickToolEvent);
}
private void Start()
{
GetCurModuleTools();
2025-01-07 20:14:22 +08:00
InitFirstState();
2025-01-02 12:15:45 +08:00
StartCoroutine("InitScene");
}
private IEnumerator InitScene()
{
yield return new WaitForSeconds(0.1f);
List<NiuData> tempData = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType];
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
for (int i = 0; i < tempData.Count; i++)
{
if (tempData[i].TaskType == ConstCtrl.TASKTYPE_ShowGeo)
{
2025-01-02 14:13:47 +08:00
_CurSceneStep = tempData[i];
2025-01-02 12:15:45 +08:00
break;
}
}
}
else
{
2025-01-02 14:13:47 +08:00
_CurSceneStep = tempData[0];
2025-01-02 12:15:45 +08:00
}
2025-01-02 14:13:47 +08:00
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = _CurSceneStep;
2025-01-14 15:34:07 +08:00
if (GameManager.Instance._loopPopExplain)
{
GameObject explainContainGeo = UI_Manage.Instance.ShowPanel("ExplainContainPanel", System.Type.GetType("ZXK.LouDiXvMuNiu.ExplainContainPanel"), UIGroup.Tip);
explainContainGeo.GetComponent<ExplainContainPanel>()._IsFirstEnter = true;
}
2025-01-02 12:15:45 +08:00
}
private void Update()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit rayHit;
NiuData curdata = GameManager.Instance._DataNiuHandler.CurNiuHandler.Value;
2025-01-12 15:26:31 +08:00
if (PopUpMng._TriAble && _CurSceneStep != null && !string.IsNullOrEmpty(curdata.TaskType))
2025-01-02 12:15:45 +08:00
{
2025-01-12 15:26:31 +08:00
UI_Manage.Instance.HidePanel("TooltipBoxTip");
if (Physics.Raycast(ray, out rayHit, Mathf.Infinity))
{
RecognizeNewGeo(rayHit, <>ľ<EFBFBD>Һ", rayHit.transform.name);
RecognizeNewGeo(rayHit, "OpenZhuShe", <><D7A2><EFBFBD><EFBFBD>");
if (_curModuleToolArray.Contains(rayHit.transform))
2025-01-02 12:15:45 +08:00
{
2025-01-12 15:26:31 +08:00
Vector3 worldPos = rayHit.point;
if (rayHit.transform.name == "baodingjiaJH")
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>ܣ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒչʾ<D5B9>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ʾ
if (curdata.TaskType.Equals(ConstCtrl.TASKTYPE_ShowGeo))
{
PopUpMng.ShowToolInfoTip(rayHit.transform.name, worldPos + Vector3.up * 0.05f, -1);
}
2025-01-07 20:14:22 +08:00
}
2025-01-12 15:26:31 +08:00
else
2025-01-02 12:15:45 +08:00
{
PopUpMng.ShowToolInfoTip(rayHit.transform.name, worldPos + Vector3.up * 0.05f, -1);
}
}
2025-01-12 15:26:31 +08:00
}
if (_CurSceneStep.TaskType.Equals(ConstCtrl.TASKTYPE_Anim))
2025-01-02 12:15:45 +08:00
{//timeline<6E><65><EFBFBD><EFBFBD>
2025-01-12 15:26:31 +08:00
if (Input.GetMouseButtonDown(0) && Physics.Raycast(ray, out rayHit, Mathf.Infinity) && !_IsPlayAnm)
2025-01-02 12:15:45 +08:00
{
2025-01-12 15:26:31 +08:00
if (!string.IsNullOrEmpty(curdata.CameraNearTR2) && _isNearCameraTR)
{
CameraSetNear2TR(curdata);
}
2025-01-02 12:15:45 +08:00
ClickToolCallInTrainState(rayHit.transform.gameObject, () =>
{
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(), false);
});
ClickToolCallInExamState(rayHit.transform.gameObject, () =>
{
2025-01-02 14:13:47 +08:00
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum), false);
2025-01-02 12:15:45 +08:00
});
}
}
2025-01-02 14:13:47 +08:00
else if (_CurSceneStep.TaskType.Equals(ConstCtrl.TASKTYPE_Video))
2025-01-02 12:15:45 +08:00
{
2025-01-09 18:12:40 +08:00
if (Input.GetMouseButtonDown(0) && Physics.Raycast(ray, out rayHit, Mathf.Infinity))
2025-01-02 12:15:45 +08:00
{
ClickToolCallInTrainState(rayHit.transform.gameObject, () =>
{
GameObject videoGeo = UI_Manage.Instance.ShowPanel("VideoShowPanel", Type.GetType("ZXK.LouDiXvMuNiu.VideoShowPanel"), UIGroup.Tip);
2025-01-02 14:13:47 +08:00
videoGeo.GetComponent<VideoShowPanel>().PlayVideoClip(_CurSceneStep.VideoPath, () =>
2025-01-02 12:15:45 +08:00
{
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep();
});
});
}
2025-01-12 15:26:31 +08:00
2025-01-02 12:15:45 +08:00
}
}
}
private void OnDestroy()
{
_curTimeLineCtrl?.Stop();
GameManager.Instance._EventManager.RemoveListener<ClickToolArgs>(OnClickToolEvent);
}
private void OnClickToolEvent(ClickToolArgs e)
{
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
if (e.SelectTool == <>ľ<EFBFBD>Һ")
{
string[] temp = new string[] { <>ľ<EFBFBD>ҺA", <>ľ<EFBFBD>ҺB", <>ľ<EFBFBD>ҺC" };
for (int a = 0; a < temp.Length; a++)
{
GameObject toolTempGeo = UtilitiesMng.GetGeoByName(_toolContain, temp[a], true);
toolTempGeo.SetActive(true);
}
}
else
{
GameObject toolGeo = UtilitiesMng.GetGeoByName(_toolContain, e.SelectTool, true);
toolGeo?.SetActive(true);
}
2025-01-02 12:15:45 +08:00
}
}
/// <summary>
/// <20><><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
/// </summary>
2025-01-07 20:14:22 +08:00
private void InitFirstState()
2025-01-02 12:15:45 +08:00
{
foreach (Transform t in _TQFQTran)
{
t.gameObject.SetActive(false);
}
foreach (Transform t in _CSPLTran)
{
t.gameObject.SetActive(false);
}
foreach (Transform t in _RGSJTran)
{
t.gameObject.SetActive(false);
}
foreach (Transform t in _PTYZTran)
{
t.gameObject.SetActive(false);
}
2025-01-07 20:14:22 +08:00
//Ĭ<>Ϲ<EFBFBD><CFB9><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>ʾ
UseToolsActive(false);
}
public void InitPlayAnmState(NiuData curObj, NiuData previousObj)
{
if (curObj == null) return;
2025-01-07 20:14:22 +08:00
if (curObj.TaskName != previousObj.TaskName)
{
InitFirstState();
2025-01-08 17:11:04 +08:00
if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_TQFAQCL))
{
2025-01-09 14:34:36 +08:00
GameObject jiaziGeo = UtilitiesMng.GetGeoByName(_toolContain, "M_Jiazi_b", true);
jiaziGeo.transform.localPosition = new Vector3(-0.3f, 0.5998f, 2.47f);
jiaziGeo.transform.localRotation = Quaternion.Euler(Vector3.zero);
2025-01-08 17:11:04 +08:00
_TQFQTran.Find("SM_Niu_CaShi_an01").gameObject.SetActive(true);
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_CSPLCL))
{
GameObject jiaziGeo = UtilitiesMng.GetGeoByName(_toolContain, "M_Jiazi_b", true);
jiaziGeo.transform.localPosition = new Vector3(-0.3f, 0.5998f, 0.157f);
jiaziGeo.transform.localRotation = Quaternion.Euler(Vector3.zero);
_CSPLTran.Find("SM_Niu_ZhusheB_Bozi_an02renG").gameObject.SetActive(true);
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_JZLVJC))
{
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_RGSJ))
{
GameObject jiaziGeo = UtilitiesMng.GetGeoByName(_toolContain, "M_Jiazi_b", true);
jiaziGeo.transform.localPosition = new Vector3(-0.485f, 0.5997721f, 2.109f);
jiaziGeo.transform.localRotation = Quaternion.Euler(Vector3.zero);
GameObject gjj2Geo = UtilitiesMng.GetGeoByName(_toolContain, "<22><><EFBFBD>߼<EFBFBD>2", true);
gjj2Geo.gameObject.SetActive(true);
_RGSJTran.Find("SM_Niu_RenGongSouJing01").gameObject.SetActive(true);
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_CP))
{
GameObject jiaziGeo = UtilitiesMng.GetGeoByName(_toolContain, "M_Jiazi_b", true);
jiaziGeo.transform.localPosition = new Vector3(-0.81f, 0.632f, 2.883f);
jiaziGeo.transform.localRotation = Quaternion.Euler(Vector3.up * -180.0f);
Transform toolTemp = jiaziGeo.transform.Find("<22><><EFBFBD>ѹ<EFBFBD>");
foreach (Transform item in toolTemp)
{
item.gameObject.SetActive(true);
}
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{//<2F><><EFBFBD><EFBFBD>ѵ<EFBFBD><D1B5>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD>Ʒչʾʱ<CABE><CAB1>ʾ<EFBFBD><CABE>Ʒ
if (curObj.ThreeTaskName == ConstCtrl.ThreeTaskName_PrepareGeo)
{
foreach (Transform item in toolTemp)
{
item.gameObject.SetActive(false);
}
}
}
_CPTran.Find("SM_Niu_ChongPei01").gameObject.SetActive(true);
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_PTXZ))
{
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_PTYZ))
{
GameObject jiaziGeo = UtilitiesMng.GetGeoByName(_toolContain, "M_Jiazi_b", true);
jiaziGeo.transform.localPosition = new Vector3(-0.485f, 0.5997721f, 2.109f);
jiaziGeo.transform.localRotation = Quaternion.Euler(Vector3.zero);
_PTYZTran.Find("SM_PeiTaiYiZhi03").gameObject.SetActive(true);
2025-01-08 17:11:04 +08:00
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_YYZD))
{
GameObject jiaziGeo = UtilitiesMng.GetGeoByName(_toolContain, "M_Jiazi_b", true);
jiaziGeo.transform.localPosition = new Vector3(-0.81f, 0.632f, 2.883f);
jiaziGeo.transform.localRotation = Quaternion.Euler(Vector3.up * -180.0f);
_YYZDTran.Find("niu_yindaojiancha").gameObject.SetActive(true);
2025-01-08 17:11:04 +08:00
}
2025-01-07 20:14:22 +08:00
}
if (curObj.ThreeTaskName != previousObj.ThreeTaskName)
{
2025-01-07 20:14:22 +08:00
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{//<2F><><EFBFBD><EFBFBD>ѵ<EFBFBD><D1B5>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD>Ʒչʾʱ<CABE><CAB1>ʾ<EFBFBD><CABE>Ʒ
if (curObj.ThreeTaskName == ConstCtrl.ThreeTaskName_PrepareGeo)
{
NiuSceneMng._Instance.UseToolsActive(true);
}
}
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա׼<D4B1><D7BC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>ʾ
if (curObj.ThreeTaskName == ConstCtrl.ThreeTaskName_PeoplePlan)
{
2025-01-07 20:14:22 +08:00
List<NiuData> curSteps = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType];
for (int i = 0; i < curSteps.Count; i++)
{
2025-01-07 20:14:22 +08:00
if (curSteps[i].ThreeTaskName == ConstCtrl.ThreeTaskName_PeoplePlan)
{
string toolStr = curSteps[i].ModelBT;
GameObject toolGeo = UtilitiesMng.GetGeoByName(new Transform[1] { transform }, toolStr, true);
toolGeo.SetActive(true);
}
}
}
2025-01-02 12:15:45 +08:00
2025-01-07 20:14:22 +08:00
if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_TQFAQCL))
{
2025-01-08 17:11:04 +08:00
SetTimeLineCtrl(curObj, previousObj, _TQFQCLTimeLineClip, 0);
2025-01-07 20:14:22 +08:00
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_CSPLCL))
{
2025-01-08 17:11:04 +08:00
SetTimeLineCtrl(curObj, previousObj, _CSPLCLTimeLineClip, 0);
2025-01-07 20:14:22 +08:00
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_JZLVJC))
{
2025-01-08 17:11:04 +08:00
SetTimeLineCtrl(curObj, previousObj, _JZLVJCTimeLineClip, 0);
2025-01-07 20:14:22 +08:00
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_RGSJ))
{
2025-01-08 17:11:04 +08:00
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{//<2F><><EFBFBD><EFBFBD>ѵ<EFBFBD><D1B5>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD>Ʒչʾʱ<CABE><CAB1>ʾ<EFBFBD><CABE>Ʒ
if (curObj.ThreeTaskName == ConstCtrl.ThreeTaskName_PrepareGeo)
{
GameObject geoTemp = UtilitiesMng.GetGeoByName(_toolContain, "baodingjiaJH", true);
geoTemp.SetActive(true);
}
SetTimeLineCtrl(curObj, previousObj, _RGSJTimeLineClip, 0);
}
else
{
SetTimeLineCtrl(curObj, previousObj, _RGSJTimeLineClip, 5 / 60.0f);
}
2025-01-07 20:14:22 +08:00
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_CP))
{
GameObject jiaziGeo = UtilitiesMng.GetGeoByName(_toolContain, "M_Jiazi_b", true);
Transform toolTemp = jiaziGeo.transform.Find("<22><><EFBFBD>ѹ<EFBFBD>");
foreach (Transform item in toolTemp)
{
item.gameObject.SetActive(true);
}
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{//<2F><><EFBFBD><EFBFBD>ѵ<EFBFBD><D1B5>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD>Ʒչʾʱ<CABE><CAB1>ʾ<EFBFBD><CABE>Ʒ
2025-01-09 14:34:36 +08:00
SetTimeLineCtrl(curObj, previousObj, _CPTimeLineClip, 0);
2025-01-07 20:14:22 +08:00
if (curObj.ThreeTaskName == ConstCtrl.ThreeTaskName_PrepareGeo)
{
foreach (Transform item in toolTemp)
{
item.gameObject.SetActive(false);
}
2025-01-09 14:34:36 +08:00
GameObject geoTemp = UtilitiesMng.GetGeoByName(_toolContain, "baodingjiaJH", true);
geoTemp.SetActive(true);
2025-01-07 20:14:22 +08:00
}
2025-01-08 17:11:04 +08:00
}
else
{
SetTimeLineCtrl(curObj, previousObj, _CPTimeLineClip, 5 / 60.0f);
2025-01-07 20:14:22 +08:00
}
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_PTXZ))
{
2025-01-08 17:11:04 +08:00
SetTimeLineCtrl(curObj, previousObj, _PTXZTimeLineClip, 0);
2025-01-07 20:14:22 +08:00
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_PTYZ))
{
2025-01-08 17:11:04 +08:00
SetTimeLineCtrl(curObj, previousObj, _PTYZTimeLineClip, 0);
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{//<2F><><EFBFBD><EFBFBD>ѵ<EFBFBD><D1B5>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD>Ʒչʾʱ<CABE><CAB1>ʾ<EFBFBD><CABE>Ʒ
if (curObj.ThreeTaskName == ConstCtrl.ThreeTaskName_PrepareGeo)
{
GameObject bhyGeoTemp = UtilitiesMng.GetGeoByName(_toolContain, "<22><><EFBFBD><EFBFBD>Һ", true);
bhyGeoTemp.transform.localPosition = new Vector3(-0.0822f, 0.396500051f, 0.00615262985f);
bhyGeoTemp.transform.localRotation = new Quaternion(0,0.707106829f,0.707106829f,0);
GameObject ptygeoTemp = UtilitiesMng.GetGeoByName(_toolContain, "<22><>̥Һ", true);
ptygeoTemp.transform.localPosition = new Vector3(-0.0820000023f, 0.396499991f, -0.0887999982f);
ptygeoTemp.transform.localRotation = new Quaternion(0, 0.707106829f, 0.707106829f, 0);
GameObject ksqgeoTemp = UtilitiesMng.GetGeoByName(_toolContain, "<22><><EFBFBD><EFBFBD>ǹ", true);
ksqgeoTemp.transform.localPosition = new Vector3(0.25999999f, 0.409000009f, 0.381999999f);
ksqgeoTemp.transform.localRotation = new Quaternion(-0.00385814067f, 0.707096279f, 0.00385814067f, 0.707096279f);
GameObject blxggeoTemp = UtilitiesMng.GetGeoByName(_toolContain, "<22><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8>", true);
blxggeoTemp.transform.localPosition = new Vector3(0.221799999f, 0.400900006f, -0.0782999992f);
blxggeoTemp.transform.localRotation = new Quaternion(0.5f, 0.5f, 0.5f, 0.5f);
}
}
2025-01-07 20:14:22 +08:00
}
else if (GameManager.Instance._CurModelType.Equals(ConstCtrl.ModuleName_YYZD))
{
GameObject jiaziGeo = UtilitiesMng.GetGeoByName(_toolContain, "M_Jiazi_b", true);
Transform toolTemp = jiaziGeo.transform.Find("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
foreach (Transform item in toolTemp)
{
item.gameObject.SetActive(true);
}
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{//<2F><><EFBFBD><EFBFBD>ѵ<EFBFBD><D1B5>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD>Ʒչʾʱ<CABE><CAB1>ʾ<EFBFBD><CABE>Ʒ
if (curObj.ThreeTaskName == ConstCtrl.ThreeTaskName_PrepareGeo)
{
foreach (Transform item in toolTemp)
{
item.gameObject.SetActive(false);
}
}
}
2025-01-08 17:11:04 +08:00
SetTimeLineCtrl(curObj, previousObj, _YYZDTimeLineClip, 0);
2025-01-07 20:14:22 +08:00
}
2025-01-02 12:15:45 +08:00
}
}
/// <summary>
/// <20><><EFBFBD>ݲ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
2025-01-08 17:11:04 +08:00
private void SetTimeLineCtrl(NiuData curObj, NiuData previousObj, PlayableAsset timeAsset,double pauseTime)
2025-01-02 12:15:45 +08:00
{
2025-01-07 20:14:22 +08:00
if (curObj!=null&& previousObj!=null)
2025-01-02 12:15:45 +08:00
{
if (curObj.TaskName.Equals(ConstCtrl.TaskName_ActualOperation))
{
2025-01-07 20:14:22 +08:00
if (_curTimeLine.playableAsset != timeAsset)
{
_curTimeLine.playableAsset = timeAsset;
_curTimeLineCtrl.SetDuration();
2025-01-08 17:11:04 +08:00
_curTimeLineCtrl.StopInTime(pauseTime);
2025-01-07 20:14:22 +08:00
}
2025-01-02 12:15:45 +08:00
}
else if (curObj.TaskName.Equals(ConstCtrl.TaskName_OperationPlan))
{
2025-01-07 20:14:22 +08:00
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
2025-01-02 12:15:45 +08:00
{
2025-01-07 20:14:22 +08:00
if (_curTimeLine.playableAsset != _peoplePlanTimeLineClip)
{
_curTimeLine.playableAsset = _peoplePlanTimeLineClip;
_curTimeLineCtrl.SetDuration();
_curTimeLineCtrl.Stop();
}
}
else
{
if (curObj.ThreeTaskName == ConstCtrl.ThreeTaskName_PrepareGeo)
{
if (_curTimeLine.playableAsset != timeAsset)
{
_curTimeLine.playableAsset = timeAsset;
_curTimeLineCtrl.SetDuration();
2025-01-08 17:11:04 +08:00
_curTimeLineCtrl.StopInTime(pauseTime);
2025-01-07 20:14:22 +08:00
}
}
if (curObj.ThreeTaskName == ConstCtrl.ThreeTaskName_PeoplePlan)
{
if (_curTimeLine.playableAsset != _peoplePlanTimeLineClip)
{
_curTimeLine.playableAsset = _peoplePlanTimeLineClip;
_curTimeLineCtrl.SetDuration();
_curTimeLineCtrl.Stop();
}
}
2025-01-02 12:15:45 +08:00
}
}
}
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1>ǰģ<C7B0><C4A3><EFBFBD><EFBFBD>Ҫ<EFBFBD>õ<EFBFBD><C3B5>Ĺ<EFBFBD><C4B9><EFBFBD>
/// </summary>
/// <returns></returns>
private void GetCurModuleTools()
{
List<string> toolArray = new List<string>();
List<NiuData> tempData = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType];
for (int i = 0; i < tempData.Count; i++)
{
if (string.IsNullOrEmpty(tempData[i].ToolsName)) continue;
string[] tools = tempData[i].ToolsName.Split("|");
for (int j = 0; j < tools.Length; j++)
{
GameObject toolGeo = UtilitiesMng.GetGeoByName(_toolContain, tools[j], true);
2025-01-02 12:15:45 +08:00
if (toolGeo&&!toolArray.Contains(tools[j]))
{
toolArray.Add(tools[j]);
_curModuleToolArray.Add(toolGeo.transform);
}
}
}
}
/// <summary>
/// <20><>ģ<EFBFBD><C4A3><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>ʾ״̬
/// </summary>
/// <param name="showAble"></param>
public void UseToolsActive(bool showAble)
{
for (int i = 0; i < _curModuleToolArray.Count; i++)
{
_curModuleToolArray[i].gameObject.SetActive(showAble);
}
}
/// <summary>
/// <20><>ȡ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>
/// </summary>
/// <param name="step"></param>
public void GetNeedClickTools(NiuData step)
2025-01-02 12:15:45 +08:00
{
_curStepUseBTDic = new Dictionary<bool, List<GameObject>>();
List<GameObject> toolTemp = new List<GameObject>();
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
2025-01-02 12:15:45 +08:00
{
string[] tempBts = step.ModelBT.Split("|");
string[] tempSelects = tempBts[0].Split("+");
for (int i = 0; i < tempSelects.Length; i++)
2025-01-02 12:15:45 +08:00
{
2025-01-06 16:46:47 +08:00
GameObject tempGeo = UtilitiesMng.GetGeoByName(new Transform[1] { transform }, tempSelects[i], step.ThreeTaskName != ConstCtrl.ThreeTaskName_PeoplePlan);
if (tempGeo == null) continue;
tempGeo.SetActive(true);
toolTemp.Add(tempGeo);
2025-01-02 12:15:45 +08:00
}
_curStepUseBTDic.Add(true, toolTemp);
}
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
string[] tempBts = step.ModelBT.Split("|");
if (!string.IsNullOrEmpty(step.ExamModelBT))
2025-01-02 12:15:45 +08:00
{
tempBts = step.ExamModelBT.Split("|");
2025-01-02 12:15:45 +08:00
}
for (int i = 0; i < tempBts.Length; i++)
2025-01-02 12:15:45 +08:00
{
string[] tempExamSelects = null;
if (tempBts[i].Contains("+"))
{
tempExamSelects = tempBts[i].Split("+");
}
else if (tempBts[i].Contains("*"))
{
tempExamSelects = tempBts[i].Split("*");
}
else
2025-01-02 12:15:45 +08:00
{
tempExamSelects = new string[1] { tempBts[i] };
}
for (int j = 0; j < tempExamSelects.Length; j++)
{
GameObject tempGeo = UtilitiesMng.GetGeoByName(new Transform[1] { transform }, tempExamSelects[j], true);
if (tempGeo == null) continue;
tempGeo.SetActive(true);
if (i == 0)
{
toolTemp.Add(tempGeo);
}
}
if (tempBts[i].Contains("*"))
{
_curStepUseBTDic.Add(false, toolTemp);
2025-01-02 12:15:45 +08:00
}
else
{
_curStepUseBTDic.Add(true, toolTemp);
2025-01-02 12:15:45 +08:00
}
}
}
}
/// <summary>
/// <20>ô˲<C3B4><CBB2><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
/// </summary>
/// <param name="model"><3E><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
public void OnlyShowBTGeo(GameObject[] modelBTsName)
{
for (int i = 0; i < _currentHighlights.Count; i++)
{
_currentHighlights[i].enabled = false;
}
for (int i = 0; i < modelBTsName.Length; i++)
{
string modelBTName = modelBTsName[i].name;
if (!modelBTName.Contains("_sign"))
{
OutLineRender outlineRender;
// <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>û<EFBFBD>з<EFBFBD><D0B7><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>
if (!modelBTsName[i].TryGetComponent(out outlineRender))
{
outlineRender = modelBTsName[i].AddComponent<OutLineRender>();
}
// <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>ǿ<EFBFBD>Ⱥ<EFBFBD>Ĭ<EFBFBD>Ͻ<EFBFBD><CFBD>÷<EFBFBD><C3B7><EFBFBD>Ч<EFBFBD><D0A7>
outlineRender.OutLineStrength = 1;
outlineRender.enabled = true;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
_currentHighlights.Add(outlineRender);
}
}
}
/// <summary>
/// ѵ<><D1B5>ģʽ<C4A3>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B4A5><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
/// </summary>
/// <param name="triGeo"></param>
/// <param name="clickFinishCall"></param>
private void ClickToolCallInTrainState(GameObject triGeo,Action clickFinishCall)
{
2025-01-07 20:14:22 +08:00
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState")) return;
if (_curStepUseBTDic.ContainsKey(true))
2025-01-02 12:15:45 +08:00
{
List<GameObject> useBts = _curStepUseBTDic[true];
if (useBts.Contains(triGeo))
{
if (triGeo.GetComponent<OutLineRender>())
{
triGeo.GetComponent<OutLineRender>().enabled = false;
}
if (triGeo.tag != ConstCtrl.SceneTool_Tag)
2025-01-02 12:15:45 +08:00
{
triGeo.SetActive(false);
}
useBts.Remove(triGeo);
}
if (useBts.Count == 0)
{
foreach (var item in _curStepUseBTDic)
{
for (int i = 0; i < item.Value.Count; i++)
{
if (item.Value[i].tag != ConstCtrl.SceneTool_Tag)
{
item.Value[i].SetActive(false);
}
2025-01-02 12:15:45 +08:00
}
}
_curStepUseBTDic.Clear();
clickFinishCall?.Invoke();
}
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>ģʽ<C4A3>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B4A5><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
/// </summary>
/// <param name="triGeo"></param>
/// <param name="clickFinishCall"></param>
private void ClickToolCallInExamState(GameObject triGeo, Action clickFinishCall)
{
if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
bool addScoreTemp = true;
List<GameObject> useBts = new List<GameObject>();
if (_curStepUseBTDic.ContainsKey(false))
2025-01-02 12:15:45 +08:00
{
useBts = _curStepUseBTDic[false];
if (useBts.Contains(triGeo))
2025-01-02 12:15:45 +08:00
{
useBts.Clear();
}
}
else if(_curStepUseBTDic.ContainsKey(true))
{
useBts = _curStepUseBTDic[true];
if (useBts.Contains(triGeo))
{
if (triGeo.GetComponent<OutLineRender>())
{
triGeo.GetComponent<OutLineRender>().enabled = false;
}
if (triGeo.tag != ConstCtrl.SceneTool_Tag)
{
triGeo.SetActive(false);
}
useBts.Remove(triGeo);
2025-01-02 12:15:45 +08:00
}
else
{
PopUpMng.PopChoseErrorToast(_CurSceneStep.ExamEvvr, 2.0f,()=> {
useBts.Clear();
addScoreTemp = false;
});
2025-01-02 12:15:45 +08:00
}
}
if (useBts.Count == 0)
{
foreach (var item in _curStepUseBTDic)
{
for (int i = 0; i < item.Value.Count; i++)
{
if (item.Value[i].tag != ConstCtrl.SceneTool_Tag)
{
item.Value[i].SetActive(false);
}
2025-01-02 12:15:45 +08:00
}
}
2025-01-07 20:14:22 +08:00
for (int i = 0; i < _signTrans.Length; i++)
{
_signTrans[i].SetActive(false);
}
2025-01-02 12:15:45 +08:00
_curStepUseBTDic.Clear();
if (addScoreTemp)
{
2025-01-02 14:13:47 +08:00
GameManager.Instance._DataNiuHandler.AddScore(_CurSceneStep.ModuleName, _CurSceneStep.ThreeTaskName, _CurSceneStep.Score);
2025-01-02 12:15:45 +08:00
}
clickFinishCall?.Invoke();
}
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD><EFBFBD><EFBFBD>ʽ
/// </summary>
/// <param name="step"></param>
public void AnswerSystemInStep(NiuData step)
{
string[] answers = step.OptionsAll.Split("|");
PopUpMng.PopAnswerQuestions(step.Question, answers, GetOptionIndex(step.OptionRight), () =>
{
2025-01-02 14:13:47 +08:00
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum), false);
2025-01-02 12:15:45 +08:00
});
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD><EFBFBD><EFBFBD>ʽ
/// </summary>
/// <param name="step"></param>
public void TimeTranInStep(NiuData step)
{
_IsPlayAnm = true;
string[] msg = step.ModelBT.Split("|");
string timeFixMsg = msg[0];
string[] timepoints = msg[1].Split("-");
int startTime = int.Parse(timepoints[0]);
int endTime = int.Parse(timepoints[1]);
PopUpMng.PopTimeIntCount(timeFixMsg, startTime, endTime, 3.0f, endTime >= startTime, () =>
{
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{
2025-01-09 18:12:40 +08:00
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(), false);
//GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep();
2025-01-02 12:15:45 +08:00
}
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
2025-01-09 18:12:40 +08:00
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum), false);
//GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum);
2025-01-02 12:15:45 +08:00
}
_IsPlayAnm = false;
2025-01-02 12:15:45 +08:00
});
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><C7B9>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵Ĵ<CDB5><C4B4><EFBFBD><EFBFBD><EFBFBD>ʽ
/// </summary>
/// <param name="step"></param>
public void TimeTranAnmInStep(NiuData step)
{
string[] msg = step.ModelBT.Split("|");
string timeFixMsg = msg[0];
string[] timepoints = msg[1].Split("-");
int startTime = int.Parse(timepoints[0]);
int endTime = int.Parse(timepoints[1]);
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(), false);
}
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
2025-01-02 14:13:47 +08:00
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(_CurSceneStep.QNextNum), false);
2025-01-02 12:15:45 +08:00
}
float durTime = step.TimelineLength / 60.0f;
PopUpMng.PopTimeIntCount(timeFixMsg, startTime, endTime, durTime, endTime >= startTime, null);
}
/// <summary>
/// ͼƬѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// Ŀǰֻ<C7B0><D6BB><EFBFBD><EFBFBD>̥ѡ<CCA5><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ҫ
/// </summary>
/// <param name="temp"></param>
2025-01-02 14:13:47 +08:00
public void ChoiceImgInStep(string[] temp)
2025-01-02 12:15:45 +08:00
{
if (GameManager.Instance._StateContext.GetState().Name.Equals("TrainState"))
{
GameObject tempGeo = UtilitiesMng.GetGeoByName(new Transform[1] { transform }, temp[0], true);
tempGeo.SetActive(true);
tempGeo.GetComponent<Toggle>().isOn = false;
tempGeo.GetComponent<Toggle>().onValueChanged.AddListener((isOn) =>
{
if (isOn)
{
2025-01-12 15:26:31 +08:00
//tempGeo.transform.GetChild(0).gameObject.SetActive(true);
//float a = 0.0f;
//DOTween.To(() => a, x => x = a, 1.0f, 2.0f).OnComplete(() =>
//{
// tempGeo.SetActive(false);
//});
2025-01-02 12:15:45 +08:00
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(), false);
2025-01-12 15:26:31 +08:00
tempGeo.SetActive(false);
2025-01-02 12:15:45 +08:00
}
});
}
else if (GameManager.Instance._StateContext.GetState().Name.Equals("ExamState"))
{
List<GameObject> togs = new List<GameObject>();
for (int i = 0; i < temp.Length; i++)
{
GameObject tempGeo = UtilitiesMng.GetGeoByName(new Transform[1] { transform }, temp[i], true);
tempGeo.transform.GetChild(0).gameObject.SetActive(false);
togs.Add(tempGeo);
tempGeo.SetActive(true);
tempGeo.GetComponent<Toggle>().isOn = false;
tempGeo.GetComponent<Toggle>().onValueChanged.AddListener((isOn) =>
{
if (isOn)
{
for (int i = 0; i < togs.Count; i++)
{
togs[i].transform.GetChild(0).gameObject.SetActive(true);
}
float a = 0.0f;
DOTween.To(() => a, x => x = a, 1.0f, 2.0f).OnComplete(() =>
{
for (int i = 0; i < togs.Count; i++)
{
togs[i].SetActive(false);
}
});
JumpTimeline(GameManager.Instance._DataNiuHandler.GetNextStep(), false);
}
});
}
}
}
2025-01-02 19:54:22 +08:00
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Timeline<6E><65><EFBFBD><EFBFBD>
/// </summary>
public void TimelineContinue()
{
_curTimeLineCtrl.Continue();
}
2025-01-02 12:15:45 +08:00
/// <summary>
/// <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="partData"></param>
public void JumpTimeline(NiuData partData,bool jumpStepAble)
{
2025-01-02 14:13:47 +08:00
if (_CurSceneStep == null) _CurSceneStep = partData;
if (_CurSceneStep.id == partData.id)
2025-01-02 12:15:45 +08:00
{//<2F><>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><E8B2BB>ת
}
else
{//<2F><>ת<EFBFBD><D7AA>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><E8A3AC><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>ÿ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
_IsPlayAnm = true;
2025-01-02 14:13:47 +08:00
if (_CurSceneStep.id > partData.id)
2025-01-02 12:15:45 +08:00
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!jumpStepAble)
{
2025-01-07 20:14:22 +08:00
_curTimeLineCtrl.ContinuePlayBackwardByPausePoint(GetPlayTime(_CurSceneStep,partData, jumpStepAble), () =>
2025-01-02 12:15:45 +08:00
{
NegativeJumpStep(partData);
});
}
else
{
2025-01-07 20:14:22 +08:00
_curTimeLineCtrl.StopInTime(GetPlayTime(_CurSceneStep, partData, jumpStepAble));
2025-01-02 12:15:45 +08:00
NegativeJumpStep(partData);
}
}
2025-01-02 14:13:47 +08:00
else if (_CurSceneStep.id < partData.id)
2025-01-02 12:15:45 +08:00
{//˳<><CBB3><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!jumpStepAble)
{
2025-01-07 20:14:22 +08:00
_curTimeLineCtrl.ContinuePlayForwardByPausePoint(GetPlayTime(_CurSceneStep, partData, jumpStepAble), () =>
2025-01-02 12:15:45 +08:00
{
PositiveJumpStep(partData);
});
}
else
{
2025-01-07 20:14:22 +08:00
_curTimeLineCtrl.StopInTime(GetPlayTime(_CurSceneStep, partData, jumpStepAble));
2025-01-02 12:15:45 +08:00
PositiveJumpStep(partData);
}
}
}
}
2025-01-09 18:12:40 +08:00
public void JumpToTime(float time)
{
_curTimeLineCtrl.ContinuePlayBackwardByPausePoint(time, null);
}
2025-01-02 12:15:45 +08:00
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
/// </summary>
/// <param name="partData"></param>
private void PositiveJumpStep(NiuData partData)
{
_IsPlayAnm = false;
2025-01-02 14:13:47 +08:00
_CurSceneStep = partData;
2025-01-02 12:15:45 +08:00
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = partData;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
/// </summary>
/// <param name="partData"></param>
private void NegativeJumpStep(NiuData partData)
{
_IsPlayAnm = false;
2025-01-02 14:13:47 +08:00
_CurSceneStep = partData;
2025-01-02 12:15:45 +08:00
GameManager.Instance._DataNiuHandler.CurNiuHandler.Value = partData;
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1>ǰҪ<C7B0><D2AA><EFBFBD>ŵĶ<C5B5><C4B6><EFBFBD>Ƭ<EFBFBD>εĿ<CEB5>ʼʱ<CABC><CAB1>
/// </summary>
/// <param name="step"></param>
/// <returns></returns>
2025-01-07 20:14:22 +08:00
private float GetPlayTime(NiuData perviousStep,NiuData step, bool jumpStepAble)
2025-01-02 12:15:45 +08:00
{
int allFrame = 0;
List<NiuData> modelInfos = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType];
2025-01-02 14:13:47 +08:00
2025-01-02 12:15:45 +08:00
string addAbleTaskName = null;
2025-01-02 14:13:47 +08:00
if (jumpStepAble)
{
addAbleTaskName = step.TaskName;
}
else
2025-01-02 12:15:45 +08:00
{
2025-01-07 20:14:22 +08:00
if(perviousStep.TaskName!= step.TaskName)
2025-01-02 12:15:45 +08:00
{
2025-01-07 20:14:22 +08:00
addAbleTaskName = perviousStep.TaskName;
}
else
{
addAbleTaskName = step.TaskName;
2025-01-02 12:15:45 +08:00
}
}
for (int a = 0; a < modelInfos.Count; a++)
{
if (modelInfos[a].TaskName.Equals(addAbleTaskName) && modelInfos[a].id < step.id)
{
allFrame += modelInfos[a].TimelineLength;
}
}
return allFrame / 60.0f;
}
2025-01-02 14:13:47 +08:00
public int GetOptionIndex(string OptionMsg)
2025-01-02 12:15:45 +08:00
{
switch (OptionMsg)
{
case "A":
return 0;
case "B":
return 1;
case "C":
return 2;
case "D":
return 3;
default:
return 0;
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD>
/// </summary>
public void CameraSetNearTR(NiuData obj)
{
if (string.IsNullOrEmpty(obj.CameraNearTR)) return;
_isNearCameraTR = true;
try
{
string[] cameraDefaultTR = obj.CameraNearTR.Split("|");
string[] camDefPosStr = cameraDefaultTR[0].Split("_");
string[] camDefRotStr = cameraDefaultTR[1].Split("_");
Vector3 cameraDefPos = new Vector3(float.Parse(camDefPosStr[0]), float.Parse(camDefPosStr[1]), float.Parse(camDefPosStr[2]));
Vector3 cameraDefRot = new Vector3(float.Parse(camDefRotStr[0]), float.Parse(camDefRotStr[1]), float.Parse(camDefRotStr[2]));
ChangeCameraPos(cameraDefPos, cameraDefRot);
}
catch (Exception ex)
{
WDebug.LogError($"<22><><EFBFBD>ݳ<EFBFBD><DDB3>ִ<EFBFBD><D6B4><EFBFBD>:{ex.Message}");
return;
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪĬ<CEAA><C4AC><EFBFBD>ӽ<EFBFBD>
/// </summary>
/// <param name="obj"></param>
public void CameraSetDefaultTR(NiuData obj)
{
if (string.IsNullOrEmpty(obj.CameraDefaultTR)) return;
_isNearCameraTR = false;
try
{
string[] cameraDefaultTR = obj.CameraDefaultTR.Split("|");
string[] camDefPosStr = cameraDefaultTR[0].Split("_");
string[] camDefRotStr = cameraDefaultTR[1].Split("_");
Vector3 cameraDefPos = new Vector3(float.Parse(camDefPosStr[0]), float.Parse(camDefPosStr[1]), float.Parse(camDefPosStr[2]));
Vector3 cameraDefRot = new Vector3(float.Parse(camDefRotStr[0]), float.Parse(camDefRotStr[1]), float.Parse(camDefRotStr[2]));
ChangeCameraPos(cameraDefPos, cameraDefRot);
}
catch (Exception ex)
{
WDebug.LogError($"<22><><EFBFBD>ݳ<EFBFBD><DDB3>ִ<EFBFBD><D6B4><EFBFBD>:{ex.Message}");
return;
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD>
/// </summary>
private void CameraSetNear2TR(NiuData obj)
{
if (string.IsNullOrEmpty(obj.CameraNearTR2)) return;
try
{
string[] cameraDefaultTR = obj.CameraNearTR2.Split("|");
string[] camDefPosStr = cameraDefaultTR[0].Split("_");
string[] camDefRotStr = cameraDefaultTR[1].Split("_");
Vector3 cameraDefPos = new Vector3(float.Parse(camDefPosStr[0]), float.Parse(camDefPosStr[1]), float.Parse(camDefPosStr[2]));
Vector3 cameraDefRot = new Vector3(float.Parse(camDefRotStr[0]), float.Parse(camDefRotStr[1]), float.Parse(camDefRotStr[2]));
ChangeCameraPos(cameraDefPos, cameraDefRot);
}
catch (Exception ex)
{
WDebug.LogError($"<22><><EFBFBD>ݳ<EFBFBD><DDB3>ִ<EFBFBD><D6B4><EFBFBD>:{ex.Message}");
return;
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
/// </summary>
/// <param name="pos"></param>
/// <param name="rot"></param>
public void ChangeCameraPos(Vector3 pos, Vector3 rot)
{
///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>λ<EFBFBD><CEBB>
kinematic.SetPositionAndRotation(pos, Quaternion.Euler(0, rot.y, 0));///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>λ<EFBFBD><CEBB>
characterCamera.transform.rotation = Quaternion.Euler(rot.x, rot.y, 0);
characterCamera.transform.position = characterCamera.pos.transform.position;
characterCamera.ResetTR(rot);
}
2025-01-12 15:26:31 +08:00
private void RecognizeNewGeo(RaycastHit rayHit, string RecognizeName,string tranName)
{
if (rayHit.transform.name.Contains(RecognizeName))
{
Vector3 worldPos = rayHit.point;
PopUpMng.ShowToolInfoTip(tranName, worldPos + Vector3.up * 0.05f, -1);
}
}
public void StepSetCameraTR(NiuData curStep,NiuData NextStep)
{
int curID = curStep.id;
int nextID = NextStep.id;
if (nextID - curID > 1&& curStep.ThreeTaskName!=ConstCtrl.ThreeTaskName_PeoplePlan)
{
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>" + curID);
int allFrame = 0;
List<NiuData> modelInfos = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType];
for (int a = 0; a < modelInfos.Count; a++)
{
if (modelInfos[a].TaskName.Equals(curStep.TaskName))
{
allFrame += modelInfos[a].TimelineLength;
}
if (modelInfos[a].id == curID)
{
for (int i = 0; i < nextID-curID-1; i++)
{
Debug.Log("<22><><EFBFBD><EFBFBD>key<65><79>" + allFrame / 60.0f);
if (!_curTimeLineCtrl.OnTriDic.ContainsKey(allFrame / 60.0f))
{
_curTimeLineCtrl.OnTriDic.Add(allFrame / 60.0f, (time) =>
{
OperationStepPanel operationStep = UI_Manage.Instance.GetPanel("OperationStepPanel").GetComponent<OperationStepPanel>();
List<NiuData> modelInfos = GameManager.Instance._DataNiuHandler.NiuStepTypeDic[GameManager.Instance._CurModelType];
int allFrameTemp = 0;
NiuData curTempStep = null;
for (int i = 0; i < modelInfos.Count; i++)
{
if (modelInfos[i].TaskName.Equals(ConstCtrl.TaskName_ActualOperation))
{
allFrameTemp += modelInfos[i].TimelineLength;
}
if (Math.Abs(allFrameTemp / 60.0f - time) < 0.01f)
{
curTempStep = modelInfos[i+1];
if (curTempStep.TaskType == ConstCtrl.TASKTYPE_Tran)
curTempStep = modelInfos[i + 2];
break;
}
}
operationStep.UodateCameraTRID(curTempStep);
Debug.Log(curID+i+1);
});
}
allFrame += modelInfos[a + i+1].TimelineLength;
}
break;
}
}
}
}
2025-01-02 12:15:45 +08:00
}
}