上海苏宁宝丽嘉酒店,2020.11.17 15:30改为单机版本,以后合成单机版本可以以此版本为模板
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.
 
 
 
 

570 lines
20 KiB

using AX.InputSystem;
using AX.MessageSystem;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.UI;
public enum FireManSkills
{
None = 0,
LayWaterHose = 1 << 1,
LayLifeSavingFlarePath = 1 << 2,
SprayWater = 1 << 3,
SprayFoam = 1 << 4,
ForcibleEntry = 1 << 5,
DischargeSmoke = 1 << 6,
Lighting = 1 << 7,
PackUpLine = 1 << 8,
TagSearchRoom = 1 << 9,
EquipSelect = 1 << 10,
Save = 1 << 11,
AskPeople = 1 << 12,
ClearDangerous = 1 << 13,
ClearSundries = 1 << 14,
Decontamination = 1 << 15
}
public class FireManMessage : MonoBehaviour
{
public FireManSkills workType;//记录是喷水还是照明等
public FireManSkills EnabledSkills;
//public ParticleEnum waterType;//记录喷水方式
private GameObject shuiqiang;
private GameObject wuchiju;
private GameObject zhaomingdeng;
private GameObject panyanji;
private Bag bag;
private XiaoFangYuanDrawLine drawline;
private long GameObjID;
private bool flag;//是否连接水源
void Awake()
{
wuchiju = TransformHelper.FindChild(transform, "WuChiJu").gameObject;
zhaomingdeng = TransformHelper.FindChild(transform, "ZhaoMingDeng").gameObject;
panyanji = TransformHelper.FindChild(transform, "PaiYanJi").gameObject;
MessageDispatcher.AddListener("WaterSourceChanged", WaterSourceChanged);
MessageDispatcher.AddListener("WaterSeparaterChange", WaterseparadChange);
MessageDispatcher.AddListener("LayWaterHose", LayWaterHose);
MessageDispatcher.AddListener("LayLifeSavingFlarePath", LayLifeSavingFlarePath);
MessageDispatcher.AddListener("ForcibleEntry", ForcibleEntry);
MessageDispatcher.AddListener("DischargeSmoke", DischargeSmoke);
MessageDispatcher.AddListener("Lighting", Lightingfunc);
MessageDispatcher.AddListener("Save", Save);
MessageDispatcher.AddListener("PackUpLine", PackUpLine);
MessageDispatcher.AddListener("TagSearchRoom", TagSearchRoom);
MessageDispatcher.AddListener("EquipSelect", EquipSelectfunc);
MessageDispatcher.AddListener("SprayWater", SprayWater);
MessageDispatcher.AddListener("SprayFoam", SprayFoam);
// MessageDispatcher.AddListener("BagChaneg", BagChange);
}
void OnDestroy()
{
MessageDispatcher.RemoveListener("WaterSourceChanged", WaterSourceChanged);
MessageDispatcher.RemoveListener("WaterSeparaterChange", WaterseparadChange);
MessageDispatcher.RemoveListener("LayWaterHose", LayWaterHose);
MessageDispatcher.RemoveListener("LayLifeSavingFlarePath", LayLifeSavingFlarePath);
MessageDispatcher.RemoveListener("ForcibleEntry", ForcibleEntry);
MessageDispatcher.RemoveListener("DischargeSmoke", DischargeSmoke);
MessageDispatcher.RemoveListener("Lighting", Lightingfunc);
MessageDispatcher.RemoveListener("Save", Save);
MessageDispatcher.RemoveListener("PackUpLine", PackUpLine);
MessageDispatcher.RemoveListener("TagSearchRoom", TagSearchRoom);
MessageDispatcher.RemoveListener("EquipSelect", EquipSelectfunc);
MessageDispatcher.RemoveListener("SprayWater", SprayWater);
MessageDispatcher.RemoveListener("SprayFoam", SprayFoam);
//MessageDispatcher.RemoveListener("BagChaneg", BagChange);
}
private void WaterseparadChange(IMessage obj)
{
if (GetComponent<WaterReceiver>())
{
Waterseparadata waterdata = (Waterseparadata)obj.Data;
if (waterdata.receiveId == GameObjID)
{
flag = waterdata.IsContent;
int type = (int)waterdata.watertype;
if (type==0)
{
flag = false;
}
if (type == 1)//普通水
{
if (flag)
{
EnabledSkills |= FireManSkills.SprayWater;
EnabledSkills |= FireManSkills.Decontamination;
}
else
{
if (workType == FireManSkills.SprayWater || workType == FireManSkills.Decontamination)
{
workType = FireManSkills.None;
EnabledSkills &= ~FireManSkills.SprayWater;
EnabledSkills &= ~FireManSkills.Decontamination;
MessageDispatcher.SendMessage(GameObjID, "WaterSwitch", flag);
GetComponent<XiaoFangYuanDrawLine>().EndDraw();
}
else
{
if ((EnabledSkills & FireManSkills.SprayWater) != 0)
{
EnabledSkills &= ~FireManSkills.SprayWater;
}
if ((EnabledSkills & FireManSkills.Decontamination) != 0)
{
EnabledSkills &= ~FireManSkills.Decontamination;
}
}
}
}
if (type == 2)//泡沫
{
if (flag)
EnabledSkills |= FireManSkills.SprayFoam;
else
{
workType = FireManSkills.None;
if ((EnabledSkills & FireManSkills.SprayFoam) != 0)
{
EnabledSkills &= ~FireManSkills.SprayFoam;
}
MessageDispatcher.SendMessage(GetComponent<CloneGameObjInfo>().gameObjID, "WaterSwitch", flag);
GetComponent<XiaoFangYuanDrawLine>().EndDraw();
}
}
if (type == 3)//有水也有泡沫
{
if (flag)
{
EnabledSkills |= FireManSkills.SprayWater;
EnabledSkills |= FireManSkills.Decontamination;
EnabledSkills |= FireManSkills.SprayFoam;
}
else
{
if (workType == FireManSkills.SprayWater || workType == FireManSkills.Decontamination || workType == FireManSkills.SprayFoam)
{
workType = FireManSkills.None;
EnabledSkills &= ~FireManSkills.SprayWater;
EnabledSkills &= ~FireManSkills.Decontamination;
EnabledSkills &= ~FireManSkills.SprayFoam;
MessageDispatcher.SendMessage(GameObjID, "WaterSwitch", flag);
GetComponent<XiaoFangYuanDrawLine>().EndDraw();
}
else
{
if ((EnabledSkills & FireManSkills.SprayWater) != 0)
{
EnabledSkills &= ~FireManSkills.SprayWater;
}
if ((EnabledSkills & FireManSkills.Decontamination) != 0)
{
EnabledSkills &= ~FireManSkills.Decontamination;
}
if ((EnabledSkills & FireManSkills.SprayFoam) != 0)
{
EnabledSkills &= ~FireManSkills.SprayFoam;
}
}
}
}
SprayChangeMove(flag);
if (!RecordEvent.IsReplay())
{
if (this != null && FireManSkillsPanel.GetInstance != null && FireManSkillsPanel.GetInstance.gameObject.activeSelf)
MessageDispatcher.SendMessage("FiremanSkillsPanelDraw", gameObject);
}
}
}
}
private void Start()
{
GameObjID = GetComponent<CloneGameObjInfo>().gameObjID;
bag = GetComponent<Bag>();
drawline = GetComponent<XiaoFangYuanDrawLine>();
}
/// <summary>
/// 背包装备更改导致技能是否可用(破拆.照明.排烟)
/// </summary>
/// <param name="obj"></param>
private void EquipSelectfunc(IMessage obj)
{
EquipSelect.GetInstance.gameObject.SetActive(true);
BagPanel.GetInstance.gameObject.SetActive(true);
}
private void TagSearchRoom(IMessage obj)
{
if (SelectedObjs.selectedCharacters.Count > 0 && gameObject == SelectedObjs.selectedCharacters[0])
{
var arg = new CloneCmdArgs();
arg.cloneObjType = CloneObjType.MarkSearchRoom;
arg.hitPos = transform.position;
arg.gameObjID = GameObjID;
MessageDispatcher.SendMessage(EntitiesManager.Instance.CreateObjID(), "CLONE_COMMAND", arg);
}
}
private void PackUpLine(IMessage obj)
{
if (SelectedObjs.selectedCharacters.Count > 0 && gameObject == SelectedObjs.selectedCharacters[0])
{
drawline.destoryLine();
GetComponent<NavMeshAgent>().enabled = true;
GetComponent<AgentController>().enabled = true;
if ((EnabledSkills & FireManSkills.SprayWater) != 0)
{
EnabledSkills &= ~FireManSkills.SprayWater;
}
if ((EnabledSkills & FireManSkills.Decontamination) != 0)
{
EnabledSkills &= ~FireManSkills.Decontamination;
}
if ((EnabledSkills & FireManSkills.SprayFoam) != 0)
{
EnabledSkills &= ~FireManSkills.SprayFoam;
}
MessageDispatcher.SendMessage("FiremanSkillsPanelDraw", gameObject);
}
}
private void Save(IMessage obj)
{
}
private void Lightingfunc(IMessage obj)
{
var gameObjID = (long)obj.Sender;
if (GameObjID == gameObjID)
{
Lighting((bool)obj.Data);
}
}
private void DischargeSmoke(IMessage obj)
{
var gameObjID = (long)obj.Sender;
if (GameObjID == gameObjID)
{
DischargeSmoke((bool)obj.Data);
}
}
private void ForcibleEntry(IMessage obj)
{
var gameObjID = (long)obj.Sender;
if (GameObjID == gameObjID)
{
Debug.Log(obj.Type.ToString());
ForcibleEntry((bool)obj.Data);
}
}
private void LayLifeSavingFlarePath(IMessage obj)
{
if (GameObjID == (long)obj.Sender)
{
bool value = (bool)obj.Data;
if (value)
drawline.setLine();
else
{
drawline.EndDraw();
}
}
}
private void SprayWater(IMessage obj)
{
if (GameObjID == (long)obj.Sender)
{
bool value = (bool)obj.Data;
if (value)
{
drawline.setLine();
if (GetComponent<Bag>().GetEquipNum("消防高压水带") >= 1)
{
GetComponent<NavMeshAgent>().enabled = true;
GetComponent<AgentController>().enabled = true;
}
}
else
{
drawline.EndDraw();
if (flag)
{
//if (GetComponent<Bag>().GetEquipNum("消防高压水带") < 1)
{
GetComponent<NavMeshAgent>().enabled = false;
GetComponent<AgentController>().enabled = false;
}
}
}
}
}
private void SprayFoam(IMessage obj)
{
if (GameObjID == (long)obj.Sender)
{
bool value = (bool)obj.Data;
if (value)
{
drawline.setLine();
if (GetComponent<Bag>().GetEquipNum("消防高压水带") >= 1)
{
GetComponent<NavMeshAgent>().enabled = true;
GetComponent<AgentController>().enabled = true;
}
}
else
{
drawline.EndDraw();
if (flag)
{
//if (GetComponent<Bag>().GetEquipNum("消防高压水带") < 1)
{
GetComponent<NavMeshAgent>().enabled = false;
GetComponent<AgentController>().enabled = false;
}
}
}
}
}
private void LayWaterHose(IMessage obj)
{
if (GameObjID == (long)obj.Sender)
{
bool value = (bool)obj.Data;
if (value)
{
drawline.setLine();
if (GetComponent<Bag>().GetEquipNum("消防高压水带") >= 1)
{
GetComponent<NavMeshAgent>().enabled = true;
GetComponent<AgentController>().enabled = true;
}
}
else
{
drawline.EndDraw();
if (flag)
{
//if (GetComponent<Bag>().GetEquipNum("消防高压水带") < 1)
{
GetComponent<NavMeshAgent>().enabled = false;
GetComponent<AgentController>().enabled = false;
}
}
}
}
}
// Update is called once per frame
void Update()
{
}
private void WaterSourceChanged(IMessage obj)
{
var waterdata = (WaterConnectionData)obj.Data;
var gameObjId = waterdata.receiverID;
// var Id = GetComponent<BaseGameObjInfo>().GameObjID;
if (gameObjId == GameObjID)
{
flag = waterdata.connected;
Debug.Log(flag);
int type = (int)waterdata.type;
if (type == 1)//普通水
{
if (flag)
{
EnabledSkills |= FireManSkills.SprayWater;
EnabledSkills |= FireManSkills.Decontamination;
}
else
{
if (workType == FireManSkills.SprayWater||workType==FireManSkills.Decontamination)
{
workType = FireManSkills.None;
EnabledSkills &= ~FireManSkills.SprayWater;
EnabledSkills &= ~FireManSkills.Decontamination;
MessageDispatcher.SendMessage(GameObjID, "WaterSwitch", flag);
GetComponent<XiaoFangYuanDrawLine>().EndDraw();
}
else
{
if ((EnabledSkills & FireManSkills.SprayWater) != 0)
{
EnabledSkills &= ~FireManSkills.SprayWater;
}
if ((EnabledSkills & FireManSkills.Decontamination) != 0)
{
EnabledSkills &= ~FireManSkills.Decontamination;
}
}
}
}
if (type == 2)//泡沫
{
if (flag)
EnabledSkills |= FireManSkills.SprayFoam;
else
{
workType = FireManSkills.None;
if ((EnabledSkills & FireManSkills.SprayFoam) != 0)
{
EnabledSkills &= ~FireManSkills.SprayFoam;
}
MessageDispatcher.SendMessage(GetComponent<CloneGameObjInfo>().gameObjID, "WaterSwitch", flag);
GetComponent<XiaoFangYuanDrawLine>().EndDraw();
}
}
if (type == 3)//有水也有泡沫
{
if (flag)
{
EnabledSkills |= FireManSkills.SprayWater;
EnabledSkills |= FireManSkills.Decontamination;
EnabledSkills |= FireManSkills.SprayFoam;
}
else
{
if (workType == FireManSkills.SprayWater || workType == FireManSkills.Decontamination|| workType == FireManSkills.SprayFoam)
{
workType = FireManSkills.None;
EnabledSkills &= ~FireManSkills.SprayWater;
EnabledSkills &= ~FireManSkills.Decontamination;
EnabledSkills &= ~FireManSkills.SprayFoam;
MessageDispatcher.SendMessage(GameObjID, "WaterSwitch", flag);
GetComponent<XiaoFangYuanDrawLine>().EndDraw();
}
else
{
if ((EnabledSkills & FireManSkills.SprayWater) != 0)
{
EnabledSkills &= ~FireManSkills.SprayWater;
}
if ((EnabledSkills & FireManSkills.Decontamination) != 0)
{
EnabledSkills &= ~FireManSkills.Decontamination;
}
if ((EnabledSkills & FireManSkills.SprayFoam) != 0)
{
EnabledSkills &= ~FireManSkills.SprayFoam;
}
}
}
}
SprayChangeMove(flag);
if (!RecordEvent.IsReplay())
{
if (this!=null&&FireManSkillsPanel.GetInstance!=null&&FireManSkillsPanel.GetInstance.gameObject.activeSelf)
MessageDispatcher.SendMessage("FiremanSkillsPanelDraw", gameObject);
}
}
}
public void ForcibleEntry(bool active)
{
if (wuchiju)
wuchiju.SetActive(active);
}
public void DischargeSmoke(bool active)
{
if (panyanji)
panyanji.SetActive(active);
}
public void Lighting(bool active)
{
if (zhaomingdeng)
zhaomingdeng.SetActive(active);
}
//设置消防员技能在动作上的表现
public void workTypeChanged()
{
//铺设水带
}
public void SetEnableSkill(bool add)
{
if (add)
{//添加装备
if (bag.GetEquipFromBag("无齿锯") != null)
{
EnabledSkills |= FireManSkills.ForcibleEntry;
}
if (bag.GetEquipFromBag("手提式防爆强光照明灯") != null)
{
EnabledSkills |= FireManSkills.Lighting;
}
if (bag.GetEquipFromBag("移动式排烟机") != null)
{
EnabledSkills |= FireManSkills.DischargeSmoke;
}
}
else
{//移除装备
if (bag.GetEquipFromBag("无齿锯") == null)
{
EnabledSkills &= ~FireManSkills.ForcibleEntry;
}
if (bag.GetEquipFromBag("手提式防爆强光照明灯") == null)
{
EnabledSkills &= ~FireManSkills.Lighting;
}
if (bag.GetEquipFromBag("移动式排烟机") == null)
{
EnabledSkills &= ~FireManSkills.DischargeSmoke;
}
}
}
void SprayChangeMove(bool connect)
{
if (connect)
{
if (GetComponent<Bag>().GetEquipNum("消防高压水带") < 1)
{
GetComponent<NavMeshAgent>().enabled = !connect;
GetComponent<AgentController>().enabled = !connect;
}
}
else
{
GetComponent<NavMeshAgent>().enabled = true;
GetComponent<AgentController>().enabled = true;
}
}
public void BagChange(bool add)
{
if (bag.GetEquipNum("消防高压水带") >= 1)
{
GetComponent<NavMeshAgent>().enabled = true;
GetComponent<AgentController>().enabled = true;
}
}
}