| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | 
							- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- using System;
 
- namespace Enviro
 
- {
 
-     [Serializable]
 
-     public class EnviroZoneWeather
 
-     {
 
-         public bool showEditor;
 
-         public EnviroWeatherType weatherType;
 
-         public float probability;
 
-     }
 
-     [AddComponentMenu("Enviro 3/Weather Zone")]
 
-     public class EnviroZone : MonoBehaviour
 
-     {
 
-         public EnviroWeatherType currentWeatherType;
 
-         public EnviroWeatherType nextWeatherType;
 
-         public bool autoWeatherChanges = true;
 
-         public float weatherChangeIntervall = 2f;
 
-         public double nextWeatherUpdate;
 
-         public List<EnviroZoneWeather> weatherTypeList = new List<EnviroZoneWeather>();
 
-         public Vector3 zoneScale = Vector3.one;
 
-         public Color zoneGizmoColor;
 
-         private BoxCollider zoneCollider;
 
-         void Start()
 
-         {
 
-             zoneCollider = gameObject.AddComponent<BoxCollider>();
 
-             zoneCollider.isTrigger = true;
 
-             UpdateZoneScale ();
 
-         }
 
-         public void UpdateZoneScale ()
 
-         {
 
-             zoneCollider.size = zoneScale;
 
-         }
 
-         // Adds a new weather type to the zone.
 
-         public void AddWeatherType(EnviroWeatherType wType)
 
-         {
 
-             EnviroZoneWeather weatherTypeEntry = new EnviroZoneWeather();
 
-             weatherTypeEntry.weatherType = wType;
 
-             weatherTypeList.Add(weatherTypeEntry);
 
-         }
 
-         // Removes a weather type from the zone.
 
-         public void RemoveWeatherZoneType(EnviroZoneWeather wType)
 
-         {
 
-             weatherTypeList.Remove(wType);
 
-         }
 
-         // Changes the weather of the zone instantly.
 
-         public void ChangeZoneWeatherInstant (EnviroWeatherType type)
 
-         {
 
-             if(EnviroManager.instance != null && currentWeatherType != type)
 
-             {
 
-                 EnviroManager.instance.NotifyZoneWeatherChanged(type,this);
 
-             }
 
-             
 
-             currentWeatherType = type;
 
-         }
 
-         // Changes the weather of the zone to the type for next weather update.
 
-         public void ChangeZoneWeather (EnviroWeatherType type)
 
-         {
 
-             nextWeatherType = type;
 
-         }
 
-         private void ChooseNextWeatherRandom ()
 
-         {
 
-             float rand = UnityEngine.Random.Range(0f,100f);
 
-             bool nextWeatherFound = false;
 
-             for (int i = 0; i < weatherTypeList.Count; i++)
 
-             {
 
-                 if(rand <= weatherTypeList[i].probability)
 
-                 {
 
-                     ChangeZoneWeather(weatherTypeList[i].weatherType);
 
-                     nextWeatherFound = true;
 
-                     return;
 
-                 }
 
-             }
 
-             if(!nextWeatherFound)
 
-                ChangeZoneWeather(currentWeatherType);
 
-         }
 
-         private void UpdateZoneWeather()
 
-         {
 
-             if(EnviroManager.instance.Time != null)
 
-             {
 
-                double currentDate = EnviroManager.instance.Time.GetDateInHours();
 
-                if(currentDate >= nextWeatherUpdate)
 
-                {
 
-                  if(nextWeatherType != null)
 
-                   ChangeZoneWeatherInstant(nextWeatherType);
 
-                  else
 
-                   ChangeZoneWeatherInstant(currentWeatherType);
 
-                  
 
-                  //Get next weather
 
-                  ChooseNextWeatherRandom ();
 
-                  nextWeatherUpdate = currentDate + weatherChangeIntervall;
 
-                }
 
-             }
 
-         }
 
-         void Update()
 
-         {
 
-             if (EnviroManager.instance == null || EnviroManager.instance.Weather == null)
 
-                 return;
 
-             if(autoWeatherChanges)
 
-                 UpdateZoneWeather();
 
-             //Forces the weather change in Enviro when this zone is currently the active one.
 
-             if(EnviroManager.instance.Weather.currentZone == this && EnviroManager.instance.Weather.targetWeatherType != currentWeatherType)
 
-                EnviroManager.instance.Weather.ChangeWeather(currentWeatherType);
 
-         }
 
-         void OnTriggerEnter (Collider col)
 
-         {
 
-             if (EnviroManager.instance == null || EnviroManager.instance.Weather == null)
 
-                 return;
 
-             //Change Weather to Zone Weather:
 
-             if(col.gameObject.GetComponent<EnviroManager>())
 
-                EnviroManager.instance.Weather.currentZone = this;
 
-                
 
-             //EnviroManager.instance.Weather.ChangeWeather(currentWeatherType);
 
-         }
 
-         void OnTriggerExit (Collider col)
 
-         {
 
-              if (EnviroManager.instance == null || EnviroManager.instance.Weather == null)
 
-                  return;
 
-         
 
-              if(col.gameObject.GetComponent<EnviroManager>())
 
-                 EnviroManager.instance.Weather.currentZone = null;
 
-         } 
 
-         void OnDrawGizmos () 
 
-         {
 
-             Gizmos.color = zoneGizmoColor;
 
-             
 
-             Matrix4x4 rotationMatrix = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one);
 
-             Gizmos.matrix = rotationMatrix;
 
-             Gizmos.DrawCube(Vector3.zero, new Vector3(zoneScale.x, zoneScale.y, zoneScale.z));
 
-         }
 
-     }
 
- }
 
 
  |