using System.Collections; using System.Collections.Generic; using UnityEngine; using AX.InputSystem; using System; public class Cloneable : GameObjectCloneable { //克隆地点需要限制的克隆类型 private List CloneableTypes = new List(); 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.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.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(); 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()) { 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() && hit.transform.name.Contains("Floor")) { dis = Vector3.Distance(hit.point, hitPoint); } } var TankHeight = hitObj.GetComponentInParent().MyBaseMessage.TankHeight; var OutShowHeight = hitObj.GetComponentInParent().OutShowHeight; //if (dis > hitObj.GetComponent().OutShowHeight) if (dis > OutShowHeight * TankHeight) { result = false; //TODO:弹出不能克隆的提示窗口 //Debug.Log("TODO:弹出不能克隆的提示窗口"); } else { result = true; } } } } }