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.
206 lines
8.7 KiB
206 lines
8.7 KiB
4 years ago
|
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.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<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;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|