using ChivaXR;
using ChivaXR.Op;
using Org.BouncyCastle.Bcpg.OpenPgp;
using QFramework;
using Sirenix.OdinInspector;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class PranticeManagerForPC : MonoBehaviour
{
public static PranticeManagerForPC instance;
[BoxGroup("配分模块", CenterLabel = true, Order = 1)]
///
/// 考试信息
///
[TableList(MaxScrollViewHeight = 20)]
public List m_PranticeProcessElements;
private ProcessElement currentProcessElement;
[BoxGroup("场景配置模块", CenterLabel = true, Order = 0), GUIColor(0, 1, 0, 0.6f)]
[Button("1.获取流程信息")]
public void GetPranticeProcessElements()
{
List processElements = ProcessManagement.Instance.processes;
//临时转存,用户数据恢复
List tmpExamProcessElements = m_PranticeProcessElements;
//重建考试信息列表
m_PranticeProcessElements = new List();
foreach (var item in processElements)
{
PranticeProcessElement examProcessElement = tmpExamProcessElements.Find(t => t.elementDescript == item.processBase.GetPBDescribe());
if (examProcessElement != null)
{
m_PranticeProcessElements.Add(examProcessElement);
}
else
{
StepListProxy tmpProxy = DAL.Instance.Get();
if (tmpProxy == null)
{
tmpProxy.ReadStepMsgInfoFromTable(OperateSetting.Instance.m_CourseName);
}
OperationStepDataInfo tmpInfo = tmpProxy.GetOpStepDataInfoById(item.stepID);
m_PranticeProcessElements.Add(new PranticeProcessElement()
{
id = item.stepID,
elementDescript = item.processBase.GetPBDescribe(),
stepName = tmpInfo.stepName
});
}
}
}
///
/// 练习开始时间
///
public DateTime m_StartTime;
///
/// 练习结束时间
///
public DateTime m_EndTime;
private void Awake()
{
instance = this;
GetPranticeProcessElements();
m_StartTime = DateTime.Now;
}
public void Init()
{
ProcessManagement.Instance.processElementActiveEvent += ProcessElementActive;
ProcessManagement.Instance.processElementDisActiveEvent += ProcessElementDisActive;
ProcessManagement.Instance.processFinishEvent += PranticeFinish;
}
///
/// 步骤进入
///
///
private void ProcessElementActive(ProcessElement element)
{
currentProcessElement = element;
}
///
/// 步骤退出
///
///
private void ProcessElementDisActive(ProcessElement element)
{
JianTouManager.instance.SetJianTouActive(false);
PranticeProcessElement tmpElement = m_PranticeProcessElements.Find(t => t.elementDescript == currentProcessElement.processBase.GetPBDescribe());
if (tmpElement.finish == false)
{
tmpElement.finish = true;
if (tmpElement.errorReason == null)
{
tmpElement.result = true;
}
tmpElement.operationTime = DateTime.Now;
}
}
///
/// 成绩展示
///
public void PranticeFinish()
{
m_EndTime = DateTime.Now;
UIKit.OpenPanel(new PC_PranticeResultPanelData() { pranticeProcessElementsData = m_PranticeProcessElements });
}
///
/// 记录操作错误
///
///
public void RecordFault(int processId)
{
PranticeProcessElement tmpElement = m_PranticeProcessElements.Find(t => t.id == processId);
if (tmpElement != null)
{
tmpElement.errorReason = "操作错误";
tmpElement.result = false;
string screenShotName = DateTime.UtcNow.Ticks.ToString();
StartCoroutine(ScrrenCapture(new Rect(0, 0, Screen.width, Screen.height), 0, screenShotName, tmpElement));
}
}
Texture2D screenShot;//保存截取的纹理
IEnumerator ScrrenCapture(Rect rect, int a, string screenShotName, PranticeProcessElement pranticeProcessElement)
{
Debug.Log("截图:" + screenShotName);
screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
yield return new WaitForSeconds(0.5f);
yield return new WaitForEndOfFrame();
screenShot.ReadPixels(rect, 0, 0);
screenShot.Apply();
//推送
//PushHelper.InitBasicData();
//StartCoroutine(PushHelper.SendFileStreamPushRequest(screenShot, screenShotName, (result, msg, flag, cmnAttachId) =>
// {
// if (!result)
// {
// Debug.LogError(msg);
// }
// else
// {
// pranticeProcessElement.screenshotList.Add(cmnAttachId.data.cmnAttachId);
// }
// pranticeProcessElement.m_UpLoading.Remove(screenShotName);
// }));
pranticeProcessElement.m_UpLoading.Add(screenShotName);
}
///
/// 是否上传完成
///
///
public bool IsFinishUpLoad()
{
foreach (var item in m_PranticeProcessElements)
{
if (item.m_UpLoading.Count > 0)
{
return false;
}
}
return true;
}
}
[Serializable]
public class PranticeProcessElement
{
[Sirenix.OdinInspector.ReadOnly]
public int id;
[Sirenix.OdinInspector.ReadOnly]
public string elementDescript;
///
/// 错误与否
///
[Sirenix.OdinInspector.ReadOnly]
public bool result;
///
/// 是否完成
///
[Sirenix.OdinInspector.ReadOnly]
public bool finish = false;
///
/// 错误截图
///
public List screenshotList = new List();
///
/// 操作时间
///
public DateTime operationTime;
///
/// 错误原因
///
public string errorReason;
///
/// 步骤名称
///
public string stepName;
///
/// 正在上传的任务
///
public List m_UpLoading = new List();
}