unityzgy/Assets/Scripts/UIScripts/Student/Sub1LearnPanel.cs
ayuan9957 bf12e02276 feat: 多语言本地化系统 - 支持中/英/法/俄实时切换
- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg)
- LoginPanel: InputField placeholder本地化、字体颜色保持
- HistoryPanel: 用时数据本地化、placeholder本地化
- RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建)
- AppraiseWindowBase: 评价等级本地化、操作消息重建
- EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized
- StudentOperateRecorder: 新增InjectOperateMsgLocalized方法
- LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选
- 字体切换时保留颜色和verticalOverflow
2026-07-16 10:05:59 +08:00

161 lines
5.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using XFramework;
//学员端科目一推演界面
public class Sub1LearnPanel : BasePanel
{
const string panelName = "Panel_studentSub1推演";
private GameObject finishPromptWindow;
private Text text_Timer;
private AnserWindowCtrl answerWindow;
Transform image_Map;
int time;
public Sub1LearnPanel():base(new UIType(panelName))
{
}
protected override void InitEvent()
{
finishPromptWindow = ActivePanel.Find("Image_结束提示").gameObject;
answerWindow = ActivePanel.Find("Image_答题框").GetComponent<AnserWindowCtrl>();
text_Timer = ActivePanel.Find("Text_Timer").GetComponent<Text>();
//EventCenter.Instance.AddEventListener<TuFaEnum>("TuFaTrigger",);
}
public override void OnStart()
{
base.OnStart();
finishPromptWindow.gameObject.SetActive(false);
answerWindow.gameObject.SetActive(false);
Game.StartCoroutine(Timer());
}
//int timeScale=5;//时间 按5倍快放计时
private IEnumerator Timer()
{
yield return new WaitForSeconds(1);
time += (int)Time.timeScale;
int miao = time % 60;
int min = time / 60;
int hour = 0;
if (min > 59)
{
hour = min / 60;
min = min % 60;
}
if (text_Timer != null)
LocalizationManager.SetFormatted(text_Timer, "推演时间: {0}:{1}:{2}", hour, min, miao);
Game.StartCoroutine(Timer());
}
public override void OnDestroy(bool isDestroy = false)
{
base.OnDestroy(isDestroy);
Game.StopCoroutine(Timer());
}
//初始化推演界面 小地图 沿用编辑时的GameObject
public override void Change(object newData)
{
base.Change(newData);
image_Map = newData as Transform;
image_Map.transform.SetParent(ActivePanel);
RectTransform rectTransform = image_Map.GetComponent<RectTransform>();
rectTransform.anchorMin = Vector2.zero;
rectTransform.anchorMax = Vector2.zero;
rectTransform.sizeDelta = new Vector2(480, 270);
rectTransform.anchoredPosition = new Vector2(240, 135);
image_Map.GetComponentInChildren<MyDragMap>().InitSize();
}
TuFaAnswerClass tufaMsg;//当前遇到的突发事件对应的答题选项
TuFaEnum tuFa;//当前遇到的突发事件名称
/// <summary>
/// 遇到突发事件 导调模式发送事件信息到教员端
/// </summary>
/// <param name="msgType"></param>
/// <param name="value"></param>
public override void Change(string msgType, object value)
{
if (msgType == "TuFaTrigger")
{
tuFa = (TuFaEnum)value ;
tufaMsg = TuFaAnswers.tufaEvents[tuFa];
List<string> options = new List<string>();
foreach (var item in tufaMsg.options)
{
options.Add(item.Key);
}
answerWindow.SetAskAndAnswer(tuFa.ToString(), options, AnswerEvent);
if (AdjustingManager.Instance.Adjusting)//导调状态下遇到突发事件发送消息到教员端
{
NetTuFaHandleMsg msg = new NetTuFaHandleMsg();
msg.msgType = TuFaMsgType.trigger;
msg.msg = tuFa.ToString();
TCPManager.Instance.SendNetMsg<NetTuFaHandleMsg>(msg, NetMsgName.TuFaEvent);
}
}
}
// 完成答题时 检查选项是否最佳选项以及当前选项对应的罚时 并恢复车辆移动 导调模式下发送事件信息到教员端
void AnswerEvent(string selectOperations)
{
bool isRightOption = selectOperations == tufaMsg.rightOption;
int takeTime = tufaMsg.options[selectOperations];
time -= takeTime * 60;//takeTime为负数
if (isRightOption)//正确处理方式不记录罚时
{
StudentOperateRecorder.Instance.InjectOperateMsg($"行军过程中遇到{tuFa.ToString()},选择处理方式为{selectOperations}");
}
else
StudentOperateRecorder.Instance.InjectOperateMsg($"行军过程中遇到{tuFa.ToString()},选择处理方式为{selectOperations},罚时{takeTime}分钟");
if (AdjustingManager.Instance.Adjusting)//导调状态下遇到突发事件发送消息到教员端
{
NetTuFaHandleMsg msg = new NetTuFaHandleMsg();
if (isRightOption)
{
msg.msgType = TuFaMsgType.handleRight;
msg.msg = $"{ selectOperations}";
}
else
{
msg.msgType = TuFaMsgType.handleWrong;
msg.msg = $"{ selectOperations},罚时{takeTime}分钟";
}
TCPManager.Instance.SendNetMsg<NetTuFaHandleMsg>(msg, NetMsgName.TuFaEvent);
}
if (StudentStateManager.Instance.LearnState == LearnState.learning&&!isRightOption)//训练模式回答错误时 提示正确答案 并延迟3秒后消失
{
answerWindow.ShowRightResult(tufaMsg.rightOption);
Game.StartCoroutine(WaitSeconds());//延迟3秒
}
else
{
HideWindowAndMove();//直接调用 不延迟
}
}
//等待时间
IEnumerator WaitSeconds()
{
yield return new WaitForSeconds(3f);
HideWindowAndMove();
}
void HideWindowAndMove()
{
GameObjectManager.Instance.StartAIMove();//回答完成后 车队继续移动
answerWindow.Hide();
}
}