PoggyBird/Assets/Scripts/LevelGenerator.cs

86 lines
2.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LevelGenerator : MonoBehaviour
{
public static LevelGenerator instance{get; private set;}
[SerializeField]private GameObject LevelPrefab;
[SerializeField]private GameObject TopPrefab;
private List<GameObject> spawnedLevels = new List<GameObject>();
[SerializeField]private float spaceBetween = 1;
[SerializeField]private float verticalSpace = 2;
[SerializeField]private float maxLow;
[SerializeField]private float minimumAbs = 1;
[SerializeField]private float maxHigh;
[SerializeField]private List<float> Levels;
void Awake(){
instance = this;
}
void Start()
{
}
public void GenerateAhead(int count = 10){
if(Levels.Count <= 0){
Levels = new List<float>();
Levels.Add(1);
}
int startIndex= Levels.Count;
int lastIndex = Levels.Count +count;
for(int i =startIndex; i < lastIndex; i++){
float LastLevel = Levels[i-1];
float NewLevel = LastLevel + Random.Range(-maxLow, maxHigh);
// if(Mathf.Abs(NewLevel) < minimumAbs){
// if(NewLevel < 0){
// NewLevel = - minimumAbs;
// }else{
// NewLevel = minimumAbs;
// }
// }
Levels.Add(NewLevel);
float posX = i * spaceBetween;
float posY = Levels[i];
GameObject newLevelObj = Instantiate(LevelPrefab, new Vector3(posX,posY,0), Quaternion.identity);
spawnedLevels.Add(newLevelObj);
newLevelObj.transform.localScale = new Vector3(newLevelObj.transform.localScale.x,newLevelObj.transform.localScale.y,1);
Color color = (LastLevel < NewLevel) ? Color.green : Color.red;
// newLevelObj.transform.GetChild(0).gameObject.SetActive(LastLevel < NewLevel);
// newLevelObj.transform.GetChild(1).gameObject.SetActive(LastLevel >= NewLevel);
Color color2 = (LastLevel < NewLevel) ? new Color(0,0.29f,0) : new Color(0.29f,0,0);
newLevelObj.GetComponent<SpriteRenderer>().color = color;
GameObject topObj = Instantiate(TopPrefab, new Vector3(posX, posY + verticalSpace,0), Quaternion.identity);
topObj.transform.parent = newLevelObj.transform;
// topObj.GetComponentInChildren<SpriteRenderer>().color =color2;
}
}
// Update is called once per frame
void Update()
{
}
void OnDrawGizmos(){
if(Levels == null){return;}
if(Levels.Count < 2){return;}
for(int i=1; i < Levels.Count; i++){
Gizmos.DrawLine(new Vector3((i-1)*spaceBetween, Levels[i-1]), new Vector3((i)*spaceBetween, Levels[i]));
}
}
}