aboutsummaryrefslogtreecommitdiff
blob: b40f70eb2279a6c2ca18e854d458a99936e86f47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LevelScrolling : MonoBehaviour
{
  public int updateRate = 1;
  public Transform obstacles;
  public Transform background;

  private Vector3 initialBgPos;
  private float[] backgroundSize;

  // Start is called before the first frame update
  void Start()
  {
    ResizeBackground();
  }

  // Update is called once per frame
  void Update()
  {

  }

  void FixedUpdate()
  {
    MoveBackground();
    MoveObstacles();
  }

  private void ResizeBackground()
  {
    var sr = background.GetComponent<SpriteRenderer>();
    if (sr == null) return;

    background.localScale = new Vector3(1, 1, 1);

    var width = sr.sprite.bounds.size.x;
    var height = sr.sprite.bounds.size.y;

    var worldScreenHeight = Camera.main.orthographicSize * 2.0;
    var worldScreenWidth = worldScreenHeight / Screen.height * Screen.width;

    var finalHeight = (float)(worldScreenHeight / height);
    var finalWidth = (float)(worldScreenWidth / width);

    background.localScale = new Vector3(finalHeight, finalHeight, 1);

    var viewportX = Camera.main.ViewportToWorldPoint(new Vector3(0, 1, 0)).x;
    background.position = new Vector3(viewportX * -1, 0, 0);
    initialBgPos = background.position;
  }

  private void MoveObstacles()
  {
    obstacles.Translate(new Vector2(0.1f * updateRate, 0));
  }

  private void MoveBackground()
  {
    if (background.position.x > -initialBgPos.x)
      background.Translate(new Vector2(0.1f * updateRate, 0));
    else background.position = initialBgPos;
  }
}