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.
800 lines
28 KiB
800 lines
28 KiB
4 years ago
|
using AX.NetworkSystem;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using AX.MessageSystem;
|
||
|
using System;
|
||
|
using UnityEngine.UI;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 出水物体流量改变同步信息
|
||
|
/// </summary>
|
||
|
public class FlowChangeData
|
||
|
{
|
||
|
public long SenderId;
|
||
|
public long GameObjId;
|
||
|
public float Flow;
|
||
|
}
|
||
|
public class FireManControl : MonoBehaviour
|
||
|
{
|
||
|
|
||
|
/// <summary>
|
||
|
/// 当前使用的技能
|
||
|
/// </summary>
|
||
|
public FireManSkills WorkType;
|
||
|
public bool IsSprayWater;
|
||
|
|
||
|
private Animator anim;
|
||
|
|
||
|
private float Speed;
|
||
|
private Transform shuiqiang;
|
||
|
/// <summary>
|
||
|
/// 消防员水枪
|
||
|
/// </summary>
|
||
|
private Transform FiremanHose;
|
||
|
//public GameObject FrothPrefabs;
|
||
|
//public GameObject WaterFlowerPrefabs;
|
||
|
//public GameObject WaterFogPrefabs;
|
||
|
//public GameObject WaterStraightPrefabs;
|
||
|
|
||
|
public SprayParticleType SelectParticleType;
|
||
|
//粒子大小
|
||
|
public float ParticleSize = 0.2f;
|
||
|
|
||
|
public float MaxSize = 0.4f;
|
||
|
public float MinSize = 0.0f;
|
||
|
|
||
|
public GameObject CurrentParticle;
|
||
|
/// <summary>
|
||
|
/// 水流量,如果设为私有的,同步只能改属性,然后属性改变又会同步,同步过来改这个值
|
||
|
/// </summary>
|
||
|
public float flow;
|
||
|
/// <summary>
|
||
|
/// 剩余时间
|
||
|
/// </summary>
|
||
|
public int RemainTime;
|
||
|
/// <summary>
|
||
|
/// 剩余水量
|
||
|
/// </summary>
|
||
|
public float RemainWater;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 出水纵向旋转
|
||
|
/// </summary>
|
||
|
private float MinVrotate = -75;
|
||
|
private float MaxVrotate = 15;
|
||
|
private float NowVrotate = -20f;
|
||
|
/// <summary>
|
||
|
/// 出水横向旋转
|
||
|
/// </summary>
|
||
|
// private float MinHrotate = -180;
|
||
|
// private float MaxHrotate = 180;
|
||
|
private float NowHrotate;
|
||
|
|
||
|
private float timer = 1f;
|
||
|
|
||
|
public SprayMode spraymode = SprayMode.WaterGun19;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 水量用完
|
||
|
/// </summary>
|
||
|
public bool waterrunoutof = false;
|
||
|
private BaseGameObjInfo basegameinfo;
|
||
|
private FireManWaterHoseManager waterhosemanage;
|
||
|
private bool isFirstAirOrMoving = false;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 是否在移动或者急救伤员
|
||
|
/// </summary>
|
||
|
public bool IsFirstAirOrMoving
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return isFirstAirOrMoving;
|
||
|
}
|
||
|
|
||
|
set
|
||
|
{
|
||
|
isFirstAirOrMoving = value;
|
||
|
if (value == true)
|
||
|
{
|
||
|
GetComponent<AgentController>().pathFindEnable = false;
|
||
|
if (FireManSkillPanelController.Instance)
|
||
|
{
|
||
|
FireManSkillPanelController.Instance.SetSkillDisable();
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
GetComponent<AgentController>().pathFindEnable = true;
|
||
|
if (FireManSkillPanelController.Instance)
|
||
|
{
|
||
|
FireManSkillPanelController.Instance.SetSkillEnable();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
public FireManSkills workType
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return WorkType;
|
||
|
}
|
||
|
|
||
|
set
|
||
|
{
|
||
|
WorkType = value;
|
||
|
FiremanWorktypeChangeSyncData worksync = new FiremanWorktypeChangeSyncData();
|
||
|
worksync.SendUserID = CurrentUserInfo.mySelf.Id;
|
||
|
worksync.worktype = value;
|
||
|
worksync.gameObjID = GetComponent<BaseGameObjInfo>().gameObjID;
|
||
|
worksync.UserID = GetComponent<BaseGameObjInfo>().UserID;
|
||
|
NetworkManager.Default.SendAsync(/*CurrentUserInfo.mySelf.Id,*/ "FIREMAN_WORKTYPECHANGE_SYNC", worksync);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public float Flow
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return flow;
|
||
|
}
|
||
|
|
||
|
set
|
||
|
{
|
||
|
flow = value;
|
||
|
//if (GetComponent<FireManWaterHoseManager>().WaterLineConnent)
|
||
|
//{
|
||
|
// GetComponent<FireManWaterHoseManager>().WaterLineConnent.GetComponent<ParentLinesMessage>().HasWaterCross = value > 0 ? true : false;
|
||
|
//}
|
||
|
//流量修改时重新分流
|
||
|
if (GetComponent<FireManWaterHoseManager>())
|
||
|
{
|
||
|
if (GetComponent<FireManWaterHoseManager>().ConnentSource)
|
||
|
{
|
||
|
if (GetComponent<FireManWaterHoseManager>().ConnentSource.GetComponent<TruckMessage>())
|
||
|
{//直接水源是车辆
|
||
|
float remain = CheckWaterRemain(GetComponent<FireManWaterHoseManager>().WaterSourceLine);
|
||
|
if (remain > 0 || remain == -100)
|
||
|
{//水源有水
|
||
|
if (GetComponent<FireManWaterHoseManager>().ConnentSource.GetComponent<TruckMessage>())
|
||
|
{//直接水源为水源车辆
|
||
|
// GetComponent<FireManWaterHoseManager>().ConnentSource.GetComponent<TruckBindWaterSource>().Flow += ;
|
||
|
GetComponent<FireManWaterHoseManager>().ConnentSource.GetComponent<WaterSource>().TotalFlowChange(basegameinfo.gameObjID, flow);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Debug.Log("水源没水了");
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{//直接连接的消防设施
|
||
|
// GetComponent<FireManWaterHoseManager>().ConnentSource.GetComponent<WaterSource>().TotalFlow += (value - prveflow);
|
||
|
GetComponent<FireManWaterHoseManager>().ConnentSource.GetComponent<WaterSource>().TotalFlowChange(basegameinfo.gameObjID, flow);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//流量同步
|
||
|
FlowChangeData arg = new FlowChangeData
|
||
|
{
|
||
|
SenderId = CurrentUserInfo.mySelf.Id,
|
||
|
GameObjId = GetComponent<BaseGameObjInfo>().gameObjID,
|
||
|
Flow = value,
|
||
|
};
|
||
|
NetworkManager.Default.SendAsync("FLOW_CHANGE_SYNC", arg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void Start()
|
||
|
{
|
||
|
basegameinfo = GetComponent<BaseGameObjInfo>();
|
||
|
waterhosemanage = GetComponent<FireManWaterHoseManager>();
|
||
|
anim = GetComponent<Animator>();
|
||
|
shuiqiang = TransformHelper.FindChild(transform, "shuiqiang");
|
||
|
|
||
|
//shuiqiang.gameObject.SetActive(true);
|
||
|
//GetComponent<Animator>().SetBool("isInSitu", true);
|
||
|
// NowVrotate = shuiqiang.transform.localRotation.eulerAngles.y;
|
||
|
// NowVrotate = -20f;
|
||
|
//NowHrotate = transform.eulerAngles.x;
|
||
|
//NowHrotate = transform.localRotation.eulerAngles.y;
|
||
|
FiremanHose = shuiqiang.Find("Hose");
|
||
|
|
||
|
//if (FrothPrefabs == null)
|
||
|
//{
|
||
|
// FrothPrefabs = Resources.Load<GameObject>("Particle/Froth");
|
||
|
//}
|
||
|
//if (WaterFlowerPrefabs == null)
|
||
|
// WaterFlowerPrefabs = Resources.Load<GameObject>("Particle/WaterFlower");
|
||
|
//if (WaterFogPrefabs == null)
|
||
|
// WaterFogPrefabs = Resources.Load<GameObject>("Particle/WaterFog");
|
||
|
//if (WaterStraightPrefabs == null)
|
||
|
// WaterStraightPrefabs = Resources.Load<GameObject>("Particle/WaterStraight");
|
||
|
//MessageDispatcher.AddListener("SPRAY_WATER", Changeflow);
|
||
|
//MessageDispatcher.AddListener("RUN_OUR_OF_WATER", CloseSpray);
|
||
|
|
||
|
GetRealtimeConsume.getAllRealtimeConsume += addMyRealtimeConsume; //统计实时流量
|
||
|
}
|
||
|
|
||
|
|
||
|
void Update()
|
||
|
{
|
||
|
if (workType == FireManSkills.SprayWater)
|
||
|
{
|
||
|
timer -= Time.deltaTime;
|
||
|
if (timer <= 0)
|
||
|
{
|
||
|
KeyValuePair<int, float> remain = GetWaterAndTimeRemain(waterhosemanage.WaterSourceLine);
|
||
|
RemainTime = remain.Key;
|
||
|
RemainWater = remain.Value;
|
||
|
if (remain.Key != -100)
|
||
|
{
|
||
|
if (remain.Key <= 0 || remain.Value <= 0)
|
||
|
{//没水了
|
||
|
stopSpray();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (GetComponentInChildren<ParticleControlOfType>() && GetComponentInChildren<ParticleControlOfType>().particleType == SprayParticleType.Froth)
|
||
|
{//出的是泡沫,直接水源的泡沫
|
||
|
float remainfoam = CheckFoamRemain();
|
||
|
if (remainfoam == -100 || remainfoam > 0)
|
||
|
{//直接水源有泡沫
|
||
|
GetComponent<FireManWaterHoseManager>().ConnentSource.GetComponent<WaterSource>().UserFoam((Flow / 0.97f) * 0.03f);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
stopSpray();
|
||
|
//LoadPromptWin.Instance.LoadTextPromptWindow("泡沫量不足", 1f);
|
||
|
}
|
||
|
}
|
||
|
timer = 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//if (workType == FireManSkills.SprayWater)
|
||
|
//{
|
||
|
// if(waterrunoutof==false)
|
||
|
// {
|
||
|
// timer -= Time.deltaTime;
|
||
|
// if (timer <= 0)
|
||
|
// {
|
||
|
// GameObject watersource = GetComponent<FireManWaterHoseManager>().ConnentSource;
|
||
|
// if (watersource!=null)
|
||
|
// {
|
||
|
// watersource.GetComponent<WaterSource>().UserWater(Flow);
|
||
|
// var watertimepair = watersource.GetComponent<WaterSource>().GetRemainTimeAndWater();
|
||
|
// RemainTime = watertimepair.Key;
|
||
|
// RemainWater = watertimepair.Value;
|
||
|
// }
|
||
|
|
||
|
// timer = 1f;
|
||
|
// }
|
||
|
// }
|
||
|
//}
|
||
|
//if (gameObject==FireManSkillPanelController.Instance.SelectFireMan)
|
||
|
//{
|
||
|
// if (GetComponentInChildren<ParticleControlOfType>())
|
||
|
// {
|
||
|
// ParticleSize = GetComponentInChildren<ParticleControlOfType>().GetScaleValue();
|
||
|
// }
|
||
|
//}
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 出水动画
|
||
|
/// </summary>
|
||
|
/// <param name="islay"></param>
|
||
|
public void SetLay(bool islay)
|
||
|
{
|
||
|
shuiqiang.gameObject.SetActive(islay);
|
||
|
anim.SetBool("isInSitu", islay);
|
||
|
|
||
|
}
|
||
|
public void SetParticleType(SprayParticleType type)
|
||
|
{
|
||
|
switch (type)
|
||
|
{
|
||
|
case SprayParticleType.Froth:
|
||
|
setShowParticle(type);
|
||
|
SelectParticleType = SprayParticleType.Froth;
|
||
|
CurrentParticle.GetComponentInChildren<ParticleControlOfType>(true).SetScaleValue(0.95f);
|
||
|
ParticleSize = 0.95f;
|
||
|
break;
|
||
|
case SprayParticleType.WaterFlower:
|
||
|
setShowParticle(type);
|
||
|
SelectParticleType = SprayParticleType.WaterFlower;
|
||
|
CurrentParticle.GetComponentInChildren<ParticleControlOfType>(true).SetScaleValue(2f);
|
||
|
ParticleSize = 2f;
|
||
|
break;
|
||
|
case SprayParticleType.WaterFog:
|
||
|
setShowParticle(type);
|
||
|
SelectParticleType = SprayParticleType.WaterFog;
|
||
|
CurrentParticle.GetComponentInChildren<ParticleControlOfType>(true).SetScaleValue(1.7f);
|
||
|
ParticleSize = 1.7f;
|
||
|
break;
|
||
|
case SprayParticleType.WaterStraight:
|
||
|
setShowParticle(type);
|
||
|
SelectParticleType = SprayParticleType.WaterStraight;
|
||
|
CurrentParticle.GetComponentInChildren<ParticleControlOfType>(true).SetScaleValue(0.2f);
|
||
|
ParticleSize = 0.2f;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
private void setShowParticle(SprayParticleType type)
|
||
|
{
|
||
|
for (int i = 0; i < FiremanHose.childCount; i++)
|
||
|
{
|
||
|
if (type.ToString() == FiremanHose.GetChild(i).name)
|
||
|
{
|
||
|
FiremanHose.GetChild(i).gameObject.SetActive(true);
|
||
|
CurrentParticle = FiremanHose.GetChild(i).gameObject;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
FiremanHose.GetChild(i).gameObject.SetActive(false);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
void OnEnable()
|
||
|
{
|
||
|
GetUsers.PicTransferableCheck += checkPicTrans;
|
||
|
RescueTeamManager.getAllRescueTeams += addMyRescue;
|
||
|
}
|
||
|
void OnDisable()
|
||
|
{
|
||
|
GetUsers.PicTransferableCheck -= checkPicTrans;
|
||
|
RescueTeamManager.getAllRescueTeams -= addMyRescue;
|
||
|
//MessageDispatcher.RemoveListener("SPRAY_WATER", Changeflow);
|
||
|
//MessageDispatcher.RemoveListener("RUN_OUR_OF_WATER", CloseSpray);
|
||
|
}
|
||
|
void OnDestroy()
|
||
|
{
|
||
|
GetUsers.PicTransferableCheck -= checkPicTrans;
|
||
|
RescueTeamManager.getAllRescueTeams -= addMyRescue;
|
||
|
// MessageDispatcher.RemoveListener("SPRAY_WATER", Changeflow);
|
||
|
//MessageDispatcher.RemoveListener("RUN_OUR_OF_WATER", CloseSpray);
|
||
|
|
||
|
GetRealtimeConsume.getAllRealtimeConsume -= addMyRealtimeConsume;
|
||
|
}
|
||
|
|
||
|
private FloatData addMyRealtimeConsume(FloatData data)
|
||
|
{
|
||
|
data.value += Flow;
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 连接的水源没有水了
|
||
|
/// </summary>
|
||
|
/// <param name="obj"></param>
|
||
|
private void CloseSpray(IMessage obj)
|
||
|
{
|
||
|
// Debug.Log("over22");
|
||
|
if (workType == FireManSkills.SprayWater)
|
||
|
{
|
||
|
long watersourceId = (long)obj.Data;
|
||
|
long thiswaterid = -1;
|
||
|
if (GetComponent<FireManWaterHoseManager>().ConnentSource != null)
|
||
|
{
|
||
|
thiswaterid = GetComponent<FireManWaterHoseManager>().ConnentSource.GetComponent<BaseGameObjInfo>().gameObjID;
|
||
|
}
|
||
|
// Debug.Log(thiswaterid);
|
||
|
if (watersourceId == thiswaterid)
|
||
|
{
|
||
|
waterrunoutof = true;
|
||
|
Flow = 0;
|
||
|
workType = FireManSkills.None;
|
||
|
if (FireManSkillPanelController.Instance)
|
||
|
{
|
||
|
if (FireManSkillPanelController.Instance.SelectFireMan == gameObject)
|
||
|
{
|
||
|
FireManSkillPanelController.Instance.SprayWater.GetComponent<Toggle>().isOn = false;
|
||
|
}
|
||
|
}
|
||
|
for (int i = 0; i < FiremanHose.childCount; i++)
|
||
|
{
|
||
|
// Destroy(FiremanHose.GetChild(i).gameObject);
|
||
|
if (FiremanHose.GetChild(i).gameObject.activeInHierarchy)
|
||
|
{
|
||
|
FiremanHose.GetChild(i).gameObject.SetActive(false);
|
||
|
}
|
||
|
}
|
||
|
SpraySyncData spraysync = new SpraySyncData();
|
||
|
spraysync.SendUserID = CurrentUserInfo.mySelf.Id;
|
||
|
spraysync.IsOn = false;
|
||
|
// spraysync.spraytype = SprayParticleType.WaterStraight;
|
||
|
spraysync.gameObjID = basegameinfo.gameObjID;
|
||
|
//spraysync.UserID = GetComponent<BaseGameObjInfo>().UserID;
|
||
|
//spraysync.gameObjType = .GetComponent<BaseGameObjInfo>().gameObjType;
|
||
|
NetworkManager.Default.SendAsync(/*CurrentUserInfo.mySelf.Id,*/ "SPRAY_WATER_SYNC", spraysync);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
public void DestoryPartical()
|
||
|
{
|
||
|
for (int i = 0; i < FiremanHose.childCount; i++)
|
||
|
{
|
||
|
//Destroy(FiremanHose.GetChild(i).gameObject);
|
||
|
FiremanHose.GetChild(i).gameObject.SetActive(false);
|
||
|
}
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 连接的水源流量计算
|
||
|
/// </summary>
|
||
|
/// <param name="obj"></param>
|
||
|
private void Changeflow(IMessage obj)
|
||
|
{
|
||
|
var info = (flowchangeinfo)obj.Data;
|
||
|
if (info.ChangObjId == basegameinfo.gameObjID)
|
||
|
{
|
||
|
GameObject watersource = GetComponent<FireManWaterHoseManager>().ConnentSource;
|
||
|
if (watersource != null)
|
||
|
{
|
||
|
watersource.GetComponent<WaterSource>().SetTotalFlow(new KeyValuePair<GameObject, float>(gameObject, Flow), info.IsAdd);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
List<CloneGameObjInfo> checkPicTrans(List<CloneGameObjInfo> list, bool checkLevel)
|
||
|
{
|
||
|
if (checkLevel) //需检查此消防员是否是自己下级
|
||
|
{
|
||
|
long userID = GetComponent<CloneGameObjInfo>().UserID;
|
||
|
UserData data = CurrentUserInfo.room.FindUserById(userID);
|
||
|
if (checkIsMine(data) && workType == FireManSkills.PictureTransmission) //是自己的下级,并且开启了4G图传技能
|
||
|
{
|
||
|
list.Add(GetComponent<CloneGameObjInfo>());
|
||
|
GetComponent<FireManMapIcon>().updateMap = true;
|
||
|
return list;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
GetComponent<FireManMapIcon>().updateMap = false;
|
||
|
return list;
|
||
|
}
|
||
|
}
|
||
|
else //不用检查是否为自己下属
|
||
|
{
|
||
|
if (workType == FireManSkills.PictureTransmission)
|
||
|
{
|
||
|
list.Add(GetComponent<CloneGameObjInfo>());
|
||
|
GetComponent<FireManMapIcon>().updateMap = true;
|
||
|
return list;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
GetComponent<FireManMapIcon>().updateMap = false;
|
||
|
return list;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
bool checkIsMine(UserData userData)
|
||
|
{
|
||
|
long id = userData.Org.ParentId;
|
||
|
int lv = userData.Org.Level;
|
||
|
/*
|
||
|
//演习模式下
|
||
|
if (GameSettings.othersSettings.mode == Mode.manoeuvre && id == CurrentUserInfo.mySelf.)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
//练习模式下
|
||
|
else if (GameSettings.othersSettings.mode == Mode.Practice && id == CurrentUserInfo.organization.Id)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
else if (id == 0)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
UserData parentData = CurrentUserInfo.room.FindUserById(id);
|
||
|
if (parentData != null)
|
||
|
{
|
||
|
return checkIsMine(parentData);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
} */
|
||
|
if (lv > CurrentUserInfo.organization.Level)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Up()
|
||
|
{
|
||
|
// NowVrotate = shuiqiang.transform.localRotation.eulerAngles.y;
|
||
|
NowHrotate = transform.localRotation.eulerAngles.y;
|
||
|
//NowVrotate = Mathf.Clamp((NowVrotate + 5), MinVrotate, MaxVrotate);
|
||
|
if (NowVrotate < MaxVrotate)
|
||
|
{
|
||
|
NowVrotate += 5;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
NowVrotate = MaxVrotate;
|
||
|
}
|
||
|
shuiqiang.transform.localRotation = Quaternion.Euler(18.4f, NowVrotate, 0);
|
||
|
SprayRotateSyncData arg = new SprayRotateSyncData();
|
||
|
arg.SendUserID = CurrentUserInfo.mySelf.Id;
|
||
|
arg.gameObjID = basegameinfo.gameObjID;
|
||
|
arg.Vroatet = NowVrotate;
|
||
|
arg.Hrotate = NowHrotate;
|
||
|
NetworkManager.Default.SendAsync("FIREMAN_SPRAY_ROTATE_SYNC", arg);
|
||
|
}
|
||
|
|
||
|
public void Down()
|
||
|
{
|
||
|
//NowVrotate = shuiqiang.transform.localRotation.eulerAngles.y;
|
||
|
NowHrotate = transform.localRotation.eulerAngles.y;
|
||
|
if (NowVrotate > MinVrotate)
|
||
|
{
|
||
|
NowVrotate -= 5;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
NowVrotate = MinVrotate;
|
||
|
}
|
||
|
shuiqiang.transform.localRotation = Quaternion.Euler(18.4f, NowVrotate, 0);
|
||
|
SprayRotateSyncData arg = new SprayRotateSyncData();
|
||
|
arg.SendUserID = CurrentUserInfo.mySelf.Id;
|
||
|
arg.gameObjID = basegameinfo.gameObjID;
|
||
|
arg.Vroatet = NowVrotate;
|
||
|
arg.Hrotate = NowHrotate;
|
||
|
NetworkManager.Default.SendAsync("FIREMAN_SPRAY_ROTATE_SYNC", arg);
|
||
|
}
|
||
|
|
||
|
public void Left()
|
||
|
{
|
||
|
// NowVrotate = shuiqiang.transform.localRotation.eulerAngles.y;
|
||
|
|
||
|
NowHrotate = transform.localRotation.eulerAngles.y - 5;
|
||
|
//NowHrotate = Mathf.Clamp((NowHrotate - 5), MinHrotate, MaxHrotate);
|
||
|
transform.localRotation = Quaternion.Euler(transform.localRotation.eulerAngles.x, NowHrotate, transform.localRotation.eulerAngles.z);
|
||
|
SprayRotateSyncData arg = new SprayRotateSyncData();
|
||
|
arg.SendUserID = CurrentUserInfo.mySelf.Id;
|
||
|
arg.gameObjID = basegameinfo.gameObjID;
|
||
|
arg.Vroatet = NowVrotate;
|
||
|
arg.Hrotate = NowHrotate;
|
||
|
NetworkManager.Default.SendAsync("FIREMAN_SPRAY_ROTATE_SYNC", arg);
|
||
|
}
|
||
|
|
||
|
public void Right()
|
||
|
{
|
||
|
//NowVrotate = shuiqiang.transform.localRotation.eulerAngles.y;
|
||
|
|
||
|
NowHrotate = transform.localRotation.eulerAngles.y + 5;
|
||
|
//NowHrotate = Mathf.Clamp((NowHrotate + 5), MinHrotate, MaxHrotate);
|
||
|
transform.localRotation = Quaternion.Euler(transform.localRotation.eulerAngles.x, NowHrotate, transform.localRotation.eulerAngles.z);
|
||
|
SprayRotateSyncData arg = new SprayRotateSyncData();
|
||
|
arg.SendUserID = CurrentUserInfo.mySelf.Id;
|
||
|
arg.gameObjID = basegameinfo.gameObjID;
|
||
|
arg.Vroatet = NowVrotate;
|
||
|
arg.Hrotate = NowHrotate;
|
||
|
NetworkManager.Default.SendAsync("FIREMAN_SPRAY_ROTATE_SYNC", arg);
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 添加正在执行营救的人员中队名称
|
||
|
/// </summary>
|
||
|
/// <param name="data"></param>
|
||
|
/// <returns></returns>
|
||
|
private List<string> addMyRescue(List<string> data)
|
||
|
{
|
||
|
if (workType == FireManSkills.FristAid || workType == FireManSkills.Guidance || workType == FireManSkills.Move || workType == FireManSkills.Pacify || workType == FireManSkills.Save)
|
||
|
{
|
||
|
long userid = GetComponent<CloneGameObjInfo>().UserID;
|
||
|
string teamName = CurrentUserInfo.room.FindUserById(userid).Org.DisplayName;
|
||
|
if (!data.Contains(teamName))
|
||
|
{
|
||
|
data.Add(teamName);
|
||
|
}
|
||
|
}
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// 连接水源时造成的水源信息修改
|
||
|
/// </summary>
|
||
|
/// <param name="watersourcevalue">直接水源上的两条线路信息总和</param>
|
||
|
/// <param name="directionId">直接水源id</param>
|
||
|
/// <param name="linenum">连接的哪条线路</param>
|
||
|
public void ChangeWaterSourceLineInfo(long directionId, int linenum)
|
||
|
{
|
||
|
List<List<long>> go = CloneBySerialize.Clone(GetDirectWaterSourceInfo(directionId));
|
||
|
go.Insert(0, new List<long> { directionId });
|
||
|
if (linenum == 0)
|
||
|
{
|
||
|
GetComponent<FireManWaterHoseManager>().WaterSourceLine = go;
|
||
|
Debug.Log(name + "水源信息更改");
|
||
|
}
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 获取直接水源上的所有水源信息
|
||
|
/// </summary>
|
||
|
/// <param name="directtionId">直接水源ID</param>
|
||
|
/// <returns></returns>
|
||
|
public List<List<long>> GetDirectWaterSourceInfo(long directtionId)
|
||
|
{
|
||
|
List<List<long>> go = new List<List<long>>();
|
||
|
GameObject dirobj = EntitiesManager.Instance.GetEntityByID(directtionId);
|
||
|
if (dirobj.GetComponent<TruckBindWaterSource>())
|
||
|
{
|
||
|
TruckBindWaterSource dirTBC = dirobj.GetComponent<TruckBindWaterSource>();
|
||
|
List<List<long>> line1 = CloneBySerialize.Clone(dirTBC.WaterSourceLine1);
|
||
|
List<List<long>> line2 = CloneBySerialize.Clone(dirTBC.WaterSourceLine2);
|
||
|
line1.Reverse();
|
||
|
line2.Reverse();
|
||
|
int count = line1.Count >= line2.Count ? line1.Count : line2.Count;
|
||
|
//List<List<long>> go = new List<List<long>>(count);
|
||
|
for (int i = 0; i < count; i++)
|
||
|
{
|
||
|
List<long> depth = new List<long>();
|
||
|
if (i < line1.Count)
|
||
|
{
|
||
|
for (int j = 0; j < line1[i].Count; j++)
|
||
|
{
|
||
|
depth.Add(line1[i][j]);
|
||
|
}
|
||
|
}
|
||
|
if (i < line2.Count)
|
||
|
{
|
||
|
for (int j = 0; j < line2[i].Count; j++)
|
||
|
{
|
||
|
depth.Add(line2[i][j]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
go.Add(depth);
|
||
|
}
|
||
|
go.Reverse();
|
||
|
}
|
||
|
else
|
||
|
{//消防设施没有进水口
|
||
|
|
||
|
}
|
||
|
|
||
|
return go;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 检查当前水源线是否还有多少水
|
||
|
/// </summary>
|
||
|
/// <param name="watersouce"></param>
|
||
|
/// <returns></returns>
|
||
|
public float CheckWaterRemain(List<List<long>> watersouce)
|
||
|
{
|
||
|
float allremain = 0;
|
||
|
|
||
|
for (int i = 0; i < watersouce.Count; i++)
|
||
|
{
|
||
|
for (int j = 0; j < watersouce[i].Count; j++)
|
||
|
{
|
||
|
WaterSource ws = EntitiesManager.Instance.GetEntityByID(watersouce[i][j]).GetComponent<WaterSource>();
|
||
|
if (ws.TotalWater != -100)
|
||
|
{
|
||
|
allremain += (ws.TotalWater - ws.AllUserWater);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
allremain = -100;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return allremain;
|
||
|
}
|
||
|
public KeyValuePair<int, float> GetWaterAndTimeRemain(List<List<long>> waterline)
|
||
|
{
|
||
|
KeyValuePair<int, float> remain = new KeyValuePair<int, float>();
|
||
|
// float allflow = 0;
|
||
|
float remainwater = 0;
|
||
|
List<long> allwatersource = new List<long>();
|
||
|
for (int i = 0; i < waterline.Count; i++)
|
||
|
{
|
||
|
for (int j = 0; j < waterline[i].Count; j++)
|
||
|
{
|
||
|
if (!allwatersource.Contains(waterline[i][j]))
|
||
|
{
|
||
|
allwatersource.Add(waterline[i][j]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
for (int i = 0; i < allwatersource.Count; i++)
|
||
|
{
|
||
|
WaterSource ws = EntitiesManager.Instance.GetEntityByID(allwatersource[i]).GetComponent<WaterSource>();
|
||
|
if (ws.TotalWater != -100)
|
||
|
{
|
||
|
remainwater += (ws.TotalWater - ws.AllUserWater);
|
||
|
//if (ws.GetComponent<TruckBindWaterSource>())
|
||
|
//{
|
||
|
// allflow += ws.GetComponent<TruckBindWaterSource>().Flow;
|
||
|
//}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
remainwater = -100;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
int remaintime = 0;
|
||
|
// allflow += Flow;
|
||
|
if (remainwater == -100)
|
||
|
{
|
||
|
remaintime = -100;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (waterhosemanage.ConnentSource)
|
||
|
{
|
||
|
float realewater = 0;//实际分到的水量=自己的流量/直接水源的总流量*直接水源总水量
|
||
|
float dirTotalFlow = waterhosemanage.ConnentSource.GetComponent<WaterSource>().TotalFlow;
|
||
|
realewater = (Flow / dirTotalFlow) * remainwater;
|
||
|
if (Flow != 0)
|
||
|
remaintime = Mathf.CeilToInt(realewater / Flow);
|
||
|
else
|
||
|
remaintime = 0;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
remain = new KeyValuePair<int, float>(remaintime, remainwater);
|
||
|
|
||
|
|
||
|
return remain;
|
||
|
}
|
||
|
void stopSpray()
|
||
|
{
|
||
|
Flow = 0;
|
||
|
RemainTime = 0;
|
||
|
RemainWater = 0;
|
||
|
SetLay(false);
|
||
|
DestoryPartical();
|
||
|
GetComponent<LayWaterHose>().EndLay();
|
||
|
workType = FireManSkills.None;
|
||
|
if (FireManSkillPanelController.Instance && FireManSkillPanelController.Instance.SelectFireMan == gameObject)
|
||
|
{
|
||
|
FireManSkillPanelController.Instance.SprayWater.GetComponent<Toggle>().isOn = false;
|
||
|
}
|
||
|
SpraySyncData spraysync = new SpraySyncData();
|
||
|
spraysync.SendUserID = CurrentUserInfo.mySelf.Id;
|
||
|
spraysync.IsOn = false;
|
||
|
spraysync.gameObjID = basegameinfo.gameObjID;
|
||
|
NetworkManager.Default.SendAsync(/*CurrentUserInfo.mySelf.Id,*/ "SPRAY_WATER_SYNC", spraysync);
|
||
|
|
||
|
}
|
||
|
public float CheckFoamRemain()
|
||
|
{
|
||
|
float remain = 0;
|
||
|
WaterSource ws = GetComponent<FireManWaterHoseManager>().ConnentSource.GetComponent<WaterSource>();
|
||
|
if (ws.foam)
|
||
|
{
|
||
|
if (ws.TotalFoam != -100)
|
||
|
{
|
||
|
remain = ws.TotalFoam - ws.AllUserFoam;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
remain = -100;
|
||
|
}
|
||
|
}
|
||
|
return remain;
|
||
|
}
|
||
|
}
|