示例#1
0
    // 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();
    }
示例#3
0
 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;
 }