// Determines if a particular object needs to be wrapped // returns an object array // [0] -> true or false, whether wrapped or not wrapped // [1] -> the wrapped vector public WrappedBoundaryData isOutsideBoundary(Vector2 checkVector, Vector2 displaceVector) { // [0] -> whether a wrap was detected true or false // [1] -> the wrapped vector WrappedBoundaryData boundaryData = new WrappedBoundaryData(); if (checkVector.y < camera.transform.position.y + (-WrapMaxSize - displaceVector.y)) { boundaryData.isWrapped = true; boundaryData.wrappedVector = new Vector2(checkVector.x, camera.transform.position.y + (WrapMaxSize - displaceVector.y)); } else if (checkVector.y > camera.transform.position.y + WrapMaxSize + displaceVector.y) { boundaryData.isWrapped = true; boundaryData.wrappedVector = new Vector2(checkVector.x, camera.transform.position.y + (-WrapMaxSize + displaceVector.y)); } else if (checkVector.x < -2 * WrapMaxSize - displaceVector.x) { boundaryData.isWrapped = true; boundaryData.wrappedVector = new Vector2(2 * WrapMaxSize + displaceVector.x, checkVector.y); } else if (checkVector.x > 2 * WrapMaxSize + displaceVector.x) { boundaryData.isWrapped = true; boundaryData.wrappedVector = new Vector2(-2 * WrapMaxSize - displaceVector.x, checkVector.y); } return(boundaryData); }
void OnPostRender() { /*Vector3 worldMouse = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0)); * Vector3 mouseDir = (worldMouse - PlayerObjects[0].transform.position); * mouseDir = new Vector3(mouseDir.x, mouseDir.y, 0); * mouseDir.Normalize(); * RaycastHit2D raycastInfo = Physics2D.Raycast(PlayerObjects[0].transform.position + (PlayerObjects[0].GetColliderExtents().magnitude * mouseDir), mouseDir, Mathf.Infinity, 1 << LayerMask.NameToLayer("GroundLayer"));*/ for (int i = 0; i < PlayerObjects.Length; i++) { WrappedBoundaryData playerBoundaryData = isOutsideBoundary(PlayerObjects[i].transform.position, PlayerObjects[i].GetColliderExtents()); if (PlayerObjects[i].ActiveGrapple && !playerBoundaryData.isWrapped) { RaycastHit2D raycastInfo = PlayerObjects[i].GetGrappleLocation(); GL.PushMatrix(); grappleMaterial.SetPass(0); GL.Begin(GL.LINES); GL.Color(grappleMaterial.color); GL.Vertex(PlayerObjects[i].transform.position); GL.Vertex(raycastInfo.point); GL.End(); GL.PopMatrix(); } } }
// Update is called once per frame void Update() { if (!PlayerShipObject.Dead()) { WrappedBoundaryData playerShipBoundaryData = isOutsideBoundary(PlayerShipObject.transform.position, PlayerShipObject.getColliderExtents()); this.transform.position = new Vector3(this.transform.position.x, PlayerShipObject.transform.position.y, this.transform.position.z); for (int i = 0; i < FollowCameraObjects.Length; i++) { FollowCameraObjects[i].position = new Vector3(FollowCameraObjects[i].position.x, this.transform.position.y, FollowCameraObjects[i].position.z); } if (playerShipBoundaryData.isWrapped) { // temporarily set parent of Player Objects to allow them to also wrap for (int i = 0; i < PlayerObjects.Length; i++) { PlayerObjects[i].transform.parent = PlayerShipObject.transform; } PlayerShipObject.transform.position = playerShipBoundaryData.wrappedVector; // wrap // reset Player Objects parent to null for (int i = 0; i < PlayerObjects.Length; i++) { PlayerObjects[i].transform.parent = null; } } totalTime += Time.deltaTime; } else { if (BackgroundFade.color.a < 1) { BackgroundFade.color = new Color(BackgroundFade.color.r, BackgroundFade.color.g, BackgroundFade.color.b, BackgroundFade.color.a + .25f * Time.deltaTime); if (BackgroundFade.color.a > 1) { BackgroundFade.color = new Color(BackgroundFade.color.r, BackgroundFade.color.g, BackgroundFade.color.b, 1); } } } TimeSpan t = TimeSpan.FromSeconds(totalTime); string formattedTime = string.Format("{0:D2}:{1:D2}", t.Minutes, t.Seconds); if (CurrentHealth < 0) { CurrentHealth = 0; } GameObject.Find("TotalTime_Text").GetComponent <GUIText>().text = formattedTime; GameObject.Find("MinesDestroyed_Text").GetComponent <GUIText>().text = Convert.ToString(minesDestroyed); GameObject.Find("Health_Text").GetComponent <GUIText>().text = Convert.ToString((((int)currentHealth / maxHealth) * 100)) + "%"; GameObject.Find("LeakCount_Text").GetComponent <GUIText>().text = Convert.ToString(PlayerShipObject.LeakCount); }
// Update is called once per frame void Update() { this.transform.rigidbody2D.AddForce(MissileMovePower * this.transform.up); // for MissileMethod.ChooseRandom if (closestSpineMine != null && ShootMethod == MissileMethod.ChooseRandom) { Vector3 newDir = closestSpineMine.transform.position - transform.position; float newRot = Mathf.Atan2(newDir.y, newDir.x) * Mathf.Rad2Deg; transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, 0, newRot - 90), Time.deltaTime); Debug.DrawLine(this.transform.position, closestSpineMine.transform.position, Color.red); } // ---- // for MissileMethod.GoTowardMouse if (ShootMethod == MissileMethod.GoTowardMouse) { Vector3 worldMousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector3 missileToWorldMouse = worldMousePos - transform.position; Vector3 newDir = missileToWorldMouse; float newRot = Mathf.Atan2(newDir.y, newDir.x) * Mathf.Rad2Deg; transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, 0, newRot - 90), Time.deltaTime); Debug.DrawLine(this.transform.position, worldMousePos, Color.red); } // ---- WrappedBoundaryData boundaryData = Camera.main.GetComponent <CameraBehavior>().isOutsideBoundary(this.transform.position, Vector2.zero); if (boundaryData.isWrapped) { transform.FindChild("TrailRenderer").parent = null; // remove trail renderer to allow for natural destroyal GameObject.Destroy(this.gameObject); } }