2025-03-10 10:18:11 +08:00

529 lines
21 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using ZXK.UTility;
using DG.Tweening;
/*******************************************************************************
*Create By CG
*Function 训练控制
*******************************************************************************/
namespace ZXK.ZPS
{
public class TrainManager : MonoBehaviour
{
private DataItemModel _curTrainInfo = null;
public DataItemModel _CurTrainInfo { get => _curTrainInfo; }
private TrainBaseCtrl _curTrainBaseCtrl = null;
[SerializeField]
private PlayableDirector _WQBDirector = null;
[SerializeField]//凿毛墙面
private Transform _zaoMaoTrans = null;
[SerializeField]//搅拌机桶
private Transform _jiaobanjiTongTrans = null;
[SerializeField]//旋转短支撑后显示数值
private TextMesh _rotDuanzhichengTxt = null;
[SerializeField]//操作说明
private GameObject _OIGeo = null;
public bool _ToolOpenState = false;//判断是否打开工具箱,控制语音文本生成位置
/// <summary>
/// 判断是否可以自由控制摄像机,
/// 如果允许自由切换摄像机,按键后才允许自由切换,否则并没有自由控制
/// </summary>
private bool _freeCamera = false;
private Transform _curCamera = null;
private Transform _curCameraParent = null;
private void Awake()
{
GameRoot.Instance._TrainMng = this;
}
private void Start()
{
_OIGeo.SetActive(true);
_curCamera = Camera.main.transform;
_curCameraParent = Camera.main.transform.parent;
FreeCamera(true);
}
private void Update()
{
if (_freeCamera)
{
if (Input.GetMouseButton(1) || Input.mouseScrollDelta.y != 0 || Input.GetKey(KeyCode.LeftShift)
|| Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D))
{
_curCameraParent.GetComponent<CameraMyControl>().enabled = _freeCamera;
_curCamera.GetComponent<Cinemachine.CinemachineBrain>().enabled = !_freeCamera;
}
}
}
/// <summary>
/// timeline播放
/// </summary>
public void Play()
{
_WQBDirector.Play();
}
/// <summary>
/// timeline进度暂停
/// </summary>
public void Pause()
{
_WQBDirector.Pause();
}
/// <summary>
/// 播放凿毛面效果
/// </summary>
/// <param name="play"></param>
public void PlayZaoMao(bool play)
{
_zaoMaoTrans.GetComponent<MeshRenderer>().material.SetFloat("_Height", 0.0f);
_zaoMaoTrans.GetComponent<MeshRenderer>().material.DOFloat(5.0f, "_Height",2.0f);
}
/// <summary>
/// 搅拌机开始滚动
/// </summary>
public void JiaobantongRot()
{
_jiaobanjiTongTrans.localRotation = Quaternion.Euler(0, 0, 0);
_jiaobanjiTongTrans.DOLocalRotate(new Vector3(358.0f, 0, 0), 0.1f).SetLoops(-1, LoopType.Incremental);
}
/// <summary>
/// 摄像机是否可控,是否处于闲置状态
/// </summary>
/// <param name="enter"></param>
public void FreeCamera(bool free)
{
_freeCamera = free;
if (_freeCamera)
{//父子结合
if (_curCamera.parent == _curCameraParent)
{
_curCamera.SetParent(null);
}
_curCameraParent.position = _curCamera.position;
_curCameraParent.rotation = Quaternion.Euler(0, _curCamera.rotation.eulerAngles.y, 0);
_curCamera.SetParent(_curCameraParent);
}
else
{//父子分离
_curCamera.SetParent(null);
}
if (_freeCamera) return;
_curCameraParent.GetComponent<CameraMyControl>().enabled = free;
_curCamera.GetComponent<Cinemachine.CinemachineBrain>().enabled = !free;
}
/// <summary>
/// 下一步
/// </summary>
public void NextProcess()
{
GameRoot.Instance._DataUICtrl.NextProcess();
PopUpMng.PopAlert($"请点击下一个科目{GameRoot.Instance._CurFirstProcess}-{GameRoot.Instance._NextSecondProcess}", 100);
}
/// <summary>
/// 结束当前timeline
/// </summary>
public void OverProcessLine()
{
_WQBDirector.Pause();
PopUpMng.PopAlert("", 0);
if (GameRoot.Instance._CurType == EnumCtrl.Type.WQB)
{
PopUpMng.PopVoiceAlert("恭喜您完成“装配式剪力墙内墙板装配”任务", "实训结束", 2, 5);
PopUpMng.PopToast("完成任务", "恭喜您完成“装配式剪力墙内墙板装配”任务", "返回", OverProcess);
}
else if (GameRoot.Instance._CurType == EnumCtrl.Type.DHB)
{
PopUpMng.PopVoiceAlert("恭喜您完成“装配式叠合板装配”任务", "实训结束", 2, 5);
PopUpMng.PopToast("完成任务", "恭喜您完成“装配式叠合板装配”任务", "返回", OverProcess);
}
}
private void OverProcess()
{
GameRoot.Instance.ReturnExit();
}
public void OpenProcess(DataItemModel dataInfo)
{
_curTrainInfo = dataInfo;
_curTrainBaseCtrl?.HideSecond();
GameRoot.Instance._DataUICtrl.AllowToolSubmin(true);
string contentStr = $"欢迎进入\"{GameRoot.Instance._CurFirstProcess}-{GameRoot.Instance._CurSecondProcess}\"实训任务,请点击确定开始实训";
if(GameRoot.Instance._CurType == EnumCtrl.Type.WQB)
PopUpMng.PopToast("开始实训", contentStr, "确定", EnterShowWQBHintInfo);
else if (GameRoot.Instance._CurType == EnumCtrl.Type.DHB)
PopUpMng.PopToast("开始实训", contentStr, "确定", EnterShowDHBHintInfo);
}
private void EnterShowWQBHintInfo()
{
string[] id = _curTrainInfo.ID.Split('-');
_curTrainBaseCtrl = transform.Find($"Type{id[0]}/First{id[1]}/Second{id[2]}").GetComponent<TrainBaseCtrl>();
_curTrainBaseCtrl.ShowSecond();
switch (id[1])//GameRoot.Instance._CurFirstProcess
{
case "0"://操作人员准备
switch (id[2])
{
case "0"://安全防护准备
_WQBDirector.Stop();
_WQBDirector.initialTime = 0.1;
GameRoot.Instance._DataUICtrl.AllowToolSubmin(false);
break;
case "1"://操作人员认知
GameRoot.Instance._DataUICtrl.AllowToolSubmin(false);
break;
}
break;
case "1"://构件质量检查
switch (id[2])
{
case "0"://外观质量检查
_WQBDirector.Stop();
_WQBDirector.initialTime = 8;
break;
case "1"://预埋件检查
break;
case "2"://灌浆孔检查
break;
}
break;
case "2"://测量放线
switch (id[2])
{
case "0"://距离测量
_WQBDirector.Stop();
_WQBDirector.initialTime = 1260/50.0f;
break;
case "1"://标记位置
break;
case "2"://弹线
break;
}
break;
case "3"://吊装准备
switch (id[2])
{
case "0"://连接面处理
_WQBDirector.Stop();
_WQBDirector.initialTime = 1785 / 50.0f;
break;
case "1"://插筋检查
break;
case "2"://插筋校正
break;
case "3"://插筋核查
break;
case "4"://插筋清理
break;
}
break;
case "4"://标高控制
switch (id[2])
{
case "0"://架设仪器
_WQBDirector.Stop();
_WQBDirector.initialTime = 2240 / 50.0f;
break;
case "1"://放置后视点
break;
case "2":
break;
case "3":
break;
case "4":
break;
case "5":
break;
case "6":
break;
case "7":
break;
case "8":
break;
case "9":
break;
case "10":
break;
case "11":
break;
case "12":
break;
case "13":
break;
}
break;
case "5"://接缝处理
switch (id[2])
{
case "0"://安装橡塑棉条
_WQBDirector.Stop();
_WQBDirector.initialTime = 3238 / 50.0f;
break;
}
break;
case "6"://支撑准备
switch (id[2])
{
case "0"://长斜支撑准备
_WQBDirector.Stop();
_WQBDirector.initialTime = 3308 / 50.0f;
break;
case "1"://短斜支撑准备
break;
}
break;
case "7"://坐浆准备
switch (id[2])
{
case "0"://坐浆料制拌
_WQBDirector.Stop();
_WQBDirector.initialTime = 3405 / 50.0f;
break;
case "1"://吊运坐浆料
break;
case "2"://坐浆
break;
}
break;
case "8"://吊装试吊
switch (id[2])
{
case "0"://吊具选型
_WQBDirector.Stop();
_WQBDirector.initialTime = 4140 / 50.0f;
break;
case "1"://核对构件信息
break;
case "2"://挂钩
GameRoot.Instance._DataUICtrl.AllowToolSubmin(false);
break;
case "3"://试吊起吊
break;
}
break;
case "9"://墙板吊装就位
switch (id[2])
{
case "0"://墙板就位
_WQBDirector.Stop();
_WQBDirector.initialTime = 6810 / 50.0f;
break;
case "1"://安装斜支撑
break;
case "2"://紧固斜支撑
break;
}
break;
case "10"://构件调整
switch (id[2])
{
case "0"://左右位置调整
_WQBDirector.Stop();
_WQBDirector.initialTime = 7505 / 50.0f;
break;
case "1"://核查前后位置
break;
case "2"://前后位置调整
GameRoot.Instance._DataUICtrl.AllowToolSubmin(false);
break;
case "3"://垂直度检查
break;
case "4"://平整度检查
break;
case "5"://紧固斜向支撑
break;
}
break;
case "11"://取钩
switch (id[2])
{
case "0"://取钩
_WQBDirector.Stop();
_WQBDirector.initialTime = 8395 / 50.0f;
break;
}
break;
case "12"://分仓封堵
switch (id[2])
{
case "0"://分仓封堵
_WQBDirector.Stop();
_WQBDirector.initialTime = 8520 / 50.0f;
break;
}
break;
}
_WQBDirector.Play();
//if (!Camera.main.GetComponent<Cinemachine.CinemachineBrain>().enabled)
//{
// Transform targetTranPos = GameObject.Find($"CM ClearShot1/CM vcam{id[1]}{id[2]}0").transform;
// Debug.Log("目标地址:" + targetTranPos.name);
// Camera.main.transform.DOMove(targetTranPos.position, 0.5f);
// Camera.main.transform.DORotate(targetTranPos.rotation.eulerAngles, 0.5f);
//}
PopUpMng.PopVoiceAlert(_curTrainInfo.VoiceHint, GameRoot.Instance._CurSecondProcess, 2, 100);
PopUpMng.PopAlert(_curTrainInfo.AnmHint, 100);
}
private void EnterShowDHBHintInfo()
{
string[] id = _curTrainInfo.ID.Split('-');
_curTrainBaseCtrl = transform.Find($"Type0/First{id[1]}/Second{id[2]}").GetComponent<TrainBaseCtrl>();
_curTrainBaseCtrl.ShowSecond();
switch (id[1])//GameRoot.Instance._CurFirstProcess
{
case "0"://构件质量检查
switch (id[2])
{
case "0"://外观质量检查
_WQBDirector.Stop();
_WQBDirector.initialTime = 50 / 50.0f;
break;
case "1"://预埋件检查
_WQBDirector.Stop();
_WQBDirector.initialTime = 370 / 50.0f;
break;
}
break;
case "1"://施工准备
switch (id[2])
{
case "0"://安全防护准备
_WQBDirector.Stop();
_WQBDirector.initialTime = 530 / 50.0f;
GameRoot.Instance._DataUICtrl.AllowToolSubmin(false);
break;
case "1"://操作人员认知
GameRoot.Instance._DataUICtrl.AllowToolSubmin(false);
break;
}
break;
case "2"://定位放线
switch (id[2])
{
case "0"://构件信息核对
_WQBDirector.Stop();
_WQBDirector.initialTime = 900 / 50.0f;
break;
case "1"://测量放线
_WQBDirector.Stop();
_WQBDirector.initialTime = 2765 / 50.0f;
break;
case "2"://标高控制线
_WQBDirector.Stop();
_WQBDirector.initialTime = 3095 / 50.0f;
break;
}
break;
case "3"://搭设支撑
switch (id[2])
{
case "0"://独立支撑三角撑
_WQBDirector.Stop();
_WQBDirector.initialTime = 3705 / 50.0f;
break;
case "1"://搭设支撑撑杆
_WQBDirector.Stop();
_WQBDirector.initialTime = 3765 / 50.0f;
break;
case "2"://安装支撑顶托
_WQBDirector.Stop();
_WQBDirector.initialTime = 3835 / 50.0f;
break;
case "3"://放置支撑龙骨
_WQBDirector.Stop();
_WQBDirector.initialTime = 3925 / 50.0f;
break;
case "4"://调整水平
_WQBDirector.Stop();
_WQBDirector.initialTime = 4055 / 50.0f;
break;
case "5"://放板边线、位置线
_WQBDirector.Stop();
_WQBDirector.initialTime = 4420 / 50.0f;
break;
}
break;
case "4"://吊装准备
switch (id[2])
{
case "0"://吊具选择
_WQBDirector.Stop();
_WQBDirector.initialTime = 4655 / 50.0f;
break;
case "1"://连接构件
_WQBDirector.Stop();
_WQBDirector.initialTime = 4775 / 50.0f;
break;
case "2"://试吊
_WQBDirector.Stop();
_WQBDirector.initialTime = 4885 / 50.0f;
break;
}
break;
case "5"://起吊安装
switch (id[2])
{
case "0"://构件吊装
_WQBDirector.Stop();
_WQBDirector.initialTime = 5005 / 50.0f;
break;
case "1"://叠合板安装
_WQBDirector.Stop();
_WQBDirector.initialTime = 5405 / 50.0f;
break;
case "2"://构件调整
_WQBDirector.Stop();
_WQBDirector.initialTime = 5520 / 50.0f;
break;
case "3"://摘吊钩
_WQBDirector.Stop();
_WQBDirector.initialTime = 5665 / 50.0f;
break;
}
break;
}
_WQBDirector.Play();
//if (!Camera.main.GetComponent<Cinemachine.CinemachineBrain>().enabled)
//{
// Transform targetTranPos = GameObject.Find($"CM ClearShot1/CM vcam{id[1]}{id[2]}0").transform;
// Debug.Log("目标地址:" + targetTranPos.name);
// Camera.main.transform.DOMove(targetTranPos.position, 0.5f);
// Camera.main.transform.DORotate(targetTranPos.rotation.eulerAngles, 0.5f);
//}
PopUpMng.PopVoiceAlert(_curTrainInfo.VoiceHint, GameRoot.Instance._CurSecondProcess, 2, 100);
PopUpMng.PopAlert(_curTrainInfo.AnmHint, 100);
}
public void CloseProcess()
{
//for (int i = 0; i < transform.childCount; i++)
//{
// for (int j = 0; j < transform.GetChild(i).childCount; j++)
// {
// for (int k = 0; k < transform.GetChild(0).GetChild(j).childCount; k++)
// {
// transform.GetChild(i).GetChild(j).GetChild(k).gameObject.SetActive(false);//关闭二级工序
// }
// transform.GetChild(i).GetChild(j).gameObject.SetActive(false);//关闭一级工序
// }
// transform.GetChild(i).gameObject.SetActive(false);//关闭类型
//}
}
public bool ToolSubmitBtn(List<string> selectTool)
{
return _curTrainBaseCtrl.ToolSubmitBtn(selectTool);
}
private void OnDestroy()
{
SpeakManager.Instance.StopSpaek();
}
}
}