86 lines
2.8 KiB
C#
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]));
|
|
}
|
|
}
|
|
}
|