Ejemplo n.º 1
0
    public override ObstacleHit Hit(Vector3 hitPoint, Vector3 direction, Vector3 hitNormal)
    {
        ObstacleHit oHit = new ObstacleHit();

        oHit.freezeBall = true;
        LevelManager.Instance.KillBall();
        return(oHit);
    }
Ejemplo n.º 2
0
    public override ObstacleHit Hit(Vector3 hitPoint, Vector3 direction, Vector3 hitNormal)
    {
        ObstacleHit oHit = new ObstacleHit();

        oHit.newDirection = hitNormal;
        oHit.newPosition  = hitPoint;
        return(oHit);
    }
Ejemplo n.º 3
0
    /// <summary>
    /// The default function that will be called if the object the ball collided with doesn't have an obstacle script.
    /// </summary>
    /// <param name="hitPoint"></param>
    /// <param name="direction"></param>
    /// <returns></returns>
    ObstacleHit DefaultObstacleHit(Vector3 hitPoint, Vector3 direction, Vector3 hitNormal)
    {
        ObstacleHit oHit = new ObstacleHit();

        oHit.newDirection = Vector3.Reflect(direction, hitNormal);
        oHit.newPosition  = hitPoint;
        return(oHit);
    }
Ejemplo n.º 4
0
    public override ObstacleHit Hit(Vector3 hitPoint, Vector3 direction, Vector3 hitNormal)
    {
        ObstacleHit oHit = new ObstacleHit();

        oHit.newDirection = direction;
        Vector3 localHit = transform.InverseTransformPoint(hitPoint);

        oHit.newPosition = pairedPortal.TransformPoint(localHit) + oHit.newDirection * 0.1f;
        return(oHit);
    }
Ejemplo n.º 5
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Obstacle"))
        {
            ObstacleHit?.Invoke(other);
        }

        if (other.CompareTag("Coin"))
        {
            var coin = other.GetComponent <Coin>();
            CoinHit?.Invoke(coin.value);
            other.gameObject.SetActive(false);
            AudioManager.Instance.PlaySfx(coin.gem ? "Gem" : "Coin");
            FXManager.Instance.PlayFX(coin.gem ? "GemFX" : "CoinFX", coin.transform.position);
            FXManager.Instance.PlayFX("ValueFX", coin.transform.position + new Vector3(0, 0.2f, 0), $"+{coin.value}");
        }
    }
Ejemplo n.º 6
0
    /// <summary>
    /// Get the hit data when the line collides with any objects.
    /// </summary>
    /// <param name="collidedObstacle"></param>
    /// <param name="hitPoint"></param>
    /// <param name="direction"></param>
    /// <param name="hitNormal"></param>
    /// <returns></returns>
    ObstacleHit GetLineObstacleHit(Collider2D collidedObstacle, Vector3 hitPoint, Vector3 direction, Vector3 hitNormal)
    {
        Obstacle o = collidedObstacle.GetComponent <Obstacle>();

        if (o)
        {
            if (o.GetType() == typeof(OKiller) || o.GetType() == typeof(OPortal))
            {
                ObstacleHit oHit = new ObstacleHit();
                oHit.freezeBall = true;
                return(oHit);
            }
            return(o.Hit(hitPoint, direction, hitNormal));
        }
        else
        {
            return(DefaultObstacleHit(hitPoint, direction, hitNormal));
        }
    }
Ejemplo n.º 7
0
    void PathDrawing(Vector3 initialDirection)
    {
        List <Vector3> pathPoints   = new List <Vector3>();
        Collider2D     lastCollider = null;

        Vector3 curDirection      = initialDirection;
        Vector3 curOriginPos      = transform.position;
        float   remainingDistance = maxPathLength;

        int iterations = 0;

        while (remainingDistance > 0)
        {
            pathPoints.Add(curOriginPos);

            RaycastHit2D[] hits = Physics2D.CircleCastAll(curOriginPos, radius, curDirection, remainingDistance, lm);

            RaycastHit2D hit = new RaycastHit2D();
            for (int j = 0; j < hits.Length; j++)
            {
                if (hits[j].collider != lastCollider)
                {
                    hit = hits[j];
                    break;
                }
            }

            Collider2D hitCollider = hit.collider;
            //If this ray hit an object then save the new info to calculate the next line segment.
            if (hitCollider != null && hitCollider != lastCollider)
            {
                ObstacleHit oHit = GetLineObstacleHit(hitCollider, hit.centroid, curDirection, hit.normal);

                if (oHit.freezeBall == true)
                {
                    curOriginPos = hit.point;
                    pathPoints.Add(curOriginPos);
                    break;
                }

                curOriginPos = oHit.newPosition;
                curDirection = oHit.newDirection;

                lastCollider = hit.collider;

                remainingDistance -= hit.distance;
            }
            //If this ray didn't hit an object, then end the line here.
            else
            {
                //Add the last point (in air, since they ray didn't hit anything).
                pathPoints.Add(curOriginPos + curDirection * remainingDistance);
                remainingDistance = 0;
                break;
            }

            iterations++;
            if (iterations > 20)
            {
                Debug.Log("Too many iterations");
                break;
            }
        }

        //Draw the path
        int pointsCount = pathPoints.Count;

        pathLine.positionCount = pointsCount;
        pathLine.SetPositions(pathPoints.ToArray());
    }
Ejemplo n.º 8
0
    void Traveling()
    {
        lastPos = transform.position;

        transform.Translate(direction * speed * Time.deltaTime);

        //Debug.DrawLine(lastPos, transform.position);

        RaycastHit2D[] hits = Physics2D.CircleCastAll(lastPos, radius, direction, Vector3.Distance(lastPos, transform.position), lm);

        RaycastHit2D hit = new RaycastHit2D();

        for (int i = 0; i < hits.Length; i++)
        {
            if (hits[i].collider != ignoredCollider)
            {
                hit = hits[i];
                break;
            }
        }

        Collider2D hitCollider = hit.collider;

        if (hitCollider != null && hitCollider != ignoredCollider)
        {
            CheckPoint cp = hitCollider.GetComponent <CheckPoint>();

            if (cp != null)
            {
                PlaceOnCP(cp);

                //A check point was hit.
                LevelManager.Instance.CheckPointReached(cp);
            }
            else
            {
                ObstacleHit oHit = GetBallObstacleHit(hitCollider, hit.centroid, direction, hit.normal);

                if (!oHit.freezeBall)
                {
                    bool stuck = StuckCheck(oHit.newPosition);
                    lastHitPos = oHit.newPosition;

                    if (!stuck)
                    {
                        transform.position = oHit.newPosition;
                        Shoot(oHit.newDirection);
                    }

                    ignoredCollider = hitCollider;

                    PCamera.Instance.Shake(0.025f, 0.05f);
                    GameObject cPS = Instantiate(collisionPS);
                    cPS.transform.position = hit.point;
                    cPS.transform.forward  = hit.normal;
                }
                else
                {
                    traveling = false;
                }
            }
        }
    }
Ejemplo n.º 9
0
    public virtual ObstacleHit Hit(Vector3 hitPoint, Vector3 direction, Vector3 hitNormal)
    {
        ObstacleHit oHit = new ObstacleHit();

        return(oHit);
    }