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.
771 lines
34 KiB
771 lines
34 KiB
using AX.MessageSystem; |
|
using AX.NetworkSystem; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
|
|
public class DisasterLoad : MonoBehaviour |
|
{ |
|
private DisasterLibraryFile disaster; |
|
|
|
private WindZone windZone; |
|
|
|
private GameObject P_FireNormal; |
|
public GameObject fireNormalPrefab; |
|
private GameObject P_FireSpreadLine; |
|
public GameObject fireSpreadLinePrefab; |
|
private GameObject P_FireLiquidLevel; |
|
public GameObject fireLiquidLevelPrefab; |
|
private GameObject P_Leak1; |
|
public GameObject leak1Prefab; |
|
private GameObject P_Leak2; |
|
public GameObject leak2Prefab; |
|
private GameObject P_Wounded; |
|
public GameObject woundedPrefab; |
|
private GameObject P_TrappedPerson; |
|
public GameObject trappedPrefab; |
|
private GameObject P_Insider; |
|
public GameObject insiderPrefab; |
|
public GameObject dangerousPrefab; |
|
private GameObject P_Dangerous; |
|
void Awake() |
|
{ |
|
|
|
} |
|
// Use this for initialization |
|
void Start() |
|
{ |
|
disaster = GameSettings.othersSettings.disaster; |
|
|
|
windZone = GameObject.Find("WindZone").GetComponent<WindZone>(); |
|
|
|
P_FireNormal = GameObject.Find("P_FireNormal"); |
|
P_FireSpreadLine = GameObject.Find("P_FireSpreadLine"); |
|
P_FireLiquidLevel = GameObject.Find("P_FireLiquidLevel"); |
|
P_Leak1 = GameObject.Find("P_Leak1"); |
|
P_Leak2 = GameObject.Find("P_Leak2"); |
|
P_Wounded = GameObject.Find("P_Wounded"); |
|
P_TrappedPerson = GameObject.Find("P_TrappedPerson"); |
|
P_Insider = GameObject.Find("P_Insider"); |
|
P_Dangerous = GameObject.Find("P_DangerousCargo"); |
|
|
|
if (disaster != null |
|
&& !GameSettings.disasterSetting.isCteateDisaster//只有创建灾情时,此isCteateDisaster不为true;查看,编辑为false |
|
) |
|
{ |
|
if (GameSettings.othersSettings.mode==Mode.DisasterManagement) |
|
{ |
|
LoadDisaster(); |
|
} |
|
} |
|
} |
|
|
|
// Update is called once per frame |
|
void Update() |
|
{ |
|
|
|
} |
|
|
|
/// <summary> |
|
/// 加载灾情 |
|
/// </summary> |
|
public void LoadDisaster() |
|
{ |
|
if (disaster!=null) |
|
{ |
|
//设置风向风力 |
|
WindZoneSet(); |
|
//设置油罐 |
|
OilTanksSet(); |
|
//设置油罐设置UI,风向风力UI,胜利条件UI,报警信息UI,普通火属性设置UI及他们的是否可以修改 |
|
MessageDispatcher.SendMessage("LOAD_UIDISASTER"); |
|
//生成普通火 |
|
CloneNormalFire(); |
|
//生成全液面火 |
|
CloneLiquidLevelFire(); |
|
//生成泄露1 |
|
CloneLeak1(); |
|
//生成泄露2 |
|
CloneLeak2(); |
|
//生成伤员 |
|
CloneWounded(); |
|
//生成被困人员 |
|
CloneTrapped(); |
|
//生成知情人 |
|
CloneInsider(); |
|
CloneDangerous(); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 设置风向风力 |
|
/// </summary> |
|
private void WindZoneSet() |
|
{ |
|
var baseGameObjInfo = windZone.gameObject.GetComponent<BaseGameObjInfo>(); |
|
var cloneGameObjInfo = windZone.gameObject.GetComponent<CloneGameObjInfo>(); |
|
WindDisaster windDisaster; |
|
|
|
for (int i = 0; i < disaster.DisasterList.Count; i++) |
|
{ |
|
if (disaster.DisasterList[i].Disaster.GetType().Name == "WindDisaster") |
|
{ |
|
windDisaster = (WindDisaster)disaster.DisasterList[i].Disaster; |
|
BaseInfoSet(baseGameObjInfo, cloneGameObjInfo, windDisaster); |
|
|
|
windZone.transform.rotation = windDisaster.Rotation; |
|
windZone.windMain = windDisaster.WidnForce; |
|
|
|
//风力风向设置同步 |
|
if (GameSettings.othersSettings.mode!=Mode.DisasterManagement) |
|
{ |
|
WindZoneSyncData arg = new WindZoneSyncData(); |
|
arg.SendUserID = CurrentUserInfo.mySelf.Id; |
|
arg.gameObjID = baseGameObjInfo.gameObjID; |
|
arg.Rotation = windDisaster.Rotation; |
|
arg.windMain = windDisaster.WidnForce; |
|
NetworkManager.Default.SendAsync("WIND_ZONE_SYNC", arg); |
|
} |
|
break; |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 设置油罐信息 |
|
/// </summary> |
|
public void OilTanksSet() |
|
{ |
|
OilTankDisaster oilTankDisaster; |
|
GameObject oilTank; |
|
BaseGameObjInfo baseGameObjInfo; |
|
CloneGameObjInfo cloneGameObjInfo; |
|
OilTankMessage oilTankMessage; |
|
|
|
for (int i = 0; i < disaster.DisasterList.Count; i++) |
|
{ |
|
if (disaster.DisasterList[i].Disaster.GetType().Name == "OilTankDisaster") |
|
{ |
|
oilTankDisaster = (OilTankDisaster)disaster.DisasterList[i].Disaster; |
|
oilTank = EntitiesManager.Instance.GetEntityByID(oilTankDisaster.GameObjID); |
|
|
|
if (oilTank) |
|
{ |
|
baseGameObjInfo = oilTank.GetComponent<BaseGameObjInfo>(); |
|
cloneGameObjInfo = oilTank.GetComponent<CloneGameObjInfo>(); |
|
BaseInfoSet(baseGameObjInfo, cloneGameObjInfo, oilTankDisaster); |
|
|
|
oilTankMessage = oilTank.GetComponent<OilTankMessage>(); |
|
oilTankMessage.MatterContainer = oilTankDisaster.MatterContainer; |
|
|
|
oilTankMessage.Reserves = oilTankDisaster.Reserves; |
|
oilTankMessage.OutShowHeight = oilTankMessage.MyHeight * oilTankDisaster.Reserves; |
|
oilTankMessage.SetOilStandard(); |
|
|
|
oilTankMessage.TakeTime = oilTankDisaster.TakeTime; |
|
oilTankMessage.DurationTime = oilTankDisaster.DurationTime; |
|
oilTankMessage.FlowRate = oilTankDisaster.FlowRate; |
|
oilTankMessage.BoilProb = oilTankDisaster.BoilProb; |
|
oilTankMessage.HasLeakeSet = oilTankDisaster.HasLeakeSet; |
|
// 设置爆炸信息 |
|
if (oilTankDisaster.IsCanExplode) |
|
{ |
|
oilTankMessage.IsCanExplode = oilTankDisaster.IsCanExplode; |
|
oilTankMessage.ExplodeTime = oilTankDisaster.ExplodeTime; |
|
oilTankMessage.ExplodeDeadRange = oilTankDisaster.ExplodeDeadRange; |
|
oilTankMessage.ExplodeHurtRange = oilTankDisaster.ExplodeHurtRange; |
|
} |
|
// 设置喷溅沸溢信息 |
|
oilTankMessage.SplashTime = oilTankDisaster.SplashTime; |
|
oilTankMessage.BoilOverTime = oilTankDisaster.BoilOverTime; |
|
oilTankMessage.SplashProbability = oilTankDisaster.SplashProbability; |
|
oilTankMessage.BoilOverProbability = oilTankDisaster.BoilOverProbability; |
|
oilTankMessage.BoilOverDeadRange = oilTankDisaster.BoilOverDeadRange; |
|
oilTankMessage.IsCanBoilOver = oilTankDisaster.isBoilOver; |
|
//油罐信息同步 |
|
if (GameSettings.othersSettings.mode!=Mode.DisasterManagement) |
|
{ |
|
OilTankInfoSyncData arg = new OilTankInfoSyncData(); |
|
arg.gameObjID = baseGameObjInfo.gameObjID; |
|
arg.SendUserID = CurrentUserInfo.mySelf.Id; |
|
arg.MatterContainer = oilTankMessage.MatterContainer; |
|
arg.Reserves = oilTankMessage.Reserves; |
|
arg.OutShowHeight = oilTankMessage.OutShowHeight; |
|
arg.Taketime = oilTankMessage.TakeTime; |
|
arg.DurationTime = oilTankMessage.DurationTime; |
|
arg.FlowRate = oilTankMessage.FlowRate; |
|
arg.BoilProb = oilTankMessage.BoilProb; |
|
arg.HasLeakeSet = oilTankMessage.HasLeakeSet; |
|
// 同步爆炸信息 |
|
arg.isExplode = oilTankMessage.IsCanExplode; |
|
arg.ExplodeTime = oilTankMessage.ExplodeTime; |
|
arg.ExplodeDeadRange = oilTankMessage.ExplodeDeadRange; |
|
arg.ExplodeHurtRange = oilTankMessage.ExplodeHurtRange; |
|
// 设置喷溅沸溢信息 |
|
arg.SplashTime = oilTankMessage.SplashTime; |
|
arg.BoilOverTime = oilTankMessage.BoilOverTime; |
|
arg.SplashProbability = oilTankMessage.SplashProbability; |
|
arg.BoilOverProbability = oilTankMessage.BoilOverProbability; |
|
arg.BoilOverDeadRange = oilTankMessage.BoilOverDeadRange; |
|
arg.isBoilOver = oilTankMessage.IsCanBoilOver; |
|
NetworkManager.Default.SendAsync("OIL_TANK_INFO_SYNC", arg); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 生成普通火 |
|
/// </summary> |
|
private void CloneNormalFire() |
|
{ |
|
FireNormalDisaster fireNormalDisaster; |
|
BaseGameObjInfo baseGameObjInfo; |
|
CloneGameObjInfo cloneGameObjInfo; |
|
|
|
for (int i = 0; i < disaster.DisasterList.Count; i++) |
|
{ |
|
if (disaster.DisasterList[i].Disaster.GetType().Name == "FireNormalDisaster") |
|
{ |
|
fireNormalDisaster = (FireNormalDisaster)disaster.DisasterList[i].Disaster; |
|
|
|
GameObject obj = EntitiesManager.Instance.CreateObj(fireNormalPrefab, |
|
fireNormalDisaster.Position, |
|
P_FireNormal.transform, |
|
fireNormalDisaster.GameObjID); |
|
|
|
obj.name = CloneObjNameTool.Instance().GetCloneObjectName(fireNormalDisaster.GameObjType); |
|
SelectedObjs.gameObjs.Add(obj); |
|
|
|
baseGameObjInfo = obj.GetComponent<BaseGameObjInfo>(); |
|
cloneGameObjInfo = obj.GetComponent<CloneGameObjInfo>(); |
|
BaseInfoSet(baseGameObjInfo, cloneGameObjInfo, fireNormalDisaster); |
|
|
|
|
|
//克隆同步 |
|
if (GameSettings.othersSettings.mode!=Mode.DisasterManagement) |
|
{ |
|
CloneDisasterSyncData clonesync = new CloneDisasterSyncData(); |
|
clonesync.ClonePosition = fireNormalDisaster.Position; |
|
clonesync.SendUserID = CurrentUserInfo.mySelf.Id; |
|
clonesync.name = obj.name; |
|
clonesync.floorNum = cloneGameObjInfo.floorNum; |
|
clonesync.buildNum = cloneGameObjInfo.buildNum; |
|
clonesync.interlayerNum = cloneGameObjInfo.interlayerNum; |
|
clonesync.gameObjID = cloneGameObjInfo.gameObjID; |
|
clonesync.gameObjType = cloneGameObjInfo.gameObjType; |
|
clonesync.UserID = cloneGameObjInfo.UserID; |
|
NetworkManager.Default.SendAsync("CLONE_SINGLE_DISASTER_SYNC", clonesync); |
|
} |
|
|
|
|
|
obj.GetComponent<FireSpreadCtrl>().fireAttribute = fireNormalDisaster.fireAttribute; |
|
obj.GetComponent<FireSpreadCtrl>().GetSpreadFirePositions();//生成火蔓延点 |
|
|
|
//火的蔓延设置同步 |
|
if (GameSettings.othersSettings.mode!=Mode.DisasterManagement) |
|
{ |
|
FireOriginAttributeSyncData arg = new FireOriginAttributeSyncData(); |
|
arg.FireAttribute = fireNormalDisaster.fireAttribute; |
|
arg.SendUserID = CurrentUserInfo.mySelf.Id; |
|
arg.gameObjID = baseGameObjInfo.gameObjID; |
|
NetworkManager.Default.SendAsync("FIRE_ORIGINAL_ATTRIBUTE", arg); |
|
} |
|
|
|
MessageDispatcher.SendMessage(fireNormalDisaster.GameObjID, "FIRE_INITIALSIZE_SET", fireNormalDisaster.fireAttribute.initialSize); |
|
MessageDispatcher.SendMessage("SET_SMOKE_DIRECTION"); |
|
|
|
if (GameSettings.othersSettings.isSelectedDisaster) |
|
{ |
|
if (GameSettings.othersSettings.mode == Mode.DisasterManagement) |
|
{ |
|
//灾情库编辑,灾情库查看; 加载灾情库进入演练的情况下不显示火的蔓延范围 |
|
CloneSpreadFireLine(fireNormalDisaster); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
private void CloneSpreadFireLine(FireNormalDisaster fireNormalDisaster) |
|
{ |
|
List<Vector3> pathPoints = fireNormalDisaster.fireAttribute.pathPoints; |
|
|
|
Vector3 startPoint; |
|
Vector3 endPoint; |
|
for (int i = 0; i < pathPoints.Count; i++) |
|
{//三种蔓延方式都要画 |
|
if ((i + 1) < pathPoints.Count) |
|
{ |
|
startPoint = pathPoints[i]; |
|
endPoint = pathPoints[i + 1]; |
|
Vector3 clonedObjPos = (startPoint + endPoint) / 2; |
|
clonedObjPos = new Vector3(clonedObjPos.x, clonedObjPos.y + 0.1f, clonedObjPos.z); |
|
var clonedObj = EntitiesManager.Instance.CreateObj(fireSpreadLinePrefab, |
|
clonedObjPos, |
|
P_FireSpreadLine.transform, |
|
EntitiesManager.Instance.CreateObjID(CurrentUserInfo.mySelf.Id)); |
|
|
|
clonedObj.transform.forward = (-(endPoint - startPoint)).normalized;//改变线条的朝向 |
|
float distance = Vector3.Distance(startPoint, endPoint);//计算两点的距离 |
|
clonedObj.transform.localScale = new Vector3(30f, 30f, distance * 108);//延长线条,连接两点。 |
|
clonedObj.GetComponent<FireSpreadLineCtrl>().fireGameObjID = fireNormalDisaster.GameObjID; |
|
|
|
//设置克隆物体所在楼层等基本属性,属性从点击的对象上获取 |
|
CloneGameObjInfo cloneObjInfo = clonedObj.GetComponent<CloneGameObjInfo>(); |
|
cloneObjInfo.gameObjType = CloneObjType.FireSpreadLine; |
|
cloneObjInfo.UserID = CurrentUserInfo.mySelf.Id; |
|
cloneObjInfo.buildNum = fireNormalDisaster.BuildNum; |
|
cloneObjInfo.floorNum = fireNormalDisaster.FloorNum; |
|
cloneObjInfo.interlayerNum = fireNormalDisaster.InterlayerNum; |
|
|
|
clonedObj.SetActive(false); |
|
} |
|
} |
|
|
|
if (fireNormalDisaster.fireAttribute.spreadWay == SpreadWay.Are |
|
|| fireNormalDisaster.fireAttribute.spreadWay == SpreadWay.Around) |
|
{ |
|
startPoint = pathPoints[pathPoints.Count - 1]; |
|
endPoint = pathPoints[0]; |
|
|
|
Vector3 clonedObjPos = (startPoint + endPoint) / 2; |
|
clonedObjPos = new Vector3(clonedObjPos.x, clonedObjPos.y + 0.1f, clonedObjPos.z); |
|
var clonedObj = EntitiesManager.Instance.CreateObj(fireSpreadLinePrefab, |
|
clonedObjPos, |
|
P_FireSpreadLine.transform, |
|
EntitiesManager.Instance.CreateObjID(CurrentUserInfo.mySelf.Id)); |
|
|
|
clonedObj.transform.forward = (-(endPoint - startPoint)).normalized;//改变线条的朝向 |
|
float distance = Vector3.Distance(startPoint, endPoint);//计算两点的距离 |
|
clonedObj.transform.localScale = new Vector3(30f, 30f, distance * 108);//延长线条,连接两点。 |
|
clonedObj.GetComponent<FireSpreadLineCtrl>().fireGameObjID = fireNormalDisaster.GameObjID; |
|
clonedObj.GetComponent<FireSpreadLineCtrl>().flag = true; |
|
|
|
//设置克隆物体所在楼层等基本属性,属性从点击的对象上获取 |
|
CloneGameObjInfo cloneObjInfo = clonedObj.GetComponent<CloneGameObjInfo>(); |
|
cloneObjInfo.gameObjType = CloneObjType.FireSpreadLine; |
|
cloneObjInfo.UserID = CurrentUserInfo.mySelf.Id; |
|
cloneObjInfo.buildNum = fireNormalDisaster.BuildNum; |
|
cloneObjInfo.floorNum = fireNormalDisaster.FloorNum; |
|
cloneObjInfo.interlayerNum = fireNormalDisaster.InterlayerNum; |
|
|
|
clonedObj.SetActive(false); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 生成全液面火 |
|
/// </summary> |
|
private void CloneLiquidLevelFire() |
|
{ |
|
FireLiquidLevelDisaster FireLiquidLevelDisaster; |
|
BaseGameObjInfo baseGameObjInfo; |
|
CloneGameObjInfo cloneGameObjInfo; |
|
|
|
for (int i = 0; i < disaster.DisasterList.Count; i++) |
|
{ |
|
if (disaster.DisasterList[i].Disaster.GetType().Name == "FireLiquidLevelDisaster") |
|
{ |
|
FireLiquidLevelDisaster = (FireLiquidLevelDisaster)disaster.DisasterList[i].Disaster; |
|
|
|
GameObject obj = EntitiesManager.Instance.CreateObj(fireLiquidLevelPrefab, |
|
FireLiquidLevelDisaster.Position, |
|
P_FireLiquidLevel.transform, |
|
FireLiquidLevelDisaster.GameObjID); |
|
|
|
obj.name = CloneObjNameTool.Instance().GetCloneObjectName(FireLiquidLevelDisaster.GameObjType); |
|
SelectedObjs.gameObjs.Add(obj); |
|
|
|
baseGameObjInfo = obj.GetComponent<BaseGameObjInfo>(); |
|
cloneGameObjInfo = obj.GetComponent<CloneGameObjInfo>(); |
|
BaseInfoSet(baseGameObjInfo, cloneGameObjInfo, FireLiquidLevelDisaster); |
|
|
|
obj.GetComponent<FireLiquidLevelCtrl>().FireScale = FireLiquidLevelDisaster.fireScale; |
|
obj.GetComponent<FireLiquidLevelCtrl>().showTime = FireLiquidLevelDisaster.showTime; |
|
obj.GetComponent<FireLiquidLevelCtrl>().TargetNormalID = FireLiquidLevelDisaster.OilTankId; |
|
|
|
MessageDispatcher.SendMessage("SetTime", new SetLiquipdata() |
|
{ |
|
LiquipId = obj.GetComponent<BaseGameObjInfo>().gameObjID, |
|
time = FireLiquidLevelDisaster.showTime, |
|
}); |
|
|
|
MessageDispatcher.SendMessage("SET_SMOKE_DIRECTION"); |
|
//克隆同步 |
|
if (GameSettings.othersSettings.mode!=Mode.DisasterManagement) |
|
{ |
|
CloneDisasterSyncData clonesync = new CloneDisasterSyncData(); |
|
clonesync.ClonePosition = FireLiquidLevelDisaster.Position; |
|
clonesync.SendUserID = CurrentUserInfo.mySelf.Id; |
|
//clonesync.parentUID =GetComponent<UIdSystem>().Id; |
|
clonesync.name = obj.name; |
|
//clonesync.PrefabsPath = PrefabsPath + cloneObjType.ToString(); |
|
clonesync.floorNum = cloneGameObjInfo.floorNum; |
|
clonesync.buildNum = cloneGameObjInfo.buildNum; |
|
clonesync.interlayerNum = cloneGameObjInfo.interlayerNum; |
|
clonesync.gameObjID = cloneGameObjInfo.gameObjID; |
|
clonesync.gameObjType = cloneGameObjInfo.gameObjType; |
|
clonesync.UserID = cloneGameObjInfo.UserID; |
|
NetworkManager.Default.SendAsync("CLONE_SINGLE_DISASTER_SYNC", clonesync); |
|
|
|
//全液面火同步 |
|
FireLiquidScaleSyncData arg = new FireLiquidScaleSyncData(); |
|
arg.gameObjID = cloneGameObjInfo.gameObjID; |
|
arg.SendUserID = CurrentUserInfo.mySelf.Id; |
|
arg.firescale = FireLiquidLevelDisaster.fireScale; |
|
arg.oilTankID = FireLiquidLevelDisaster.OilTankId; |
|
NetworkManager.Default.SendAsync("SET_FIRE_LIQUID_SYNC", arg); |
|
|
|
if(FireLiquidLevelDisaster.showTime!="00:00:00") |
|
{ |
|
obj.SetActive(false); |
|
NetworkManager.Default.SendAsync("SET_LIQUIP_HIDE_SYNC", obj.GetComponent<BaseGameObjInfo>().gameObjID); |
|
} |
|
|
|
} |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 生成泄露1 |
|
/// </summary> |
|
private void CloneLeak1() |
|
{ |
|
Leak1Disaster Leak1Disaster; |
|
BaseGameObjInfo baseGameObjInfo; |
|
CloneGameObjInfo cloneGameObjInfo; |
|
|
|
for (int i = 0; i < disaster.DisasterList.Count; i++) |
|
{ |
|
if (disaster.DisasterList[i].Disaster.GetType().Name == "Leak1Disaster") |
|
{ |
|
Leak1Disaster = (Leak1Disaster)disaster.DisasterList[i].Disaster; |
|
GameObject obj = EntitiesManager.Instance.CreateObj(leak1Prefab, |
|
Leak1Disaster.Position, |
|
P_Leak1.transform, |
|
Leak1Disaster.GameObjID); |
|
|
|
obj.name = CloneObjNameTool.Instance().GetCloneObjectName(Leak1Disaster.GameObjType); |
|
SelectedObjs.gameObjs.Add(obj); |
|
|
|
baseGameObjInfo = obj.GetComponent<BaseGameObjInfo>(); |
|
cloneGameObjInfo = obj.GetComponent<CloneGameObjInfo>(); |
|
BaseInfoSet(baseGameObjInfo, cloneGameObjInfo, Leak1Disaster); |
|
obj.GetComponent<Leak1Controller>().OilTankId = Leak1Disaster.OilTankId; |
|
|
|
//克隆同步 |
|
if (GameSettings.othersSettings.mode!=Mode.DisasterManagement) |
|
{ |
|
CloneDisasterSyncData clonesync = new CloneDisasterSyncData(); |
|
clonesync.ClonePosition = Leak1Disaster.Position; |
|
clonesync.SendUserID = CurrentUserInfo.mySelf.Id; |
|
//clonesync.parentUID =GetComponent<UIdSystem>().Id; |
|
clonesync.name = obj.name; |
|
//clonesync.PrefabsPath = PrefabsPath + cloneObjType.ToString(); |
|
clonesync.floorNum = cloneGameObjInfo.floorNum; |
|
clonesync.buildNum = cloneGameObjInfo.buildNum; |
|
clonesync.interlayerNum = cloneGameObjInfo.interlayerNum; |
|
clonesync.gameObjID = cloneGameObjInfo.gameObjID; |
|
clonesync.gameObjType = cloneGameObjInfo.gameObjType; |
|
clonesync.UserID = cloneGameObjInfo.UserID; |
|
clonesync.HitObjID = Leak1Disaster.OilTankId; |
|
NetworkManager.Default.SendAsync("CLONE_SINGLE_DISASTER_SYNC", clonesync); |
|
} |
|
|
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 生成泄露2 |
|
/// </summary> |
|
private void CloneLeak2() |
|
{ |
|
Leak2Disaster Leak2Disaster; |
|
BaseGameObjInfo baseGameObjInfo; |
|
CloneGameObjInfo cloneGameObjInfo; |
|
|
|
for (int i = 0; i < disaster.DisasterList.Count; i++) |
|
{ |
|
if (disaster.DisasterList[i].Disaster.GetType().Name == "Leak2Disaster") |
|
{ |
|
Leak2Disaster = (Leak2Disaster)disaster.DisasterList[i].Disaster; |
|
GameObject obj = EntitiesManager.Instance.CreateObj(leak2Prefab, |
|
Leak2Disaster.Position, |
|
P_Leak2.transform, |
|
Leak2Disaster.GameObjID); |
|
|
|
obj.name = CloneObjNameTool.Instance().GetCloneObjectName(Leak2Disaster.GameObjType); |
|
SelectedObjs.gameObjs.Add(obj); |
|
|
|
baseGameObjInfo = obj.GetComponent<BaseGameObjInfo>(); |
|
cloneGameObjInfo = obj.GetComponent<CloneGameObjInfo>(); |
|
BaseInfoSet(baseGameObjInfo, cloneGameObjInfo, Leak2Disaster); |
|
|
|
obj.GetComponent<Leak2Controller>().level = Leak2Disaster.level; |
|
obj.GetComponent<Leak2Controller>().OilTankId = Leak2Disaster.OilTankId; |
|
//克隆同步 |
|
if (GameSettings.othersSettings.mode!=Mode.DisasterManagement) |
|
{ |
|
CloneDisasterSyncData clonesync = new CloneDisasterSyncData(); |
|
clonesync.ClonePosition = Leak2Disaster.Position; |
|
clonesync.SendUserID = CurrentUserInfo.mySelf.Id; |
|
//clonesync.parentUID =GetComponent<UIdSystem>().Id; |
|
clonesync.name = obj.name; |
|
//clonesync.PrefabsPath = PrefabsPath + cloneObjType.ToString(); |
|
clonesync.floorNum = cloneGameObjInfo.floorNum; |
|
clonesync.buildNum = cloneGameObjInfo.buildNum; |
|
clonesync.interlayerNum = cloneGameObjInfo.interlayerNum; |
|
clonesync.gameObjID = cloneGameObjInfo.gameObjID; |
|
clonesync.gameObjType = cloneGameObjInfo.gameObjType; |
|
clonesync.UserID = cloneGameObjInfo.UserID; |
|
clonesync.HitObjID = Leak2Disaster.OilTankId; |
|
NetworkManager.Default.SendAsync("CLONE_SINGLE_DISASTER_SYNC", clonesync); |
|
|
|
//Leak2同步 |
|
Leak2SyncData arg = new Leak2SyncData(); |
|
arg.SendUserID = CurrentUserInfo.mySelf.Id; |
|
arg.gameObjID = cloneGameObjInfo.gameObjID; |
|
arg.Level = Leak2Disaster.level; |
|
NetworkManager.Default.SendAsync("SET_LEAK2_SYNC", clonesync); |
|
} |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 生成伤员 |
|
/// </summary> |
|
private void CloneWounded() |
|
{ |
|
WoundedDisaster WoundedDisaster; |
|
BaseGameObjInfo baseGameObjInfo; |
|
CloneGameObjInfo cloneGameObjInfo; |
|
|
|
for (int i = 0; i < disaster.DisasterList.Count; i++) |
|
{ |
|
if (disaster.DisasterList[i].Disaster.GetType().Name == "WoundedDisaster") |
|
{ |
|
WoundedDisaster = (WoundedDisaster)disaster.DisasterList[i].Disaster; |
|
GameObject obj = EntitiesManager.Instance.CreateObj(woundedPrefab, |
|
WoundedDisaster.Position, |
|
P_Wounded.transform, |
|
WoundedDisaster.GameObjID); |
|
|
|
obj.name = CloneObjNameTool.Instance().GetCloneObjectName(WoundedDisaster.GameObjType); |
|
SelectedObjs.gameObjs.Add(obj); |
|
|
|
baseGameObjInfo = obj.GetComponent<BaseGameObjInfo>(); |
|
cloneGameObjInfo = obj.GetComponent<CloneGameObjInfo>(); |
|
BaseInfoSet(baseGameObjInfo, cloneGameObjInfo, WoundedDisaster); |
|
|
|
//克隆同步 |
|
if (GameSettings.othersSettings.mode!=Mode.DisasterManagement) |
|
{ |
|
CloneDisasterSyncData clonesync = new CloneDisasterSyncData(); |
|
clonesync.ClonePosition = WoundedDisaster.Position; |
|
clonesync.SendUserID = CurrentUserInfo.mySelf.Id; |
|
//clonesync.parentUID =GetComponent<UIdSystem>().Id; |
|
clonesync.name = obj.name; |
|
//clonesync.PrefabsPath = PrefabsPath + cloneObjType.ToString(); |
|
clonesync.floorNum = cloneGameObjInfo.floorNum; |
|
clonesync.buildNum = cloneGameObjInfo.buildNum; |
|
clonesync.interlayerNum = cloneGameObjInfo.interlayerNum; |
|
clonesync.gameObjID = cloneGameObjInfo.gameObjID; |
|
clonesync.gameObjType = cloneGameObjInfo.gameObjType; |
|
clonesync.UserID = cloneGameObjInfo.UserID; |
|
NetworkManager.Default.SendAsync("CLONE_SINGLE_DISASTER_SYNC", clonesync); |
|
} |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 生成被困人员 |
|
/// </summary> |
|
private void CloneTrapped() |
|
{ |
|
TrappedDisaster TrappedDisaster; |
|
BaseGameObjInfo baseGameObjInfo; |
|
CloneGameObjInfo cloneGameObjInfo; |
|
|
|
for (int i = 0; i < disaster.DisasterList.Count; i++) |
|
{ |
|
if (disaster.DisasterList[i].Disaster.GetType().Name == "TrappedDisaster") |
|
{ |
|
TrappedDisaster = (TrappedDisaster)disaster.DisasterList[i].Disaster; |
|
GameObject obj = EntitiesManager.Instance.CreateObj(trappedPrefab, |
|
TrappedDisaster.Position, |
|
P_TrappedPerson.transform, |
|
TrappedDisaster.GameObjID); |
|
|
|
obj.name = CloneObjNameTool.Instance().GetCloneObjectName(TrappedDisaster.GameObjType); |
|
SelectedObjs.gameObjs.Add(obj); |
|
|
|
baseGameObjInfo = obj.GetComponent<BaseGameObjInfo>(); |
|
cloneGameObjInfo = obj.GetComponent<CloneGameObjInfo>(); |
|
BaseInfoSet(baseGameObjInfo, cloneGameObjInfo, TrappedDisaster); |
|
//克隆同步 |
|
if (GameSettings.othersSettings.mode!=Mode.DisasterManagement) |
|
{ |
|
CloneDisasterSyncData clonesync = new CloneDisasterSyncData(); |
|
clonesync.ClonePosition = TrappedDisaster.Position; |
|
clonesync.SendUserID = CurrentUserInfo.mySelf.Id; |
|
//clonesync.parentUID =GetComponent<UIdSystem>().Id; |
|
clonesync.name = obj.name; |
|
//clonesync.PrefabsPath = PrefabsPath + cloneObjType.ToString(); |
|
clonesync.floorNum = cloneGameObjInfo.floorNum; |
|
clonesync.buildNum = cloneGameObjInfo.buildNum; |
|
clonesync.interlayerNum = cloneGameObjInfo.interlayerNum; |
|
clonesync.gameObjID = cloneGameObjInfo.gameObjID; |
|
clonesync.gameObjType = cloneGameObjInfo.gameObjType; |
|
clonesync.UserID = cloneGameObjInfo.UserID; |
|
NetworkManager.Default.SendAsync("CLONE_SINGLE_DISASTER_SYNC", clonesync); |
|
} |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 生成知情人 |
|
/// </summary> |
|
private void CloneInsider() |
|
{ |
|
InsiderDisaster InsiderDisaster; |
|
BaseGameObjInfo baseGameObjInfo; |
|
CloneGameObjInfo cloneGameObjInfo; |
|
|
|
for (int i = 0; i < disaster.DisasterList.Count; i++) |
|
{ |
|
if (disaster.DisasterList[i].Disaster.GetType().Name == "InsiderDisaster") |
|
{ |
|
InsiderDisaster = (InsiderDisaster)disaster.DisasterList[i].Disaster; |
|
GameObject obj = EntitiesManager.Instance.CreateObj(insiderPrefab, |
|
InsiderDisaster.Position, |
|
P_Insider.transform, |
|
InsiderDisaster.GameObjID); |
|
|
|
obj.name = CloneObjNameTool.Instance().GetCloneObjectName(InsiderDisaster.GameObjType); |
|
SelectedObjs.gameObjs.Add(obj); |
|
|
|
baseGameObjInfo = obj.GetComponent<BaseGameObjInfo>(); |
|
cloneGameObjInfo = obj.GetComponent<CloneGameObjInfo>(); |
|
BaseInfoSet(baseGameObjInfo, cloneGameObjInfo, InsiderDisaster); |
|
//克隆同步 |
|
if (GameSettings.othersSettings.mode!=Mode.DisasterManagement) |
|
{ |
|
CloneDisasterSyncData clonesync = new CloneDisasterSyncData(); |
|
clonesync.ClonePosition = InsiderDisaster.Position; |
|
clonesync.SendUserID = CurrentUserInfo.mySelf.Id; |
|
//clonesync.parentUID =GetComponent<UIdSystem>().Id; |
|
clonesync.name = obj.name; |
|
//clonesync.PrefabsPath = PrefabsPath + cloneObjType.ToString(); |
|
clonesync.floorNum = cloneGameObjInfo.floorNum; |
|
clonesync.buildNum = cloneGameObjInfo.buildNum; |
|
clonesync.interlayerNum = cloneGameObjInfo.interlayerNum; |
|
clonesync.gameObjID = cloneGameObjInfo.gameObjID; |
|
clonesync.gameObjType = cloneGameObjInfo.gameObjType; |
|
clonesync.UserID = cloneGameObjInfo.UserID; |
|
NetworkManager.Default.SendAsync("CLONE_SINGLE_DISASTER_SYNC", clonesync); |
|
} |
|
|
|
} |
|
} |
|
} |
|
/// <summary> |
|
/// 生成危险品 |
|
/// </summary> |
|
private void CloneDangerous() |
|
{ |
|
DangerousDisaster DangerousDisaster; |
|
BaseGameObjInfo baseGameObjInfo; |
|
CloneGameObjInfo cloneGameObjInfo; |
|
|
|
for (int i = 0; i < disaster.DisasterList.Count; i++) |
|
{ |
|
if (disaster.DisasterList[i].Disaster.GetType().Name == "DangerousDisaster") |
|
{ |
|
DangerousDisaster = (DangerousDisaster)disaster.DisasterList[i].Disaster; |
|
GameObject obj = EntitiesManager.Instance.CreateObj(dangerousPrefab, |
|
DangerousDisaster.Position, |
|
P_Dangerous.transform, |
|
DangerousDisaster.GameObjID); |
|
|
|
obj.name = CloneObjNameTool.Instance().GetCloneObjectName(DangerousDisaster.GameObjType); |
|
SelectedObjs.gameObjs.Add(obj); |
|
|
|
baseGameObjInfo = obj.GetComponent<BaseGameObjInfo>(); |
|
cloneGameObjInfo = obj.GetComponent<CloneGameObjInfo>(); |
|
BaseInfoSet(baseGameObjInfo, cloneGameObjInfo, DangerousDisaster); |
|
//克隆同步 |
|
if (GameSettings.othersSettings.mode != Mode.DisasterManagement) |
|
{ |
|
CloneDisasterSyncData clonesync = new CloneDisasterSyncData(); |
|
clonesync.ClonePosition = DangerousDisaster.Position; |
|
clonesync.SendUserID = CurrentUserInfo.mySelf.Id; |
|
//clonesync.parentUID =GetComponent<UIdSystem>().Id; |
|
clonesync.name = obj.name; |
|
//clonesync.PrefabsPath = PrefabsPath + cloneObjType.ToString(); |
|
clonesync.floorNum = cloneGameObjInfo.floorNum; |
|
clonesync.buildNum = cloneGameObjInfo.buildNum; |
|
clonesync.interlayerNum = cloneGameObjInfo.interlayerNum; |
|
clonesync.gameObjID = cloneGameObjInfo.gameObjID; |
|
clonesync.gameObjType = cloneGameObjInfo.gameObjType; |
|
clonesync.UserID = cloneGameObjInfo.UserID; |
|
NetworkManager.Default.SendAsync("CLONE_SINGLE_DISASTER_SYNC", clonesync); |
|
} |
|
|
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 设置对象基本信息 |
|
/// </summary> |
|
/// <param name="baseGameObjInfo"></param> |
|
/// <param name="cloneGameObjInfo"></param> |
|
/// <param name="disaster"></param> |
|
private void BaseInfoSet(BaseGameObjInfo baseGameObjInfo, CloneGameObjInfo cloneGameObjInfo, Disaster disaster) |
|
{ |
|
if (baseGameObjInfo || cloneGameObjInfo) |
|
{ |
|
Transform obj = null; |
|
if (baseGameObjInfo) |
|
{ |
|
obj = baseGameObjInfo.transform; |
|
} |
|
if (cloneGameObjInfo) |
|
{ |
|
obj = cloneGameObjInfo.transform; |
|
} |
|
|
|
if (obj != null) |
|
{ |
|
obj.position = disaster.Position; |
|
obj.rotation = disaster.Rotation; |
|
obj.localScale = disaster.Scale; |
|
} |
|
} |
|
|
|
if (baseGameObjInfo) |
|
{ |
|
baseGameObjInfo.gameObjID = disaster.GameObjID; |
|
baseGameObjInfo.gameObjType = disaster.GameObjType; |
|
baseGameObjInfo.UserID = CurrentUserInfo.mySelf.Id; |
|
baseGameObjInfo.UserID = disaster.UserID; |
|
} |
|
|
|
|
|
if (cloneGameObjInfo) |
|
{ |
|
cloneGameObjInfo.buildNum = disaster.BuildNum; |
|
cloneGameObjInfo.floorNum = disaster.FloorNum; |
|
cloneGameObjInfo.interlayerNum = disaster.InterlayerNum; |
|
cloneGameObjInfo.ShoworHidden = disaster.ShoworHidden; |
|
} |
|
} |
|
}
|
|
|