diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 3ba8a5aa57..e21f8e8842 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3678,11 +3678,11 @@ namespace OpenSim.Region.Framework.Scenes
///
///
///
- public void SetFaceColorAlpha(int face, Vector3 color, double ?alpha)
+ public void SetFaceColorAlpha(int face, Vector3 color, float ?alpha)
{
Vector3 clippedColor = Vector3.Clamp(color, 0.0f, 1.0f);
float clippedAlpha = alpha.HasValue ?
- Utils.Clamp((float)alpha.Value, 0.0f, 1.0f) : 0;
+ Utils.Clamp(alpha.Value, 0.0f, 1.0f) : 0;
// The only way to get a deep copy/ If we don't do this, we can
// never detect color changes further down.
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs
index 7fac6b009f..2e1a55e6f7 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs
@@ -275,7 +275,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.sunMoonPosition = (float)rules.GetLSLFloatItem(idx);
+ wl.sunMoonPosition = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -322,7 +322,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.blurMultiplier = (float)rules.GetLSLFloatItem(idx);
+ wl.blurMultiplier = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -345,7 +345,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.cloudCoverage = (float)rules.GetLSLFloatItem(idx);
+ wl.cloudCoverage = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -368,7 +368,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.cloudScale = (float)rules.GetLSLFloatItem(idx);
+ wl.cloudScale = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -379,7 +379,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.cloudScrollX = (float)rules.GetLSLFloatItem(idx);
+ wl.cloudScrollX = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -401,7 +401,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.cloudScrollY = (float)rules.GetLSLFloatItem(idx);
+ wl.cloudScrollY = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -412,7 +412,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.cloudScrollYLock = rules.GetIntegerItem(idx) == 1 ? true : false;
+ wl.cloudScrollYLock = rules.GetIntegerItem(idx) != 0;
}
catch (InvalidCastException)
{
@@ -435,7 +435,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.densityMultiplier = (float)rules.GetLSLFloatItem(idx);
+ wl.densityMultiplier = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -446,7 +446,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.distanceMultiplier = (float)rules.GetLSLFloatItem(idx);
+ wl.distanceMultiplier = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -457,7 +457,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.drawClassicClouds = rules.GetIntegerItem(idx) == 1 ? true : false;
+ wl.drawClassicClouds = rules.GetIntegerItem(idx) != 0;
}
catch (InvalidCastException)
{
@@ -468,7 +468,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.eastAngle = (float)rules.GetLSLFloatItem(idx);
+ wl.eastAngle = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -479,7 +479,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.fresnelOffset = (float)rules.GetLSLFloatItem(idx);
+ wl.fresnelOffset = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -490,7 +490,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.fresnelScale = (float)rules.GetLSLFloatItem(idx);
+ wl.fresnelScale = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -501,7 +501,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.hazeDensity = (float)rules.GetLSLFloatItem(idx);
+ wl.hazeDensity = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -512,7 +512,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.hazeHorizon = (float)rules.GetLSLFloatItem(idx);
+ wl.hazeHorizon = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -581,7 +581,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.refractScaleAbove = (float)rules.GetLSLFloatItem(idx);
+ wl.refractScaleAbove = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -592,7 +592,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.refractScaleBelow = (float)rules.GetLSLFloatItem(idx);
+ wl.refractScaleBelow = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -603,7 +603,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.sceneGamma = (float)rules.GetLSLFloatItem(idx);
+ wl.sceneGamma = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -614,7 +614,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.starBrightness = (float)rules.GetLSLFloatItem(idx);
+ wl.starBrightness = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -625,7 +625,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.sunGlowFocus = (float)rules.GetLSLFloatItem(idx);
+ wl.sunGlowFocus = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -636,7 +636,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.sunGlowSize = (float)rules.GetLSLFloatItem(idx);
+ wl.sunGlowSize = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -659,7 +659,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.underwaterFogModifier = (float)rules.GetLSLFloatItem(idx);
+ wl.underwaterFogModifier = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
@@ -682,7 +682,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
idx++;
try
{
- wl.waterFogDensityExponent = (float)rules.GetLSLFloatItem(idx);
+ wl.waterFogDensityExponent = rules.GetStrictFloatItem(idx);
}
catch (InvalidCastException)
{
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
index 36cec501d4..694b8fbc35 100644
--- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
@@ -895,9 +895,11 @@ namespace OpenSim.Region.ScriptEngine.Shared
public LSL_Types.LSLFloat GetLSLFloatItem(int itemIndex)
{
object o = Data[itemIndex];
+ if (o is LSL_Types.LSLFloat lfo)
+ return lfo;
if (o is LSL_Types.LSLInteger lio)
return new LSL_Types.LSLFloat(lio.value);
- if (o is Int32 io)
+ if (o is int io)
return new LSL_Types.LSLFloat(io);
if (o is float fo)
return new LSL_Types.LSLFloat(fo);
@@ -908,6 +910,42 @@ namespace OpenSim.Region.ScriptEngine.Shared
return (LSL_Types.LSLFloat)o;
}
+ public float GetFloatItem(int itemIndex)
+ {
+ object o = Data[itemIndex];
+ if (o is LSL_Types.LSLFloat lfo)
+ return (float)lfo.value;
+ if (o is LSL_Types.LSLInteger lio)
+ return lio.value;
+ if (o is int io)
+ return io;
+ if (o is float fo)
+ return fo;
+ if (o is Double dov)
+ return (float)dov;
+ if (o is LSL_Types.LSLString lso)
+ return Convert.ToSingle(lso.m_string);
+ return Convert.ToSingle(o.ToString());
+ }
+
+ public float GetStrictFloatItem(int itemIndex)
+ {
+ object o = Data[itemIndex];
+ if (o is LSL_Types.LSLFloat lfo)
+ return (float)lfo.value;
+ if (o is LSL_Types.LSLInteger lio)
+ return lio.value;
+ if (o is int io)
+ return io;
+ if (o is float fo)
+ return fo;
+ if (o is double dov)
+ return (float)dov;
+ if (o is LSL_Types.LSLString lso)
+ return Convert.ToSingle(lso.m_string);
+ throw new InvalidCastException(@"LSL float expected but {o is not null ? o.GetType().Name : ""null"")} given");
+ }
+
public LSL_Types.LSLString GetLSLStringItem(int itemIndex)
{
object o = Data[itemIndex];