public void ClearGrid()
    {
        for (int y = 0; y < gridHeight; y++)
        {
            for (int x = 0; x < gridWidth; x++)
            {
                Transform t = grid[x, y];

                if (t != null)
                {
                    V3Mino mino = t.gameObject.GetComponent <V3Mino>();
                    mino.GetDestroyed();
                }
            }
        }
    }
    // geeft minos aan tetromino
    public void GetNewShape(V3Tetromino tetromino)
    {
        // kiest willekeurig blok
        Shape s = GetRandomShape();

        // haalt 4 minos uit de pool
        for (int i = 0; i < s.minoPositions.Length; i++)
        {
            GameObject gm   = null;
            V3Mino     mino = null;

            bool idleAvailable = poolManager.IdleObjectAvailable();
            bool busyAvailable = poolManager.BusyObjectAvailable();

            // pak een idle object uit de pool als er een beschikbaar is
            if (idleAvailable)
            {
                gm   = poolManager.GetIdleObject();
                mino = gm.GetComponent <V3Mino>();
            }

            // pak een busy object uit de pool als er een beschikbaar is
            else if (busyAvailable)
            {
                gm   = poolManager.GetBusyObject();
                mino = gm.GetComponent <V3Mino>();

                // zet de positie in het grid op null als hij er aan een toegewezen is
                mino.RemoveFromGrid();
            }

            // als het gelukt is om een object uit de pool te halen
            if (gm != null)
            {
                mino.tetromino = tetromino;
                mino.hp        = Random.Range(1, 3);

                gm.transform.SetParent(tetromino.transform);
                gm.transform.localPosition = s.minoPositions[i];
                gm.GetComponent <SpriteRenderer>().sprite = s.minoSprite;
                // maak het object pas zichtbaar als alle wijzigingen erop zijn toegepast
                gm.SetActive(true);
            }
        }
    }
Exemple #3
0
    private void FixedUpdate()
    {
        if (!V3Controller.Instance.CheckInsideField(transform.position))
        {
            Respawn();
        }

        if (positionHistory.Count > 200)
        {
            positionHistory.RemoveFirst();
        }

        transform.position += (Vector3)moveDir * moveSpeed * Time.deltaTime;
        RaycastHit2D hit = MyRaycast();

        Debug.DrawRay(transform.position, moveDir * radius, Color.red);
        Debug.Assert(hit.collider != this);

        if (hit.collider == null)
        {
            positionHistory.AddLast(transform.position);
            return;
        }

        Wall   wall = hit.transform.GetComponent <Wall>();
        V3Mino mino = hit.transform.GetComponent <V3Mino>();

        if (wall != null)
        {
            player.IncreasePlayerScore(player.otherPlayer, 10);
            wall.Deactivate();
        }

        else if (mino != null)
        {
            mino.Hit();
        }

        // hij knalt ergens tegenaan en stapt terug in zn positiehistorie totdat dit niet meer het geval is
        while (positionHistory.Count > 0)
        {
            transform.position = positionHistory.Last.Value;
            positionHistory.RemoveLast();

            RaycastHit2D nextHit = MyRaycast();
            Debug.Assert(nextHit.collider != this);

            if (nextHit.collider == null)
            {
                float angle = Mathf.Round(Mathf.Atan2(moveDir.y, moveDir.x) * Mathf.Rad2Deg / 90) * 90;
                // bepaal invalshoek
                Vector3 inAngle = Vector3.Normalize(new Vector3(hit.point.x, hit.point.y, 0) - transform.position);
                // bereken normaalvector
                Vector3 normal = new Vector3(Mathf.Cos(angle * Mathf.Deg2Rad), Mathf.Sin(angle * Mathf.Deg2Rad), 0);
                moveDir = Vector3.Reflect(inAngle, normal);
                return;
            }

            // ga naar het volgende punt
            hit = nextHit;
        }
    }