private void FixedUpdate() { if (possibleConnectPoints.Count > 0) { closestConnectTransform = GetClosest(possibleConnectPoints); //Require rotation to be matched with connecting part float thisAngle = transform.rotation.eulerAngles.z; float thatAngle = closestConnectTransform.rotation.eulerAngles.z; float deltaAngle = Mathf.Abs(Mathf.DeltaAngle(thisAngle, thatAngle)); //Control visual display of connect points if (!connected && canConnect) { if (Vector2.Distance(connectPoint.transform.position, closestConnectTransform.position) > displayConnectPointDistance) { if (connectPoint.GetComponent <Light2D>().enabled) { connectPoint.GetComponent <Light2D>().enabled = false; } if (closestConnectTransform.GetComponent <Light2D>().enabled) { closestConnectTransform.GetComponent <Light2D>().enabled = false; } } else { if (!connectPoint.GetComponent <Light2D>().enabled) { connectPoint.GetComponent <Light2D>().enabled = true; } if (!closestConnectTransform.GetComponent <Light2D>().enabled) { closestConnectTransform.GetComponent <Light2D>().enabled = true; } } } //connect if conditions are met if (canConnect && Vector2.Distance(connectPoint.transform.position, closestConnectTransform.position) < 0.6f && deltaAngle < 60f) { if (!isConnected) { Connect(); connectPoint.GetComponent <Light2D>().enabled = false; closestConnectTransform.GetComponent <Light2D>().enabled = false; } } } if (isConnected) { if (connected.transform.localPosition != connectedScript.offset) { connected.transform.localPosition = connectedScript.offset; } if (connected.transform.localRotation != quaternion.identity) { connected.transform.localRotation = quaternion.identity; } inputs["W"] = Input.GetKey(KeyCode.W); inputs["A"] = Input.GetKey(KeyCode.A); inputs["S"] = Input.GetKey(KeyCode.S); inputs["D"] = Input.GetKey(KeyCode.D); inputs["RIGHT"] = Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.E); inputs["LEFT"] = Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.Q); inputs["UP"] = Input.GetKey(KeyCode.UpArrow); inputs["DOWN"] = Input.GetKey(KeyCode.DownArrow); connectedScript.Control(inputs); } else { //main engine if (Input.GetKey(KeyCode.W)) { mts.Fire(mainSpeed); } //strafe left if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) { frr.Fire(thrusterPower / 1.75f); brr.Fire(thrusterPower); } //strafe right if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) { fll.Fire(thrusterPower / 1.75f); bll.Fire(thrusterPower); } //forward thruster if (Input.GetKey(KeyCode.UpArrow)) { bld.Fire(thrusterPower); brd.Fire(thrusterPower); } //backwards truster if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S)) { flu.Fire(thrusterPower); fru.Fire(thrusterPower); } //turn left if (Input.GetKey(KeyCode.Q)) { frr.Fire(thrusterPower); bll.Fire(thrusterPower); } //turn right if (Input.GetKey(KeyCode.E)) { fll.Fire(thrusterPower); brr.Fire(thrusterPower); } } }