class UIPopupScriptSceneManager extends UIPopupScript
{
private ButtonWidget m_BtnCancel;
private ButtonWidget m_BtnSceneNew;
private ButtonWidget m_BtnSceneLoad;
private ButtonWidget m_BtnSceneRename;
private ButtonWidget m_BtnSceneDuplicate;
private ButtonWidget m_BtnSceneDelete;
private TextListboxWidget m_LstListScenes;
private static const int m_DaysInMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
private ButtonWidget m_BtnSave;
private TextWidget m_TxtWeatherTime;
private SliderWidget m_SldStartTime;
private TextWidget m_TxtStartTimeValue;
private SliderWidget m_SldStartDay;
private TextWidget m_TxtStartDayValue;
private SliderWidget m_SldOvercast;
private TextWidget m_TxtOvercastValue;
private SliderWidget m_SldRain;
private TextWidget m_TxtRainValue;
private SliderWidget m_SldFog;
private TextWidget m_TxtFogValue;
private SliderWidget m_SldWindForce;
private TextWidget m_TxtWindForceValue;
private int m_OrigYear;
private int m_OrigMonth;
private int m_OrigDay;
private int m_OrigHour;
private int m_OrigMinute;
private float m_OrigOvercast;
private float m_OrigRain;
private float m_OrigFog;
private float m_OrigWindForce;
private int m_CurrYear;
private int m_CurrMonth;
private int m_CurrDay;
private int m_CurrHour;
private int m_CurrMinute;
private float m_CurrOvercast;
private float m_CurrRain;
private float m_CurrFog;
private float m_CurrWindForce;
//================================================
// UIPopupScriptSceneManager
//================================================
void UIPopupScriptSceneManager(Widget wgt)
{
m_BtnCancel = ButtonWidget.Cast( wgt.FindAnyWidget("btn_ppp_sm_cancel") );
m_BtnSceneNew = ButtonWidget.Cast( wgt.FindAnyWidget("btn_ppp_sm_mission_new") );
m_BtnSceneLoad = ButtonWidget.Cast( wgt.FindAnyWidget("btn_ppp_sm_mission_load") );
m_BtnSceneRename = ButtonWidget.Cast( wgt.FindAnyWidget("btn_ppp_sm_mission_rename") );
m_BtnSceneDelete = ButtonWidget.Cast( wgt.FindAnyWidget("btn_ppp_sm_mission_delete") );
m_BtnSceneDuplicate = ButtonWidget.Cast( wgt.FindAnyWidget("btn_ppp_sm_mission_duplicate") );
m_LstListScenes = TextListboxWidget.Cast( wgt.FindAnyWidget("tls_ppp_sm_scene_list") );
m_BtnSave = ButtonWidget.Cast( wgt.FindAnyWidget("btn_ppp_st_save") );
m_TxtWeatherTime = TextWidget.Cast( wgt.FindAnyWidget("txt_ppp_st_w_time_value") );
m_SldStartTime = SliderWidget.Cast( wgt.FindAnyWidget("sld_ppp_st_start_time") );
m_TxtStartTimeValue = TextWidget.Cast( wgt.FindAnyWidget("txt_ppp_st_start_time_value") );
m_SldStartDay = SliderWidget.Cast( wgt.FindAnyWidget("sld_ppp_st_start_day") );
m_TxtStartDayValue = TextWidget.Cast( wgt.FindAnyWidget("txt_ppp_st_start_day_value") );
m_SldOvercast = SliderWidget.Cast( wgt.FindAnyWidget("sld_ppp_st_overcast") );
m_TxtOvercastValue = TextWidget.Cast( wgt.FindAnyWidget("txt_ppp_st_overcast_value") );
m_SldRain = SliderWidget.Cast( wgt.FindAnyWidget("sld_ppp_st_rain") );
m_TxtRainValue = TextWidget.Cast( wgt.FindAnyWidget("txt_ppp_st_rain_value") );
m_SldFog = SliderWidget.Cast( wgt.FindAnyWidget("sld_ppp_st_fog") );
m_TxtFogValue = TextWidget.Cast( wgt.FindAnyWidget("txt_ppp_st_fog_value") );
m_SldWindForce = SliderWidget.Cast( wgt.FindAnyWidget("sld_ppp_st_wind_force") );
m_TxtWindForceValue = TextWidget.Cast( wgt.FindAnyWidget("txt_ppp_st_wind_force_value") );
}
void ~UIPopupScriptSceneManager()
{
g_Game.GetUpdateQueue(CALL_CATEGORY_SYSTEM).Remove(this.OnUpdate);
}
//================================================
// OnClick
//================================================
override bool OnClick(Widget w, int x, int y, int button)
{
super.OnClick(w, x, y, button);
string scene_name;
PluginSceneManager editor;
if ( w == m_BtnCancel )
{
g_Game.GetWorld().SetDate( m_OrigYear, m_OrigMonth, m_OrigDay, m_OrigHour, m_OrigMinute );
Weather weather = g_Game.GetWeather();
weather.GetOvercast().Set( m_OrigOvercast, 0, 1000 );
weather.GetRain().Set( m_OrigRain, 0, 1000 );
weather.GetFog().Set( m_OrigFog, 0, 1000 );
weather.SetWindSpeed( m_OrigWindForce );
PopupBack();
return true;
}
else if ( w == m_BtnSceneNew )
{
PopupOpen(SceneEditorMenu.POPUP_ID_SCENE_NEW, NULL);
return true;
}
else if ( w == m_BtnSceneLoad )
{
if ( m_LstListScenes.GetSelectedRow() != -1 )
{
m_LstListScenes.GetItemText( m_LstListScenes.GetSelectedRow(), 0, scene_name );
editor = PluginSceneManager.Cast( GetPlugin(PluginSceneManager) );
editor.SceneLoad(scene_name);
PopupBack();
return true;
}
}
else if ( w == m_BtnSceneRename )
{
m_LstListScenes.GetItemText( m_LstListScenes.GetSelectedRow(), 0, scene_name );
UIPopupScriptSceneRename popup_rename = UIPopupScriptSceneRename.Cast( PopupOpen(SceneEditorMenu.POPUP_ID_SCENE_RENAME, NULL) );
popup_rename.SetRenameName(scene_name);
return true;
}
else if ( w == m_BtnSceneDuplicate )
{
if ( m_LstListScenes.GetSelectedRow() != -1 )
{
m_LstListScenes.GetItemText( m_LstListScenes.GetSelectedRow(), 0, scene_name );
editor = PluginSceneManager.Cast( GetPlugin(PluginSceneManager) );
editor.SceneDuplicate(scene_name);
UpdateSceneList();
return true;
}
}
else if ( w == m_BtnSceneDelete )
{
if ( m_LstListScenes.GetSelectedRow() != -1 )
{
m_LstListScenes.GetItemText( m_LstListScenes.GetSelectedRow(), 0, scene_name );
editor = PluginSceneManager.Cast( GetPlugin(PluginSceneManager) );
editor.SceneDelete(scene_name);
if ( editor.SceneCanDelete(scene_name) )
{
UIPopupScriptSceneDelete popup_delete = UIPopupScriptSceneDelete.Cast( PopupOpen(SceneEditorMenu.POPUP_ID_SCENE_DELETE, NULL) );
popup_delete.SetDeleteName(scene_name);
}
else
{
UIPopupScriptNotify popup_notify = UIPopupScriptNotify.Cast( PopupOpen(SceneEditorMenu.POPUP_ID_NOTIFY, NULL) );
popup_notify.SetLabelText("You cant delete current loaded scene!");
}
UpdateSceneList();
return true;
}
}
else if ( w == m_BtnSave )
{
m_OrigYear = m_CurrYear;
m_OrigMonth = m_CurrMonth;
m_OrigDay = m_CurrDay;
m_OrigHour = m_CurrHour;
m_OrigMinute = m_CurrMinute;
m_OrigOvercast = m_CurrOvercast;
m_OrigRain = m_CurrRain;
m_OrigFog = m_CurrFog;
m_OrigWindForce = m_CurrWindForce;
editor = PluginSceneManager.Cast( GetPlugin(PluginSceneManager) );
editor.SetWeather(m_CurrOvercast, m_CurrRain, m_CurrFog, m_CurrWindForce);
editor.SetDate(m_CurrYear, m_CurrMonth, m_CurrDay, m_CurrHour, m_CurrMinute);
editor.SceneSave();
PopupBack();
return true;
}
return false;
}
override bool OnChange(Widget w, int x, int y, bool finished)
{
if ( w == m_SldStartTime )
{
float slider_value_start_time = m_SldStartTime.GetCurrent() * 0.01;
float start_time_f = slider_value_start_time * 1439;
int start_time = start_time_f;
m_CurrHour = start_time / 60;
m_CurrMinute = start_time % 60;
UpdateSliderStartTime( m_CurrHour, m_CurrMinute );
g_Game.GetWorld().SetDate( m_CurrYear, m_CurrMonth, m_CurrDay, m_CurrHour, m_CurrMinute );
return true;
}
else if ( w == m_SldStartDay )
{
float slider_value_start_day = m_SldStartDay.GetCurrent();
float start_day_f = slider_value_start_day * 3.64 + 1;
int start_day = start_day_f;
for ( int i = 0; i < 12; i++ )
{
int days = m_DaysInMonth[i];
if ( start_day <= days )
{
m_CurrMonth = i+1;
m_CurrDay = start_day;
break;
}
else
{
start_day -= days;
}
}
UpdateSliderStartDay( m_CurrMonth, m_CurrDay );
g_Game.GetWorld().SetDate( m_CurrYear, m_CurrMonth, m_CurrDay, m_CurrHour, m_CurrMinute );
return true;
}
else if ( w == m_SldOvercast )
{
m_CurrOvercast = m_SldOvercast.GetCurrent() * 0.01;
g_Game.GetWeather().GetOvercast().Set( m_CurrOvercast, 0, 1000 );
UpdateSliderOvercast();
return true;
}
else if ( w == m_SldRain )
{
m_CurrRain = m_SldRain.GetCurrent() * 0.01;
g_Game.GetWeather().GetRain().Set( m_CurrRain, 0, 1000 );
UpdateSliderRain();
return true;
}
else if ( w == m_SldFog )
{
m_CurrFog = m_SldFog.GetCurrent() * 0.01;
g_Game.GetWeather().GetFog().Set( m_CurrFog, 0, 1000 );
UpdateSliderFog();
return true;
}
else if ( w == m_SldWindForce )
{
float wind_slider = m_SldWindForce.GetCurrent() * 0.01;
m_CurrWindForce = g_Game.GetWeather().GetWindMaximumSpeed() * wind_slider;
g_Game.GetWeather().SetWindSpeed( m_CurrWindForce );
UpdateSliderWindForce();
return true;
}
return false;
}
//================================================
// UpdateSceneList
//================================================
void UpdateSceneList()
{
m_LstListScenes.ClearItems();
PluginSceneManager editor = PluginSceneManager.Cast( GetPlugin(PluginSceneManager) );
TStringArray scene_list = editor.GetSceneList();
string loaded_scene_name = editor.SceneGetName();
for ( int i = 0; i < scene_list.Count(); ++i )
{
string scene_name = scene_list.Get(i);
m_LstListScenes.AddItem(scene_name, NULL, 0);
if ( scene_name == loaded_scene_name )
{
m_LstListScenes.SelectRow(i);
}
}
}
//================================================
// UpdateSceneList
//================================================
override void OnOpen(Param param)
{
//Log("Poup Scene Manager OnOpen");
UpdateSceneList();
g_Game.GetWorld().GetDate( m_OrigYear, m_OrigMonth, m_OrigDay, m_OrigHour, m_OrigMinute );
Weather weather = g_Game.GetWeather();
m_OrigOvercast = weather.GetOvercast().GetActual();
m_OrigRain = weather.GetRain().GetActual();
m_OrigFog = weather.GetFog().GetActual();
m_OrigWindForce = weather.GetWindSpeed();
m_CurrYear = m_OrigYear;
m_CurrMonth = m_OrigMonth;
m_CurrDay = m_OrigDay;
m_CurrHour = m_OrigHour;
m_CurrMinute = m_OrigMinute;
m_CurrOvercast = m_OrigOvercast;
m_CurrRain = m_OrigRain;
m_CurrFog = m_OrigFog;
m_CurrWindForce = m_OrigWindForce;
Print( "Year" );
Print( m_CurrYear );
g_Game.GetUpdateQueue(CALL_CATEGORY_SYSTEM).Insert(this.OnUpdate);
ResetSliders();
}
//================================================
// OnClose
//================================================
override void OnClose()
{
g_Game.GetUpdateQueue(CALL_CATEGORY_SYSTEM).Remove(this.OnUpdate);
}
//================================================
// OnUpdate
//================================================
void OnUpdate()
{
m_TxtWeatherTime.SetText(g_Game.GetWeather().GetTime().ToString());
}
//================================================
// ResetSliders
//================================================
void ResetSliders()
{
int year, month, day, hour, minute;
g_Game.GetWorld().GetDate( year, month, day, hour, minute );
m_SldStartTime.SetCurrent( ((hour * 60) + minute) / 14.39 );
UpdateSliderStartTime( hour, minute );
float start_day = day;
int month_tmp = month;
while ( month_tmp > 1 )
{
month_tmp--;
start_day += m_DaysInMonth[month];
}
m_SldStartDay.SetCurrent( start_day / 3.64 );
UpdateSliderStartDay( month, day );
Weather weather = g_Game.GetWeather();
m_SldOvercast.SetCurrent(weather.GetOvercast().GetActual() * 100);
UpdateSliderOvercast();
m_SldRain.SetCurrent(weather.GetRain().GetActual() * 100);
UpdateSliderRain();
m_SldFog.SetCurrent(weather.GetFog().GetActual() * 100);
UpdateSliderFog();
float wind_slider = m_SldWindForce.GetCurrent() * 0.01;
m_CurrWindForce = weather.GetWindMaximumSpeed() * wind_slider;
weather.SetWindSpeed( m_CurrWindForce );
UpdateSliderWindForce();
}
void UpdateSliderStartTime( int hour, int minute )
{
string label_text = hour.ToStringLen(2) + ":" + minute.ToStringLen(2);
m_TxtStartTimeValue.SetText( label_text );
}
void UpdateSliderStartDay( int month, int day )
{
string label_text = day.ToString() + "." + month.ToString() + ". " + m_CurrYear.ToString();
m_TxtStartDayValue.SetText( label_text );
}
void UpdateSliderOvercast()
{
string label_text = m_SldOvercast.GetCurrent().ToString()+"%";
m_TxtOvercastValue.SetText( label_text );
}
void UpdateSliderRain()
{
string label_text = m_SldRain.GetCurrent().ToString()+"%";
m_TxtRainValue.SetText( label_text );
}
void UpdateSliderFog()
{
string label_text = m_SldFog.GetCurrent().ToString()+"%";
m_TxtFogValue.SetText( label_text );
}
void UpdateSliderWindForce()
{
string label_text = m_CurrWindForce.ToString()+"ms";
m_TxtWindForceValue.SetText( label_text );
}
}