* Return different values for llCloud() over time based on a cellular automation system. * Thanks aduffy70!0.6.5-rc1
parent
30d012b297
commit
7c04c1e44c
|
@ -39,7 +39,8 @@ namespace OpenSim.Region.CoreModules
|
||||||
{
|
{
|
||||||
// private static readonly log4net.ILog m_log
|
// private static readonly log4net.ILog m_log
|
||||||
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
private uint m_frame = 0;
|
||||||
|
private int m_frameUpdateRate = 1000;
|
||||||
private Random m_rndnums = new Random(Environment.TickCount);
|
private Random m_rndnums = new Random(Environment.TickCount);
|
||||||
private Scene m_scene = null;
|
private Scene m_scene = null;
|
||||||
private bool m_ready = false;
|
private bool m_ready = false;
|
||||||
|
@ -57,6 +58,7 @@ namespace OpenSim.Region.CoreModules
|
||||||
{
|
{
|
||||||
m_enabled = cloudConfig.GetBoolean("enabled", false);
|
m_enabled = cloudConfig.GetBoolean("enabled", false);
|
||||||
m_cloudDensity = cloudConfig.GetFloat("density", 0.5F);
|
m_cloudDensity = cloudConfig.GetFloat("density", 0.5F);
|
||||||
|
m_frameUpdateRate = cloudConfig.GetInt("cloud_update_rate", 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_enabled)
|
if (m_enabled)
|
||||||
|
@ -68,6 +70,7 @@ namespace OpenSim.Region.CoreModules
|
||||||
scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel;
|
scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel;
|
||||||
scene.EventManager.OnClientClosed += ClientLoggedOut;
|
scene.EventManager.OnClientClosed += ClientLoggedOut;
|
||||||
scene.RegisterModuleInterface<ICloudModule>(this);
|
scene.RegisterModuleInterface<ICloudModule>(this);
|
||||||
|
scene.EventManager.OnFrame += CloudUpdate;
|
||||||
|
|
||||||
GenerateCloudCover();
|
GenerateCloudCover();
|
||||||
|
|
||||||
|
@ -90,6 +93,7 @@ namespace OpenSim.Region.CoreModules
|
||||||
m_scene.EventManager.OnMakeChildAgent -= MakeChildAgent;
|
m_scene.EventManager.OnMakeChildAgent -= MakeChildAgent;
|
||||||
m_scene.EventManager.OnAvatarEnteringNewParcel -= AvatarEnteringParcel;
|
m_scene.EventManager.OnAvatarEnteringNewParcel -= AvatarEnteringParcel;
|
||||||
m_scene.EventManager.OnClientClosed -= ClientLoggedOut;
|
m_scene.EventManager.OnClientClosed -= ClientLoggedOut;
|
||||||
|
m_scene.EventManager.OnFrame -= CloudUpdate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,6 +126,72 @@ namespace OpenSim.Region.CoreModules
|
||||||
return cover;
|
return cover;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateCloudCover()
|
||||||
|
{
|
||||||
|
float[] newCover = new float[16 * 16];
|
||||||
|
int rowAbove = new int();
|
||||||
|
int rowBelow = new int();
|
||||||
|
int columnLeft = new int();
|
||||||
|
int columnRight = new int();
|
||||||
|
for (int x = 0; x < 16; x++)
|
||||||
|
{
|
||||||
|
if (x == 0)
|
||||||
|
{
|
||||||
|
columnRight = x + 1;
|
||||||
|
columnLeft = 15;
|
||||||
|
}
|
||||||
|
else if (x == 15)
|
||||||
|
{
|
||||||
|
columnRight = 0;
|
||||||
|
columnLeft = x - 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
columnRight = x + 1;
|
||||||
|
columnLeft = x - 1;
|
||||||
|
}
|
||||||
|
for (int y = 0; y< 16; y++)
|
||||||
|
{
|
||||||
|
if (y == 0)
|
||||||
|
{
|
||||||
|
rowAbove = y + 1;
|
||||||
|
rowBelow = 15;
|
||||||
|
}
|
||||||
|
else if (y == 15)
|
||||||
|
{
|
||||||
|
rowAbove = 0;
|
||||||
|
rowBelow = y - 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rowAbove = y + 1;
|
||||||
|
rowBelow = y - 1;
|
||||||
|
}
|
||||||
|
float neighborAverage = (cloudCover[rowBelow * 16 + columnLeft] +
|
||||||
|
cloudCover[y * 16 + columnLeft] +
|
||||||
|
cloudCover[rowAbove * 16 + columnLeft] +
|
||||||
|
cloudCover[rowBelow * 16 + x] +
|
||||||
|
cloudCover[rowAbove * 16 + x] +
|
||||||
|
cloudCover[rowBelow * 16 + columnRight] +
|
||||||
|
cloudCover[y * 16 + columnRight] +
|
||||||
|
cloudCover[rowAbove * 16 + columnRight] +
|
||||||
|
cloudCover[y * 16 + x]) / 9;
|
||||||
|
newCover[y * 16 + x] = ((neighborAverage / m_cloudDensity) + 0.175f) % 1.0f;
|
||||||
|
newCover[y * 16 + x] *= m_cloudDensity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Array.Copy(newCover, cloudCover, 16 * 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CloudUpdate()
|
||||||
|
{
|
||||||
|
if (((m_frame++ % m_frameUpdateRate) != 0) || !m_ready || (m_cloudDensity == 0))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
UpdateCloudCover();
|
||||||
|
}
|
||||||
|
|
||||||
public void CloudsToClient(IClientAPI client)
|
public void CloudsToClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
if (m_ready)
|
if (m_ready)
|
||||||
|
|
|
@ -746,6 +746,9 @@
|
||||||
; Density of cloud cover 0.0 to 1.0
|
; Density of cloud cover 0.0 to 1.0
|
||||||
density = 0.5
|
density = 0.5
|
||||||
|
|
||||||
|
; update interval for the cloud cover data returned by llCloud().
|
||||||
|
; default is 1000
|
||||||
|
cloud_update_rate = 1000
|
||||||
|
|
||||||
[Trees]
|
[Trees]
|
||||||
; Enable this to allow the tree module to manage your sim trees, including growing, reproducing and dying
|
; Enable this to allow the tree module to manage your sim trees, including growing, reproducing and dying
|
||||||
|
|
Loading…
Reference in New Issue