const UE4 = require('../../Framework/Framework');
const blueprint = require('../BlueprintLoad');
/**
* @description 天气系统 包含晴、雨、雪等
* @class UWeather
* @example
* app.weather = new THING.UE.Weather();
* // 切换至雨天
* app.weather.toRain();
*/
class UWeather {
#dtn = null;
#onWeather = null;
constructor() {
this.#onWeather = null;
this.#dtn = new UE4.DTNObject();
this.#dtn.bindWeather((weatherType, progress) => {
if (this.#onWeather) {
this.#onWeather(weatherType, progress);
}
});
}
bind(callback) {
this.#onWeather = callback;
}
unbind(callback) {
this.#dtn.clearWeather();
}
dispoe() {
if (this.#dtn && !this.#dtn.IsPendingKill()) {
this.#dtn.ConditionalBeginDestroy();
}
}
static getSky() {
return blueprint.getByTag('SkyControl_BP');
}
static getState(state) {
switch (state) {
case 0:
return 'sun';
case '晴天':
return 'sun';
case 1:
return 'rain';
case '雨天':
return 'rain';
case 2:
return 'largeRain';
case '大雨天':
return 'largeRain';
case 3:
return 'snow';
case '雪天':
return 'snow';
case 4:
return 'largeSnow';
case '大雪天':
return 'largeSnow';
}
}
static getStateInt(state) {
switch (state) {
case 'sun':
return 0;
case 'rain':
return 1;
case 'largeRain':
return 2;
case 'snow':
return 3;
case 'largeSnow':
return 4;
}
}
static GetWeather() {
var dtn = UWeather.getSky();
if (dtn) {
var state = dtn.GetInt('WeatherControl');
return this.getState(state);
}
}
static ChangeWeather(state) {
var dtn = UWeather.getSky();
if (dtn) {
var newState = this.getState(state);
dtn.SetInt('WeatherControl', this.getStateInt(newState));
dtn.CallFunction('ThingJsWeather');
return newState;
}
}
static ChangeFog(enable) {
let dtn = UWeather.getSky();
if (dtn) {
dtn.FogACloud(enable);
}
}
static ChangeToSun() {
return this.ChangeWeather(0);
}
static ChangeToRain() {
return this.ChangeWeather(1);
}
static ChangeToLargeRain() {
return this.ChangeWeather(2);
}
static ChangeToSnow() {
return this.ChangeWeather(3);
}
static ChangeToLargeSnow() {
return this.ChangeWeather(4);
}
static dispose() {
this.ChangeWeather(0);
}
static getWeather() {
return UWeather.GetWeather();
}
static setWeather(weather) {
UWeather.ChangeWeather(weather);
}
/**
* 切换至晴天
*/
static toSun() {
UWeather.ChangeToSun();
}
/**
* 切换至雨天
*/
static toRain() {
UWeather.ChangeToRain();
}
/**
* 切换至大雨
*/
static toLargeRain() {
UWeather.ChangeToLargeRain();
}
/**
* 切换至雪天
*/
static toSnow() {
UWeather.ChangeToSnow();
}
/**
* 切换至大雪
*/
static toLargeSnow() {
UWeather.ChangeToLargeSnow();
}
};
module.exports = UWeather;