网上演练贵港万达广场(人员密集)
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.
 
 
 

551 lines
20 KiB

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using AX.MessageSystem;
using AX.NetworkSystem;
public class OilSetManager : MonoBehaviour
{
public static OilSetManager GetInstance;
public Text OutShowText;
public ToggleRecordByAC ModelChange;
public InputFieldRecordByAC ChuWuIput;
public DropDownRecordByAC ChuWuDropDown;
public SliderRecordByAC ChuLiangSlider;
public Text ChuLiangAccountShow;
public ButtonRecordByAC SureBtn;
public ButtonRecordByAC CancelBtn;
#region 爆炸UI
// 沸溢按钮
public CommonToggle BoilOverToggle;
// 爆炸文字父对象
public GameObject ExplodeObj;
// 喷溅沸溢父对象
public GameObject BoilOverObj;
// 爆炸按钮
public CommonToggle ExplodeToggle;
// 爆炸时长
public InputField InputExplodeTime;
// 爆炸死亡范围
public InputField InputExplodeDeadRange;
// 爆炸受伤范围
public InputField InputExplodeHurtRange;
// 喷溅时间
public InputField InputSplashTime;
// 发生喷溅几率
public InputField InputSplashProbability;
// 沸溢时间
public InputField InputBoilOverTime;
// 发生沸溢几率
public InputField InputBoilOverProbability;
// 喷溅死亡范围
public InputField InputBoilOverDeadRange;
// 沸溢文本
public Text BoilOverText;
// 爆炸文本
public Text ExplodeText;
#endregion
private OilTankMessage NowSelectMessage;
private string ChuWu;
private float ChuLiang;
public Transform Target;
void Awake()
{
ModelChange.OutInterFaceToggle = OnvalueChangedModelChange;
ChuWuIput.OutInterFaceInPutField = InputFieldValueChangedChuWuInput;
ChuWuDropDown.OutInterFaceDropDown = DropDownValueChangedChuWuDrop;
ChuLiangSlider.OutInterFaceSlider = SliderValueChangedChuLiangSlider;
SureBtn.OutInterFaceButton = BtnClickSure;
CancelBtn.OutInterFaceButton = BtnClickCancel;
GetInstance = this;
gameObject.SetActive(false);
ExplodeToggle.OnClicked = BaoZhaToggle_OnClicked;
ExplodeToggle.UsedColor = false;
BoilOverToggle.OnClicked = FeiYiToggle_OnClicked;
BoilOverToggle.UsedColor = false;
BoilOverText.text = "1.当火灾持续(\u3000)分钟未得到有效控制时,有(\u3000)%的几率出现沸溢。\n2.出现沸溢后(\u3000)分钟内火势仍未得到有效控制时有(\u3000)% 的几率出现喷溅。\n3.在喷溅范围(\u3000)米内的人员全部死亡。";
ExplodeText.text = "1.冷却强度不足时,(\u3000)分钟发生爆炸。\n2.爆炸后周边(\u3000)米范围内人员死亡;(\u3000)米范围内受伤。";
InputBoilOverProbability.onValueChanged.AddListener(InputBoilOverProbabilityFiexdValue);
InputSplashProbability.onValueChanged.AddListener(InputSplashProbabilityFiexdValue);
InputExplodeDeadRange.onValueChanged.AddListener(InputExplodeDeadRangeValue);
InputExplodeHurtRange.onValueChanged.AddListener(InputExplodeHurtRangeValue);
MessageDispatcher.AddListener("LOAD_UIDISASTER", LoadUIDisaster);
}
private void InputExplodeHurtRangeValue(string arg0)
{
int num = 0;
if (!string.IsNullOrEmpty(arg0))
{
if (string.IsNullOrEmpty(InputExplodeDeadRange.text))
{
num = int.Parse(arg0);
num = Mathf.Clamp(num, 0, 1000);
}
else
{
num = int.Parse(arg0);
int numMin = int.Parse(InputExplodeDeadRange.text);
num = Mathf.Clamp(num, numMin + 10, 1000);
}
}
InputExplodeHurtRange.text = num.ToString();
}
private void InputExplodeDeadRangeValue(string arg0)
{
int num = 0;
if (!string.IsNullOrEmpty(arg0))
{
num = int.Parse(arg0);
num = Mathf.Clamp(num, 0, 1000);
}
InputExplodeDeadRange.text = num.ToString();
InputExplodeHurtRange.text = (num + 10).ToString();
}
// 限制喷溅几率输入数值
private void InputBoilOverProbabilityFiexdValue(string arg0)
{
int num = 0;
if (!string.IsNullOrEmpty(arg0))
{
num = int.Parse(arg0);
num = Mathf.Clamp(num, 0, 100);
}
InputBoilOverProbability.text = num.ToString();
}
// 限制沸溢几率输入数值
private void InputSplashProbabilityFiexdValue(string arg0)
{
int num = 0;
if (!string.IsNullOrEmpty(arg0))
{
num = int.Parse(arg0);
num = Mathf.Clamp(num, 0, 100);
}
InputSplashProbability.text = num.ToString();
}
private void FeiYiToggle_OnClicked(CommonToggle arg1, bool arg2)
{
BoilOverObj.SetActive(arg2);
//if (!arg2)
//{
// InputSplashTime.text = NowSelectMessage.SplashTime.ToString();
// InputSplashProbability.text = "";
// InputBoilOverTime.text = "";
// InputBoilOverProbability.text = "";
//}
}
private void BaoZhaToggle_OnClicked(CommonToggle arg1, bool arg2)
{
ExplodeObj.SetActive(arg2);
//if (!arg2)
//{
// InputExplodeTime.text = "";
// InputExplodeDeadRange.text = "";
// InputExplodeHurtRange.text = "";
//}
}
private void OnDestroy()
{
InputBoilOverProbability.onValueChanged.RemoveListener(InputBoilOverProbabilityFiexdValue);
InputSplashProbability.onValueChanged.RemoveListener(InputSplashProbabilityFiexdValue);
MessageDispatcher.RemoveListener("LOAD_UIDISASTER", LoadUIDisaster);
}
private void LoadUIDisaster(IMessage obj)
{
if (GameSettings.othersSettings.isSelectedDisaster)
{
if (GameSettings.othersSettings.mode != Mode.DisasterManagement)
{//若是练习或演习模式进入导调组界面,则不可以修改
SetInteractable();
//ModelChange.gameObject.GetComponent<Toggle>().interactable = false;
//ChuWuIput.gameObject.GetComponent<InputField>().interactable = false;
//ChuWuDropDown.GetComponent<Dropdown>().interactable = false;
//ChuLiangSlider.GetComponent<Slider>().interactable = false;
//SureBtn.GetComponent<Button>().interactable = false;
//CancelBtn.GetComponent<Button>().interactable = false;
}
else
{
if (!GameSettings.disasterSetting.isEdit)
{//若是灾情库设置模式的查看,则不可以修改
SetInteractable();
//ModelChange.gameObject.GetComponent<Toggle>().interactable = false;
//ChuWuIput.gameObject.GetComponent<InputField>().interactable = false;
//ChuWuDropDown.GetComponent<Dropdown>().interactable = false;
//ChuLiangSlider.GetComponent<Slider>().interactable = false;
//SureBtn.GetComponent<Button>().interactable = false;
//CancelBtn.GetComponent<Button>().interactable = false;
}
else
{
//若是灾情库设置模式的编辑,则可以修改
}
}
}
}
private void BtnClickCancel()
{
NowSelectMessage = null;
OutShowText.text = "";
InputFieldValueChangedChuWuInput("");
ChuWuIput.GetComponent<InputField>().text = "";
DropDownValueChangedChuWuDrop(0);
ChuWuDropDown.GetComponent<Dropdown>().value = 0;
SliderValueChangedChuLiangSlider(0.5f);
ChuLiangSlider.GetComponent<Slider>().value = 0.5f;
gameObject.SetActive(false);
Target = null;
}
private void BtnClickSure()
{
// 保存储物储量
NowSelectMessage.SetOilTank(this.ChuWu, this.ChuLiang);
// 爆炸属性
bool isExplode = false;
int explodeTime = 0;
int explodeDeadRange = 0;
int explodeHurtRange = 0;
// 喷溅沸溢属性
bool isBoilOver = false;
int boilOverTime = 0;
int boilOverProbability = 0;
int boilOverDeadRange = 0;
int SplashTime = 0;
int SplashProbability = 0;
// 爆炸数据
if (ExplodeToggle.ToggleButton.isOn)
{
isExplode = true;
explodeTime = int.Parse(InputExplodeTime.text);
explodeDeadRange = int.Parse(InputExplodeDeadRange.text);
explodeHurtRange = int.Parse(InputExplodeHurtRange.text);
}
// 保存爆炸数据
NowSelectMessage.SetExplodeData(explodeTime, explodeDeadRange, explodeHurtRange, isExplode);
// 喷溅沸溢数据
if (BoilOverToggle.ToggleButton.isOn)
{
isBoilOver = true;
SplashTime = int.Parse(InputBoilOverTime.text);// 命名错误
SplashProbability = int.Parse(InputSplashProbability.text);
boilOverTime = int.Parse(InputSplashTime.text);
boilOverProbability = int.Parse(InputBoilOverProbability.text);
boilOverDeadRange = int.Parse(InputBoilOverDeadRange.text);
}
// 保存喷溅数据
NowSelectMessage.SetBoilOverData(SplashTime, SplashProbability, boilOverTime, boilOverProbability, boilOverDeadRange, isBoilOver);
//同步信息绑定
if (GameSettings.othersSettings.mode != Mode.DisasterManagement)
{
OilTankInfoSyncData arg = new OilTankInfoSyncData();
arg.gameObjID = NowSelectMessage.gameObjID;
arg.SendUserID = CurrentUserInfo.mySelf.Id;
//arg.oiltankmessage = NowSelectMessage;
arg.MatterContainer = NowSelectMessage.MatterContainer;
arg.Reserves = NowSelectMessage.Reserves;
arg.OutShowHeight = NowSelectMessage.OutShowHeight;
arg.Taketime = NowSelectMessage.TakeTime;
arg.DurationTime = NowSelectMessage.DurationTime;
arg.FlowRate = NowSelectMessage.FlowRate;
arg.BoilProb = NowSelectMessage.BoilProb;
arg.HasLeakeSet = NowSelectMessage.HasLeakeSet;
// 是否设置爆炸
if (isExplode)
{
arg.isExplode = isExplode;
arg.ExplodeTime = explodeTime;
arg.ExplodeDeadRange = explodeDeadRange;
arg.ExplodeHurtRange = explodeHurtRange;
}
else
{
arg.isExplode = false;
arg.ExplodeTime = 0;
arg.ExplodeDeadRange = 0;
arg.ExplodeHurtRange = 0;
}
// 是否沸溢
if (isBoilOver)
{
arg.isBoilOver = BoilOverToggle.ToggleButton.isOn;
arg.BoilOverTime = boilOverTime;
arg.BoilOverDeadRange = boilOverDeadRange;
arg.BoilOverProbability = boilOverProbability;
arg.SplashTime = SplashTime;
arg.SplashProbability = SplashProbability;
}
else
{
arg.isBoilOver = false;
arg.BoilOverTime = 0;
arg.BoilOverDeadRange = 0;
arg.BoilOverProbability = 0;
arg.SplashTime = 0;
arg.SplashProbability = 0;
}
NetworkManager.Default.SendAsync("OIL_TANK_INFO_SYNC", arg);
}
BtnClickCancel();
}
private void SliderValueChangedChuLiangSlider(float value)
{
ChuLiang = value;
ChuLiangAccountShow.text = (int)(value * 100) + "%";
}
private void DropDownValueChangedChuWuDrop(int value)
{
ChuWu = ChuWuDropDown.GetComponent<Dropdown>().captionText.text;
CheckToggleActive();
}
private void InputFieldValueChangedChuWuInput(string value)
{
ChuWu = value;
CheckToggleActive();
}
private void CheckToggleActive()
{
if (NowSelectMessage == null || !needRefresh)
{
return;
}
// 读取爆炸设置信息
if (NowSelectMessage.MyType == TankType. || NowSelectMessage.MyType == TankType.)
{
EnableExplodeUI();
UnableBoilOverUI();
}
else
{
EnableBoilOverUI();
UnableExplodeUI();
if (ChuWu == "原油" || ChuWu == "重油")
{
BoilOverToggle.ToggleButton.interactable = true;
}
else
{
BoilOverToggle.ToggleButton.isOn = false;
BoilOverToggle.ToggleButton.interactable = false;
}
}
}
private void OnvalueChangedModelChange(bool IsOn)
{
ChuWuIput.gameObject.SetActive(IsOn);
ChuWuDropDown.gameObject.SetActive(!IsOn);
if (ChuWuIput.gameObject.activeSelf)
{
ChuWu = ChuWuIput.GetComponent<InputField>().text;
}
else
{
ChuWu = ChuWuDropDown.GetComponent<Dropdown>().captionText.text;
}
CheckToggleActive();
}
private void OnEnable()
{
Refresh();
CheckToggleActive();
}
public void BindOilTank(OilTankMessage OilMessage)
{
NowSelectMessage = OilMessage;
if (OilMessage != null)
{
Target = OilMessage.transform;
OutShowText.text = NowSelectMessage.GuanQuName + "设置";
if (OilMessage.Reserves != 0)
{
SliderValueChangedChuLiangSlider(OilMessage.Reserves);
ChuLiangSlider.GetComponent<Slider>().value = OilMessage.Reserves;
}
else
{
SliderValueChangedChuLiangSlider(0.5f);
ChuLiangSlider.GetComponent<Slider>().value = 0.5f;
}
if (OilMessage.HasLeakeSet)
{
ChuLiangSlider.GetComponent<Slider>().interactable = false;
}
else
{
ChuLiangSlider.GetComponent<Slider>().interactable = true;
}
if (OilMessage.MatterContainer.Length > 0)
{
OnvalueChangedModelChange(true);
ModelChange.GetComponent<Toggle>().isOn = true;
InputFieldValueChangedChuWuInput(OilMessage.MatterContainer);
ChuWuIput.GetComponent<InputField>().text = OilMessage.MatterContainer;
}
else
{
OnvalueChangedModelChange(false);
ModelChange.GetComponent<Toggle>().isOn = false;
InputFieldValueChangedChuWuInput("");
ChuWuIput.GetComponent<InputField>().text = "";
}
if (!gameObject.activeSelf)
gameObject.SetActive(true);
}
else
{
BtnClickCancel();
}
}
void Update()
{
if (gameObject.activeSelf && Target != null)
{
//var offset = Target.GetComponent<MeshRenderer>().bounds.size.x;
var offset = Target.Find("OilStandard").GetComponentInChildren<MeshRenderer>().bounds.size.x;
Vector3 point = new Vector3(Target.position.x - offset / 2, Target.position.y + 1.5f, Target.position.z);
Vector3 Targetscreenpos = Camera.main.WorldToScreenPoint(point);
Vector3 viewpos = GameObject.Find("UICamera").GetComponent<Camera>().ScreenToWorldPoint(Targetscreenpos);
viewpos.z = 0;
transform.position = viewpos;
}
}
bool needRefresh = true;
public void SetInteractable()
{
ModelChange.gameObject.GetComponent<Toggle>().interactable = false;
ChuWuIput.gameObject.GetComponent<InputField>().interactable = false;
ChuWuDropDown.GetComponent<Dropdown>().interactable = false;
ChuLiangSlider.GetComponent<Slider>().interactable = false;
SureBtn.GetComponent<Button>().interactable = false;
//CancelBtn.GetComponent<Button>().interactable = false;
needRefresh = false;
UnableExplodeUI();
UnableBoilOverUI();
}
/// <summary>
/// 禁用爆炸UI
/// </summary>
public void UnableExplodeUI()
{
ExplodeToggle.ToggleButton.interactable = false;
InputExplodeDeadRange.interactable = false;
InputExplodeHurtRange.interactable = false;
InputExplodeTime.interactable = false;
}
// 启用爆炸UI
public void EnableExplodeUI()
{
if (needRefresh)
{
ExplodeToggle.ToggleButton.interactable = true;
InputExplodeDeadRange.interactable = true;
InputExplodeHurtRange.interactable = true;
InputExplodeTime.interactable = true;
}
}
public void UnableBoilOverUI()
{
BoilOverToggle.ToggleButton.interactable = false;
InputSplashTime.interactable = false;
InputSplashProbability.interactable = false;
InputBoilOverTime.interactable = false;
InputBoilOverProbability.interactable = false;
InputBoilOverDeadRange.interactable = false;
}
public void EnableBoilOverUI()
{
if (needRefresh)
{
BoilOverToggle.ToggleButton.interactable = true;
InputSplashTime.interactable = true;
InputSplashProbability.interactable = true;
InputBoilOverTime.interactable = true;
InputBoilOverProbability.interactable = true;
InputBoilOverDeadRange.interactable = true;
}
}
void Refresh()
{
// 如果数据为空,返回
if (NowSelectMessage == null)
{
return;
}
//初始化数据
Initialize();
ExplodeToggle.ToggleButton.isOn = NowSelectMessage.IsCanExplode;
BoilOverToggle.ToggleButton.isOn = NowSelectMessage.IsCanBoilOver;
// 读取爆炸设置信息
if (NowSelectMessage.MyType == TankType. || NowSelectMessage.MyType == TankType.)
{
// 启用爆炸UI
EnableExplodeUI();
// 禁用喷溅沸溢UI
UnableBoilOverUI();
//ExplodeToggle.ToggleButton.isOn = NowSelectMessage.IsCanExplode;
//if (NowSelectMessage.IsCanExplode)
//{
ExplodeObj.SetActive(NowSelectMessage.IsCanExplode);
InputExplodeTime.text = NowSelectMessage.ExplodeTime.ToString();
InputExplodeDeadRange.text = NowSelectMessage.ExplodeDeadRange.ToString();
InputExplodeHurtRange.text = NowSelectMessage.ExplodeHurtRange.ToString();
//}
//else
//{
// ExplodeObj.SetActive(false);
//}
}
else
{
EnableBoilOverUI();
UnableExplodeUI();
//BoilOverToggle.ToggleButton.isOn = NowSelectMessage.IsCanBoilOver;
//if (NowSelectMessage.IsCanBoilOver)
//{
BoilOverObj.SetActive(NowSelectMessage.IsCanBoilOver);
// 设置喷溅沸溢
InputBoilOverTime.text = NowSelectMessage.BoilOverTime.ToString();
InputBoilOverDeadRange.text = NowSelectMessage.BoilOverDeadRange.ToString();
InputBoilOverProbability.text = NowSelectMessage.BoilOverProbability.ToString();
InputSplashTime.text = NowSelectMessage.SplashTime.ToString();
InputSplashProbability.text = NowSelectMessage.SplashProbability.ToString();
//}
//else
//{
// BoilOverObj.SetActive(false);
//}
}
}
private void Initialize()
{
ExplodeObj.SetActive(false);
BoilOverObj.SetActive(false);
}
}