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
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); |
|
} |
|
}
|
|
|