- Home /
Need a critique of my weather code (top-down 2D)
After some effort and beating my head against the wall, I've come up with a rudimentary weather system for my top-down 2D retro RPG. I had it working in another iteration, but it felt weird in the update loop to constantly be setting the rain and snow objects (which are particle systems) to active or not on each frame, so I introduced some bool variables to keep from doing that. In one respect, it works, but I still feel like this might not be the most efficient way to code it. That said, I'm up for any advice on how this is handled :). Note that turning the audio on and off is done via hard-coded variables for the moment.
public GameObject rain;
public GameObject snow;
//public GameObject wind;
private bool isRaining, isSnowing, isWindy;
private bool precipitation;
public float precipitationMinTime, precipitationMaxTime;
private float precipitationDuration, windDuration;
public int weatherTimer = 100000;
// This will determine which Y coordinate in the world will be the line between rain and snow.
public float snowLine;
// Update is called once per frame
void Update()
{
if (!precipitation)
{
int rand = Random.Range(1, weatherTimer + 1);
//Debug.Log(rand);
if (rand == weatherTimer)
{
precipitation = true;
precipitationDuration = Random.Range(precipitationMinTime, precipitationMaxTime);
if (PlayerController.instance.transform.position.y > snowLine)
{
isSnowing = true;
snow.SetActive(true);
AudioManager.instance.PlayWeatherAudio(1);
}
else
{
isRaining = true;
rain.SetActive(true);
AudioManager.instance.PlayWeatherAudio(0);
}
}
}
if (precipitation)
{
precipitationDuration -= Time.deltaTime;
if (PlayerController.instance.transform.position.y > snowLine && isRaining)
{
isRaining = false;
rain.SetActive(false);
AudioManager.instance.StopWeatherAudio(0);
isSnowing = true;
snow.SetActive(true);
AudioManager.instance.PlayWeatherAudio(1);
}
else if (PlayerController.instance.transform.position.y <= snowLine && isSnowing)
{
isSnowing = false;
snow.SetActive(false);
AudioManager.instance.StopWeatherAudio(1);
isRaining = true;
rain.SetActive(true);
AudioManager.instance.PlayWeatherAudio(0);
}
if (precipitationDuration <= 0)
{
precipitation = false;
// Stop all possible precipitation just in case
rain.SetActive(false);
AudioManager.instance.StopWeatherAudio(0);
snow.SetActive(false);
AudioManager.instance.StopWeatherAudio(1);
}
}
}
Your answer
Follow this Question
Related Questions
Top-Down 2D Weather Question 0 Answers
2D rigidbody top down movement problem 3 Answers
Jump functionality for a 2D Top Down game? 1 Answer
How to have camera follow player unless it hits a boundary 1 Answer
Top Down Camera? 0 Answers