Some major surgery on the sun module. Updates to the client were gated
by a "mode" check. That mode check has been removed (it didn't result in any change of behavior anyway). Also added a command line variable update to set the sun position time offset (offset from the system clock). Default is no offset to preserve existing behavior.0.8.0.3
parent
8eec717f5f
commit
bfb0011cd3
|
@ -68,9 +68,6 @@ namespace OpenSim.Region.CoreModules
|
||||||
// updating those region settings in GenSunPos()
|
// updating those region settings in GenSunPos()
|
||||||
private bool receivedEstateToolsSunUpdate = false;
|
private bool receivedEstateToolsSunUpdate = false;
|
||||||
|
|
||||||
// Configurable values
|
|
||||||
private string m_RegionMode = "SL";
|
|
||||||
|
|
||||||
// Sun's position information is updated and sent to clients every m_UpdateInterval frames
|
// Sun's position information is updated and sent to clients every m_UpdateInterval frames
|
||||||
private int m_UpdateInterval = 0;
|
private int m_UpdateInterval = 0;
|
||||||
|
|
||||||
|
@ -90,7 +87,6 @@ namespace OpenSim.Region.CoreModules
|
||||||
// private double m_longitude = 0;
|
// private double m_longitude = 0;
|
||||||
// private double m_latitude = 0;
|
// private double m_latitude = 0;
|
||||||
// Configurable defaults Defaults close to SL
|
// Configurable defaults Defaults close to SL
|
||||||
private string d_mode = "SL";
|
|
||||||
private int d_frame_mod = 100; // Every 10 seconds (actually less)
|
private int d_frame_mod = 100; // Every 10 seconds (actually less)
|
||||||
private double d_day_length = 4; // A VW day is 4 RW hours long
|
private double d_day_length = 4; // A VW day is 4 RW hours long
|
||||||
private int d_year_length = 60; // There are 60 VW days in a VW year
|
private int d_year_length = 60; // There are 60 VW days in a VW year
|
||||||
|
@ -134,12 +130,15 @@ namespace OpenSim.Region.CoreModules
|
||||||
|
|
||||||
private const int TICKS_PER_SECOND = 10000000;
|
private const int TICKS_PER_SECOND = 10000000;
|
||||||
|
|
||||||
|
private ulong m_CurrentTimeOffset = 0;
|
||||||
|
|
||||||
// Current time in elapsed seconds since Jan 1st 1970
|
// Current time in elapsed seconds since Jan 1st 1970
|
||||||
private ulong CurrentTime
|
private ulong CurrentTime
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return (ulong)(((DateTime.Now.Ticks) - TicksToEpoch + TicksUTCOffset) / TICKS_PER_SECOND);
|
ulong ctime = (ulong)(((DateTime.Now.Ticks) - TicksToEpoch + TicksUTCOffset) / TICKS_PER_SECOND);
|
||||||
|
return ctime + m_CurrentTimeOffset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,8 +289,6 @@ namespace OpenSim.Region.CoreModules
|
||||||
// Just in case they don't have the stanzas
|
// Just in case they don't have the stanzas
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Mode: determines how the sun is handled
|
|
||||||
m_RegionMode = config.Configs["Sun"].GetString("mode", d_mode);
|
|
||||||
// Mode: determines how the sun is handled
|
// Mode: determines how the sun is handled
|
||||||
// m_latitude = config.Configs["Sun"].GetDouble("latitude", d_latitude);
|
// m_latitude = config.Configs["Sun"].GetDouble("latitude", d_latitude);
|
||||||
// Mode: determines how the sun is handled
|
// Mode: determines how the sun is handled
|
||||||
|
@ -314,7 +311,6 @@ namespace OpenSim.Region.CoreModules
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Debug("[SUN]: Configuration access failed, using defaults. Reason: " + e.Message);
|
m_log.Debug("[SUN]: Configuration access failed, using defaults. Reason: " + e.Message);
|
||||||
m_RegionMode = d_mode;
|
|
||||||
m_YearLengthDays = d_year_length;
|
m_YearLengthDays = d_year_length;
|
||||||
m_DayLengthHours = d_day_length;
|
m_DayLengthHours = d_day_length;
|
||||||
m_HorizonShift = d_day_night;
|
m_HorizonShift = d_day_night;
|
||||||
|
@ -325,40 +321,28 @@ namespace OpenSim.Region.CoreModules
|
||||||
// m_longitude = d_longitude;
|
// m_longitude = d_longitude;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (m_RegionMode)
|
SecondsPerSunCycle = (uint) (m_DayLengthHours * 60 * 60);
|
||||||
{
|
SecondsPerYear = (uint) (SecondsPerSunCycle*m_YearLengthDays);
|
||||||
case "T1":
|
|
||||||
default:
|
|
||||||
case "SL":
|
|
||||||
// Time taken to complete a cycle (day and season)
|
|
||||||
|
|
||||||
SecondsPerSunCycle = (uint) (m_DayLengthHours * 60 * 60);
|
// Ration of real-to-virtual time
|
||||||
SecondsPerYear = (uint) (SecondsPerSunCycle*m_YearLengthDays);
|
|
||||||
|
|
||||||
// Ration of real-to-virtual time
|
// VWTimeRatio = 24/m_day_length;
|
||||||
|
|
||||||
// VWTimeRatio = 24/m_day_length;
|
// Speed of rotation needed to complete a cycle in the
|
||||||
|
// designated period (day and season)
|
||||||
|
|
||||||
// Speed of rotation needed to complete a cycle in the
|
SunSpeed = m_SunCycle/SecondsPerSunCycle;
|
||||||
// designated period (day and season)
|
SeasonSpeed = m_SeasonalCycle/SecondsPerYear;
|
||||||
|
|
||||||
SunSpeed = m_SunCycle/SecondsPerSunCycle;
|
// Horizon translation
|
||||||
SeasonSpeed = m_SeasonalCycle/SecondsPerYear;
|
|
||||||
|
|
||||||
// Horizon translation
|
HorizonShift = m_HorizonShift; // Z axis translation
|
||||||
|
// HoursToRadians = (SunCycle/24)*VWTimeRatio;
|
||||||
HorizonShift = m_HorizonShift; // Z axis translation
|
|
||||||
// HoursToRadians = (SunCycle/24)*VWTimeRatio;
|
|
||||||
|
|
||||||
m_log.Debug("[SUN]: Mode is " + m_RegionMode);
|
|
||||||
m_log.Debug("[SUN]: Initialization completed. Day is " + SecondsPerSunCycle + " seconds, and year is " + m_YearLengthDays + " days");
|
|
||||||
m_log.Debug("[SUN]: Axis offset is " + m_HorizonShift);
|
|
||||||
m_log.Debug("[SUN]: Percentage of time for daylight " + m_DayTimeSunHourScale);
|
|
||||||
m_log.Debug("[SUN]: Positional data updated every " + m_UpdateInterval + " frames");
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
m_log.Debug("[SUN]: Initialization completed. Day is " + SecondsPerSunCycle + " seconds, and year is " + m_YearLengthDays + " days");
|
||||||
|
m_log.Debug("[SUN]: Axis offset is " + m_HorizonShift);
|
||||||
|
m_log.Debug("[SUN]: Percentage of time for daylight " + m_DayTimeSunHourScale);
|
||||||
|
m_log.Debug("[SUN]: Positional data updated every " + m_UpdateInterval + " frames");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Type ReplaceableInterface
|
public Type ReplaceableInterface
|
||||||
|
@ -385,7 +369,8 @@ namespace OpenSim.Region.CoreModules
|
||||||
string sunCommand = string.Format("sun {0}", kvp.Key);
|
string sunCommand = string.Format("sun {0}", kvp.Key);
|
||||||
m_scene.AddCommand("Regions", this, sunCommand, string.Format("{0} [<value>]", sunCommand), kvp.Value, "", HandleSunConsoleCommand);
|
m_scene.AddCommand("Regions", this, sunCommand, string.Format("{0} [<value>]", sunCommand), kvp.Value, "", HandleSunConsoleCommand);
|
||||||
}
|
}
|
||||||
|
m_scene.AddCommand("Regions", this, "sun help", "sun help", "list parameters that can be changed", "", HandleSunConsoleCommand);
|
||||||
|
m_scene.AddCommand("Regions", this, "sun list", "sun list", "list parameters that can be changed", "", HandleSunConsoleCommand);
|
||||||
ready = true;
|
ready = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,20 +404,19 @@ namespace OpenSim.Region.CoreModules
|
||||||
|
|
||||||
public void SunToClient(IClientAPI client)
|
public void SunToClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
if (m_RegionMode != "T1")
|
if (ready)
|
||||||
{
|
{
|
||||||
if (ready)
|
if (m_SunFixed)
|
||||||
{
|
{
|
||||||
if (m_SunFixed)
|
// m_log.DebugFormat("[SUN]: Fixed SunHour {0}, Position {1}, PosTime {2}, OrbitalPosition : {3} ",
|
||||||
{
|
// m_SunFixedHour, Position.ToString(), PosTime.ToString(), OrbitalPosition.ToString());
|
||||||
// m_log.DebugFormat("[SUN]: SunHour {0}, Position {1}, PosTime {2}, OrbitalPosition : {3} ", m_SunFixedHour, Position.ToString(), PosTime.ToString(), OrbitalPosition.ToString());
|
client.SendSunPos(Position, Velocity, PosTime, SecondsPerSunCycle, SecondsPerYear, OrbitalPosition);
|
||||||
client.SendSunPos(Position, Velocity, PosTime, SecondsPerSunCycle, SecondsPerYear, OrbitalPosition);
|
}
|
||||||
}
|
else
|
||||||
else
|
{
|
||||||
{
|
// m_log.DebugFormat("[SUN]: SunHour {0}, Position {1}, PosTime {2}, OrbitalPosition : {3} ",
|
||||||
// m_log.DebugFormat("[SUN]: SunHour {0}, Position {1}, PosTime {2}, OrbitalPosition : {3} ", m_SunFixedHour, Position.ToString(), PosTime.ToString(), OrbitalPosition.ToString());
|
// m_SunFixedHour, Position.ToString(), PosTime.ToString(), OrbitalPosition.ToString());
|
||||||
client.SendSunPos(Position, Velocity, CurrentTime, SecondsPerSunCycle, SecondsPerYear, OrbitalPosition);
|
client.SendSunPos(Position, Velocity, CurrentTime, SecondsPerSunCycle, SecondsPerYear, OrbitalPosition);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -532,6 +516,9 @@ namespace OpenSim.Region.CoreModules
|
||||||
case "update_interval":
|
case "update_interval":
|
||||||
return m_UpdateInterval;
|
return m_UpdateInterval;
|
||||||
|
|
||||||
|
case "current_time":
|
||||||
|
return CurrentTime;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new Exception("Unknown sun parameter.");
|
throw new Exception("Unknown sun parameter.");
|
||||||
}
|
}
|
||||||
|
@ -572,7 +559,7 @@ namespace OpenSim.Region.CoreModules
|
||||||
|
|
||||||
foreach (string output in ParseCmdParams(cmdparams))
|
foreach (string output in ParseCmdParams(cmdparams))
|
||||||
{
|
{
|
||||||
m_log.Info("[SUN] " + output);
|
MainConsole.Instance.Output(output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -581,10 +568,11 @@ namespace OpenSim.Region.CoreModules
|
||||||
Dictionary<string, string> Params = new Dictionary<string, string>();
|
Dictionary<string, string> Params = new Dictionary<string, string>();
|
||||||
|
|
||||||
Params.Add("year_length", "number of days to a year");
|
Params.Add("year_length", "number of days to a year");
|
||||||
Params.Add("day_length", "number of seconds to a day");
|
Params.Add("day_length", "number of hours to a day");
|
||||||
Params.Add("day_night_offset", "induces a horizon shift");
|
Params.Add("day_night_offset", "induces a horizon shift");
|
||||||
Params.Add("update_interval", "how often to update the sun's position in frames");
|
Params.Add("update_interval", "how often to update the sun's position in frames");
|
||||||
Params.Add("day_time_sun_hour_scale", "scales day light vs nite hours to change day/night ratio");
|
Params.Add("day_time_sun_hour_scale", "scales day light vs nite hours to change day/night ratio");
|
||||||
|
Params.Add("current_time", "time in seconds of the simulator");
|
||||||
|
|
||||||
return Params;
|
return Params;
|
||||||
}
|
}
|
||||||
|
@ -646,6 +634,13 @@ namespace OpenSim.Region.CoreModules
|
||||||
m_UpdateInterval = (int)value;
|
m_UpdateInterval = (int)value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "current_time":
|
||||||
|
// best to get the current time offset out of the currenttime equation then
|
||||||
|
// reset it
|
||||||
|
m_CurrentTimeOffset = 0;
|
||||||
|
m_CurrentTimeOffset = CurrentTime - (ulong)value;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Output.Add(String.Format("Unknown parameter {0}.", args[1]));
|
Output.Add(String.Format("Unknown parameter {0}.", args[1]));
|
||||||
return Output;
|
return Output;
|
||||||
|
|
Loading…
Reference in New Issue