// Update is called once per frame void Update() { for (int i = 0; i < 2; i++) { makeCopies[i] = true; Collider2D[] colliders = Physics2D.OverlapBoxAll(new Vector2(twoTiles[i].transform.position.x, twoTiles[i].transform.position.y), new Vector2(1, 0.8f), 0); for (int j = 1; j < colliders.Length; j++) { if (colliders[j].gameObject.tag == "tiles") { makeCopies[i] = false; } } } for (int i = 0; i < 2; i++) { if (makeCopies[i]) { int index = (int)(Random.value * 4) % 4; //setting up the clone properties GameObject cloneTile = Instantiate(twoTiles[i]); { cloneTile.AddComponent <InstantiatedTiles>(); InstantiatedTiles cloneScript = cloneTile.GetComponent <InstantiatedTiles>(); cloneScript.index = index; cloneScript.scrollSpeed = scrollSpeed; cloneScript.lengthOfCamera = lengthOfCamera; cloneScript.spawnStartY = spawnStartY; cloneScript.distanceFromOriginX = distanceFromOriginX; } } } }
/// <summary> /// attempts to load all the tiles that should be visible. If a tile already exists /// then it is skipped /// </summary> /// <returns></returns> private IEnumerator addVisibleTiles() { var centerTileId = CustomMap.Instance.CenterTileId; for (int i = centerTileId.X - visibleRange; i <= centerTileId.X + visibleRange; i++) { for (int j = centerTileId.Y - visibleRange; j <= centerTileId.Y + visibleRange; j++) { UnwrappedTileId tileToAdd = new UnwrappedTileId(CustomMap.Instance.Zoom, i, j); if (InstantiatedTiles.ContainsKey(tileToAdd)) { continue; } AddTile(tileToAdd); yield return(null); } } OnAllTilesAdded.Invoke(); }
void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.tag == "tiles") { InstantiatedTiles collisionObject = collision.gameObject.GetComponent <InstantiatedTiles>(); if (timeSinceLastCollision > minimumTimeUntilCollision) { if (collisionObject.score == 0) { lineTrail.DeleteTrail(); Destroy(gameObject); return; } int playerScore = int.Parse(scoreText.text); playerScore += collisionObject.score; scoreText.text = playerScore.ToString(); } else { collisionObject.RevertCollision(); Debug.Log("Multiple collision detected"); return; } ContactPoint2D contact = collision.GetContact(0); BallParticles particles = particleGenerator.GetComponent <BallParticles>(); particles.triggerParticles(contact.point); } motionDirection = queuedDirection; //once collision with walls or tiles occures, the ball's direction //is set to be the previously queued direction queuedDirection = new Vector2(-motionDirection.x, motionDirection.y); //default value for queuedDirection is the angle of //the motion when the coefficient of restitution is 1 CalculateDestination(); leftOrRight = (leftOrRight + 1) % 2; //changes value from 0 to 1 or vice versa when changing the direction of motion lineTrail.afterCollision(motionDirection); timeSinceLastCollision = 0; }