网上演练贵港万达广场(人员密集)
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.
 
 
 

211 lines
8.9 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using AX.InputSystem;
using System;
public class Cloneable : GameObjectCloneable
{
//克隆地点需要限制的克隆类型
private List<CloneObjType> CloneableTypes = new List<CloneObjType>();
private void Start()
{
CloneableTypes.Add(CloneObjType.stagingArea);
CloneableTypes.Add(CloneObjType.securityInspector);
CloneableTypes.Add(CloneObjType.searchSign);
CloneableTypes.Add(CloneObjType.sixLadder);
CloneableTypes.Add(CloneObjType.fifteenLadder);
CloneableTypes.Add(CloneObjType.headquarters);
CloneableTypes.Add(CloneObjType.fireNormal);
CloneableTypes.Add(CloneObjType.fireIndoor);
CloneableTypes.Add(CloneObjType.fireBreakThrough);
CloneableTypes.Add(CloneObjType.sundriesHeap);
CloneableTypes.Add(CloneObjType.dangerousGoods);
CloneableTypes.Add(CloneObjType.forcibleEntryPoint);
CloneableTypes.Add(CloneObjType.rollingDoor);
CloneableTypes.Add(CloneObjType.wounded);
CloneableTypes.Add(CloneObjType.trappedPerson);
CloneableTypes.Add(CloneObjType.insider);
CloneableTypes.Add(CloneObjType.smokeNormal);
CloneableTypes.Add(CloneObjType.smokeIndoor1);
CloneableTypes.Add(CloneObjType.smokeIndoor2);
CloneableTypes.Add(CloneObjType.fireman);
CloneableTypes.Add(CloneObjType.WarningLine);
CloneableTypes.Add(CloneObjType.AttackLine);
CloneableTypes.Add(CloneObjType.RetreatLine);
CloneableTypes.Add(CloneObjType.OrdinaryHose);
CloneableTypes.Add(CloneObjType.BrokenLine);
CloneableTypes.Add(CloneObjType.BlockLine);
CloneableTypes.Add(CloneObjType.EjectSmokeLine);
CloneableTypes.Add(CloneObjType.ScintillationHose);
CloneableTypes.Add(CloneObjType.WaterTanker);
CloneableTypes.Add(CloneObjType.FoamTruck);
CloneableTypes.Add(CloneObjType.DryPowderTruck);
CloneableTypes.Add(CloneObjType.AerialTowerTruck);
CloneableTypes.Add(CloneObjType.HighSprayingTruck);
CloneableTypes.Add(CloneObjType.LadderTruck);
CloneableTypes.Add(CloneObjType.SmokeExhaustTruck);
CloneableTypes.Add(CloneObjType.RescueVehicle);
CloneableTypes.Add(CloneObjType.Apparatus);
CloneableTypes.Add(CloneObjType.LightingAppliance);
CloneableTypes.Add(CloneObjType.DecontaminationTruck);
CloneableTypes.Add(CloneObjType.LDWSVehicle);
CloneableTypes.Add(CloneObjType.AirSupplyTruck);
CloneableTypes.Add(CloneObjType.RepairCar);
CloneableTypes.Add(CloneObjType.RefuelCar);
CloneableTypes.Add(CloneObjType.TroopCrawler);
CloneableTypes.Add(CloneObjType.SupportVehicle);
CloneableTypes.Add(CloneObjType.VortexCar);
CloneableTypes.Add(CloneObjType.CARescueVehicle);
CloneableTypes.Add(CloneObjType.ForcibleEntryTruck);
CloneableTypes.Add(CloneObjType.EquipRescueVehicle);
CloneableTypes.Add(CloneObjType.FoamDryPowderCompanyCar);
CloneableTypes.Add(CloneObjType.FoodSafetyCar);
CloneableTypes.Add(CloneObjType.CCCar);
CloneableTypes.Add(CloneObjType.UHWSVehicle);
CloneableTypes.Add(CloneObjType.ABICar);
CloneableTypes.Add(CloneObjType.ambulance);
CloneableTypes.Add(CloneObjType.PoliceCar);
CloneableTypes.Add(CloneObjType.PowerRepairVehicles);
CloneableTypes.Add(CloneObjType.GasEmergencyCar);
CloneableTypes.Add(CloneObjType.WaterSupplyRepairCar);
//新增联动力量
CloneableTypes.Add(CloneObjType.Digger);
CloneableTypes.Add(CloneObjType.Crane);
CloneableTypes.Add(CloneObjType.TransportVehicle);
CloneableTypes.Add(CloneObjType.ObserveInspector);
CloneableTypes.Add(CloneObjType.SimulationEvacuate);
CloneableTypes.Add(CloneObjType.ObligationFireman);
CloneableTypes.Add(CloneObjType.SeparateWater);
CloneableTypes.Add(CloneObjType.HandPump);
CloneableTypes.Add(CloneObjType.WaterCannon);
CloneableTypes.Add(CloneObjType.SignalPagoda);
CloneableTypes.Add(CloneObjType.SatelliteStation);
CloneableTypes.Add(CloneObjType.UAV);
CloneableTypes.Add(CloneObjType.LiquidLevel);
CloneableTypes.Add(CloneObjType.Leak1);
CloneableTypes.Add(CloneObjType.Leak2);
CloneableTypes.Add(CloneObjType.Explode);
CloneableTypes.Add(CloneObjType.ShapeChange);
CloneableTypes.Add(CloneObjType.Splash);
CloneableTypes.Add(CloneObjType.BoilOver);
CloneableTypes.Add(CloneObjType.FireSpreadLine);
CloneableTypes.Add(CloneObjType.SpreadedFire);
//作战部署克隆类型
CloneableTypes.Add(CloneObjType.Text);
CloneableTypes.Add(CloneObjType.Rect);
CloneableTypes.Add(CloneObjType.Arrow);
CloneableTypes.Add(CloneObjType.CutOff);
CloneableTypes.Add(CloneObjType.BreakThrough);
CloneableTypes.Add(CloneObjType.Segment);
CloneableTypes.Add(CloneObjType.Suppress);
CloneableTypes.Add(CloneObjType.PincerAttack);
CloneableTypes.Add(CloneObjType.JointAttack);
CloneableTypes.Add(CloneObjType.DirectWaterSupply);
CloneableTypes.Add(CloneObjType.RelayWaterSupply);
CloneableTypes.Add(CloneObjType.CouplingWaterSupply);
CloneableTypes.Add(CloneObjType.WaterLineWaterSupply);
CloneableTypes.Add(CloneObjType.SuctionFeedWaterSupply);
CloneableTypes.Add(CloneObjType.HandPumpWaterSupply);
CloneableTypes.Add(CloneObjType.FloatingFirePumpWaterSupply);
CloneableTypes.Add(CloneObjType.FDWaterTanker);
CloneableTypes.Add(CloneObjType.FDFoamTruck);
CloneableTypes.Add(CloneObjType.FDAerialTowerTruck);
CloneableTypes.Add(CloneObjType.FDHighSprayingTruck);
CloneableTypes.Add(CloneObjType.FDLadderTruck);
CloneableTypes.Add(CloneObjType.FDSmokeExhaustTruck);
CloneableTypes.Add(CloneObjType.FDRescueVehicle);
CloneableTypes.Add(CloneObjType.FDApparatus);
CloneableTypes.Add(CloneObjType.FDLightingAppliance);
CloneableTypes.Add(CloneObjType.FDAirSupplyTruck);
CloneableTypes.Add(CloneObjType.FDForcibleEntryTruck);
CloneableTypes.Add(CloneObjType.FDFireMan);
//指挥官角色克隆也受限制
CloneableTypes.Add(CloneObjType.Character);
CloneableTypes.Add(CloneObjType.FirefightingRobot);
CloneableTypes.Add(CloneObjType.SnowCannon);
CloneableTypes.Add(CloneObjType.WaterCurtainHose);
}
public override bool GetCloneAble(Vector3 hitPoint, GameObject hitObj, CloneObjType cloneObjType)
{
bool cloneable = false;
//如果是受克隆地点限制需要判断能否在该地点克隆
if (CloneableTypes.Contains(cloneObjType))
{
var cloneableEnums = hitObj.GetComponent<CloneableEnums>();
if (cloneableEnums && cloneableEnums.CloneableTypes.Contains(cloneObjType))
{
CheckCloneable(hitPoint, hitObj, cloneObjType, ref cloneable);
}
}
//如果不受克隆地点限制直接能克隆
else
{
cloneable = true;
}
return cloneable;
}
private void CheckCloneable(Vector3 hitPoint, GameObject hitObj, CloneObjType cloneObjType, ref bool result)
{
if (cloneObjType != CloneObjType.Leak1 && cloneObjType != CloneObjType.Leak2)
{
result = true;
}
else
{
/*
* 收特殊克隆条件限制,目前只有泄露
* 注:泄露受储量限制,不能在储量高度之上克隆
* */
if (hitObj.GetComponentInParent<OilTankMessage>())
{
float dis = 0;
RaycastHit[] AllHit = Physics.RaycastAll(hitPoint, Vector3.down, 100f, LayerMask.NameToLayer("SoliderRoad"));
foreach (RaycastHit hit in AllHit)
{
//if (hit.transform.name.Contains("DiMian"))
if (!hit.transform.GetComponentInParent<OilTankMessage>()
&& hit.transform.name.Contains("Floor"))
{
dis = Vector3.Distance(hit.point, hitPoint);
}
}
var TankHeight = hitObj.GetComponentInParent<OilTankMessage>().MyBaseMessage.TankHeight;
var OutShowHeight = hitObj.GetComponentInParent<OilTankMessage>().OutShowHeight;
//if (dis > hitObj.GetComponent<OilTankMessage>().OutShowHeight)
if (dis > OutShowHeight * TankHeight)
{
result = false;
//TODO:弹出不能克隆的提示窗口
//Debug.Log("TODO:弹出不能克隆的提示窗口");
}
else
{
result = true;
}
}
}
}
}