海淀天下城电子沙盘单机版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

438 lines
15 KiB

4 years ago
using AX.MessageSystem;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using UnityEngine;
using UnityEngine.UI;
public enum TianQi
{
= 0, , ,
}
public enum FengLi
{
= 0, , , , , , , , , , , ,
}
public enum FengXiang
{
= 0, , , , , 西, 西, 西
}
public enum HasNeight
{
= 0,
}
[Serializable]
public class TianQiSetting
{
public TianQi tianqi;
public int wendu;
public FengLi fengli;
public FengXiang fengxiang;
public int datetime;
public int neightLast;
public HasNeight Hasneight;
}
public class WeatherSettingManager : MonoBehaviour
{
//参数设置
[Header("昼夜交替多少秒代替一小时")]
public float interval;//时间间隔
//引用对象
public WindZone windZone;
public GameObject rain;
public GameObject snow;
public AzureSky_Controller skyController;
public Toggle SetToggle;
//天气设置相关
public Dropdown TianQiDrop;
public Slider WenDunSlider;
public InputField WenDunInput;
public Dropdown FengLiDrop;
public Dropdown FengXiangDrop;
public Slider DateTimeSlider;
public Dropdown NeightDrop;
public InputField NeightTimeInput;
public Button TianQiSureBtn;
public Button TianQiCancelBtn;
private GameObject rainObj;
private GameObject sonwObj;
private Transform mainCamera;
public float timeAllMM;
public bool HasNeightChange;
public TianQiSetting TianQiSettingData;
private XmlDocument XmlDoc;
private string TianQiDataPath;
private int timeAll;
private bool HasInit = false;
void Start()
{
}
public void AddRecordEventWeather(TianQiSetting data)
{
if (ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal)
{
var eventData = new EventData();
eventData.time = RecordManager.Instance.RecordTimer;
eventData.cloneObjType = CloneObjType.None;
eventData.eventType = RecordEventType.WeatherSetting;
eventData.json = JsonUtility.ToJson(data);
RecordManager.Instance.jsonData.eventDataList.Add(eventData);
}
}
public TianQiSetting GetNowSettingData()
{
return TianQiSettingData;
}
public void Init(Toggle setToggle)
{
SetToggle = setToggle;
if (!HasInit)
InitMethord();
//CreateXml();
//TianQiSettingData = LoadXmlTianQi();
if (TianQiSettingData == null)
{
TianQiSettingData = new TianQiSetting
{
tianqi = TianQi.,
wendu = 20,
fengli = FengLi.,
fengxiang = FengXiang.,
datetime = 10,
Hasneight = HasNeight.,
neightLast = 1
};
//SetXml(TianQiSettingData);
}
InitTianQi();
}
private void InitMethord()
{
if (windZone == null)
windZone = GameObject.Find("WindZone").GetComponent<WindZone>();
if (skyController == null)
skyController = GameObject.Find("SkyControl").GetComponent<AzureSky_Controller>();
mainCamera = GameObject.Find("Main Camera").GetComponent<Camera>().transform;
//天气设置相关
TianQiDrop.onValueChanged.AddListener(TianQiDropOnValueChanged);
WenDunSlider.onValueChanged.AddListener(WenDuSliderValueChanged);
WenDunInput.onValueChanged.AddListener(WenDuInputValueChanged);
FengXiangDrop.onValueChanged.AddListener(FengXiangDropValueChanged);
FengLiDrop.onValueChanged.AddListener(FengLiDropValueChanged);
DateTimeSlider.onValueChanged.AddListener(DateTimeSliderValueChanged);
NeightDrop.onValueChanged.AddListener(NeightDropOnValueChanged);
NeightTimeInput.onValueChanged.AddListener(NeightTimeInputValueChanged);
TianQiSureBtn.onClick.AddListener(TianQiSureBtnClick);
TianQiCancelBtn.onClick.AddListener(TianQiCancelBtnClick);
HasInit = true;
}
/// <summary>
/// 天气设置
/// </summary>
/// <param name="value"></param>
private void TianQiDropOnValueChanged(int value)
{
switch (TianQiDrop.captionText.text)
{
case "晴":
if (rainObj != null)
{
Destroy(rainObj);
}
if (sonwObj != null)
{
Destroy(sonwObj);
}
skyController.Lightincrement = 0f;
skyController.SunIntensityCurve[0] = AnimationCurve.Linear(0, 100.0f, 24, 100.0f);
skyController.LambdaCurveR[0] = AnimationCurve.Linear(0, 650.0f, 24, 650.0f);
skyController.LambdaCurveG[0] = AnimationCurve.Linear(0, 570.0f, 24, 570.0f);
skyController.LambdaCurveB[0] = AnimationCurve.Linear(0, 475.0f, 24, 475.0f);
break;
case "阴":
if (rainObj != null)
{
Destroy(rainObj);
}
if (sonwObj != null)
{
Destroy(sonwObj);
}
skyController.Lightincrement = -0.6f;
skyController.SunDirLightIntensity = 0.5f;
skyController.SunIntensityCurve[0] = AnimationCurve.Linear(0, 0, 0, 0);
skyController.LambdaCurveR[0] = AnimationCurve.Linear(0, 300.0f, 24, 300.0f);
skyController.LambdaCurveG[0] = AnimationCurve.Linear(0, 300.0f, 24, 300.0f);
skyController.LambdaCurveB[0] = AnimationCurve.Linear(0, 300.0f, 24, 300.0f);
break;
case "雨":
skyController.Lightincrement = -0.6f;
skyController.SunDirLightIntensity = 0.5f;
skyController.SunIntensityCurve[0] = AnimationCurve.Linear(0, 0, 0, 0);
skyController.LambdaCurveR[0] = AnimationCurve.Linear(0, 300.0f, 24, 300.0f);
skyController.LambdaCurveG[0] = AnimationCurve.Linear(0, 300.0f, 24, 300.0f);
skyController.LambdaCurveB[0] = AnimationCurve.Linear(0, 300.0f, 24, 300.0f);
if (sonwObj != null)
{
Destroy(sonwObj);
}
if (rainObj == null)
{
rainObj = Instantiate(rain, mainCamera);
rainObj.name = "Rain";
rainObj.transform.localPosition = new Vector3(20, 45, 45);
rainObj.transform.localEulerAngles = new Vector3(-100, 25, 120);
}
break;
case "雪":
skyController.Lightincrement = -0.6f;
skyController.SunDirLightIntensity = 0.5f;
skyController.SunIntensityCurve[0] = AnimationCurve.Linear(0, 0, 0, 0);
skyController.LambdaCurveR[0] = AnimationCurve.Linear(0, 300.0f, 24, 300.0f);
skyController.LambdaCurveG[0] = AnimationCurve.Linear(0, 300.0f, 24, 300.0f);
skyController.LambdaCurveB[0] = AnimationCurve.Linear(0, 300.0f, 24, 300.0f);
if (rainObj != null)
{
Destroy(rainObj);
}
if (sonwObj == null)
{
sonwObj = Instantiate(snow, mainCamera);
sonwObj.name = "Snow";
sonwObj.transform.localPosition = new Vector3(9, 45, 90);
sonwObj.transform.localEulerAngles = new Vector3(-75, 180, -155);
}
break;
}
TianQiSettingData.tianqi = (TianQi)TianQiDrop.value;
AddRecordEventWeather(TianQiSettingData);
}
/// <summary>
/// 温度设置
/// </summary>
/// <param name="value"></param>
private void WenDuInputValueChanged(string value)
{
float _value = 0;
try
{
_value = float.Parse(value);
}
catch
{
return;
}
if (_value > 40)
{
WenDunInput.text = 40 + "";
return;
}
if (_value < -40)
{
WenDunInput.text = -40 + "";
return;
}
WenDunSlider.value = _value + 40;
}
/// <summary>
/// 温度设置
/// </summary>
/// <param name="value"></param>
private void WenDuSliderValueChanged(float value)
{
float _value = value - 40;
WenDunInput.text = _value.ToString();
}
/// <summary>
/// 风向设置
/// </summary>
/// <param name="value"></param>
private void FengXiangDropValueChanged(int value)
{
//float _BaseY = _compass.InitialRotationAngle;
float _BaseY = 0;
switch (value)
{
case 0:
windZone.transform.localEulerAngles = new Vector3(0, 0 - _BaseY, 0);
break;
case 1:
windZone.transform.localEulerAngles = new Vector3(0, 0 - _BaseY + 45, 0);
break;
case 2:
windZone.transform.localEulerAngles = new Vector3(0, 0 - _BaseY + 90, 0);
break;
case 3:
windZone.transform.localEulerAngles = new Vector3(0, 0 - _BaseY + 135, 0);
break;
case 4:
windZone.transform.localEulerAngles = new Vector3(0, 0 - _BaseY + 180, 0);
break;
case 5:
windZone.transform.localEulerAngles = new Vector3(0, 0 - _BaseY + 225, 0);
break;
case 6:
windZone.transform.localEulerAngles = new Vector3(0, 0 - _BaseY + 270, 0);
break;
case 7:
windZone.transform.localEulerAngles = new Vector3(0, 0 - _BaseY + 315, 0);
break;
}
}
/// <summary>
/// 风力设置
/// </summary>
/// <param name="value"></param>
private void FengLiDropValueChanged(int value)
{
windZone.windMain = value;
windZone.windTurbulence = value;
}
/// <summary>
/// 当前时间设置
/// </summary>
/// <param name="value"></param>
private void DateTimeSliderValueChanged(float value)
{
if (!HasNeightChange)
{
skyController.TIME_of_DAY = value * 24;
}
}
/// <summary>
/// 昼夜交替开关
/// </summary>
/// <param name="value"></param>
private void NeightDropOnValueChanged(int value)
{
HasNeightChange = value != 0;
switch (value)
{
case 0:
skyController.SetTime(0, 0);
DateTimeSlider.interactable = false;
DateTimeSlider.value = TianQiSettingData.datetime / 24.0f;
skyController.TIME_of_DAY = TianQiSettingData.datetime;
DateTimeSlider.interactable = true;
skyController.WispyCloudSpeedCurve[0] = AnimationCurve.Linear(0, 1f, 24, 1f);
break;
case 1:
skyController.SetTime(0, int.Parse(NeightTimeInput.text));
skyController.TIME_of_DAY = DateTimeSlider.value * 24f;
float a = float.Parse(NeightTimeInput.text);
skyController.WispyCloudSpeed = 10f;
skyController.WispyCloudSpeedCurve[0] = AnimationCurve.Linear(0, (0.1f - a / 1440 + 1) * 10, 24, (0.1f - a / 1440 + 1) * 10);
if (skyController.WispyCloudSpeed <= 1)
{
skyController.WispyCloudSpeedCurve[0] = AnimationCurve.Linear(0, 1f, 24, 1f);
}
break;
}
}
/// <summary>
/// 持续时间设置
/// </summary>
/// <param name="value"></param>
private void NeightTimeInputValueChanged(string value)
{
try
{
timeAll = int.Parse(value);
if (timeAll < 1)
{
NeightTimeInput.text = 1 + "";
}
}
catch
{
NeightTimeInput.text = 1 + "";
}
}
/// <summary>
/// 天气确定点击跟新XML数据保存更改
/// </summary>
private void TianQiSureBtnClick()
{
TianQiSettingData.tianqi = (TianQi)TianQiDrop.value;
TianQiSettingData.wendu = int.Parse(WenDunInput.text);
TianQiSettingData.fengli = (FengLi)FengLiDrop.value;
TianQiSettingData.fengxiang = (FengXiang)FengXiangDrop.value;
TianQiSettingData.datetime = (int)(DateTimeSlider.value * 24);
TianQiSettingData.Hasneight = (HasNeight)NeightDrop.value;
TianQiSettingData.neightLast = int.Parse(NeightTimeInput.text);
AddRecordEventWeather(TianQiSettingData);
//SetXml(TianQiSettingData);
if (SetToggle.isOn)
SetToggle.isOn = false;
}
/// <summary>
/// 天气取消按钮点击
/// </summary>
public void TianQiCancelBtnClick()
{
InitTianQi();
if (SetToggle.isOn)
SetToggle.isOn = false;
}
/// <summary>
/// 初始化天气设置
/// </summary>
public void InitTianQi()
{
TianQiDrop.value = (int)TianQiSettingData.tianqi;
WenDunSlider.value = TianQiSettingData.wendu + 40;
FengLiDrop.value = (int)TianQiSettingData.fengli;
windZone.windMain = (int)TianQiSettingData.fengli;
windZone.windTurbulence = (int)TianQiSettingData.fengli;
FengXiangDrop.value = (int)TianQiSettingData.fengxiang;
DateTimeSlider.value = (float)(TianQiSettingData.datetime / 24.0);
NeightTimeInput.text = TianQiSettingData.neightLast.ToString();
NeightDrop.value = (int)TianQiSettingData.Hasneight;
HasNeightChange = NeightDrop.value != 0;
}
private void CreateXml()
{
if (string.IsNullOrEmpty(TianQiDataPath))
TianQiDataPath = Application.dataPath + @"/StreamingAssets/TianQiSettingData.xml";
if (!File.Exists(TianQiDataPath))
{
XmlDoc = new XmlDocument();
XmlElement root = XmlDoc.CreateElement("Root");
XmlDoc.AppendChild(root);
XmlDoc.Save(TianQiDataPath);
}
}
private TianQiSetting LoadXmlTianQi()
{
XmlDoc = new XmlDocument();
XmlDoc.Load(TianQiDataPath);
XmlNode Node = XmlDoc.SelectSingleNode("Root");
if (!string.IsNullOrEmpty(Node.InnerText))
{
TianQiSetting data = JsonUtility.FromJson<TianQiSetting>(Node.InnerText);
return data;
}
else
return null;
}
private void SetXml(TianQiSetting data)
{
XmlDoc = new XmlDocument();
XmlDoc.Load(TianQiDataPath);
XmlNode root = XmlDoc.SelectSingleNode("Root");
root.InnerText = JsonUtility.ToJson(data);
XmlDoc.Save(TianQiDataPath);
}
}