Beispiel #1
0
    public bool OnInputDown()
    {
        if(Simulation == null)
        {
            return false;
        }
        if(GameMode.Current == GameMode.Mode.SelectPipe)
        {
            //If no pipe being edited
            if(editedPipe == null)
            {
                //Get closest port
                IPipeDisplayAnchor targetAnchor = GetClosestAnchorToCursorWithQuality(x => true);
                if(targetAnchor != null)
                {
                    if(targetAnchor.Dock.Pipe != null)
                    {
                        //Edit existing pipe
                        foreach(PipeDisplay pipeDisplay in pipeDisplays)
                        {
                            if(pipeDisplay.Pipe.From == targetAnchor.Dock)
                            {
                                editedPipe = pipeDisplay;
                                editedPipe.FromOverride = new DraggedPipeAnchor();
                                editedPipe.Pipe.From = null;
                                break;
                            }
                            if(pipeDisplay.Pipe.To == targetAnchor.Dock)
                            {
                                editedPipe = pipeDisplay;
                                editedPipe.ToOverride = new DraggedPipeAnchor();
                                editedPipe.Pipe.To = null;
                                break;
                            }
                        }
                    }
                    else
                    {
                        //Create new pipe (from/to) that port to input point
                        Pipe pipe = new Pipe(Simulation);
                        editedPipe = Instantiate(PrefabManager.PipeDisplay);
                        pipeDisplays.Add(editedPipe);
                        editedPipe.Pipe = pipe;
                        if(targetAnchor.Dock.Type == DockType.In)
                        {
                            editedPipe.FromOverride = new DraggedPipeAnchor();
                            pipe.To = targetAnchor.Dock;
                        }
                        else
                        {
                            pipe.From = targetAnchor.Dock;
                            editedPipe.ToOverride = new DraggedPipeAnchor();
                        }
                    }
                    editedPipe.Display();
                }
            }
            else
            {
                //get closest dock of opposite type from still-attached dock
                Dock attachedDock = (editedPipe.Pipe.From ?? editedPipe.Pipe.To);
                IPipeDisplayAnchor targetDisplay = GetClosestAnchorToCursorWithQuality(x => x.Dock.Pipe == null && x.Dock.Type != attachedDock.Type);
                //if pipe is not connecting source to itself
                if(targetDisplay != null
                   && targetDisplay.Dock.Source != attachedDock.Source
                )
                {
                    Dock targetDock = targetDisplay.Dock;
                    //setup pipe
                    if (attachedDock == editedPipe.Pipe.From)
                    {
                        editedPipe.Pipe.To = targetDock;
                        editedPipe.ToOverride = null;
                    }
                    else
                    {
                        editedPipe.Pipe.From = targetDock;
                        editedPipe.FromOverride = null;
                    }
                    if(editedPipe.Pipe.GrabberCount == 0)
                    {
                        editedPipe.Pipe.AddGrabber();
                    }
                    editedPipe.Display();
                    editedPipe = null;
                }
                else
                {
                    CancelPipeSetup();
                }
            }

        }
        return false;
    }
Beispiel #2
0
 private void CancelPipeSetup()
 {
     if(editedPipe != null)
     {
         pipeDisplays.Remove(editedPipe);
         editedPipe.Pipe.Destroy();
         Destroy(editedPipe.gameObject);
         editedPipe = null;
     }
 }