-make ZERO_VECTOR and ZERO_ROTATION static readonly properties so they can be
used in scripts -cast from bool to LSL{Integer,Float,String} so functions such as `integer isZero(integer x) { return (x == 0); }` work -progress on issue 18630.6.0-stable
parent
56c4cc39ff
commit
57ec7a26cd
|
@ -2118,7 +2118,7 @@ namespace OpenSim.Grid.ScriptEngine.DotNetEngine.Compiler.LSL
|
|||
public const int PUBLIC_CHANNEL 0x00000000
|
||||
|
||||
// Can not be public const?
|
||||
public vector ZERO_VECTOR = new vector(0, 0, 0);
|
||||
public rotation ZERO_ROTATION = new rotation(0, 0, 0, 0);
|
||||
public static readonly vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0);
|
||||
public static readonly rotation ZERO_ROTATION = new rotation(0.0, 0.0, 0.0, 1.0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2421,7 +2421,7 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
public const int OBJECT_CREATOR = 8;
|
||||
|
||||
// Can not be public const?
|
||||
public vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0);
|
||||
public rotation ZERO_ROTATION = new rotation(0.0, 0, 0.0, 1.0);
|
||||
public static readonly vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0);
|
||||
public static readonly rotation ZERO_ROTATION = new rotation(0.0, 0, 0.0, 1.0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1186,6 +1186,14 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
return new LSLString(f);
|
||||
}
|
||||
|
||||
static public explicit operator LSLString(bool b)
|
||||
{
|
||||
if (b)
|
||||
return new LSLString("1");
|
||||
else
|
||||
return new LSLString("0");
|
||||
}
|
||||
|
||||
public static implicit operator Vector3(LSLString s)
|
||||
{
|
||||
return new Vector3(s.m_string);
|
||||
|
@ -1303,6 +1311,14 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
return new LSLInteger(f.value);
|
||||
}
|
||||
|
||||
static public implicit operator LSLInteger(bool b)
|
||||
{
|
||||
if (b)
|
||||
return new LSLInteger(1);
|
||||
else
|
||||
return new LSLInteger(0);
|
||||
}
|
||||
|
||||
static public bool operator ==(LSLInteger i1, LSLInteger i2)
|
||||
{
|
||||
bool ret = i1.value == i2.value;
|
||||
|
@ -1481,6 +1497,14 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
return new LSLFloat(d);
|
||||
}
|
||||
|
||||
static public implicit operator LSLFloat(bool b)
|
||||
{
|
||||
if (b)
|
||||
return new LSLFloat(1.0);
|
||||
else
|
||||
return new LSLFloat(0.0);
|
||||
}
|
||||
|
||||
static public bool operator ==(LSLFloat f1, LSLFloat f2)
|
||||
{
|
||||
return f1.value == f2.value;
|
||||
|
|
|
@ -416,8 +416,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
|||
public const int OBJECT_CREATOR = 8;
|
||||
|
||||
// Can not be public const?
|
||||
public vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0);
|
||||
public rotation ZERO_ROTATION = new rotation(0.0, 0, 0.0, 1.0);
|
||||
public static readonly vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0);
|
||||
public static readonly rotation ZERO_ROTATION = new rotation(0.0, 0, 0.0, 1.0);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1186,6 +1186,14 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
|||
return new LSLString(f);
|
||||
}
|
||||
|
||||
static public explicit operator LSLString(bool b)
|
||||
{
|
||||
if (b)
|
||||
return new LSLString("1");
|
||||
else
|
||||
return new LSLString("0");
|
||||
}
|
||||
|
||||
public static implicit operator Vector3(LSLString s)
|
||||
{
|
||||
return new Vector3(s.m_string);
|
||||
|
@ -1303,6 +1311,14 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
|||
return new LSLInteger(f.value);
|
||||
}
|
||||
|
||||
static public implicit operator LSLInteger(bool b)
|
||||
{
|
||||
if (b)
|
||||
return new LSLInteger(1);
|
||||
else
|
||||
return new LSLInteger(0);
|
||||
}
|
||||
|
||||
static public bool operator ==(LSLInteger i1, LSLInteger i2)
|
||||
{
|
||||
bool ret = i1.value == i2.value;
|
||||
|
@ -1481,6 +1497,14 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
|||
return new LSLFloat(d);
|
||||
}
|
||||
|
||||
static public implicit operator LSLFloat(bool b)
|
||||
{
|
||||
if (b)
|
||||
return new LSLFloat(1.0);
|
||||
else
|
||||
return new LSLFloat(0.0);
|
||||
}
|
||||
|
||||
static public bool operator ==(LSLFloat f1, LSLFloat f2)
|
||||
{
|
||||
return f1.value == f2.value;
|
||||
|
|
|
@ -558,5 +558,26 @@ namespace OpenSim.Region.ScriptEngine.Common.Tests
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests boolean correctly cast implicitly to LSLFloat.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestImplicitCastBooleanToLSLFloat()
|
||||
{
|
||||
LSL_Types.LSLFloat testFloat;
|
||||
|
||||
testFloat = (1 == 0);
|
||||
Assert.That(testFloat.value, new DoubleToleranceConstraint(0.0, _lowPrecisionTolerance));
|
||||
|
||||
testFloat = (1 == 1);
|
||||
Assert.That(testFloat.value, new DoubleToleranceConstraint(1.0, _lowPrecisionTolerance));
|
||||
|
||||
testFloat = false;
|
||||
Assert.That(testFloat.value, new DoubleToleranceConstraint(0.0, _lowPrecisionTolerance));
|
||||
|
||||
testFloat = true;
|
||||
Assert.That(testFloat.value, new DoubleToleranceConstraint(1.0, _lowPrecisionTolerance));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,5 +108,26 @@ namespace OpenSim.Region.ScriptEngine.Common.Tests
|
|||
Assert.AreEqual(testInteger.value, number.Value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests boolean correctly cast implicitly to LSLInteger.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestImplicitCastBooleanToLSLInteger()
|
||||
{
|
||||
LSL_Types.LSLInteger testInteger;
|
||||
|
||||
testInteger = (1 == 0);
|
||||
Assert.AreEqual(0, testInteger.value);
|
||||
|
||||
testInteger = (1 == 1);
|
||||
Assert.AreEqual(1, testInteger.value);
|
||||
|
||||
testInteger = false;
|
||||
Assert.AreEqual(0, testInteger.value);
|
||||
|
||||
testInteger = true;
|
||||
Assert.AreEqual(1, testInteger.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -111,5 +111,26 @@ namespace OpenSim.Region.ScriptEngine.Common.Tests
|
|||
Assert.AreEqual(expectedQuaternion, stringQuaternion);
|
||||
Assert.AreEqual(expectedQuaternion, LSLStringQuaternion);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests boolean correctly cast explicitly to LSLString.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestImplicitCastBooleanToLSLFloat()
|
||||
{
|
||||
LSL_Types.LSLString testString;
|
||||
|
||||
testString = (LSL_Types.LSLString) (1 == 0);
|
||||
Assert.AreEqual("0", testString.m_string);
|
||||
|
||||
testString = (LSL_Types.LSLString) (1 == 1);
|
||||
Assert.AreEqual("1", testString.m_string);
|
||||
|
||||
testString = (LSL_Types.LSLString) false;
|
||||
Assert.AreEqual("0", testString.m_string);
|
||||
|
||||
testString = (LSL_Types.LSLString) true;
|
||||
Assert.AreEqual("1", testString.m_string);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -558,5 +558,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests boolean correctly cast implicitly to LSLFloat.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestImplicitCastBooleanToLSLFloat()
|
||||
{
|
||||
LSL_Types.LSLFloat testFloat;
|
||||
|
||||
testFloat = (1 == 0);
|
||||
Assert.That(testFloat.value, new DoubleToleranceConstraint(0.0, _lowPrecisionTolerance));
|
||||
|
||||
testFloat = (1 == 1);
|
||||
Assert.That(testFloat.value, new DoubleToleranceConstraint(1.0, _lowPrecisionTolerance));
|
||||
|
||||
testFloat = false;
|
||||
Assert.That(testFloat.value, new DoubleToleranceConstraint(0.0, _lowPrecisionTolerance));
|
||||
|
||||
testFloat = true;
|
||||
Assert.That(testFloat.value, new DoubleToleranceConstraint(1.0, _lowPrecisionTolerance));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,5 +108,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
Assert.AreEqual(testInteger.value, number.Value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests boolean correctly cast implicitly to LSLInteger.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestImplicitCastBooleanToLSLInteger()
|
||||
{
|
||||
LSL_Types.LSLInteger testInteger;
|
||||
|
||||
testInteger = (1 == 0);
|
||||
Assert.AreEqual(0, testInteger.value);
|
||||
|
||||
testInteger = (1 == 1);
|
||||
Assert.AreEqual(1, testInteger.value);
|
||||
|
||||
testInteger = false;
|
||||
Assert.AreEqual(0, testInteger.value);
|
||||
|
||||
testInteger = true;
|
||||
Assert.AreEqual(1, testInteger.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -111,5 +111,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
Assert.AreEqual(expectedQuaternion, stringQuaternion);
|
||||
Assert.AreEqual(expectedQuaternion, LSLStringQuaternion);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests boolean correctly cast explicitly to LSLString.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestImplicitCastBooleanToLSLFloat()
|
||||
{
|
||||
LSL_Types.LSLString testString;
|
||||
|
||||
testString = (LSL_Types.LSLString) (1 == 0);
|
||||
Assert.AreEqual("0", testString.m_string);
|
||||
|
||||
testString = (LSL_Types.LSLString) (1 == 1);
|
||||
Assert.AreEqual("1", testString.m_string);
|
||||
|
||||
testString = (LSL_Types.LSLString) false;
|
||||
Assert.AreEqual("0", testString.m_string);
|
||||
|
||||
testString = (LSL_Types.LSLString) true;
|
||||
Assert.AreEqual("1", testString.m_string);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue