private bool RayCastSegmentAndNode(out ToolBase.RaycastOutput output) { ToolBase.RaycastInput input = new ToolBase.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 | ItemClass.Layer.MetroTunnels; input.m_ignoreSegmentFlags = NetSegment.Flags.None; input.m_ignoreNodeFlags = NetNode.Flags.None; input.m_ignoreTerrain = true; return(MainTool.DoRayCast(input, out output)); }
void HandleMouseDrag(ref ToolBase.RaycastOutput raycastOutput, ref ToolError error, bool test, ref NetInfo newRoadPrefab, ref int newSegmentIndex) { Vector3 hitPosDelta = Vector3.zero; if (!test) { if (currentTime - prevRebuildTime < 0.1f) { return; } if (dragging) { hitPosDelta = raycastOutput.m_hitPos - prevHitPos; if (hitPosDelta.magnitude < 12.0f) { return; } } else { prevHitPos = raycastOutput.m_hitPos; dragging = true; if (toolMode == ToolMode.Oneway) { return; } } prevHitPos = raycastOutput.m_hitPos; } int segmentIndex = raycastOutput.m_netSegment; if (segmentIndex != 0) { NetManager net = Singleton <NetManager> .instance; NetInfo prefab = net.m_segments.m_buffer[segmentIndex].Info; bool isOneway = !prefab.m_hasForwardVehicleLanes || !prefab.m_hasBackwardVehicleLanes; string prefabName = null; if (!roadPrefabNames.TryGetValue(prefab.GetInstanceID(), out prefabName) || prefabName == null) { ModDebug.Error("Prefab name not found"); error = ToolError.Unknown; return; } string newPrefabName = null; if (toolMode == ToolMode.Oneway) { if (!isOneway) { newPrefabName = FindMatchingName(prefabName, twowayNames, onewayNames); } else { newPrefabName = prefabName; } } else { if (isOneway) { newPrefabName = FindMatchingName(prefabName, onewayNames, twowayNames); } else { toolError = ToolError.AlreadyTwoway; return; } } if (newPrefabName != null) { if (test) { toolError = ToolError.None; return; } NetInfo newPrefab; if (!roadPrefabs.TryGetValue(newPrefabName, out newPrefab) || newPrefab == null) { ModDebug.Error("Prefab not found: " + newPrefabName); error = ToolError.Unknown; return; } newRoadPrefab = newPrefab; int newIndex = RebuildSegment(segmentIndex, newPrefab, toolMode == ToolMode.Oneway, raycastOutput.m_hitPos, hitPosDelta, ref error); if (newIndex != 0) { if (error != ToolError.None) { return; } prevBuiltSegmentIndex = newSegmentIndex; prevRebuildTime = currentTime; newSegmentIndex = newIndex; } } else { toolError = ToolError.CannotUpgradeThisType; return; } } }
// Expose protected method public new static bool RayCast(ToolBase.RaycastInput input, out ToolBase.RaycastOutput output) { return(NetTool.RayCast(input, out output)); }