Beispiel #1
0
 void FixedUpdate()
 {
     if (body.Distance(playerCollider).distance > 10)
     {
         Destroy(this.gameObject);
     }
 }
    virtual public bool IsConnectedToOther()
    {
        // check if close to other player and they are on a pointer
        CircleCollider2D   otherCollider = otherPlayer.GetComponent <CircleCollider2D>();
        ColliderDistance2D distance      = rigidbody.Distance(otherCollider);

        return(distance.distance < otherCollider.radius);
    }
Beispiel #3
0
    private bool IsGrounded()
    {
        // Would normally use this, however the rotations around objects make "touching"
        // difficult to trigger. Instead we use a proximity based approach.
        // return rigidbody2D.IsTouchingLayers(WhatIsGround);

        return(GameObject.FindGameObjectsWithTag(GroundTag)
               .Where(w => rigidbody2D.Distance(w.GetComponent <Collider2D>()).distance <= GroundProximity)
               .Any());
    }
Beispiel #4
0
 void OnCollisionEnter2D(Collision2D other)
 {
     if (other.gameObject.GetComponent <BlockController>())
     {
         if (rb.Distance(other.collider).isOverlapped)
         {
             overlapOtherbox = true;
         }
     }
 }
Beispiel #5
0
    private void FixedUpdate()
    {
        Vector2 offset = KinematicMath2D.Integrate(ref State, ref Config, Time.deltaTime);

        RaycastHit2D closestHit;

        if (Body.IsCastOverlapping(SolidMask, offset, out closestHit))
        {
            float distance = closestHit.distance;

            Debug.LogFormat("colliding with floor {0} {1}", closestHit.normal, closestHit.distance);
            offset.Normalize();
            offset.x      *= distance;
            offset.y      *= distance;
            State.Velocity = Vector2.Reflect(State.Velocity, closestHit.normal) * BounceFactor;
        }

        Body.position += offset;

        Collider2D penetrating;
        int        ticks = 16;

        while (Body.IsOverlapping(SolidMask, out penetrating) && ticks-- > 0)
        {
            var distance = Body.Distance(penetrating);
            if (distance.distance < 0)
            {
                Vector2 vec  = distance.normal;
                float   dist = distance.distance;
                Body.position += new Vector2(vec.x * dist, vec.y * dist);
                Debug.LogFormat("Repositioning on {0} by {1}", vec, dist);
            }
            else
            {
                break;
            }
        }

        transform.position = Body.position;

        if (Body.IsOverlapping(SolidMask, new Vector2(0, -FloorDistance)))
        {
            State.GravityMultiplier = 0;
            if (State.Velocity.y < 0.05f)
            {
                State.Velocity.y = 0;
            }
        }
        else
        {
            State.GravityMultiplier = 1;
        }
    }
    void Update()
    {
        //colliderDistance2D=Physics2D.Distance (colliderA: firstCollider, colliderB: secondCollider);

        //colliderDistance2D = firstCollider.Distance(collider: secondCollider);

        colliderDistance2D = myRigidbody2D.Distance(collider: secondCollider);

        normal      = GizmosForVector.Round(colliderDistance2D.normal, 2);
        isValid     = colliderDistance2D.isValid;
        isOverlaped = colliderDistance2D.isOverlapped;
        pointA      = GizmosForVector.Round(colliderDistance2D.pointA, 2);
        pointB      = GizmosForVector.Round(colliderDistance2D.pointB, 2);
    }
Beispiel #7
0
    public void FixedUpdate()
    {
        var myRigidBody      = GetComponent <Rigidbody2D>();
        var myCircleCollider = GetComponent <CircleCollider2D>();
        var myRadius         = myCircleCollider.radius;
        var rigidBodies      = GameObject.FindObjectsOfType <Rigidbody2D>();
        var gravity          = Vector2.zero;


        Rigidbody2D closestRigidBody = null;

        foreach (var body in rigidBodies)
        {
            if (body.gameObject != gameObject && (closestRigidBody == null || body.Distance(myCircleCollider).distance < closestRigidBody.Distance(myCircleCollider).distance))
            {
                closestRigidBody = body;
            }
        }

        if (closestRigidBody != null)
        {
            Vector2 diff = closestRigidBody.worldCenterOfMass - myRigidBody.worldCenterOfMass;
            float   distanceCenterOfMass = diff.magnitude;
            var     bodyRadius           = 10.0f;
            float   distance             = closestRigidBody.Distance(myCircleCollider).distance;
            var     force = Mathf.Pow(bodyRadius / (bodyRadius + distance), 2);
            gravity += diff.normalized * force * myRigidBody.gravityScale;
        }
        closestPlanet = closestRigidBody == null ? null : closestRigidBody.gameObject;

        myRigidBody.AddForceAtPosition(gravity, myRigidBody.worldCenterOfMass, ForceMode2D.Impulse);

        if (collisions.Count == 0)
        {
            inAirTime += Time.fixedDeltaTime;
        }
        else
        {
            inAirTime = Mathf.Max(0.0f, Mathf.Min(inAirTime, 3.0f) - Time.fixedDeltaTime * 10.0f);
        }

        //myRigidBody.AddForceAtPosition(myRigidBody.velocity * -0.01f, myRigidBody.worldCenterOfMass, ForceMode2D.Impulse);
    }
Beispiel #8
0
        void CreatBullet()
        {
            if (Physics2D.Raycast(bulletPosition, toPlayerVector2, m_rigidbody2D.Distance(playerCollider).distance, platformLayerMask))
            {
                return;
            }

            float      _degrees = Vector2.Angle(toPlayerVector2, toPlayerVector2.x > 0 ? Vector2.right : Vector2.left);
            Quaternion _dir     = Quaternion.Euler(0, transform.rotation.eulerAngles.y, _degrees);
            var        bullet   = Instantiate(BulletPrefab, (Vector3)bulletPosition, _dir).GetComponent <Rigidbody2D>();
            var        hitCheck = bullet.gameObject.GetComponent <HitCheck>();

            hitCheck.damage = damage_Bullet;
            hitCheck.targetTag.Add("Player");
            hitCheck.targetTag.Add("Platform");

            Vector2 bulletVelocity = toPlayerVector2.normalized * bulletSpeed;

            bullet.velocity = bulletVelocity;
            Destroy(bullet.gameObject, 10f);

            preShootTime = Time.time;
        }
Beispiel #9
0
        void FindPlayer()
        {
            float _playerDistance = (playerCollider.transform.position - transform.position).magnitude;

            bulletPosition = m_BulletPosition.position;

            if (findPlayer && _playerDistance <= spiderInfo.findRadius * 2)
            {
                findPlayer = true;
            }
            else if (_playerDistance <= spiderInfo.findRadius && !Physics2D.Raycast(bulletPosition, toPlayerVector2, m_rigidbody2D.Distance(playerCollider).distance, platformLayerMask))
            {
                findPlayer = true;
            }
            else
            {
                findPlayer = false;
            }
            //Debug.DrawRay(bulletPosition, toPlayerVector2 * m_rigidbody2D.Distance(playerCollider).distance);
            if (stop)
            {
                findPlayer = false;
            }

            if (!findPlayer)
            {
                m_Animator.SetBool("Walk", false);
            }
        }
Beispiel #10
0
 /// <summary>
 /// Returns if two objects are touching now.
 /// </summary>
 static public bool IsTouchingNow(this Rigidbody2D inRigidbody, Collider2D inCheck)
 {
     return(inRigidbody.Distance(inCheck).distance <= 0);
 }
Beispiel #11
0
 /// <summary>
 /// Returns if two objects are overlapping .
 /// </summary>
 static public bool IsOverlapping(this Rigidbody2D inRigidbody, Collider2D inCheck)
 {
     return(inRigidbody.Distance(inCheck).isOverlapped);
 }