Ejemplo n.º 1
0
    RaycastHit2D wallContact(bool right)
    {
        float xOffset = (walkCollider.bounds.extents.x + walkCollider.edgeRadius) + .1f;

        return(PhysicsHelper2D.visibleRaycast((Vector2)transform.position + new Vector2((right ? xOffset : -xOffset), .1f),
                                              Vector2.up, (walkCollider.bounds.extents.y + walkCollider.edgeRadius) * 1.8f, walkMask));
    }
Ejemplo n.º 2
0
    static public void ComplexSlice(Slice2D slice, float forceAmount)
    {
        foreach (GameObject gameObject in slice.GetGameObjects())
        {
            Rigidbody2D rigidBody2D = gameObject.GetComponent <Rigidbody2D> ();

            List <Vector2D> collisions = slice.GetCollisions();

            if (rigidBody2D)
            {
                float forceVal = 2.0f / collisions.Count;

                Vector2 force = new Vector2();
                float   sliceRotation;
                Vector2 centerPos = new Vector2();

                for (int i = 0; i < collisions.Count - 1; i++)
                {
                    pair.A = collisions[i];
                    pair.B = collisions[i + 1];

                    sliceRotation = (float)Vector2D.Atan2(pair.B, pair.A);

                    force.x = Mathf.Cos(sliceRotation) * forceAmount;
                    force.y = Mathf.Sin(sliceRotation) * forceAmount;

                    centerPos.x = (float)(pair.A.x + pair.B.x) / 2f;
                    centerPos.y = (float)(pair.A.y + pair.B.y) / 2f;

                    PhysicsHelper2D.AddForceAtPosition(rigidBody2D, forceVal * force, centerPos);
                }
            }
        }
    }
Ejemplo n.º 3
0
    public RaycastHit2D isGrounded()
    {
        float dist = (walkCollider.bounds.extents.x * 2f) - .15f;

        return(PhysicsHelper2D.visibleRaycast((Vector2)transform.position + new Vector2(-walkCollider.bounds.extents.x + .075f, -walkCollider.edgeRadius - .025f),
                                              Vector2.right, dist, walkMask));
    }
Ejemplo n.º 4
0
        private void LinearSlice(Pair2D slice)
        {
            List <Slice2D> results = Slicer2D.LinearSliceAll(slice, null);

            if (addForce == false)
            {
                return;
            }

            // Adding Physics Forces
            float sliceRotation = (float)Vector2D.Atan2(slice.B, slice.A);

            foreach (Slice2D id in results)
            {
                foreach (GameObject gameObject in id.GetGameObjects())
                {
                    Rigidbody2D rigidBody2D = gameObject.GetComponent <Rigidbody2D> ();
                    if (rigidBody2D == null)
                    {
                        continue;
                    }
                    foreach (Vector2D p in id.GetCollisions())
                    {
                        PhysicsHelper2D.AddForceAtPosition(rigidBody2D, new Vector2(Mathf.Cos(sliceRotation) * addForceAmount, Mathf.Sin(sliceRotation) * addForceAmount), p.ToVector2());
                    }
                }
            }
        }
Ejemplo n.º 5
0
    bool isColliderUnderUmbrella(BoxCollider2D collider)
    {
        float colliderHalfWidth = collider.bounds.extents.x;
        float yOffset           = 3.75f;
        var   hit = PhysicsHelper2D.visibleRaycast((Vector2)(new Vector3(collider.transform.position.x - colliderHalfWidth, yOffset, 0f)),
                                                   Vector2.right, colliderHalfWidth * 2f);

        return(hit && hit.collider.name.Equals("UmbrellaShadow"));
    }
Ejemplo n.º 6
0
 static public void ExplodeInPoint(Slice2D slice, float forceAmount, Vector2D point)
 {
     foreach (GameObject gameObject in slice.GetGameObjects())
     {
         Rigidbody2D rigidBody2D = gameObject.GetComponent <Rigidbody2D> ();
         if (rigidBody2D)
         {
             float sliceRotation = (float)Vector2D.Atan2(point, new Vector2D(gameObject.transform.position));
             Rect  rect          = Polygon2DList.CreateFromGameObject(gameObject)[0].GetBounds();
             PhysicsHelper2D.AddForceAtPosition(rigidBody2D, new Vector2(Mathf.Cos(sliceRotation) * forceAmount, Mathf.Sin(sliceRotation) * forceAmount), rect.center);
         }
     }
 }
Ejemplo n.º 7
0
    static public void LinearTrail(Slice2D slice, float forceAmount)
    {
        foreach (GameObject gameObject in slice.GetGameObjects())
        {
            Rigidbody2D rigidBody2D = gameObject.GetComponent <Rigidbody2D> ();
            if (rigidBody2D)
            {
                float sliceRotation = (float)Vector2D.Atan2(slice.slice[0], slice.slice[1]);

                List <Vector2D> collisions = slice.GetCollisions();

                foreach (Vector2D p in collisions)
                {
                    Vector2 force = new Vector2(Mathf.Cos(sliceRotation) * forceAmount, Mathf.Sin(sliceRotation) * forceAmount);
                    PhysicsHelper2D.AddForceAtPosition(rigidBody2D, force, p.ToVector2());
                }
            }
        }
    }
Ejemplo n.º 8
0
    static public void ComplexTrail(Slice2D slice, float forceAmount)
    {
        Rigidbody2D rigidBody2D;
        Vector2D    vec;
        float       sliceRotation;
        float       forceVal;
        Vector2     vecSum = Vector2.zero;

        for (int i = 0; i < slice.GetGameObjects().Count; i++)
        {
            rigidBody2D = slice.GetGameObjects()[i].GetComponent <Rigidbody2D> ();
            if (rigidBody2D)
            {
                List <Vector2D> collisions = slice.GetCollisions();

                forceVal = 2.0f / collisions.Count;
                for (int x = 0; x < collisions.Count; x++)
                {
                    vec = collisions[x];

                    pair.A = vec;

                    if (pair.A != null && pair.B != null)
                    {
                        sliceRotation = (float)Vector2D.Atan2(pair.A, pair.B);

                        force.x = Mathf.Cos(sliceRotation) * forceAmount;
                        force.y = Mathf.Sin(sliceRotation) * forceAmount;

                        vecSum.x = (float)(pair.A.x + pair.B.x) / 2f;
                        vecSum.y = (float)(pair.A.y + pair.B.y) / 2f;

                        PhysicsHelper2D.AddForceAtPosition(rigidBody2D, forceVal * force, vecSum);
                    }

                    pair.B = pair.A;
                }
            }
        }
    }
Ejemplo n.º 9
0
    void updatePlatforming()
    {
        int direction = 0;

        if (hasControl)
        {
            if (Input.GetKey(KeyCode.LeftArrow) && !wallContact(false))
            {
                direction -= 1;
            }
            if (Input.GetKey(KeyCode.RightArrow) && !wallContact(true))
            {
                direction += 1;
            }
        }
        else //if ((forceDirection == 1 && !wallContact(true)) || (forceDirection == -1 && !wallContact(false)))
        {
            direction = forceDirection;
        }

        RaycastHit2D groundHit = isGrounded();
        bool         grounded  = groundHit; // && _rigidBody2D.velocity.y <= 0f;

        if (grounded)
        {
            //Snap to ground y when landing
            if (_rigidBody2D.velocity.y < 0f &&
                transform.position.y < groundHit.transform.position.y &&
                transform.position.y >= groundHit.transform.position.y - maxLandSnapHeight)
            {
                //float snapY = groundHit.transform.position.y + (groundHit.collider.bounds.extents.y);
                transform.position    = new Vector3(transform.position.x, groundHit.transform.position.y, transform.position.z);
                _rigidBody2D.velocity = new Vector2(_rigidBody2D.velocity.x, 0f);
            }

            //Attach to moving objects
            if (groundHit.transform.name.Contains("Moving"))
            {
                transform.parent = groundHit.transform;
            }
            else
            {
                transform.parent = startParent;
            }

            //Jump
            if (hasControl && Input.GetKeyDown(KeyCode.Space))
            {
                _rigidBody2D.velocity = new Vector2(_rigidBody2D.velocity.x, jumpSpeed);
                grounded         = false;
                transform.parent = startParent;
            }
        }
        else
        {
            transform.parent = startParent;
        }

        int actualDirection = _rigidBody2D.velocity.x == 0 ? 0 : (int)Mathf.Sign(_rigidBody2D.velocity.x);

        if (actualDirection == 0 && direction != 0)
        {
            actualDirection = direction;
        }

        updateSpinner((direction == 0 || (direction != 0 && actualDirection != direction)) ? 0 : actualDirection);

        updateWalkSpeed(direction, grounded);
        updateAnimatorValues(direction, grounded);

        //Bounds stuff
        if (direction == 0)
        {
            RaycastHit2D leftWallHit = wallContact(false);
            if (leftWallHit && leftWallHit.collider.transform.parent == boundsParent)
            {
                if (leftWallHit && wallContact(true))
                {
                    float dist = (walkCollider.bounds.extents.x * 2f) - .15f;
                    if (PhysicsHelper2D.visibleRaycast((Vector2)transform.position + new Vector2(-walkCollider.bounds.extents.x + .075f, walkCollider.bounds.extents.y),
                                                       Vector2.right, dist, walkMask))
                    {
                        kill(true);
                    }
                }
                else if (grounded && PaperThiefCamera.instance.getCurrentShiftSpeed() > 1f)
                {
                    actualDirection = direction = 1;
                    updateSpinner(1);
                    rigAnimator.SetBool("Walking", true);
                    rigAnimator.SetFloat("WalkSpeed", 1f);
                }
            }
        }

        if (hasControl && transform.position.x >= cucumberTransform.position.x - 1f)
        {
            PaperThiefController.instance.startScene(PaperThiefController.Scene.CucumberSteal);
            if (_rigidBody2D.velocity.y > 0f)
            {
                _rigidBody2D.velocity = new Vector2(_rigidBody2D.velocity.x, 0f);
            }
        }
        else if (PaperThiefMarisa.defeated && transform.position.x >= victoryTransform.position.x - .5f)
        {
            forceDirection = 0;
            PaperThiefController.instance.startScene(PaperThiefController.Scene.Victory);
            MicrogameController.instance.setVictory(true, true);
        }
    }