示例#1
0
    public List <IRayCollider> HandleCollision(List <IRayCollider> collidersToSkip)
    {
        List <IRayCollider> collidedWith = new List <IRayCollider>();
        Vector2             direction    = currentPosition - LastFrameCenterPoint;
        float distanceForRay             = direction.magnitude;

        RaycastHit2D  rayHit  = rayHits[0];
        CollisionSide colSide = CollisionSide.Bottom;

        if (rayHit.collider.CompareTag(GameTags.Ball))
        {
            //BallBase ballBase = rayHit.collider.GetComponent<BallBase>();

            //colSide = CollisionSideDetect.GetCollisionSide(rayHit.centroid, rayHit.point);
            //OnCollisionWithBall(ballBase, rayHit, colSide, direction, out distanceForRay);
        }
        else if (rayHit.collider.CompareTag(GameTags.Ship))
        {
            ShipCollider ship = rayHit.collider.GetComponent <ShipCollider>();
            Debug.LogWarningFormat("ray for another ship hit");
            //colSide = ship.GetCollisionSideWithBall(this, LastFrameCenterPoint);
            // OnCollision(this, rayHit, colSide, CollisionType.Ship, PhysicsConstants.BallSpeedAfterShipHit, safe, out distanceForRay);
        }

        Debug.LogWarningFormat("Ship collision with {0} on side {1}", rayHit.collider.gameObject.name, colSide);
        return(collidedWith);
    }
示例#2
0
 private void OnCollisionWithShip(ShipCollider shipCollider)
 {
     if (shipCollider != null)
     {
         Destroy(gameObject);
         shipCollider.OnCollision();
     }
 }
示例#3
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.CompareTag(GameTags.Ship))
     {
         ShipCollider shipCollider = other.GetComponent <ShipCollider>();
         OnCollisionWithShip(shipCollider);
     }
 }
示例#4
0
 private bool RaycastForShipToLastFramePosition()
 {
     Debug.DrawLine(transform.position, lastFramePos, Color.red, 0.1f);
     rayHit = Physics2D.Raycast(transform.position, transform.position - lastFramePos, (transform.position - lastFramePos).magnitude, LayerConstants.Ship);
     if (rayHit.collider != null)
     {
         ShipCollider shipCollider = rayHit.collider.GetComponent <ShipCollider>();
         OnCollisionWithShip(shipCollider);
         return(true);
     }
     return(false);
 }
示例#5
0
    void IConvertGameObjectToEntity.Convert(Entity entity, EntityManager entityManager, GameObjectConversionSystem gameObjectConversionSystem)
    {
        if (transform.parent == null)
        {
            Debug.LogError("Parent is not assigned", this);
        }

        ShipCollider shipCollider = transform.parent.GetComponent <ShipCollider>();

        if (shipCollider == null)
        {
            Debug.LogError("Parent ShipCollider is not present", this);
        }

        shipCollider.Register(entity, entityManager);
    }
示例#6
0
    public List <IRayCollider> HandleCollision(List <IRayCollider> collidersToSkip)
    {
        if (skipOneFrameFromCollisionSystem)
        {
            return(new List <IRayCollider>());
        }
        List <IRayCollider> collidedWith = new List <IRayCollider>();

        Vector2 direction      = currentCenterPoint - LastFrameCenterPoint;
        float   distanceForRay = direction.magnitude;
        float   radius         = Collider.radius / 2;

        int safe = 0;

        while (rayHits.Length > 0 && distanceForRay > 0)
        {
            rayHits.SortByLength();
            if (rayHits.Length > 1)
            {
                for (int i = 0; i < rayHits.Length; i++)
                {
                    //Debug.LogWarningFormat("[{0}] point: {1} centroid: {2} length: {3}", i, rayHits[i].point, rayHits[i].centroid, rayHits[i].distance);
                }
            }
            RaycastHit2D  rayHit  = rayHits[0];
            CollisionSide colSide = CollisionSide.Bottom;
            if (rayHit.collider.CompareTag(GameTags.Frame))
            {
                FrameCollider frameCollider = rayHit.collider.GetComponent <FrameCollider>();
                IRayCollider  col           = frameCollider as IRayCollider;
                if (!collidersToSkip.Contains(col))
                {
                    if (frameCollider.DestroyBallAndProjectiles)
                    {
                        GameController.Instance.RemoveBallFromPlay(this);
                    }
                    else
                    {
                        colSide = frameCollider.CollisionSide;
                        OnCollision(this, rayHit, colSide, CollisionType.Frame, defaultToTotalDistance, LastFrameVelocity.magnitude, safe, frameCollider, out distanceForRay);
                    }

                    if (!collidedWith.Contains(col))
                    {
                        collidedWith.Add(col);
                    }
                }
            }
            else if (rayHit.collider.CompareTag(GameTags.Enemy))
            {
                // Debug.DrawLine(currentCenterPoint, LastFrameCenterPoint, Color.green, 2);
                EnemyBase    enemy = rayHit.collider.GetComponent <EnemyBase>();
                IRayCollider col   = enemy as IRayCollider;

                if (!collidersToSkip.Contains(col))
                {
                    colSide = CollisionSideDetect.GetCollisionSide(rayHit.centroid, rayHit.point);
                    OnCollision(this, rayHit, colSide, CollisionType.Enemy, defaultToTotalDistance, PhysicsConstants.BallSpeedAfterEnemyHit, safe, enemy, out distanceForRay);
                    enemy.OnCollisionWithBall(this);
                    if (!collidedWith.Contains(col))
                    {
                        collidedWith.Add(col);
                    }
                }
            }
            else if (rayHit.collider.CompareTag(GameTags.Ship))
            {
                ShipCollider ship = rayHit.collider.GetComponent <ShipCollider>();
                IRayCollider col  = ship as IRayCollider;
                if (!collidersToSkip.Contains(col))
                {
                    colSide = ship.GetCollisionSideWithBall(this, LastFrameCenterPoint);
                    OnCollision(this, rayHit, colSide, CollisionType.Ship, defaultToTotalDistance, PhysicsConstants.BallSpeedAfterShipHit, safe, ship, out distanceForRay);
                }

                if (!collidedWith.Contains(col))
                {
                    collidedWith.Add(col);
                }
            }
            else if (rayHit.collider.CompareTag(GameTags.Striker))
            {
                Striker      striker = rayHit.collider.GetComponent <Striker>();
                IRayCollider col     = striker as IRayCollider;
                if (!collidersToSkip.Contains(col))
                {
                    colSide = striker.GetCollisionSideWithBall(LastFrameCenterPoint);
                    OnCollision(this, rayHit, colSide, striker.CollisionType, defaultToTotalDistance, striker.GetForceOnBallHit(this, colSide).magnitude, safe, striker, out distanceForRay);
                }

                if (!collidedWith.Contains(col))
                {
                    collidedWith.Add(col);
                }
            }

            //Debug.LogFormat("{0} collision with {1} on side {2}", safe, rayHit.collider.gameObject.name, colSide);

            safe++;
        }

        return(collidedWith);
    }
示例#7
0
 private void Awake()
 {
     rndr = GetComponent <SpriteRenderer>();
     scs  = GetComponent <ShipCollider>();
 }