示例#1
0
    // 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);
    }
示例#2
0
    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();
            }
        }
    }
示例#3
0
    // 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);
    }
示例#4
0
    // 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);
        }
    }