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));
        }
Exemplo n.º 2
0
        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;
                }
            }
        }
Exemplo n.º 3
0
 // Expose protected method
 public new static bool RayCast(ToolBase.RaycastInput input, out ToolBase.RaycastOutput output)
 {
     return(NetTool.RayCast(input, out output));
 }