private ushort RayCastNode(out RaycastOutput nodeOutput) { RaycastInput nodeInput = new RaycastInput(MouseRay, MouseRayLength) { m_rayRight = MouseRayRight, m_netService = { // find road nodes m_itemLayers = ItemClass.Layer.Default | ItemClass.Layer.MetroTunnels, m_service = ItemClass.Service.Road }, m_ignoreTerrain = true, m_ignoreNodeFlags = NetNode.Flags.Untouchable }; if (!RayCast(nodeInput, out nodeOutput)) { // find train nodes nodeInput.m_netService.m_service = ItemClass.Service.PublicTransport; nodeInput.m_netService.m_subService = ItemClass.SubService.PublicTransportTrain; if (!RayCast(nodeInput, out nodeOutput)) { // find metro nodes nodeInput.m_netService.m_subService = ItemClass.SubService.PublicTransportMetro; if (!RayCast(nodeInput, out nodeOutput)) { return(0); } } } return(nodeOutput.m_netNode); }
private ushort RayCastSegment(out RaycastOutput segmentOutput) { RaycastInput segmentInput = new RaycastInput(MouseRay, MouseRayLength) { m_netService = { // find road segments m_itemLayers = ItemClass.Layer.Default | ItemClass.Layer.MetroTunnels, m_service = ItemClass.Service.Road }, m_ignoreTerrain = true, m_ignoreSegmentFlags = NetSegment.Flags.Untouchable }; if (!RayCast(segmentInput, out segmentOutput)) { segmentInput.m_netService.m_service = ItemClass.Service.PublicTransport; segmentInput.m_netService.m_subService = ItemClass.SubService.PublicTransportTrain; if (!RayCast(segmentInput, out segmentOutput)) { // find metro segments segmentInput.m_netService.m_subService = ItemClass.SubService.PublicTransportMetro; if (!RayCast(segmentInput, out segmentOutput)) { return(0); } } } return(segmentOutput.m_netSegment); }
bool RayCastSegmentAndNode(out RaycastOutput output) { RaycastInput input = new RaycastInput(Camera.main.ScreenPointToRay(Input.mousePosition), Camera.main.farClipPlane); input.m_netService.m_service = ItemClass.Service.Road; input.m_ignoreSegmentFlags = NetSegment.Flags.None; input.m_ignoreNodeFlags = NetNode.Flags.None; input.m_ignoreTerrain = true; return(RayCast(input, out output)); }
public static bool RayCastSegmentAndNode(out RaycastOutput output) { RaycastInput input = new RaycastInput(Camera.main.ScreenPointToRay(Input.mousePosition), Camera.main.farClipPlane); input.m_netService.m_service = ItemClass.Service.Road; input.m_netService.m_itemLayers = ItemClass.Layer.Default; input.m_ignoreSegmentFlags = NetSegment.Flags.None; input.m_ignoreNodeFlags = NetNode.Flags.None; input.m_ignoreTerrain = true; return RayCast(input, out output); }
bool RaycastRoad(out RaycastOutput raycastOutput) { RaycastInput raycastInput = new RaycastInput(Camera.main.ScreenPointToRay(Input.mousePosition), Camera.main.farClipPlane); raycastInput.m_netService.m_service = ItemClass.Service.Road; raycastInput.m_netService.m_itemLayers = ItemClass.Layer.Default | ItemClass.Layer.MetroTunnels; raycastInput.m_ignoreSegmentFlags = NetSegment.Flags.None; raycastInput.m_ignoreNodeFlags = NetNode.Flags.None; raycastInput.m_ignoreTerrain = true; return RayCast(raycastInput, out raycastOutput); }
private static bool RayCastSegmentAndNode(out RaycastOutput output) { var input = new RaycastInput(Camera.main.ScreenPointToRay(Input.mousePosition), Camera.main.farClipPlane) { m_netService = { m_itemLayers = ItemClass.Layer.Default | ItemClass.Layer.MetroTunnels }, m_ignoreSegmentFlags = NetSegment.Flags.None, m_ignoreNodeFlags = NetNode.Flags.None, m_ignoreTerrain = true, }; return(RayCast(input, out output)); }
bool RaycastRoad(out RaycastOutput raycastOutput) { RaycastInput raycastInput = new RaycastInput(Camera.main.ScreenPointToRay(Input.mousePosition), Camera.main.farClipPlane); raycastInput.m_netService.m_service = ItemClass.Service.Road; raycastInput.m_netService.m_itemLayers = ItemClass.Layer.Default | ItemClass.Layer.MetroTunnels; raycastInput.m_ignoreSegmentFlags = NetSegment.Flags.None; raycastInput.m_ignoreNodeFlags = NetNode.Flags.None; raycastInput.m_ignoreTerrain = true; return(RayCast(raycastInput, out raycastOutput)); }
bool RaycastProp(out RaycastOutput raycastOutput) { RaycastInput raycastInput = new RaycastInput(Camera.main.ScreenPointToRay(Input.mousePosition), Camera.main.farClipPlane); raycastInput.m_propService.m_service = ItemClass.Service.None; raycastInput.m_buildingService.m_service = ItemClass.Service.Beautification; raycastInput.m_netService.m_subService = ItemClass.SubService.None; raycastInput.m_netService.m_itemLayers = ItemClass.Layer.None; raycastInput.m_ignorePropFlags = PropInstance.Flags.None; raycastInput.m_ignoreBuildingFlags = Building.Flags.None; raycastInput.m_ignoreTerrain = true; return(RayCast(raycastInput, out raycastOutput)); }
// Raycasting tools public static void RaycastTo(ObjectType type, out RaycastOutput output) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); ToolBase.RaycastInput input = new ToolBase.RaycastInput(ray, Camera.main.farClipPlane); input.m_ignoreSegmentFlags = type.IsFlagSet(ObjectType.NetSegment) ? NetSegment.Flags.None : NetSegment.Flags.All; input.m_ignoreNodeFlags = type.IsFlagSet(ObjectType.NetNode) ? NetNode.Flags.None : NetNode.Flags.All; input.m_ignoreParkFlags = type.IsFlagSet(ObjectType.ParkDistrict) ? DistrictPark.Flags.None : DistrictPark.Flags.All; input.m_ignorePropFlags = type.IsFlagSet(ObjectType.Prop) ? PropInstance.Flags.None : PropInstance.Flags.All; input.m_ignoreTreeFlags = type.IsFlagSet(ObjectType.Tree) ? TreeInstance.Flags.None : TreeInstance.Flags.All; input.m_ignoreCitizenFlags = type.IsFlagSet(ObjectType.Citizen) ? CitizenInstance.Flags.None : CitizenInstance.Flags.All; input.m_ignoreVehicleFlags = type.IsFlagSet(ObjectType.Vehicle) ? Vehicle.Flags.Deleted : Vehicle.Flags.Created; input.m_ignoreBuildingFlags = type.IsFlagSet(ObjectType.Building) ? Building.Flags.None : Building.Flags.All; input.m_ignoreDisasterFlags = type.IsFlagSet(ObjectType.Disaster) ? DisasterData.Flags.None : DisasterData.Flags.All; input.m_ignoreTransportFlags = type.IsFlagSet(ObjectType.TransportLine) ? TransportLine.Flags.None : TransportLine.Flags.All; input.m_ignoreParkedVehicleFlags = type.IsFlagSet(ObjectType.ParkedVehicle) ? VehicleParked.Flags.None : VehicleParked.Flags.All; input.m_ignoreDistrictFlags = type.IsFlagSet(ObjectType.District) ? District.Flags.None : District.Flags.All; input.m_ignoreTerrain = !type.IsFlagSet(ObjectType.Position); RayCast(input, out ToolBase.RaycastOutput outputx); output = outputx; }
public bool DoRayCast(RaycastInput input, out RaycastOutput output) { return(RayCast(input, out output)); }
public static new bool RayCast(RaycastInput input, out RaycastOutput output) => ToolBase.RayCast(input, out output);
public static bool TerrainRaycast(RaycastInput raycastInput, out RaycastOutput raycastOutput) { return(ToolBase.RayCast(raycastInput, out raycastOutput)); }
/// <summary> /// Access ToolBase.RayCast protected method. /// </summary> /// <param name="input">Input raycast</param> /// <param name="output">Output raycast</param> /// <returns></returns> public static bool BaseRayCast(RaycastInput input, out RaycastOutput output) => RayCast(input, out output);