NewN_UAVPlane/Assets/Zion/Scripts/manage/GameManage.cs

588 lines
20 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
using DataModel.Model;
using LitJson;
public class GameManage : MonoBehaviour
{
public static GameManage Instance;
/// <summary>
/// 初始位置
/// </summary>
public Transform initPos;
public float OnceTime = 0.06f;
public int lerpTime = 2;
public bool is单机模式;
public Canvas canvas;
public ScoreManage scoreManage;
#region
/// <summary>
/// 科目启停回调
/// </summary>
[HideInInspector]
public Action<string, string, string, bool> action_subject;
/// <summary>
/// 步骤启停回调
/// </summary>
[HideInInspector]
public Action<string, string, string, string, bool> action_step;
/// <summary>
/// 开始暂停回调
/// </summary>
[HideInInspector]
public Action<bool> action_Pause;
/// <summary>
/// 关闭房间回调
/// </summary>
[HideInInspector]
public Action action_close;
#endregion
private void Awake()
{
Instance = this;
//房间域
LoadManage.programState = ProgramState.;
//初始化注册
UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects().ToList().ForEach(a =>
{
InitAllSyncInRoot(a.transform, false);
});
if (!is单机模式)
{
//获取步骤信息
StartCoroutine(MyNetMQClient.CallGet("http://" + MyNetMQClient.CallIP + "/Handler/Practice.ashx?action=queryPracticesubjectStep&PracticeId=" + LoadManage.Instance.currentPractice.Id, str =>
{
var json = JsonMapper.ToObject<CallResultList<practicesubjectstep>>(str);
if (json.state)
{
LoadManage.Instance.psteps = json.data;
//获取所有的practiceseat
StartCoroutine(MyNetMQClient.CallGet("http://" + MyNetMQClient.CallIP + "/Handler/Practice.ashx?action=querypracticeseat&PracticeId=" + LoadManage.Instance.currentPractice.Id, str2 =>
{
var json2 = JsonMapper.ToObject<CallResultList<practiceseat>>(str2);
if (json2.state)
{
LoadManage.Instance.pseats = json2.data;
LoadManage.Instance.myPracticeSeat = LoadManage.Instance.pseats.FindAll(a => a.UserAccount == LoadManage.Instance.me.user.user_name);
//初始化打分系统
scoreManage.Init();
//恢复当前训练信息
var tmpps = LoadManage.Instance.psubjects.FindAll(a => a.State == 0);
if (tmpps != null && tmpps.Count > 0)
{
foreach (var item in tmpps)
{
practiceseat tmppseat = LoadManage.Instance.myPracticeSeat.Find(a => a.Field_Char1 == item.Id);
if (tmppseat != null)
{
//本人当前科目
LoadManage.Instance.currentPracticeSubejct = item;
LoadManage.Instance.currentPracticeSeat = tmppseat;
//当前正在进行中步骤
LoadManage.Instance.currentPracticeSubjectStep = LoadManage.Instance.psteps.Find(a => a.PracticeSubjectId == item.Id && a.SeatId == tmppseat.SeatId && a.StepState=="0");
Debug.Log("当前科目:" + item.Name);
Debug.Log("当前岗位:" + tmppseat.SeatName);
if (LoadManage.Instance.currentPracticeSubjectStep != null)
{
Debug.Log("当前步骤正在进行中:" + LoadManage.Instance.currentPracticeSubjectStep.Name);
}
//激活当前步骤相应打分点(科目进行中且步骤未完成)
if (LoadManage.Instance.currentPractice.MissionModel == "考核")
{
//未完成的步骤
var noOverSteps = LoadManage.Instance.psteps.FindAll(a => a.PracticeSubjectId == item.Id && a.SeatId == tmppseat.SeatId && a.StepState != "1");
var allSB=scoreManage.transform.Find(item.Name).GetComponentsInChildren<ScoreBase>(true).ToList();
if (noOverSteps!=null && noOverSteps.Count>0)
{
noOverSteps.ForEach(a =>
{
allSB.FindAll(b => b.stepOrder == a.OrderIndex).ForEach(b =>
{
b.SetActive(true);
});
});
}
}
//开二维软件
SoftManage.Instance.StartSoft(LoadManage.Instance.currentPractice.Id, LoadManage.Instance.currentPracticeSubejct.Name, LoadManage.Instance.currentPracticeSeat.SeatName, LoadManage.Instance.currentPracticeSeat.UserAccount, 0);
break;
}
}
}
//当前切换当前科目
GetMaoDian();
}
else
{
string msg = json2.message;
Debug.LogError(msg);
}
}));
;
}
else
{
string msg = json.message;
Debug.LogError(msg);
}
}));
}
}
/// <summary>
/// 获取锚点
/// </summary>
private void GetMaoDian()
{
//获取房间数据
UpLoadMe();
}
private void OnDestroy()
{
action_subject = null;
action_step = null;
}
/// <summary>
/// 注册科目启停回调
/// </summary>
/// <param name="action_subject"> practiceidpraticeSubjectId科目名是否开启</param>
public void SetSubjectAction(Action<string, string, string, bool> action_subject)
{
this.action_subject += action_subject;
}
/// <summary>
/// 注册步骤启停回调
/// </summary>
/// <param name="action_step">practiceidpraticeSubjectId科目名pratciesubjectstepId是否开启</param>
public void SetStepAction(Action<string, string, string, string, bool> action_step)
{
this.action_step += action_step;
}
/// <summary>
/// 注册开始暂停回调 (true:开始 false:暂停)
/// </summary>
/// <param name="action_pause"></param>
public void SetPauseAction(Action<bool> action_pause)
{
this.action_Pause = action_pause;
}
/// <summary>
/// 注册关闭回调
/// </summary>
/// <param name="action_close"></param>
public void SetCloseAction(Action action_close)
{
this.action_close = action_close;
}
/// <summary>
/// 切换科目状态
/// </summary>
/// <param name="msg"></param>
public void SubjectChange(string msg)
{
// practiceId + "," + praticeSubjectId + "," + subjectName + "," + (OpenOrClose ? "开" : "关")
string[] tmps = msg.Split(',');
string practiceId = tmps[0];
string praticeSubjectId = tmps[1];
string subjectName = tmps[2];
string OpenOrClose = tmps[3];
bool oc = true;
if (OpenOrClose == "开")
{
oc = true;
}
else if (OpenOrClose == "关")
{
oc = false;
}
else
{
Debug.LogError("错误:" + OpenOrClose);
return;
}
if (practiceId == LoadManage.Instance.currentPractice.Id)
{
practicesubject ps = LoadManage.Instance.psubjects.Find(a => a.Id == praticeSubjectId);
if (ps != null)
{
if (oc)
{
//开
if (LoadManage.Instance.currentPracticeSubejct != null && LoadManage.Instance.currentPracticeSubejct.OrderIndex != ps.OrderIndex)
{
Debug.LogError("此科目不能并行");
return;
}
ps.State = 0;
LoadManage.Instance.currentPracticeSubejct = ps;
practiceseat pseat = LoadManage.Instance.myPracticeSeat.Find(a => a.Field_Char1 == praticeSubjectId);
if (pseat != null)
{
//自己参与当前科目
LoadManage.Instance.currentPracticeSeat = pseat;
Debug.Log("科目开启成功:" + ps.Name);
if (action_subject != null)
{
action_subject.Invoke(practiceId, praticeSubjectId, subjectName, oc);
}
//开二维软件
SoftManage.Instance.StartSoft(LoadManage.Instance.currentPractice.Id, LoadManage.Instance.currentPracticeSubejct.Name, LoadManage.Instance.currentPracticeSeat.SeatName, LoadManage.Instance.currentPracticeSeat.UserAccount, 0);
//激活自己相应打分
if(LoadManage.Instance.currentPractice.MissionModel=="考核")
{
scoreManage.transform.Find(ps.Name).GetComponentsInChildren<ScoreBase>(true).ToList().ForEach(c =>
{
if (c.seatName == pseat.SeatName)
{
c.SetActive(true);
}
});
}
}
else
{
Debug.Log("未参与此科目:" + ps.Name);
}
}
else
{
//关
if (LoadManage.Instance.currentPracticeSubejct != null && LoadManage.Instance.currentPracticeSubejct.Id == ps.Id)
{
//自己参与当前科目
ps.State = 1;
LoadManage.Instance.currentPracticeSubejct = null;
practiceseat pseat = LoadManage.Instance.myPracticeSeat.Find(a => a.Field_Char1 == praticeSubjectId);
if (pseat != null)
{
LoadManage.Instance.currentPracticeSeat = null;
Debug.Log("科目关闭成功:" + ps.Name);
if (action_subject != null)
{
action_subject.Invoke(practiceId, praticeSubjectId, subjectName, oc);
}
//关闭所有相应打分
if (LoadManage.Instance.currentPractice.MissionModel == "考核")
{
scoreManage.transform.Find(ps.Name).GetComponentsInChildren<ScoreBase>(true).ToList().ForEach(c =>
{
c.SetActive(false);
});
//指挥提交总表
if (pseat.SeatNo == "0")
{
scoreManage.SubmitApprise(subjectName);
}
}
}
else
{
Debug.Log("未参与此科目:" + ps.Name);
}
}
}
}
else
{
Debug.LogError("错误:未找到科目");
}
}
}
/// <summary>
/// 切换步骤状态
/// </summary>
/// <param name="msg"></param>
public void StepChange(string msg)
{
// practiceId + "," + praticeSubjectId + "," + subjectName + "," + pratciesubjectstepId + "," + (OpenOrClose ? "开" : "关")
string[] tmps = msg.Split(',');
string practiceId = tmps[0];
string praticeSubjectId = tmps[1];
string subjectName = tmps[2];
string pratciesubjectstepId = tmps[3];
string OpenOrClose = tmps[4];
bool oc = true;
if (OpenOrClose == "开")
{
oc = true;
}
else if (OpenOrClose == "关")
{
oc = false;
}
else
{
Debug.LogError("错误:" + OpenOrClose);
return;
}
if (practiceId == LoadManage.Instance.currentPractice.Id)
{
practicesubjectstep step = LoadManage.Instance.psteps.Find(a => a.ID == pratciesubjectstepId);
if (step != null)
{
step.StepState = (oc ? 0 : 1).ToString();
if (action_step != null)
{
action_step.Invoke(practiceId, praticeSubjectId, subjectName, pratciesubjectstepId, oc);
}
if (oc)
{
//开启步骤
LoadManage.Instance.currentPracticeSubjectStep = step;
}
else
{
//结束步骤
LoadManage.Instance.currentPracticeSubjectStep = null;
//提交此步骤子表分数
scoreManage.transform.Find(subjectName).GetComponentsInChildren<ScoreBase>(true).ToList().ForEach(c =>
{
if (c.stepOrder == step.OrderIndex)
{
c.Submit();
}
});
}
}
else
{
Debug.LogError("错误:未找到步骤");
}
}
}
/// <summary>
/// 注册一个根物体下所有同步组件
/// </summary>
/// <param name="a"></param>
public void InitAllSyncInRoot(Transform a, bool isPlayer, string id = "")
{
a.GetComponentsInChildren<FunctionSync_Active>(true).ToList().ForEach(b =>
{
if (isPlayer)
{
b.gameObject.name = id + b.gameObject.name;
}
b.Init();
});
a.GetComponentsInChildren<FunctionSync_Animator>(true).ToList().ForEach(b =>
{
if (isPlayer)
{
b.gameObject.name = id + b.gameObject.name;
}
b.Init();
});
a.GetComponentsInChildren<FunctionSync_Audio>(true).ToList().ForEach(b =>
{
if (isPlayer)
{
b.gameObject.name = id + b.gameObject.name;
}
b.Init();
});
a.GetComponentsInChildren<FunctionSync_CreateObejct>(true).ToList().ForEach(b =>
{
b.Init();
});
a.GetComponentsInChildren<FunctionSync_Material>(true).ToList().ForEach(b =>
{
if (isPlayer)
{
b.gameObject.name = id + b.gameObject.name;
}
b.Init();
});
a.GetComponentsInChildren<FunctionSync_Parent>(true).ToList().ForEach(b =>
{
if (isPlayer)
{
b.gameObject.name = id + b.gameObject.name;
}
b.Init();
});
a.GetComponentsInChildren<FunctionSync_ParticleSystem>(true).ToList().ForEach(b =>
{
if (isPlayer)
{
b.gameObject.name = id + b.gameObject.name;
}
b.Init();
});
a.GetComponentsInChildren<FunctionSync_PositionRoate>(true).ToList().ForEach(b =>
{
b.Init();
});
a.GetComponentsInChildren<FunctionSync_Scale>(true).ToList().ForEach(b =>
{
b.Init();
});
a.GetComponentsInChildren<FunctionSync_Text>(true).ToList().ForEach(b =>
{
if (b.isAutoInit)
{
b.Init();
}
});
a.GetComponentsInChildren<FunctionSync_MaterialTexture>(true).ToList().ForEach(b =>
{
b.Init();
});
a.GetComponentsInChildren<OneValueSyncObject>(true).ToList().ForEach(b =>
{
if (!b.)
{
b.InitDynamic("sync_" + b.name, null, b.valueType);
}
});
}
/// <summary>
/// 初始化科目
/// </summary>
public void InitSubject()
{
//初始化科目数据
//设备位置状态
//初始化评估
}
[HideInInspector]
public float checkTime = 6;
private void Update()
{
#if !UNITY_EDITOR
// //检查是否去服务器连接
// checkTime -= Time.deltaTime;
// if (checkTime < 0)
// {
// Debug.Log("时间超过6秒");
// Quit();
// }
#endif
}
/// <summary>
/// 上传自己的信息(加入房间,并获取房间信息)
/// </summary>
public void UpLoadMe()
{
if (!is单机模式)
{
LoadManage.Instance.RSclient.Send(LoadManage.Instance.currentRoomArea,32,new byte[1]);
Debug.Log("发送加入房间");
}
//关闭界面
}
/// <summary>
/// 退出房间
/// </summary>
public void Quit()
{
Debug.Log("退出房间");
//初始化
LoadManage.programState = ProgramState.;
OneValueSyncObject.OneAxisSyncObjectList.Clear();
FunctionSync_PositionRoate.positionRoateSyncObejctList.Clear();
FunctionSync_Video.dicVideo.Clear();
FunctionSync_Media.functionSync_MediaDic.Clear();
FunctionSync_CreateObejct.createDic.Clear();
FunctionSync_CreateObejct.Instance = null;
action_subject = null;
action_step = null;
//发送退出房间指令
if (!is单机模式 && LoadManage.Instance.me != null)
{
//byte[] bytes = Encoding.UTF8.GetBytes(LoadManage.Instance.MyId);
//byte[] names = Encoding.UTF8.GetBytes(LoadManage.Instance.MyName);
//byte[] tmps = new byte[8 + bytes.Length+ names.Length];
//Array.Copy(BitConverter.GetBytes(bytes.Length), 0, tmps, 0, 4);
////id
//Array.Copy(bytes, 0, tmps, 4, bytes.Length);
////name
//Array.Copy(BitConverter.GetBytes(names.Length), 0, tmps, 4 + bytes.Length, 4);
//Array.Copy(names, 0, tmps, 8 + bytes.Length, names.Length);
//LoadManage.Instance.RSclient.Send(LoadManage.Instance.currentRoomArea, 10, tmps);
//Debug.Log("发送退出房间");
}
//初始化LoadManage脚本
LoadManage.Instance.currentRoomArea = "";
//LoadManage.Instance.MyId = "";
LoadManage.Instance.SyncId = 0;
checkTime = 10;
//断开通信
LoadManage.Instance.RemoveRoomServerClient();
if (LoadManage.Instance.systemMode == SystemMode.PC)
{
UnityEngine.SceneManagement.SceneManager.LoadScene("MainSencePC");
}
else if (LoadManage.Instance.systemMode == SystemMode.MR)
{
UnityEngine.SceneManagement.SceneManager.LoadScene("MainSenceMR");
}
}
}