using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class AppleTree : MonoBehaviour { [Header("Set in Inspector")] // Prefab for instantiating apples public GameObject applePrefab; public GameObject rottenApplePrefab; public GameObject goldenApplePrefab; // Speed at which the AppleTree moves public float speed = 1f; // Distance where AppleTree turns around public float leftAndRightEdge = 10f; // Chance that the AppleTree will change directions public float chanceToChangeDirections = 0.1f; // Rate at which Apples will be instantiated public float secondsBetweenAppleDrops = 1f; // Rate at which RottenApples will be instantiated public float secondsBetweenRottenAppleDrops = 2f; // Rate at which RottenApples will be instantiated public float secondsBetweenGoldenAppleDrops = 10f; public bool goldenAppleTime = false; public float goldenAppleTimeCurrent = 0f; public float goldenAppleTimeLimit = 5f; // Start is called before the first frame update void Start() { // Dropping apples every second Invoke("DropApple", 1f); if (SceneManager.GetActiveScene().name == "_Scene_2") { return; } // Dropping rotten apples every 3 seconds Invoke("DropRottenApple", 2f); Invoke("DropGoldenApple", 4f); } void DropApple() { GameObject apple = Instantiate(applePrefab); apple.transform.position = transform.position; Invoke("DropApple", secondsBetweenAppleDrops); } void DropRottenApple() { GameObject rottenApple = Instantiate(rottenApplePrefab); rottenApple.transform.position = transform.position; Invoke("DropRottenApple", secondsBetweenRottenAppleDrops); } void DropGoldenApple() { GameObject goldenApple = Instantiate(goldenApplePrefab); goldenApple.transform.position = transform.position; if (goldenAppleTime) { Invoke("DropGoldenApple", secondsBetweenGoldenAppleDrops + goldenAppleTimeLimit); } else { Invoke("DropGoldenApple", secondsBetweenGoldenAppleDrops); } } public void GoldenAppleTimeStart() { goldenAppleTime = true; secondsBetweenAppleDrops *= 0.25f; } public void GoldenAppleTimeEnd() { goldenAppleTime = false; goldenAppleTimeCurrent = 0f; secondsBetweenAppleDrops *= 4; } // Update is called once per frame void Update() { // Basic Movement Vector3 pos = transform.position; pos.x += speed * Time.deltaTime; transform.position = pos; // Changing Direction if (pos.x < -leftAndRightEdge) { speed = Mathf.Abs(speed); } else if (pos.x > leftAndRightEdge) { speed = -Mathf.Abs(speed); } if (goldenAppleTime) { goldenAppleTimeCurrent += Time.deltaTime; if (goldenAppleTimeCurrent > goldenAppleTimeLimit) { GoldenAppleTimeEnd(); } } } // Update exactly 50 times per second void FixedUpdate() { if (Random.value < chanceToChangeDirections) { speed *= -1; } } }