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); } } }
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; } }