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.
294 lines
12 KiB
294 lines
12 KiB
3 years ago
|
using UnityEngine;
|
||
|
using System.Collections;
|
||
|
using System;
|
||
|
using UnityEngine.EventSystems;
|
||
|
using UnityEngine.UI;
|
||
|
using AX.MessageSystem;
|
||
|
/// <summary>
|
||
|
/// 1、鼠标通过射线点击对应的UI,实现实例化灾情物体
|
||
|
/// 2、挂载在Canvas下DomeView下DisasterButtonPicture;
|
||
|
/// 3、核心方法:GetObj();
|
||
|
/// </summary>
|
||
|
public class InstantiationDisaster : MonoBehaviour
|
||
|
{
|
||
|
public static InstantiationDisaster Instance;
|
||
|
public LayerMask m_layerMask = -1;
|
||
|
private LayerMask ground_layerMask = -1;
|
||
|
public LayerMask yg_layerMask = -1;
|
||
|
public LayerMask fire_layerMask = -1;
|
||
|
[HideInInspector]
|
||
|
public Vector3 Pos1_late = new Vector3(0, 0, 0);//第一碰撞点原来的位置
|
||
|
[HideInInspector]
|
||
|
public Vector3 Pos2_late = new Vector3(0, 0, 0);//第二碰撞点原来的位置
|
||
|
private GameObject XieLou;
|
||
|
private RaycastHit hit;
|
||
|
private GameObject DisasterGrid;
|
||
|
private LayerMask indoor_layerMask = -1;//室内层
|
||
|
DateTime t1, t2;
|
||
|
[HideInInspector]
|
||
|
public string DisasterName;
|
||
|
void Awake()
|
||
|
{
|
||
|
if (Instance == null)
|
||
|
{
|
||
|
Instance = this;
|
||
|
}
|
||
|
MessageDispatcher.AddListener("ResettingButton", ResettingButton);
|
||
|
MessageDispatcher.AddListener("InstantiateButton", GetObj);
|
||
|
if (ExamInfoHelpClass.applicationMode == ExamInfoHelpClass.ApplicationMode.SANDTABLE)
|
||
|
{
|
||
|
this.transform.Find("ScrollRect/DisasterGrid/PoChaiDian").gameObject.SetActive(false);
|
||
|
}
|
||
|
#region 查找灾情按钮对象
|
||
|
//XieLou = GameObject.Find("DomeView/BroweMenu/DisasterButtonPicture/ScrollRect/DisasterGrid").transform.FindChild("Fluvio").gameObject;
|
||
|
DisasterGrid = GameObject.Find("DomeView/BroweMenu/DisasterButtonPicture/ScrollRect").transform.Find("DisasterGrid").gameObject;
|
||
|
indoor_layerMask = 1 << 29 | 1 << 25 | 1 << 26;
|
||
|
ground_layerMask = 1 << 25 | 1 << 26;
|
||
|
#endregion
|
||
|
|
||
|
HideOilParticle();
|
||
|
}
|
||
|
void OnDestroy()
|
||
|
{
|
||
|
MessageDispatcher.RemoveListener("ResettingButton", ResettingButton);
|
||
|
MessageDispatcher.RemoveListener("InstantiateButton", GetObj);
|
||
|
Wounded.wounded1Index = 0;
|
||
|
PCD.pcdIndex = 0;
|
||
|
Wounded.wounded1Index = 0;
|
||
|
Fire.fireIndex = 0;
|
||
|
DangerGoods.wxpIndex = 0;
|
||
|
ZWD.zwdIndex = 0;
|
||
|
InsiDe.insiderIndex = 0;
|
||
|
YGXL.ygxlIndex = 0;
|
||
|
}
|
||
|
//重置方法
|
||
|
public void ResettingButton(IMessage message)
|
||
|
{
|
||
|
foreach (Transform child in DisasterGrid.transform)
|
||
|
{
|
||
|
if (child.gameObject.GetComponent<Button>().interactable == true)
|
||
|
{
|
||
|
child.Find("Image").gameObject.SetActive(false);
|
||
|
}
|
||
|
}
|
||
|
DisasterName = "";
|
||
|
}
|
||
|
|
||
|
void Update()
|
||
|
{
|
||
|
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
||
|
|
||
|
if (Physics.Raycast(ray, out hit, Mathf.Infinity, indoor_layerMask))
|
||
|
{
|
||
|
if (hit.collider.name.Equals("VoidWall"))
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (Physics.Raycast(ray, out hit, Mathf.Infinity, LayerMask.GetMask("shineiFloor")) && Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
|
||
|
{//实例化烟雾
|
||
|
//if (DisasterName == null)
|
||
|
// return;
|
||
|
|
||
|
if (DisasterName.Equals("Smog"))
|
||
|
{
|
||
|
Smog smog = new Smog(Resources.Load<GameObject>("Prefabs/ZQPrefab/Smog"), GameObject.Find("psmog"), DisasterGrid, Smog.SmogIndex, hit, 0.7f);
|
||
|
smog.InstatiateItem("中队名" + "-" + "smog" + "-" + "smog" + "-");
|
||
|
}
|
||
|
|
||
|
//室内烟1(qyy)
|
||
|
if (DisasterName.Equals("Shineiyan1"))
|
||
|
{
|
||
|
ShiNeiYan1 shineiyan1 = new ShiNeiYan1(Resources.Load<GameObject>("Prefabs/ZQPrefab/ny1"), GameObject.Find("pShineiyan1"), DisasterGrid, ShiNeiYan1.ShiNeiYan1Index, hit, 0.7f);
|
||
|
shineiyan1.InstatiateItem("中队名" + "-" + "Shineiyan1" + "-" + "ny1" + "-");
|
||
|
}
|
||
|
|
||
|
//室内烟2(qyy)
|
||
|
if (DisasterName.Equals("Shineiyan2"))
|
||
|
{
|
||
|
ShiNeiYan2 shineiyan2 = new ShiNeiYan2(Resources.Load<GameObject>("Prefabs/ZQPrefab/ny2"), GameObject.Find("pShineiyan2"), DisasterGrid, ShiNeiYan2.ShiNeiYan2Index, hit, 0.7f);
|
||
|
shineiyan2.InstatiateItem("中队名" + "-" + "Shineiyan2" + "-" + "ny2" + "-");
|
||
|
}
|
||
|
|
||
|
//室内火(qyy)
|
||
|
if (DisasterName.Equals("Shineihuo"))
|
||
|
{
|
||
|
Shineihuo shineihuo = new Shineihuo(Resources.Load<GameObject>("Prefabs/ZQPrefab/snh"), GameObject.Find("pShineihuo"), DisasterGrid, Shineihuo.ShineihuoIndex, hit, 0.7f);
|
||
|
shineihuo.InstatiateItem("中队名" + "-" + "Shineihuo" + "-" + "snh" + "-");
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
if (Physics.Raycast(ray, out hit, Mathf.Infinity, m_layerMask) && Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
|
||
|
{
|
||
|
if (InstantiationCar.Instance.isCarSelect)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
if (DisasterName == null)
|
||
|
return;
|
||
|
|
||
|
//伤员
|
||
|
if (DisasterName.Equals("ShangYuan2"))
|
||
|
{
|
||
|
Wounded wounded = new Wounded(Resources.Load<GameObject>("Prefabs/ZQPrefab/sy1"), GameObject.Find("pshangyuan1"), DisasterGrid, Wounded.wounded1Index, hit, 0.1f);
|
||
|
wounded.InstatiateItem("中队名" + "-" + "shangyuan1" + "-" + "sy1" + "-");
|
||
|
}
|
||
|
//破拆点
|
||
|
else if (DisasterName.Equals("PoChaiDian"))
|
||
|
{
|
||
|
PCD wounded = new PCD(Resources.Load<GameObject>("Prefabs/ZQPrefab/pcd"), GameObject.Find("ppochaidian"), DisasterGrid, PCD.pcdIndex, hit, 1.1f);
|
||
|
wounded.InstatiateItem("中队名" + "-" + "pochaidian" + "-" + "pcd" + "-");
|
||
|
}
|
||
|
//伤员倒
|
||
|
else if (DisasterName.Equals("ShangYuan"))
|
||
|
{
|
||
|
Wounded wounded = new Wounded(Resources.Load<GameObject>("Prefabs/ZQPrefab/sy2"), GameObject.Find("pshangyuan2"), DisasterGrid, Wounded.wounded1Index, hit, 1f);
|
||
|
wounded.InstatiateItem("中队名" + "-" + "shangyuan2" + "-" + "sy2" + "-");
|
||
|
}
|
||
|
|
||
|
//火
|
||
|
//else if (DisasterName.Equals("Huo"))
|
||
|
//{
|
||
|
// Fire fire = new Fire(Resources.Load<GameObject>("Prefabs/ZQPrefab/fire"), GameObject.Find("pfire"), DisasterGrid, Fire.fireIndex, hit, 0.7f);
|
||
|
// fire.InstatiateItem("中队名" + "-" + "fire" + "-" + "fire" + "-");
|
||
|
//}
|
||
|
//危险品
|
||
|
else if (DisasterName.Equals("WeiXianPin"))
|
||
|
{
|
||
|
DangerGoods wxp = new DangerGoods(Resources.Load<GameObject>("Prefabs/ZQPrefab/wxp"), GameObject.Find("pweixianpin"), DisasterGrid, DangerGoods.wxpIndex, hit, 1.1f);
|
||
|
wxp.InstatiateItem("中队名" + "-" + "weixianpin" + "-" + "wxp" + "-");
|
||
|
}
|
||
|
//杂物堆
|
||
|
else if (DisasterName.Equals("ZaWuDui"))
|
||
|
{
|
||
|
ZWD zwd = new ZWD(Resources.Load<GameObject>("Prefabs/ZQPrefab/zwd"), GameObject.Find("pzawudui"), DisasterGrid, ZWD.zwdIndex, hit, 0.5f);
|
||
|
zwd.InstatiateItem("中队名" + "-" + "zawudui" + "-" + "zwd" + "-");
|
||
|
}
|
||
|
}
|
||
|
//单独写火层
|
||
|
if (Physics.Raycast(ray, out hit, Mathf.Infinity, fire_layerMask) && Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
|
||
|
{
|
||
|
if (InstantiationCar.Instance.isCarSelect)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
if (DisasterName == null)
|
||
|
return;
|
||
|
if (DisasterName.Equals("Huo"))
|
||
|
{
|
||
|
Fire fire = new Fire(Resources.Load<GameObject>("Prefabs/ZQPrefab/fire"), GameObject.Find("pfire"), DisasterGrid, Fire.fireIndex, hit, 0.7f);
|
||
|
fire.InstatiateItem("中队名" + "-" + "fire" + "-" + "fire" + "-");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (Input.GetMouseButtonDown(0) && Physics.Raycast(ray, out hit, Mathf.Infinity, ground_layerMask) && Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
|
||
|
{
|
||
|
if (hit.collider.gameObject.layer == 26)
|
||
|
return;
|
||
|
//知情人
|
||
|
if (DisasterName.Equals("ZhiQingRen"))
|
||
|
{
|
||
|
InsiDe.insiderIndex = 0;
|
||
|
if (!GameObject.Find("中队名" + "-" + "zhiqingren" + "-" + "zqr" + "-0"))
|
||
|
{
|
||
|
GameObject obj = GameObject.Find("pzhiqingren");
|
||
|
foreach (Transform child in obj.transform)
|
||
|
{
|
||
|
if (child.name.Contains("zqr"))
|
||
|
{
|
||
|
MessageDispatcher.SendMessage("Operatinghints", (object)"知情人已经存在");
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
InsiDe inside = new InsiDe(Resources.Load<GameObject>("Prefabs/ZQPrefab/zqr"), GameObject.Find("pzhiqingren"), DisasterGrid, InsiDe.insiderIndex, hit, 1f);
|
||
|
inside.InstatiateItem("中队名" + "-" + "zhiqingren" + "-" + "zqr" + "-");
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MessageDispatcher.SendMessage("Operatinghints", (object)"知情人已经存在");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
//if (MySceneManager.GetActiveScene().name.Equals("5"))
|
||
|
//{
|
||
|
// XieLou.SetActive(true);
|
||
|
//}
|
||
|
//else
|
||
|
//{
|
||
|
// XieLou.SetActive(false);
|
||
|
//}
|
||
|
if (Input.GetMouseButtonDown(0) && Physics.Raycast(ray, out hit, Mathf.Infinity, yg_layerMask) && Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
|
||
|
{
|
||
|
//泄漏
|
||
|
if (DisasterName.Equals("Fluvio"))
|
||
|
{
|
||
|
YGXL ygxl = new YGXL(Resources.Load<GameObject>("Prefabs/ZQPrefab/Fluvio"), GameObject.Find("pFluvio"), DisasterGrid, YGXL.ygxlIndex, hit, 0.5f);
|
||
|
ygxl.InstatiateItem("中队名" + "-" + "Fluvio" + "-" + "Fluvio" + "-");
|
||
|
}
|
||
|
|
||
|
else if (DisasterName.Equals("splash"))
|
||
|
{
|
||
|
Splash splash = new Splash(Resources.Load<GameObject>("Prefabs/ZQPrefab/Splash"), GameObject.Find("psplash"), DisasterGrid, Splash.SplashIndex, hit, 0.7f);
|
||
|
splash.InstatiateItem("中队名" + "-" + "splash" + "-" + "splash" + "-");
|
||
|
}
|
||
|
else if (DisasterName.Equals("guanTiFire"))
|
||
|
{
|
||
|
GuanTiFire fire = new GuanTiFire(Resources.Load<GameObject>("Prefabs/ZQPrefab/GuanTiFire"), GameObject.Find("pguanTiFire"), DisasterGrid, GuanTiFire.GuanTiFireIndex, hit, 0.7f);
|
||
|
fire.InstatiateItem("中队名" + "-" + "guanTiFire" + "-" + "guanTiFire" + "-");
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
if (Physics.Raycast(ray, out hit, Mathf.Infinity,LayerMask.GetMask("dimian")) && Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
|
||
|
{
|
||
|
if (DisasterName == null)
|
||
|
return;
|
||
|
|
||
|
if (DisasterName.Equals("diMianFire"))
|
||
|
{
|
||
|
DiMianFire fire = new DiMianFire(Resources.Load<GameObject>("Prefabs/ZQPrefab/DiMianFire"), GameObject.Find("pdiMianFire"), DisasterGrid, DiMianFire.DiMianFireIndex, hit, 0.7f);
|
||
|
fire.InstatiateItem("中队名" + "-" + "diMianFire" + "-" + "diMianFire" + "-");
|
||
|
Debug.Log("DiMianFire");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
public void GetObj(IMessage message)
|
||
|
{
|
||
|
if (gameObject.name.Contains(message.Sender.ToString()))
|
||
|
{
|
||
|
MessageDispatcher.SendMessage("ResettingButton");
|
||
|
var obj = (GameObject)message.Data;
|
||
|
obj.transform.Find("Image").gameObject.SetActive(true);
|
||
|
DisasterName = obj.name;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// 只有在石油场景才显示油罐泄露的四种灾情
|
||
|
/// </summary>
|
||
|
void HideOilParticle()
|
||
|
{
|
||
|
if (MySceneManager.GetActiveScene().name!="5")
|
||
|
{
|
||
|
BaseTool[] childArray = transform.GetComponentsInChildren<BaseTool>();
|
||
|
foreach (BaseTool baseTool in childArray)
|
||
|
{
|
||
|
if (baseTool.name.Contains("splash") || baseTool.name.Contains("guanTiFire") || baseTool.name.Contains("diMianFire"))
|
||
|
{
|
||
|
baseTool.gameObject.SetActive(false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|