예제 #1
0
파일: WesInput.cs 프로젝트: shldn/assembly
    } // End of Awake().


    void Update(){
	    forwardThrottle = 0;
	    if(WesInput.GetKey("Forward"))
		    forwardThrottle += 1;
	    if(WesInput.GetKey("Backward"))
		    forwardThrottle -= 1;

        horizontalThrottle = 0;
	    if(WesInput.GetKey("Right"))
		    horizontalThrottle += 1;
	    if(WesInput.GetKey("Left"))
		    horizontalThrottle -= 1;

        verticalThrottle = 0;
	    if(WesInput.GetKey("Up"))
		    verticalThrottle += 1;
	    if(WesInput.GetKey("Down"))
		    verticalThrottle -= 1;
		
	    rotationThrottle = 0;
	    if(WesInput.GetKey("Roll Right"))
		    rotationThrottle += 1;
	    if(WesInput.GetKey("Roll Left"))
		    rotationThrottle -= 1;
    } // End of Update().
예제 #2
0
    }     // End of Start().

    void Update()
    {
        // Smoothly interpolate camera position/rotation.
        transform.position = Vector3.SmoothDamp(transform.position, targetPos, ref smoothVelTranslate, translateSmoothTime);
        Quaternion tempRot = transform.rotation;

        tempRot            = Quaternion.Slerp(tempRot, targetRot, 5 * Time.deltaTime);
        transform.rotation = tempRot;

        // Toggle camera lock/free movement with Spacebar.
        if (WesInput.GetKey("Camera Lock") && !spacePressed)
        {
            spacePressed = true;
            cameraLock   = !cameraLock;
        }

        // Toggle freelook/camera lock.
        if (!WesInput.GetKey("Camera Lock"))
        {
            spacePressed = false;
        }

        // Camera defaults to unfocused, but if an element is selected this will become true.
        cameraFocused = false;

        // Determine what the user is looking at.
        Ray        mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit cameraLookHit;

        lookedAtNode = null;
        if (Physics.Raycast(mouseRay, out cameraLookHit))
        {
            lookedAtObject = cameraLookHit.transform.gameObject;
            lookedAtNode   = lookedAtObject.GetComponent <Node>();
        }
        else
        {
            lookedAtObject = null;
        }

        // When not in free-look mode...
        if (cameraLock)
        {
            Screen.lockCursor = false;

            if (selectedAssembly != null)
            {
                cameraFocused = true;
                focusedPos    = selectedAssembly.GetCenter();
            }

            if (selectedNode != null)
            {
                cameraFocused = true;
                focusedPos    = selectedNode.transform.position;
            }

            // Rotate orbit via directional input.
            if (Input.GetMouseButton(1))
            {
                targetRot *= Quaternion.AngleAxis(Input.GetAxis("Mouse Y") * cameraRotateSpeed, -Vector3.right);
                targetRot *= Quaternion.AngleAxis(Input.GetAxis("Mouse X") * cameraRotateSpeed, Vector3.up);
            }

            // If we are focusing on some object...
            if (cameraFocused)
            {
                // Zoom orbit with mousewheel.
                orbitDist -= (orbitDist * 0.3f) * Input.GetAxis("Mouse ScrollWheel") * orbitZoomSpeed;
                orbitDist  = Mathf.Clamp(orbitDist, 3f, Mathf.Infinity);

                targetPos = focusedPos - (targetRot * (Vector3.forward * orbitDist));
            }
            // If camera is locked but not focused...
            else
            {
                // Move in/out with mousewheel.
                targetPos += Camera.main.transform.forward * Input.GetAxis("Mouse ScrollWheel") * orbitZoomSpeed;
            }


            if (lookedAtObject)
            {
                if (lookedAtNode && Input.GetMouseButtonDown(0))
                {
                    mouseClickedNode = lookedAtNode;
                }
                else if (lookedAtNode && Input.GetMouseButtonUp(0))
                {
                    mouseReleasedNode = lookedAtNode;
                }

                // 'Selecting' a single node.
                if (mouseReleasedNode && (mouseClickedNode == mouseReleasedNode))
                {
                    Node clickAndReleaseNode = mouseReleasedNode;
                    // Select the assembly attached to the node, if applicable...
                    if ((clickAndReleaseNode.assembly != null) && (selectedAssembly != clickAndReleaseNode.assembly) && (!selectedNode || (selectedNode == clickAndReleaseNode) || (clickAndReleaseNode.assembly != selectedNode.assembly)))
                    {
                        selectedNode = null;
                        FocusOnAssembly(clickAndReleaseNode.assembly);
                    }
                    // Otherwise just select the node.
                    else
                    {
                        selectedNode     = clickAndReleaseNode;
                        selectedAssembly = null;
                        targetRot        = Quaternion.LookRotation(selectedNode.transform.position - transform.position, Camera.main.transform.up);
                    }
                }
            }


            // Create a new bond.
            if (mouseClickedNode && mouseReleasedNode && !mouseClickedNode.BondedTo(mouseReleasedNode) && (mouseClickedNode != mouseReleasedNode) && (mouseClickedNode.BondCount() < 3) && (mouseReleasedNode.BondCount() < 3))
            {
                new Bond(mouseClickedNode, mouseReleasedNode);
                ConsoleScript.NewLine("Manually created a bond.");
            }
            // Destroy an existing bond.
            else if (mouseClickedNode && mouseReleasedNode && mouseClickedNode.BondedTo(mouseReleasedNode))
            {
                mouseClickedNode.GetBondTo(mouseReleasedNode).Destroy();
                ConsoleScript.NewLine("Manually removed a bond.");
            }
        }
        // If we're in free-look mode...
        else
        {
            Screen.lockCursor = true;
            lookedAtObject    = null;
            selectedNode      = null;
            selectedAssembly  = null;

            // Pitch/yaw camera via mouse movement.
            targetRot *= Quaternion.AngleAxis(Input.GetAxis("Mouse Y") * cameraRotateSpeed, -Vector3.right);
            targetRot *= Quaternion.AngleAxis(Input.GetAxis("Mouse X") * cameraRotateSpeed, Vector3.up);
        }

        // Roll camera using Q and E
        targetRot *= Quaternion.AngleAxis(WesInput.rotationThrottle * -cameraRotateSpeed, Vector3.forward);

        if (!cameraFocused)
        {
            // Navigation
            // Translate position with keyboard input.
            targetPos += WesInput.forwardThrottle * transform.forward * cameraMoveSpeed * Time.deltaTime;
            targetPos += WesInput.horizontalThrottle * transform.right * cameraMoveSpeed * Time.deltaTime;
            targetPos += WesInput.verticalThrottle * transform.up * cameraMoveSpeed * Time.deltaTime;
        }


        // Auto-orbit
        targetRot = Quaternion.RotateTowards(targetRot, targetRot * autoOrbit, Time.deltaTime * 2.5f);


        if (Input.GetMouseButtonUp(0))
        {
            mouseClickedNode  = null;
            mouseReleasedNode = null;
        }

        dragLineRenderer.enabled = false;
        if (mouseClickedNode && lookedAtNode)
        {
            dragLineRenderer.SetPosition(0, mouseClickedNode.transform.position);
            dragLineRenderer.SetPosition(1, lookedAtNode.transform.position);

            if (mouseClickedNode.BondedTo(lookedAtNode))
            {
                dragLineRenderer.SetColors(Color.yellow, Color.red);
                dragLineRenderer.enabled = true;
            }
            else if ((mouseClickedNode.BondCount() < 3) && (lookedAtNode.BondCount() < 3))
            {
                dragLineRenderer.SetColors(Color.green, Color.white);
                dragLineRenderer.enabled = true;
            }
        }
    } // End of Update().
예제 #3
0
    // Use this for initialization
    void Update()
    {
        string command = "";

        string[] commandArgs = new string[0];

        if (!active)
        {
            consoleKeyCleared = false;
            if (WesInput.GetKeyDown("Open Console"))
            {
                active          = true;
                WesInput.active = false;
            }

            // Keyboard shortcuts
            if (WesInput.GetKeyDown("Disband Assembly"))
            {
                command = "disband";
            }

            if (WesInput.GetKeyDown("Add Node"))
            {
                command = "addnode";
            }

            if (WesInput.GetKeyDown("Remove Node"))
            {
                command = "remnode";
            }

            if (WesInput.GetKeyDown("Auto Orbit"))
            {
                command = "orbit";
            }

            if (WesInput.GetKeyDown("Quit"))
            {
                command = "quit";
            }

            if (WesInput.GetKeyDown("Reload Application"))
            {
                command = "reload";
            }

            if (WesInput.GetKeyDown("Replicate Assembly"))
            {
                command = "replicate";
            }
        }
        else if (active)
        {
            /*
             *
             * if(Input.GetKeyDown(KeyCode.Backspace) && (inputText.Length > 0))
             *  inputText = inputText.Substring(0, inputText.Length - 1);
             *
             * foreach(char aChar in Input.inputString){
             *      if(aChar != '\b'){
             *      inputText += aChar;
             *  }
             * }
             *
             * if(!consoleKeyCleared){
             *  inputText = "";
             *  consoleKeyCleared = true;
             * }
             */

            // Enter a line.
            Input.eatKeyPressOnTextFieldFocus = false;
            if (Input.GetKeyDown(KeyCode.Return))
            {
                if (inputText != "")
                {
                    commandArgs = inputText.Split(' ');
                    for (int i = 0; i < commandArgs.Length; i++)
                    {
                        commandArgs[i] = commandArgs[i].Trim();
                    }
                    command = commandArgs[0];
                }
                else
                {
                    // (If no command was entered, display no response.)
                    inputText       = "";
                    active          = false;
                    WesInput.active = true;
                }
            }
        }

        if (command != "")
        {
            // Console commands --------------------------------------------------------

            Node     selectedNode     = CameraControl.selectedNode;
            Assembly selectedAssembly = CameraControl.selectedAssembly;

            if (command == "load")
            {
                // Load an assembly (by index or name).
                string loadAssemblyName = "";
                int    loadAssemblyNum  = 0;

                DirectoryInfo dir       = new DirectoryInfo(IOHelper.defaultSaveDir);
                FileInfo[]    info      = dir.GetFiles("*.*");
                bool          foundFile = false;

                // Load assembly by index...
                if (int.TryParse(commandArgs[1], out loadAssemblyNum))
                {
                    NewLine("Attempting to load index " + loadAssemblyNum + "...");

                    for (int i = 0; i < info.Length; i++)
                    {
                        FileInfo currentFile     = info[i];
                        string   currentFileName = currentFile.Name;
                        int      currentFileNum  = int.Parse(currentFileName.Substring(0, 3));
                        if (currentFileNum == loadAssemblyNum)
                        {
                            new Assembly(IOHelper.defaultSaveDir + currentFileName);
                            NewLine("Done.");
                            foundFile = true;
                            break;
                        }
                    }
                    if (!foundFile)
                    {
                        NewLine("Assembly not found in " + IOHelper.defaultSaveDir + " at index " + loadAssemblyNum + ".");
                    }
                }
                // Load assembly by name...
                else if (commandArgs.Length > 0)
                {
                    loadAssemblyName = commandArgs[1];
                    NewLine("Attempting to load '" + loadAssemblyName + "'...");

                    for (int i = 0; i < info.Length; i++)
                    {
                        FileInfo currentFile     = info[i];
                        string   currentFileName = currentFile.Name;
                        if ((currentFileName.Length > (loadAssemblyName.Length + 4)) && currentFileName.Substring((currentFileName.Length - loadAssemblyName.Length) - 4, loadAssemblyName.Length) == loadAssemblyName)
                        {
                            new Assembly(IOHelper.defaultSaveDir + currentFileName);
                            NewLine("Done.");
                            foundFile = true;
                            break;
                        }
                    }
                    if (!foundFile)
                    {
                        NewLine("Assembly '" + loadAssemblyName + "' not found in " + IOHelper.defaultSaveDir + ".");
                    }
                }
                else
                {
                    NewLine("Enter a save index or Assembly name.");
                }
                Clear();
            }

            else if (command == "loaddir")
            {
                if (commandArgs.Length > 0)
                {
                    IOHelper.LoadDirectory(commandArgs[1]);
                }
                else
                {
                    NewLine("No directory path found");
                }
                Clear();
            }

            else if (command == "clear")
            {
                // Clear entire simulation
                GameManager.ClearAll();
                NewLine("Cleared the world.");
                Clear();
            }

            else if (command == "orbit")
            {
                // Enable/disable auto-orbiting.
                if (CameraControl.autoOrbit == Quaternion.identity)
                {
                    CameraControl.OrbitOn();
                    NewLine("Auto-orbit enabled.");
                }
                else
                {
                    CameraControl.OrbitOff();
                    NewLine("Auto-orbit disabled.");
                }
                Clear();
            }

            else if (command == "save")
            {
                // Save selected assembly...
                if (selectedAssembly != null)
                {
                    NewLine("Assembly saved to " + selectedAssembly.Save());
                }
                else
                {
                    NewLine("No assembly selected!");
                }
                Clear();
            }

            else if (command == "addnode")
            {
                // Other command...
                GameObject newNode    = Object.Instantiate(GameManager.prefabs.node, Camera.main.transform.position + (Camera.main.transform.forward * 3.0f), Quaternion.identity) as GameObject;
                Node       nodeScript = newNode.GetComponent <Node>();
                lines.Add("Created a new node.");
                if (selectedNode)
                {
                    if (selectedNode.bonds.Count < 3)
                    {
                        new Bond(CameraControl.selectedNode, nodeScript);
                    }
                }

                CameraControl.selectedNode = nodeScript;
                Clear();
            }
            else if (command == "mutate")
            {
                // Mutate the selected assembly...
                if (selectedAssembly != null)
                {
                    selectedAssembly.Mutate();
                    NewLine("Assembly " + selectedAssembly.name + " mutated!");
                }
                else
                {
                    NewLine("No assembly selected!");
                }
                Clear();
            }

            else if (command == "quit")
            {
                // Quit the game...
                Application.Quit();
                NewLine("Quitting...");
                Clear();
            }

            else if (command == "reload")
            {
                // Reload the game...
                Application.LoadLevel(0);
                NewLine("Reloading application...");
                Clear();
            }

            else if (command == "remnode")
            {
                if (selectedNode)
                {
                    selectedNode.Destroy();
                    lines.Add("Removed a node.");
                }
                else
                {
                    lines.Add("Select a node first!");
                }

                Clear();
            }

            else if (command == "disband")
            {
                if (selectedAssembly != null)
                {
                    lines.Add("Disbanded " + selectedAssembly.name + ".");
                    selectedAssembly.Disband();
                }
                else
                {
                    lines.Add("Select an assembly first!");
                }

                Clear();
            }

            else if (command == "rename")
            {
                if (selectedAssembly == null)
                {
                    lines.Add("Select an assembly first!");
                }
                else if ((commandArgs.Length < 2) || (commandArgs[1] == ""))
                {
                    lines.Add("Please enter a name for the assembly.");
                }
                else if (selectedAssembly != null)
                {
                    lines.Add("Renamed " + selectedAssembly.name + " to " + commandArgs[1] + ".");
                    selectedAssembly.name = commandArgs[1];
                }
                Clear();
            }

            else if (command == "controls")
            {
                foreach (KeyValuePair <string, KeyCode> item in WesInput.keys)
                {
                    lines.Add(item.Key + " [" + item.Value + "]");
                }
                Clear();
            }

            else if (command == "replicate")
            {
                if (selectedAssembly != null)
                {
                    lines.Add("Replicated " + selectedAssembly.name + ".");
                    selectedAssembly.Replicate();
                }
                else
                {
                    lines.Add("Select an assembly first!");
                }

                Clear();
            }

            else if (command == "other")
            {
                // Other command...
                // Other command code...
                Clear();
            }


            // More commands go here!

            else if (inputText != "")
            {
                // If command is not recognized, say so and do nothing.
                NewLine("Unknown command '" + command + "'");
                Clear();
            }
        }
    }