1
0
Fork 0
LaboratoryProtection/Assets/UnityTest/ZXL/Scripts/Process/FirstProcess.cs

289 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using DragonSoul.Shared;
using Mono.Event;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.UI;
namespace UnityTest.ZXL
{
public class FirstProcess : ProcessBase
{
public override ProcessType processType => ProcessType._;
protected override void OnInit()
{
base.OnInit();
StartAsync().Coroutine();
EventManager.Instance.Subscribe(ChoiceQuestionEventArgs.EventId, ChoiceQuestionEvent);
}
private void ChoiceQuestionEvent(object sender, GameEventArgs e)
{
var args = e as ChoiceQuestionEventArgs;
currentTask.SetResult(args.isFirst);
}
protected override void OnLevel()
{
base.OnLevel();
EventManager.Instance.Unsubscribe(ChoiceQuestionEventArgs.EventId, ChoiceQuestionEvent);
}
async ETTask StartAsync()
{
var ui = UIManager.Instance().ShowUI(UIType.Chapter);
var chapterUI = ui as ChapterUI;
if (chapterUI == null)
{
Debug.LogError($"{ui.GetType()}");
return;
}
await chapterUI.Transit(0);
UIManager.Instance().HideUI(UIType.Chapter);
Minutia1_1().Coroutine();
}
protected override void Next()
{
base.Next();
switch (index)
{
case 0:
Minutia1_1().Coroutine();
break;
case 1:
Minutia1_2().Coroutine();
break;
case 2:
Minutia1_3().Coroutine();
break;
case 3:
Minutia1_4().Coroutine();
break;
default:
EventManager.Instance.FireNow(this, new ProcessOverEventArgs(processType));
break;
}
}
public override void ConstEventLogic(object sender, GameEventArgs e)
{
base.ConstEventLogic(sender, e);
var args = e as ConstEventArgs;
this.SetPlayDirector(CurrentPlayableDirector, PlayTimelineMode.Pause);
switch (args.constDataType)
{
case ConstDataType.None:
break;
case ConstDataType.:
WaitOperateFinish1_1_1().Coroutine();
break;
case ConstDataType.:
WaitOperateFinish1_1_2().Coroutine();
break;
case ConstDataType.:
WaitOperateFinish1_1_3().Coroutine();
break;
case ConstDataType.:
currentTask.SetResult(true);
break;
case ConstDataType.:
break;
case ConstDataType.湿:
WaitOperateFinish1_3_1().Coroutine();
break;
case ConstDataType.:
WaitOperateFinish1_3_2().Coroutine();
break;
case ConstDataType.:
WaitOperateFinish1_4_1().Coroutine();
break;
case ConstDataType.:
currentTask.SetResult(true);
break;
case ConstDataType.:
WaitOperateFinish1_4_2().Coroutine();
break;
case ConstDataType.:
WaitOperateFinish1_4_3().Coroutine();
break;
case ConstDataType.:
EventManager.Instance.FireNow(this, new DoorEventArgs(false));
this.SetPlayDirector(CurrentPlayableDirector, PlayTimelineMode.Resume);
break;
default:
throw new ArgumentOutOfRangeException();
}
}
public override void ClickObjectEvent(object sender, GameEventArgs e)
{
base.ClickObjectEvent(sender, e);
var args = e as ClickObjectEventArgs;
switch (args.objectType)
{
case HighlightObjectType.:
currentTask.SetResult(true);
break;
case HighlightObjectType.:
currentTask.SetResult(true);
break;
case HighlightObjectType.:
break;
case HighlightObjectType.湿:
currentTask.SetResult(true);
break;
case HighlightObjectType.:
break;
case HighlightObjectType.:
break;
default:
throw new ArgumentOutOfRangeException();
}
}
#region 1-1
private async ETTask WaitOperateFinish1_1_1() // 乙炔气瓶开关高亮并等待点击
{
await WaitOperateFinish_ClickHighlight(HighlightObjectType.);
}
private async ETTask WaitOperateFinish1_1_2() // 电脑屏幕高亮并等待点击
{
await WaitOperateFinish_ClickHighlight(HighlightObjectType.);
}
private async ETTask WaitOperateFinish1_1_3() // 等待点击启动按钮
{
await WaitOperateFinish_Click();
}
#endregion
#region 1-2
#endregion
#region 1-3
private async ETTask WaitOperateFinish1_3_1() // 湿抹布高亮等待点击
{
await WaitOperateFinish_ClickHighlight(HighlightObjectType.湿, false);
var ui = UIManager.Instance().ShowUI(UIType.BigStrongTips);
var strongTipsUI = ui as BigStrongTipsUI;
strongTipsUI.SetContent("提示",
"气瓶站立燃烧,由于火焰向外喷射,热量并不会直接炙烤气瓶,加上气体气化的吸热现象,气瓶的温度并不会剧烈升高,可按照应急程序,用湿抹布包住手,绕到自喷火口后方,尝试拧紧阀门。(注意:若气瓶倒在地面火焰朝地面喷射,或火焰被物体阻挡烘烤瓶体时,火的热量会导致气瓶内部温度、压力剧烈升高,气瓶瓶体受热强度下降,存在爆炸危险,这时不可盲目接近,所有人应立即迅速撤离现场。)",
() => { currentTask.SetResult(true); }, 1);
await WaitOperateFinish_Click();
UIManager.Instance().HideUI(UIType.BigStrongTips);
}
private async ETTask WaitOperateFinish1_3_2() // 拧紧阀门时弹出选择题并等待关闭
{
// TODO: 待添加选择题
var ui = UIManager.Instance().ShowUI(UIType.ChoiceQuestion);
var result = await WaitOperateFinish_Click();
UIManager.Instance().HideUI(UIType.ChoiceQuestion);
string choiceQuestionResult;
if (result)
{
choiceQuestionResult = "已关闭事故瓶出气口阀门,火焰熄灭,周围未有新的引燃物。";
EffectManager.Instance().ShowOrHideEffect(EffectType., false);
}
else
choiceQuestionResult = "无法关闭事故瓶出气口阀门,火焰依然燃烧,周围未有新的引燃物。";
EventManager.Instance.FireNow(this, new RoleLabelEventArgs() { speakContent = choiceQuestionResult });
await ETTask.CompletedTask;
}
#endregion
#region 1-4
private async ETTask WaitOperateFinish1_4_1() // 等待点击进入实验室按钮
{
await WaitOperateFinish_Click();
}
private async ETTask WaitOperateFinish1_4_2() // 打开电源关闭提示等待关闭
{
var showUI = UIManager.Instance().ShowUI(UIType.StrongTips);
var strongTipsUI = showUI as StrongTipsUI;
strongTipsUI.SetContent("提示", "“已确认电源关闭", () => { currentTask.SetResult(true); }, 1);
await WaitOperateFinish_Click();
await currentTask;
UIManager.Instance().HideUI(UIType.StrongTips);
}
private async ETTask WaitOperateFinish1_4_3() // 打开检查结果提示等待关闭
{
var showUI = UIManager.Instance().ShowUI(UIType.StrongTips);
var strongTipsUI = showUI as StrongTipsUI;
strongTipsUI.SetContent("提示", "经检测确认气瓶无漏气,爆炸起火周围未有被引燃物品(注意:若有检查到起火点用干粉灭火器将气瓶火焰引燃的周围物品火焰根部喷射,扑灭火焰)。", () => { currentTask.SetResult(true); }, 1);
await WaitOperateFinish_Click();
await currentTask;
UIManager.Instance().HideUI(UIType.StrongTips);
}
#endregion
// 1-1
// ①来到三维场景播放动画2-1当同学A打开乙炔柜体后乙炔气瓶开关高亮用户点击后再播放剩余动画、弹出“存在泄露”UI不断闪烁并伴随着咻~咻~咻~咻的泄气声关闭柜门后“存在泄露”UI及泄气声消失
// ②此时电脑屏幕高亮点击后出现电脑画面画面中“确定”按钮高亮鼠标点击后显示启动中UI
// ③启动后0.5s“蹦”的一声柜体被爆炸打开气瓶火焰向外喷射并且光度计发生轻微爆炸用户屏幕颤抖三位同学倒地动画2-2
private async ETTask Minutia1_1()
{
this.SetPlayDirector(playableDirectors[0], PlayTimelineMode.Play);
await ETTask.CompletedTask;
}
// 1-2
// ①待动画2-2播放完毕给个视角能看到爆炸处又能看到其他同学紧接着播放动画2-3动画2-3播放同时光度计再次发生了2次轻微爆炸1s后火焰慢慢变小并播放动画2-4动画2-3、2-4中人物说话时需要弹出气泡框
private async ETTask Minutia1_2()
{
this.SetPlayDirector(playableDirectors[1], PlayTimelineMode.Play);
await ETTask.CompletedTask;
}
// 1-3
// ①待动画2-4播完桌上湿抹布高亮点击后弹出文字提示“气瓶站立燃烧由于火焰向外喷射热量并不会直接炙烤气瓶加上气体气化的吸热现象气瓶的温度并不会剧烈升高可按照应急程序用湿抹布包住手绕到自喷火口后方尝试拧紧阀门。注意若气瓶倒在地面火焰朝地面喷射或火焰被物体阻挡烘烤瓶体时火的热量会导致气瓶内部温度、压力剧烈升高气瓶瓶体受热强度下降存在爆炸危险这时不可盲目接近所有人应立即迅速撤离现场。”用户点击“确定”后播放动画2-5
// ②2-5播放中间拧紧阀门时弹出选择框
// 情况一出气口阀门可以关紧火焰熄灭再播放剩余动画跟同学G说到“已关闭事故瓶出气口阀门火焰熄灭周围未有新的引燃物。”此步骤做完后直接跳转1-4
// 情况二出气口阀门无法关紧火焰无法熄灭再播放剩余动画跟同学G说到“无法关闭事故瓶出气口阀门火焰依然燃烧周围未有新的引燃物。”随后再继续播放剩余动画动画播放完毕
private async ETTask Minutia1_3()
{
this.SetPlayDirector(playableDirectors[2], PlayTimelineMode.Play);
await ETTask.CompletedTask;
}
// 1-4
// ①视角对准实验室门口播放动画2-7动画播完后视角对准L老师播放动画2-8动画播完弹出 气体探测器结果界面,显示“正常”,点击“进入实验室”按钮;
// ②播放动画2-9动画播完自动跳转至下一步
// ③视角来到实验室内播放动画2-10待电源开关关闭后弹出“已确认电源关闭”提示框点击确认再播放J老师开门进入实验室动作弹出再次检查按钮。
// ④按钮点击后播放动画2-11完成后弹出文字提示框经检测确认气瓶无漏气爆炸起火周围未有被引燃物品注意若有检查到起火点用干粉灭火器将气瓶火焰引燃的周围物品火焰根部喷射扑灭火焰
private async ETTask Minutia1_4()
{
this.SetPlayDirector(playableDirectors[3], PlayTimelineMode.Play);
await ETTask.CompletedTask;
}
}
}