diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 14 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | 64 |
2 files changed, 70 insertions, 8 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 74c2d89..93dfeea 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -5726,13 +5726,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5726 | if (remain < 7) | 5726 | if (remain < 7) |
5727 | return; | 5727 | return; |
5728 | 5728 | ||
5729 | bool flexi = (LSL_Types.LSLInteger)rules.Data[idx++]; | 5729 | bool flexi = rules.GetLSLIntegerItem(idx++); |
5730 | int softness = (LSL_Types.LSLInteger)rules.Data[idx++]; | 5730 | int softness = rules.GetLSLIntegerItem(idx++); |
5731 | float gravity = (float)(LSL_Types.LSLFloat)rules.Data[idx++]; | 5731 | float gravity = (float)rules.GetLSLFloatItem(idx++); |
5732 | float friction = (float)(LSL_Types.LSLFloat)rules.Data[idx++]; | 5732 | float friction = (float)rules.GetLSLFloatItem(idx++); |
5733 | float wind = (float)(LSL_Types.LSLFloat)rules.Data[idx++]; | 5733 | float wind = (float)rules.GetLSLFloatItem(idx++); |
5734 | float tension = (float)(LSL_Types.LSLFloat)rules.Data[idx++]; | 5734 | float tension = (float)rules.GetLSLFloatItem(idx++); |
5735 | LSL_Types.Vector3 force = (LSL_Types.Vector3)rules.Data[idx++]; | 5735 | LSL_Types.Vector3 force = rules.GetVector3Item(idx++); |
5736 | 5736 | ||
5737 | SetFlexi(part, flexi, softness, gravity, friction, wind, tension, force); | 5737 | SetFlexi(part, flexi, softness, gravity, friction, wind, tension, force); |
5738 | 5738 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index 85abdb0..4713283 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | |||
@@ -421,6 +421,58 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
421 | } | 421 | } |
422 | } | 422 | } |
423 | 423 | ||
424 | // Member functions to obtain item as specific types. | ||
425 | // For cases where implicit conversions would apply if items | ||
426 | // were not in a list (e.g. integer to float, but not float | ||
427 | // to integer) functions check for alternate types so as to | ||
428 | // down-cast from Object to the correct type. | ||
429 | // Note: no checks for item index being valid are performed | ||
430 | |||
431 | public LSL_Types.LSLFloat GetLSLFloatItem( int itemIndex ) | ||
432 | { | ||
433 | if (m_data[itemIndex] is LSL_Types.LSLInteger) | ||
434 | { | ||
435 | return (LSL_Types.LSLInteger)m_data[itemIndex]; | ||
436 | } | ||
437 | else | ||
438 | { | ||
439 | return (LSL_Types.LSLFloat)m_data[itemIndex]; | ||
440 | } | ||
441 | } | ||
442 | |||
443 | public LSL_Types.LSLString GetLSLStringItem(int itemIndex) | ||
444 | { | ||
445 | if (m_data[itemIndex] is LSL_Types.key) | ||
446 | { | ||
447 | return (LSL_Types.key)m_data[itemIndex]; | ||
448 | } | ||
449 | else | ||
450 | { | ||
451 | return (LSL_Types.LSLString)m_data[itemIndex]; | ||
452 | } | ||
453 | } | ||
454 | |||
455 | public LSL_Types.LSLInteger GetLSLIntegerItem(int itemIndex) | ||
456 | { | ||
457 | return (LSL_Types.LSLInteger)m_data[itemIndex]; | ||
458 | } | ||
459 | |||
460 | public LSL_Types.Vector3 GetVector3Item(int itemIndex) | ||
461 | { | ||
462 | return (LSL_Types.Vector3)m_data[itemIndex]; | ||
463 | } | ||
464 | |||
465 | public LSL_Types.Quaternion GetQuaternionItem(int itemIndex) | ||
466 | { | ||
467 | return (LSL_Types.Quaternion)m_data[itemIndex]; | ||
468 | } | ||
469 | |||
470 | public LSL_Types.key GetKeyItem(int itemIndex) | ||
471 | { | ||
472 | return (LSL_Types.key)m_data[itemIndex]; | ||
473 | } | ||
474 | |||
475 | |||
424 | public static list operator +(list a, list b) | 476 | public static list operator +(list a, list b) |
425 | { | 477 | { |
426 | object[] tmp; | 478 | object[] tmp; |
@@ -1164,7 +1216,12 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
1164 | 1216 | ||
1165 | static public implicit operator String(key k) | 1217 | static public implicit operator String(key k) |
1166 | { | 1218 | { |
1167 | return k.value; | 1219 | return k.value; |
1220 | } | ||
1221 | |||
1222 | static public implicit operator LSLString(key k) | ||
1223 | { | ||
1224 | return k.value; | ||
1168 | } | 1225 | } |
1169 | 1226 | ||
1170 | public static bool operator ==(key k1, key k2) | 1227 | public static bool operator ==(key k1, key k2) |
@@ -1190,6 +1247,11 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
1190 | return value.GetHashCode(); | 1247 | return value.GetHashCode(); |
1191 | } | 1248 | } |
1192 | 1249 | ||
1250 | public override string ToString() | ||
1251 | { | ||
1252 | return value; | ||
1253 | } | ||
1254 | |||
1193 | #endregion | 1255 | #endregion |
1194 | } | 1256 | } |
1195 | 1257 | ||