void BounceBall(BallBehaviour ball)
    {
        Ray        bumperRay = new Ray(ball.transform.position + Vector3.forward * GameplayConstants.ballRadius * 0.8f, ball.forward);
        RaycastHit hit;

        if (Physics.Raycast(bumperRay, out hit, GameplayConstants.tileEdgeSize / 2.1f))
        {
            BumperBehaviour bumper = hit.collider.GetComponent <BumperBehaviour>();
            if (bumper)
            {
                ball.forward = bumper.GetBounceDirection(ball.forward);

                if (!bumper.isLockedByRule)
                {
                    bumper.raiseBehaviour.Lower();
                }
            }
        }
    }
Exemple #2
0
    // Use this for initialization
    public void Initialize()
    {
        isInitialized = true;

        if (meshTransform)
        {
            meshTransform.localScale = new Vector3(1.0f, 1.0f, 1.0f) * GameplayConstants.tileEdgeSize;
        }

        bool gridRotate = false;

        switch (tileType)
        {
        case TileType.Custom:
            break;

        case TileType.Clear:
            break;

        case TileType.BumpersDefault:
            bumpers.Add(Instantiate(bumperPrefab, transform.position + Vector3.back * GameplayConstants.ballRadius / 10, Quaternion.identity, transform));
            bumpers.Add(Instantiate(bumperPrefab, transform.position + Vector3.back * GameplayConstants.ballRadius / 10, Quaternion.Euler(0.0f, 0.0f, 180.0f), transform));

            gridRotate = true;

            break;

        case TileType.Vault:
            Instantiate(vaultPrefab, transform.position + Vector3.back * GameplayConstants.ballRadius, Quaternion.Euler(0.0f, 0.0f, subObjectAngle), transform);
            break;

        case TileType.FixedBumper:
        case TileType.FixedBumperClear:
            BumperBehaviour fixedBumper = Instantiate(bumperPrefab, transform.position + Vector3.back * GameplayConstants.ballRadius / 10, Quaternion.Euler(0.0f, 0.0f, subObjectAngle), transform);
            fixedBumper.raiseBehaviour.isRaised = true;
            fixedBumper.isLockedByRule          = true;
            bumpers.Add(fixedBumper);

            if (tileType == TileType.FixedBumper)
            {
                bumpers.Add(Instantiate(bumperPrefab, transform.position + Vector3.back * GameplayConstants.ballRadius / 10, Quaternion.Euler(0.0f, 0.0f, subObjectAngle + 180.0f), transform));
            }
            gridRotate = true;

            break;


        case TileType.BumperSingle:
            bumpers.Add(Instantiate(bumperPrefab, transform.position + Vector3.back * GameplayConstants.ballRadius / 10, Quaternion.Euler(0.0f, 0.0f, subObjectAngle), transform));

            break;


        case TileType.Block:
            Instantiate(blockPrefab, transform.position + Vector3.back * GameplayConstants.ballRadius, Quaternion.identity, transform);
            break;


        case TileType.LockRed:
            subObjects.Add(Instantiate(lockRedPrefab, transform.position + Vector3.back * GameplayConstants.ballRadius / 10, Quaternion.identity, transform).transform);
            break;

        case TileType.LockBlue:
            subObjects.Add(Instantiate(lockBluePrefab, transform.position + Vector3.back * GameplayConstants.ballRadius / 10, Quaternion.identity, transform).transform);
            break;

        default:
            Debug.LogError("Unexpected TileType found in TileBehaviour.Start()");
            break;
        }

        if (gridRotate)
        {
            if ((gridPoint.x + gridPoint.y) % 2 == 1)
            {
                transform.Rotate(0.0f, 0.0f, 90.0f);
            }
        }

        if (pickupPrefab)
        {
            pickup = Instantiate(pickupPrefab, transform.position + Vector3.back * GameplayConstants.ballRadius, Quaternion.identity, transform);
        }
    }