天津23维预案
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

362 lines
13 KiB

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using AX.TrackRecord;
using UnityEngine.SceneManagement;
using System;
using System.IO;
using AX.NetworkSystem;
using AX.MessageSystem;
/// <summary>
/// 考试预制体信息类
/// </summary>
///
public enum ExamState
{
None=0,
ToExam=1,
Examing=2,
ExamOver=3
}
public class ExamItemManager : BaseItemManager
{
string[] files;
public bool StartExam = false;//
public bool ExamOver = false;
public ExamState CurExamState;
public override void SetItemPrefab()
{
ItemPrefab = Resources.Load<GameObject>("UIPrefab/Examination/QuestionPrefab");
TiShi = transform.Find("TiShi").gameObject;
MessageDispatcher.AddListener("REFRESH_TIME", RefreshTime);
deltaTimeBetweenLocalAndServer = TimeSpan.Zero;//////////////////**********
}
void Start()
{
//判断当前考试是否已经开始答题,从而确定计时,每次加载场景时执行一次
if (TimeManager.CurExam != null)//不为空,证明考试已经开始
{
if (TimeManager.CurExam.ID == exam.ID)//当前正在作答的考试
{
if (TimeManager.RemainSeconds > 0)//考试还未结束,正常计时
{
RemainSeconds = TimeManager.RemainSeconds;
CurExamState = ExamState.Examing;
}
else//考试已经结束,自动交卷
{
CurExamState = ExamState.ExamOver;
ShowTimeAccordingSeconds(0);
OKSubmit();
}
}
else//当前没有作答的考试
{
CurExamState = ExamState.ToExam;
}
}
else//为空,证明考试还没有开始
{
CurExamState = ExamState.ToExam;
}
MessageDispatcher.AddListener("SubmitExam", SubmitExam);
}
private void SubmitExam(IMessage message)
{
if (exam.ID == (long)message.Data)
{
OKSubmit();
}
}
void OnDestroy()
{
MessageDispatcher.RemoveListener("REFRESH_TIME", RefreshTime);
MessageDispatcher.RemoveListener("SubmitExam", SubmitExam);
}
void Update()
{
switch (CurExamState)
{
case ExamState.ToExam:
var deltaTime = exam.Deadline - (DateTime.Now - deltaTimeBetweenLocalAndServer);
RemainSeconds = (int)deltaTime.TotalSeconds < exam.Duration * 60 ? (int)deltaTime.TotalSeconds : exam.Duration * 60;
if (RemainSeconds > 0)
{
ShowTimeAccordingSeconds((int)RemainSeconds);
}
else
{
ShowTimeAccordingSeconds(0);
OKSubmit();
}
//ShowTimeAccordingSeconds((int)RemainSeconds);
break;
case ExamState.Examing:
RemainSeconds -= Time.deltaTime;
if (RemainSeconds > 0)
{
ShowTimeAccordingSeconds((int)RemainSeconds);
}
else
{
ShowTimeAccordingSeconds(0);
OKSubmit();
}
break;
default:
break;
}
}
public void StartAnswerQuestionButton()
{
ExamInfoHelpClass.loadSceneMode = ExamInfoHelpClass.LoadSceneMode.ExamineMode;
ExamInfoHelpClass.selectSceneID = (ExamInfoHelpClass.Scene)question.SceneType;//给Selected.selectSceneID赋值
ExamInfoHelpClass.ExamID = exam.ID;
CurExam = exam;
CurQues = question;
//SceneManager.LoadScene(sceneName);//加载考题对应的场景
//使用服务端时间对比
if (DateTime.Now - deltaTimeBetweenLocalAndServer < exam.StartingTime )//考试时间未到,不能开始答题
{
TiShi.gameObject.SetActive(true);
TiShi.GetComponent<UITiShiManager>().Get("没有到开始时间,请耐心等待");
}
//else if ( DateTime.Now - deltaTimeBetweenLocalAndServer < exam.Deadline)//未结束,可以答题
else if(RemainSeconds == -10 || RemainSeconds > TimeManager.TipTime)
{
if(TimeManager.CurExam != null && TimeManager.CurExam.ID!= exam.ID)
{
Debug.Log("请先提交当前考试:" + TimeManager.CurExam.Name);
TiShi.gameObject.SetActive(true);
TiShi.GetComponent<UITiShiManager>().Get("请先提交当前考试:" + TimeManager.CurExam.Name);
return;
}
switch (CurExamState)
{
case ExamState.Examing:
case ExamState.ToExam:
TimeManager.RemainSeconds = RemainSeconds;
MySceneManager.MyLoadScene(question.SceneType.ToString());
TimeManager.CurExam = exam;
TimeManager.CurQues = question;
TimeManager.LastTime = DateTime.Now;
break;
case ExamState.ExamOver:
//
break;
default:
break;
}
//MySceneManager.MyLoadScene(question.SceneType.ToString());
//if (!StartExam)
//{
// var deltaTime = exam.Deadline - (DateTime.Now - deltaTimeBetweenLocalAndServer);
// RemainSeconds = (int)deltaTime.TotalSeconds < exam.Duration * 60 ? (int)deltaTime.TotalSeconds : exam.Duration * 60;
//}
//TimeManager.RemainSeconds = RemainSeconds;
//TimeManager.CurExam = exam;
//StartExam = true;
}
else//结束,不能答题了
{
//ToDo...
//if (RemainSeconds > -10 && RemainSeconds < TimeManager.TipTime)
//{
Debug.Log("考试时间不足,无法进入!");
TiShi.gameObject.SetActive(true);
TiShi.GetComponent<UITiShiManager>().Get("考试时间不足,无法进入!");
return;
//}
}
}
/// <summary>
/// 查看考题作答
/// </summary>
public void CheckQuestionButton()
{
if (TimeManager.CurExam != null)
{
TiShi.gameObject.SetActive(true);
TiShi.GetComponent<UITiShiManager>().Get("已开始答题,无法查看!");
return;
}
CurExam = exam;
CurQues = question;
Debug.Log("CheckExam!");
ExamInfoHelpClass.loadSceneMode = ExamInfoHelpClass.LoadSceneMode.CheckQuestion;
ExamInfoHelpClass.selectSceneID = (ExamInfoHelpClass.Scene)question.SceneType;//给Selected.selectSceneID赋值
//SceneManager.LoadScene(sceneName);//加载考题对应的场景
MySceneManager.MyLoadScene(question.SceneType.ToString());
}
public void SubmitExamButton()
{
if (AnswerList.Count < 1)
{
MessageDispatcher.SendMessage("Operatinghints", (object)"提交前先答题!");
return;
}
CurExam = exam;
CurQues = question;
GameObject TipWindow = Instantiate(Resources.Load<GameObject>("UIPrefab/TipWindow"));
TipWindow.GetComponent<TipWindowManager>().SetWindow(
"确定提交?", new UnityEngine.Events.UnityAction(OKSubmit), new UnityEngine.Events.UnityAction(NOSubmit));
}
private void OKSubmit()
{
Debug.Log("submit");
//提交答案
//上传答案到服务器,删除本地答案(清空当前用户工作目录下的question文件夹及answer文件夹)
//ToDo...
if (TimeManager.CurExam != null && TimeManager.CurExam.ID == exam.ID)
{
if (AnswerList.Count < 1)
{
AnswerInfo answer = new AnswerInfo();
answer.FilePath = exam.ID + "_" + BaseItemManager.CurQues.ID + ".xml";//答案文件用考试ID+考题ID命名
answer.CreatorName = MySelf.mySelf.Name;
answer.CreatorID = MySelf.mySelf.ID;
answer.ExaminationID = exam.ID;
answer.QuestionID = BaseItemManager.CurQues.ID;
answer.PaperID = exam.PaperID;
if (!BaseItemManager.AnswerList.Contains(answer))
{
BaseItemManager.AnswerList.Add(answer);//添加到待上传答案数组
}
//调用函数,创建答案xml文件;保存在对应考试ID下,避免多场考试引用同一考题,造成回答一个问题,所有考试考题都有答案
string filename_local = "Answers/" + answer.FilePath;//////////
//RecordManager.Instance.SubmitAnswer(filename_local);//提交答案
Record_One_root record = new Record_One_root();
record.AlreadyAnswered = false;
TrackRecordHelpClass.SerializeRecordToXML(filename_local, record);
}
for(int i = 0; i < AnswerList.Count; i++)
{
NetworkManager.Default.SendRequestAsync("ANSWER_SAVE_REQUEST", AnswerList[i]);//最后提交考试的时候再发送请求
}
//重置考试状态
CurExamState = ExamState.ExamOver;
TimeManager.CurExam = null;
TimeManager.CurQues = null;
TimeManager.RemainSeconds = -10;
RemainSeconds = -10;
}
else
{
transform.GetComponent<ANSWER_SAVE_REPLY>().ExamOver();
CurExamState = ExamState.ExamOver;
}
}
public void AutoSubmit()
{
OKSubmit();
}
private void NOSubmit()
{
Debug.Log("NOsubmit");
}
public void DownloadQuestion()
{
//下载文件
if (GameObject.Find("FileTransTipWindow"))//如果已经存在文件传输窗口,不再相应
return;
GameObject FileTransTipWin = Instantiate(Resources.Load<GameObject>("UIPrefab/FileTransTipWin"));
FileTransTipWin.GetComponent<FileTransTipWinManager>().SetWindow(
"Download", files, TransferType.Download);
FileTransTipWinManager.task.TransferTaskCompleted += Task_TransferTaskCompleted;
}
private void Task_TransferTaskCompleted()
{
FileTransTipWinManager.task.TransferTaskCompleted -= Task_TransferTaskCompleted;
SetButtonActive(true);
HasQuestionFiles = true;
transform.Find("ExamTip").gameObject.SetActive(true);
foreach (Transform item in ParentGrid.transform)
{
if (item.Find("Toggle").GetComponent<Toggle>().isOn)
{
transform.Find("StartAnswerQuestionButton").gameObject.SetActive(true);
transform.Find("CheckQuestionButton").gameObject.SetActive(true);
transform.Find("ExamTip").gameObject.SetActive(false);
return;
}
}
}
public void SetButtonActive(bool canStartExam)
{
//transform.FindChild("StartAnswerQuestionButton").gameObject.SetActive(canStartExam);
//transform.FindChild("CheckQuestionButton").gameObject.SetActive(canStartExam);
//transform.FindChild("SubmitExamButton").gameObject.SetActive(canStartExam);
transform.Find("StartDownloadQuestionButton").gameObject.SetActive(!canStartExam);
transform.Find("ExamTip").gameObject.SetActive(canStartExam);
}
public override void CheckIfHasFile(List<QuestionInfo> items)
{
if (ExamOver)
return;
//判断本地哪些考题文件没有,需要下载
var fileList = new List<string>();
for (int i = 0; i < items.Count; i++)
{
var filename = "Questions/" + items[i].ID + "/" + items[i].FilePath;
var filepath = ExamInfoHelpClass.CurrentWorkPath + filename;//文件完整路径
if (!File.Exists(filepath))
{
fileList.Add(filename);
}
}
files = fileList.ToArray();
if (fileList.Count > 0)
{
SetButtonActive(false);
HasQuestionFiles = false;
}
else
{
SetButtonActive(true);
HasQuestionFiles = true;
}
//判断是否可以答题
}
public override void CheckIfShowSubmitButton()
{
if (ExamOver)
return;
var list = AnswerList.FindAll(a => { return a.FilePath.Contains(exam.ID.ToString()); });
if (list.Count > 0)
{
transform.Find("SubmitExamButton").gameObject.SetActive(true);
if (transform.Find("ExamTip").gameObject.activeInHierarchy)
{
transform.Find("ExamTip").gameObject.SetActive(false);
}
}
else
{
transform.Find("SubmitExamButton").gameObject.SetActive(false);
}
}
}