DIFF

UIPopupScriptSceneSettings.c

class UIPopupScriptSceneSettings extends UIPopupScript
{
	private static const int m_DaysInMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	
	private ButtonWidget	m_BtnSave;
	private ButtonWidget	m_BtnCancel;
	
	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;
	
	//================================================
	// UIPopupScriptSceneSettings
	//================================================	
	void UIPopupScriptSceneSettings(Widget wgt)
	{
		m_BtnSave			= ButtonWidget.Cast( wgt.FindAnyWidget("btn_ppp_st_save") );
		m_BtnCancel			= ButtonWidget.Cast( wgt.FindAnyWidget("btn_ppp_st_cancel") );
		
		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 ~UIPopupScriptSceneSettings()
	{
		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);
		
		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;
			
			PluginSceneManager 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);

			PopupBack();
			
			return true;
		}
		else if ( w == m_BtnCancel )
		{
			
			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 )
		{		
			UpdateSliderOvercast();
			
			m_CurrOvercast = m_SldOvercast.GetCurrent() * 0.01;
			g_Game.GetWeather().GetOvercast().Set( m_CurrOvercast, 0, 1000 );

			return true;
		}
		else if ( w == m_SldRain )
		{		
			UpdateSliderRain();
			
			m_CurrRain = m_SldRain.GetCurrent() * 0.01;
			g_Game.GetWeather().GetRain().Set( m_CurrRain, 0, 1000 );

			return true;
		}
		else if ( w == m_SldFog )
		{		
			UpdateSliderFog();
			
			m_CurrFog = m_SldFog.GetCurrent() * 0.01;
			g_Game.GetWeather().GetFog().Set( m_CurrFog, 0, 1000 );

			return true;
		}
		else if ( w == m_SldWindForce )
		{		
			UpdateSliderWindForce();
			
			m_CurrWindForce = m_SldWindForce.GetCurrent() * 0.01;
			//g_Game.GetWeather().SetWindSpeed( m_CurrWindForce );

			return true;
		}
		
		return false;
	}
	
	//================================================
	// OnOpen
	//================================================	
	override void OnOpen(Param param)
	{
		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()
	{
		Weather weather = g_Game.GetWeather();

		g_Game.GetWorld().SetDate( m_OrigYear, m_OrigMonth, m_OrigDay, m_OrigHour, m_OrigMinute );
		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 );
	}

	//================================================
	// 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 slider_wind_value = ( weather.GetWindSpeed() / weather.GetWindMaximumSpeed() ) * 100;
		m_SldWindForce.SetCurrent( slider_wind_value );
		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_SldWindForce.GetCurrent().ToString()+"%";
		m_TxtWindForceValue.SetText( label_text );
	}
}