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
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; |
|
} |
|
} |
|
|
|
} |
|
} |
|
}
|
|
|